35 #ifndef MUTABLEVERTEXMESH_HPP_ 36 #define MUTABLEVERTEXMESH_HPP_ 39 template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
47 #include <boost/serialization/vector.hpp> 48 #include <boost/serialization/base_object.hpp> 49 #include <boost/serialization/split_member.hpp> 51 #include "VertexMesh.hpp" 52 #include "RandomNumberGenerator.hpp" 64 template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
67 friend class TestMutableVertexMesh;
68 friend class TestMutableVertexMeshReMesh;
69 friend class TestMutableVertexMeshRosetteMethods;
149 bool placeOriginalElementBelow=
false);
330 friend class boost::serialization::access;
342 template<
class Archive>
343 void serialize(Archive & archive,
const unsigned int version)
358 archive & boost::serialization::base_object<VertexMesh<ELEMENT_DIM, SPACE_DIM> >(*this);
381 double cellRearrangementThreshold=0.01,
382 double t2Threshold=0.001,
383 double cellRearrangementRatio=1.5,
384 double protorosetteFormationProbability=0.0,
385 double protorosetteResolutionProbabilityPerTimestep=0.0,
386 double rosetteResolutionProbabilityPerTimestep=0.0);
595 bool placeOriginalElementBelow=
false);
611 c_vector<double, SPACE_DIM> axisOfDivision,
612 bool placeOriginalElementBelow=
false);
unsigned DivideElement(VertexElement< ELEMENT_DIM, SPACE_DIM > *pElement, unsigned nodeAIndex, unsigned nodeBIndex, bool placeOriginalElementBelow=false)
void SetRosetteResolutionProbabilityPerTimestep(double rosetteResolutionProbabilityPerTimestep)
void PerformIntersectionSwap(Node< SPACE_DIM > *pNode, unsigned elementIndex)
void SetDistanceForT3SwapChecking(double distanceForT3SwapChecking)
c_vector< double, 2 > WidenEdgeOrCorrectIntersectionLocationIfNecessary(unsigned indexA, unsigned indexB, c_vector< double, 2 > intersection)
std::vector< c_vector< double, SPACE_DIM > > GetLocationsOfIntersectionSwaps()
std::vector< c_vector< double, SPACE_DIM > > GetLocationsOfT3Swaps()
void RemoveDeletedNodesAndElements(VertexElementMap &rElementMap)
void PerformRosetteRankDecrease(Node< SPACE_DIM > *pRosetteNode)
std::vector< c_vector< double, SPACE_DIM > > mLocationsOfT3Swaps
double GetCellRearrangementRatio() const
unsigned DivideElementAlongGivenAxis(VertexElement< ELEMENT_DIM, SPACE_DIM > *pElement, c_vector< double, SPACE_DIM > axisOfDivision, bool placeOriginalElementBelow=false)
bool CheckForT2Swaps(VertexElementMap &rElementMap)
std::vector< c_vector< double, SPACE_DIM > > GetLocationsOfT1Swaps()
unsigned DivideElementAlongShortAxis(VertexElement< ELEMENT_DIM, SPACE_DIM > *pElement, bool placeOriginalElementBelow=false)
void PerformNodeMerge(Node< SPACE_DIM > *pNodeA, Node< SPACE_DIM > *pNodeB)
virtual bool CheckForSwapsFromShortEdges()
void SetProtorosetteResolutionProbabilityPerTimestep(double protorosetteResolutionProbabilityPerTimestep)
double mDistanceForT3SwapChecking
void ClearLocationsOfIntersectionSwaps()
void serialize(Archive &archive, const unsigned int version)
bool mCheckForInternalIntersections
unsigned AddNode(Node< SPACE_DIM > *pNewNode)
std::vector< unsigned > mDeletedNodeIndices
void PerformVoidRemoval(Node< SPACE_DIM > *pNodeA, Node< SPACE_DIM > *pNodeB, Node< SPACE_DIM > *pNodeC)
double mRosetteResolutionProbabilityPerTimestep
std::vector< c_vector< double, SPACE_DIM > > mLocationsOfT1Swaps
c_vector< double, SPACE_DIM > mLastT2SwapLocation
unsigned GetNumNodes() const
unsigned GetNumElements() const
double mCellRearrangementRatio
double mCellRearrangementThreshold
void ClearLocationsOfT1Swaps()
bool GetCheckForInternalIntersections() const
void SetCellRearrangementThreshold(double cellRearrangementThreshold)
void PerformT3Swap(Node< SPACE_DIM > *pNode, unsigned elementIndex)
virtual void SetNode(unsigned nodeIndex, ChastePoint< SPACE_DIM > point)
unsigned AddElement(VertexElement< ELEMENT_DIM, SPACE_DIM > *pNewElement)
void PerformProtorosetteResolution(Node< SPACE_DIM > *pProtorosetteNode)
bool CheckForIntersections()
double mProtorosetteResolutionProbabilityPerTimestep
double GetDistanceForT3SwapChecking() const
std::vector< c_vector< double, SPACE_DIM > > mLocationsOfIntersectionSwaps
void PerformRosetteRankIncrease(Node< SPACE_DIM > *pNodeA, Node< SPACE_DIM > *pNodeB)
double GetT2Threshold() const
double mProtorosetteFormationProbability
void DeleteNodePriorToReMesh(unsigned index)
double GetCellRearrangementThreshold() const
void ClearLocationsOfT3Swaps()
#define EXPORT_TEMPLATE_CLASS_ALL_DIMS(CLASS)
void SetProtorosetteFormationProbability(double protorosetteFormationProbability)
virtual void HandleHighOrderJunctions(Node< SPACE_DIM > *pNodeA, Node< SPACE_DIM > *pNodeB)
void DivideEdge(Node< SPACE_DIM > *pNodeA, Node< SPACE_DIM > *pNodeB)
void SetCheckForInternalIntersections(bool checkForInternalIntersections)
void DeleteElementPriorToReMesh(unsigned index)
double GetProtorosetteResolutionProbabilityPerTimestep() const
void SetCellRearrangementRatio(double cellRearrangementRatio)
void RemoveDeletedNodes()
virtual ~MutableVertexMesh()
double GetRosetteResolutionProbabilityPerTimestep() const
void PerformT1Swap(Node< SPACE_DIM > *pNodeA, Node< SPACE_DIM > *pNodeB, std::set< unsigned > &rElementsContainingNodes)
double GetProtorosetteFormationProbability() const
void SetT2Threshold(double t2Threshold)
virtual void IdentifySwapType(Node< SPACE_DIM > *pNodeA, Node< SPACE_DIM > *pNodeB)
gcov doesn't like this file...
c_vector< double, SPACE_DIM > GetLastT2SwapLocation()
void PerformT2Swap(VertexElement< ELEMENT_DIM, SPACE_DIM > &rElement)
std::vector< unsigned > mDeletedElementIndices