AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM > Class Template Reference

#include <AbstractTetrahedralMesh.hpp>

Inheritance diagram for AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >:

Inheritance graph
[legend]
Collaboration diagram for AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >:

Collaboration graph
[legend]

List of all members.

Public Types

typedef std::vector
< BoundaryElement< ELEMENT_DIM-1,
SPACE_DIM >
* >::const_iterator 
BoundaryElementIterator

Public Member Functions

ElementIterator GetElementIteratorBegin (bool skipDeletedElements=true)
ElementIterator GetElementIteratorEnd ()
 AbstractTetrahedralMesh ()
virtual ~AbstractTetrahedralMesh ()
virtual unsigned GetNumElements () const
virtual unsigned GetNumBoundaryElements () const
unsigned GetNumAllElements () const
unsigned GetNumAllBoundaryElements () const
Element< ELEMENT_DIM, SPACE_DIM > * GetElement (unsigned index) const
BoundaryElement< ELEMENT_DIM-1,
SPACE_DIM > * 
GetBoundaryElement (unsigned index) const
virtual void SetElementOwnerships (unsigned lo, unsigned hi)
virtual void ConstructFromMeshReader (AbstractMeshReader< ELEMENT_DIM, SPACE_DIM > &rMeshReader, bool cullInternalFaces=false)=0
BoundaryElementIterator GetBoundaryElementIteratorBegin () const
BoundaryElementIterator GetBoundaryElementIteratorEnd () const
virtual void GetInverseJacobianForElement (unsigned elementIndex, c_matrix< double, SPACE_DIM, ELEMENT_DIM > &rJacobian, double &rJacobianDeterminant, c_matrix< double, ELEMENT_DIM, SPACE_DIM > &rInverseJacobian) const
virtual void GetWeightedDirectionForBoundaryElement (unsigned elementIndex, c_vector< double, SPACE_DIM > &rWeightedDirection, double &rJacobianDeterminant) const

Protected Attributes

std::vector< Element
< ELEMENT_DIM, SPACE_DIM > * > 
mElements
std::vector< BoundaryElement
< ELEMENT_DIM-1, SPACE_DIM > * > 
mBoundaryElements

Private Member Functions

virtual unsigned SolveElementMapping (unsigned index) const =0
virtual unsigned SolveBoundaryElementMapping (unsigned index) const =0
template<class Archive>
void save (Archive &archive, const unsigned int version) const
template<class Archive>
void load (Archive &archive, const unsigned int version)

Friends

class boost::serialization::access

Classes

class  ElementIterator


Detailed Description

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
class AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >

Abstract base class for all tetrahedral meshes (inherits from AbstractMesh).

Definition at line 54 of file AbstractTetrahedralMesh.hpp.


Member Typedef Documentation

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
typedef std::vector<BoundaryElement<ELEMENT_DIM-1, SPACE_DIM> *>::const_iterator AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::BoundaryElementIterator

Definition of boundary element Iterator type.

Definition at line 160 of file AbstractTetrahedralMesh.hpp.


Constructor & Destructor Documentation

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::AbstractTetrahedralMesh (  )  [inline]

Constructor.

Definition at line 57 of file AbstractTetrahedralMesh.cpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::~AbstractTetrahedralMesh (  )  [inline, virtual]

Virtual destructor, since this class has virtual methods.

Definition at line 62 of file AbstractTetrahedralMesh.cpp.

References AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mBoundaryElements, and AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mElements.


Member Function Documentation

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
virtual unsigned AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::SolveElementMapping ( unsigned  index  )  const [private, pure virtual]

Pure virtual solve element mapping method. For an element with a given global index, get the local index used by this process. Overridden in TetrahedralMesh and ParallelTetrahedralMesh classes.

Parameters:
index the global index of the element

Implemented in ParallelTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >, TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >, TetrahedralMesh< DIM, DIM >, TetrahedralMesh< SPACE_DIM, SPACE_DIM >, and TetrahedralMesh< 3, 3 >.

Referenced by AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetElement(), and AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetInverseJacobianForElement().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
virtual unsigned AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::SolveBoundaryElementMapping ( unsigned  index  )  const [private, pure virtual]

Pure virtual solve boundary element mapping method. For a boundary element with a given global index, get the local index used by this process. Overridden in TetrahedralMesh and ParallelTetrahedralMesh classes.

Parameters:
index the global index of the boundary element

Implemented in ParallelTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >, TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >, TetrahedralMesh< DIM, DIM >, TetrahedralMesh< SPACE_DIM, SPACE_DIM >, and TetrahedralMesh< 3, 3 >.

Referenced by AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetBoundaryElement(), and AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetWeightedDirectionForBoundaryElement().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
template<class Archive>
void AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::save ( Archive &  archive,
const unsigned int  version 
) const [inline, private]

Archive the AbstractTetrahedralMesh. Note that this will write out a TrianglesMeshWriter file to wherever ArchiveLocationInfo has specified.

If the mesh is MutableMesh (or a subclass) the file is written by examining the current mesh.

If the mesh is not mutable then the file is a copy of the original file the mesh was read from.

Parameters:
archive the archive
version the current version of this class

Todo:
#98 - what does this achieve? Overwrites existing mesh file or potentially rewrites mesh with a different name, would it be better just to update the name in the ArchiveLocationInfo ??

Caching an exception thrown by TrianglesMeshReader constructor if it cannot find the mesh on disk. That may mean it is a mesh constructed from a geometric description rather that read from file.

Todo:
#98, you can use the line mesh_writer.WriteFilesUsingMesh(*this) from above here, but have to think about parallel meshes.

Definition at line 90 of file AbstractTetrahedralMesh.hpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
template<class Archive>
void AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::load ( Archive &  archive,
const unsigned int  version 
) [inline, private]

Loads a mesh by using TrianglesMeshReader and the location in ArchiveLocationInfo.

Parameters:
archive 
version 

Definition at line 136 of file AbstractTetrahedralMesh.hpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ElementIterator AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetElementIteratorBegin ( bool  skipDeletedElements = true  )  [inline]

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ElementIterator AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetElementIteratorEnd (  )  [inline]

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumElements (  )  const [inline, virtual]

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumBoundaryElements (  )  const [inline, virtual]

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumAllElements (  )  const [inline]

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumAllBoundaryElements (  )  const [inline]

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
Element< ELEMENT_DIM, SPACE_DIM > * AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetElement ( unsigned  index  )  const [inline]

Get the element with a given index in the mesh.

Parameters:
index the global index of the element
Returns:
a pointer to the element.

Definition at line 102 of file AbstractTetrahedralMesh.cpp.

References AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mElements, and AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::SolveElementMapping().

Referenced by AbstractCardiacPde< ELEM_DIM, SPACE_DIM >::AbstractCardiacPde(), QuadraticMesh< DIM >::AddNodesToBoundaryElements(), BidomainPde< SPACE_DIM >::BidomainPde(), MutableMesh< ELEMENT_DIM, SPACE_DIM >::CheckVoronoi(), DistanceMapCalculator< SPACE_DIM >::ComputeDistanceMap(), Cylindrical2dMesh::CorrectNonPeriodicMesh(), MutableMesh< ELEMENT_DIM, SPACE_DIM >::DeleteBoundaryNodeAt(), MutableMesh< ELEMENT_DIM, SPACE_DIM >::DeleteNode(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::EdgeIterator::EdgeIterator(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::EdgesBegin(), StreeterFibreGenerator< SPACE_DIM >::GenerateOrthotropicFibreOrientation(), VoronoiTessellation< DIM >::GenerateVerticesFromElementCircumcentres(), StreeterFibreGenerator< SPACE_DIM >::GetAveragedThickness(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::EdgeIterator::GetNodeA(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::EdgeIterator::GetNodeB(), PapillaryFibreCalculator::GetRadiusVectorForOneElement(), VoronoiTessellation< DIM >::Initialise(), CardiacElectroMechanicsProblem< DIM >::Initialise(), Node< SPACE_DIM >::IsFlagged(), QuadraticMesh< DIM >::LoadFromFile(), MutableMesh< ELEMENT_DIM, SPACE_DIM >::MoveMergeNode(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::EdgeIterator::operator++(), QuadraturePointsGroup< DIM >::QuadraturePointsGroup(), Cylindrical2dMesh::ReMesh(), MutableMesh< ELEMENT_DIM, SPACE_DIM >::SetNode(), CardiacElectroMechanicsProblem< DIM >::Solve(), Cylindrical2dMesh::UseTheseElementsToDecideMeshing(), and AbstractTetrahedralMeshWriter< ELEMENT_DIM, SPACE_DIM >::WriteFilesUsingMesh().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
BoundaryElement< ELEMENT_DIM-1, SPACE_DIM > * AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetBoundaryElement ( unsigned  index  )  const [inline]

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
void AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::SetElementOwnerships ( unsigned  lo,
unsigned  hi 
) [inline, virtual]

Sets the ownership of each element according to which nodes are owned by the process.

Parameters:
lo is the lowest node number owned by the process
hi is one higher than the highest node number owned by the process ie. this process owns nodes [lo..hi) and element is "owned" if one or more of its nodes are owned

Reimplemented in ParallelTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 37 of file AbstractTetrahedralMesh.cpp.

References AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNodeGlobalIndex(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNumNodes(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mElements, and AbstractElement< ELEMENT_DIM, SPACE_DIM >::SetOwnership().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
virtual void AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructFromMeshReader ( AbstractMeshReader< ELEMENT_DIM, SPACE_DIM > &  rMeshReader,
bool  cullInternalFaces = false 
) [pure virtual]

Construct the mesh using a MeshReader. This method must be overridden in concrete classes.

Parameters:
rMeshReader the mesh reader
cullInternalFaces whether to cull internal faces (defaults to false)

Implemented in ParallelTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >, TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >, TetrahedralMesh< DIM, DIM >, TetrahedralMesh< SPACE_DIM, SPACE_DIM >, and TetrahedralMesh< 3, 3 >.

Referenced by AbstractCardiacProblem< ELEM_DIM, SPACE_DIM, PROBLEM_DIM >::Initialise(), and AbstractTetrahedralMesh< ELEM_DIM, SPACE_DIM >::load().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::BoundaryElementIterator AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetBoundaryElementIteratorBegin (  )  const [inline]

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::BoundaryElementIterator AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetBoundaryElementIteratorEnd (  )  const [inline]

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
void AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetInverseJacobianForElement ( unsigned  elementIndex,
c_matrix< double, SPACE_DIM, ELEMENT_DIM > &  rJacobian,
double &  rJacobianDeterminant,
c_matrix< double, ELEMENT_DIM, SPACE_DIM > &  rInverseJacobian 
) const [inline, virtual]

Compute the inverse Jacobian for a given element in the mesh.

Parameters:
elementIndex index of an element
rJacobian the Jacobian matrix
rJacobianDeterminant the determinant of the Jacobian matrix
rInverseJacobian the inverse Jacobian matrix

Reimplemented in NonCachedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >, TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >, TetrahedralMesh< DIM, DIM >, TetrahedralMesh< SPACE_DIM, SPACE_DIM >, and TetrahedralMesh< 3, 3 >.

Definition at line 128 of file AbstractTetrahedralMesh.cpp.

References AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mElements, and AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::SolveElementMapping().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
void AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetWeightedDirectionForBoundaryElement ( unsigned  elementIndex,
c_vector< double, SPACE_DIM > &  rWeightedDirection,
double &  rJacobianDeterminant 
) const [inline, virtual]

Compute the weighted direction for a given boundary element.

Parameters:
elementIndex index of an element
rWeightedDirection the weighted direction vector
rJacobianDeterminant the determinant of the Jacobian matrix
Todo:
: this method doesn't seem to be used anywhere but in the test. Consider removing it.

Reimplemented in NonCachedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >, TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >, TetrahedralMesh< DIM, DIM >, TetrahedralMesh< SPACE_DIM, SPACE_DIM >, and TetrahedralMesh< 3, 3 >.

Definition at line 138 of file AbstractTetrahedralMesh.cpp.

References AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mBoundaryElements, and AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::SolveBoundaryElementMapping().


Friends And Related Function Documentation

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
friend class boost::serialization::access [friend]


Member Data Documentation

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
std::vector<Element<ELEMENT_DIM, SPACE_DIM> *> AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mElements [protected]

Vector of pointers to elements in the mesh.

Definition at line 148 of file AbstractTetrahedralMesh.hpp.

Referenced by MutableMesh< ELEMENT_DIM, SPACE_DIM >::CheckVoronoi(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::Clear(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructCuboid(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructFromMeshReader(), ParallelTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructFromMeshReader(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructLinearMesh(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructRectangularMesh(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ElementIterator::ElementIterator(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetContainingElementIndex(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetContainingElementIndices(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetElement(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetElementIteratorBegin(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetElementIteratorEnd(), NonCachedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetInverseJacobianForElement(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetInverseJacobianForElement(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNearestElementIndex(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumAllElements(), MutableMesh< ELEMENT_DIM, SPACE_DIM >::GetNumElements(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumElements(), ParallelTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumLocalElements(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ElementIterator::IsAtEnd(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::PermuteNodesWithMetisBinaries(), QuadraticMesh< DIM >::QuadraticMesh(), MutableMesh< ELEMENT_DIM, SPACE_DIM >::RefineElement(), ParallelTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::RegisterElement(), MutableMesh< ELEMENT_DIM, SPACE_DIM >::ReIndex(), MutableMesh< ELEMENT_DIM, SPACE_DIM >::ReMesh(), ParallelTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::SetElementOwnerships(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::SetElementOwnerships(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::SolveElementMapping(), Cylindrical2dMesh::UseTheseElementsToDecideMeshing(), and AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::~AbstractTetrahedralMesh().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
std::vector<BoundaryElement<ELEMENT_DIM-1, SPACE_DIM> *> AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mBoundaryElements [protected]

Vector of pointers to boundary elements in the mesh.

Definition at line 151 of file AbstractTetrahedralMesh.hpp.

Referenced by TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::Clear(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructCuboid(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructFromMeshReader(), ParallelTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructFromMeshReader(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructLinearMesh(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructRectangularMesh(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetBoundaryElement(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetBoundaryElementIteratorBegin(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetBoundaryElementIteratorEnd(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumAllBoundaryElements(), MutableMesh< ELEMENT_DIM, SPACE_DIM >::GetNumBoundaryElements(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumBoundaryElements(), NonCachedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetWeightedDirectionForBoundaryElement(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetWeightedDirectionForBoundaryElement(), QuadraticMesh< DIM >::QuadraticMesh(), ParallelTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::RegisterBoundaryElement(), MutableMesh< ELEMENT_DIM, SPACE_DIM >::ReIndex(), MutableMesh< ELEMENT_DIM, SPACE_DIM >::ReMesh(), Cylindrical2dMesh::ReMesh(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::SolveBoundaryElementMapping(), and AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::~AbstractTetrahedralMesh().


The documentation for this class was generated from the following files:

Generated on Tue Aug 4 16:10:47 2009 for Chaste by  doxygen 1.5.5