35#ifndef MUTABLEVERTEXMESH_HPP_
36#define MUTABLEVERTEXMESH_HPP_
39template<
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 "EdgeHelper.hpp"
53#include "RandomNumberGenerator.hpp"
55#include "VertexMeshOperationRecorder.hpp"
66template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
69 friend class TestMutableVertexMesh;
70 friend class TestMutableVertexMeshReMesh;
71 friend class TestMutableVertexMeshRosetteMethods;
72 friend class TestMutableVertexEdges;
73 friend class TestCellEdgeInteriorSrn;
74 friend class TestMutableVertexMeshOperationsWithPopulationSrn;
149 bool placeOriginalElementBelow=
false);
342 template<
class Archive>
343 void serialize(Archive & archive,
const unsigned int version)
360 archive & boost::serialization::base_object<VertexMesh<ELEMENT_DIM, SPACE_DIM> >(*this);
382 double cellRearrangementThreshold=0.01,
383 double t2Threshold=0.001,
384 double cellRearrangementRatio=1.5,
385 double protorosetteFormationProbability=0.0,
386 double protorosetteResolutionProbabilityPerTimestep=0.0,
387 double rosetteResolutionProbabilityPerTimestep=0.0);
611 bool placeOriginalElementBelow=
false);
627 c_vector<double, SPACE_DIM> axisOfDivision,
628 bool placeOriginalElementBelow=
false);
gcov doesn't like this file...
#define EXPORT_TEMPLATE_CLASS_ALL_DIMS(CLASS)
void SetCheckForT3Swaps(bool checkForT3Swaps)
void RemoveDeletedNodesAndElements(VertexElementMap &rElementMap)
void PerformNodeMerge(Node< SPACE_DIM > *pNodeA, Node< SPACE_DIM > *pNodeB)
double GetRosetteResolutionProbabilityPerTimestep() const
virtual bool CheckForSwapsFromShortEdges()
bool mTrackMeshOperations
c_vector< double, SPACE_DIM > GetLastT2SwapLocation()
double GetCellRearrangementThreshold() const
void serialize(Archive &archive, const unsigned int version)
double mRosetteResolutionProbabilityPerTimestep
virtual void IdentifySwapType(Node< SPACE_DIM > *pNodeA, Node< SPACE_DIM > *pNodeB)
double GetProtorosetteFormationProbability() const
void DeleteElementPriorToReMesh(unsigned index)
void ClearLocationsOfIntersectionSwaps()
void RemoveDeletedNodes()
void PerformRosetteRankIncrease(Node< SPACE_DIM > *pNodeA, Node< SPACE_DIM > *pNodeB)
void PerformT1Swap(Node< SPACE_DIM > *pNodeA, Node< SPACE_DIM > *pNodeB, std::set< unsigned > &rElementsContainingNodes)
void PerformVoidRemoval(Node< SPACE_DIM > *pNodeA, Node< SPACE_DIM > *pNodeB, Node< SPACE_DIM > *pNodeC)
unsigned AddNode(Node< SPACE_DIM > *pNewNode)
void SetCheckForInternalIntersections(bool checkForInternalIntersections)
double GetCellRearrangementRatio() const
double GetDistanceForT3SwapChecking() const
std::vector< c_vector< double, SPACE_DIM > > GetLocationsOfT3Swaps()
void SetRosetteResolutionProbabilityPerTimestep(double rosetteResolutionProbabilityPerTimestep)
bool CheckForT2Swaps(VertexElementMap &rElementMap)
std::vector< unsigned > mDeletedNodeIndices
void SetProtorosetteFormationProbability(double protorosetteFormationProbability)
void ClearLocationsOfT1Swaps()
void SetDistanceForT3SwapChecking(double distanceForT3SwapChecking)
bool CheckForIntersections()
unsigned DivideElementAlongGivenAxis(VertexElement< ELEMENT_DIM, SPACE_DIM > *pElement, c_vector< double, SPACE_DIM > axisOfDivision, bool placeOriginalElementBelow=false)
void ClearLocationsOfT3Swaps()
unsigned GetNumNodes() const
double mCellRearrangementThreshold
double mDistanceForT3SwapChecking
void SetProtorosetteResolutionProbabilityPerTimestep(double protorosetteResolutionProbabilityPerTimestep)
void DeleteNodePriorToReMesh(unsigned index)
c_vector< double, 2 > WidenEdgeOrCorrectIntersectionLocationIfNecessary(unsigned indexA, unsigned indexB, c_vector< double, 2 > intersection)
std::vector< unsigned > mDeletedElementIndices
std::vector< c_vector< double, SPACE_DIM > > GetLocationsOfT1Swaps()
double mProtorosetteFormationProbability
void PerformT3Swap(Node< SPACE_DIM > *pNode, unsigned elementIndex)
unsigned GetNumElements() const
virtual ~MutableVertexMesh()
std::vector< c_vector< double, SPACE_DIM > > mLocationsOfIntersectionSwaps
double GetProtorosetteResolutionProbabilityPerTimestep() const
unsigned DivideElementAlongShortAxis(VertexElement< ELEMENT_DIM, SPACE_DIM > *pElement, bool placeOriginalElementBelow=false)
double mProtorosetteResolutionProbabilityPerTimestep
void PerformT2Swap(VertexElement< ELEMENT_DIM, SPACE_DIM > &rElement)
void PerformProtorosetteResolution(Node< SPACE_DIM > *pProtorosetteNode)
unsigned AddElement(VertexElement< ELEMENT_DIM, SPACE_DIM > *pNewElement)
double mCellRearrangementRatio
std::vector< c_vector< double, SPACE_DIM > > GetLocationsOfIntersectionSwaps()
void DivideEdge(Node< SPACE_DIM > *pNodeA, Node< SPACE_DIM > *pNodeB)
void SetMeshOperationTracking(const bool track)
friend class boost::serialization::access
virtual void HandleHighOrderJunctions(Node< SPACE_DIM > *pNodeA, Node< SPACE_DIM > *pNodeB)
void SetCellRearrangementRatio(double cellRearrangementRatio)
void PerformRosetteRankDecrease(Node< SPACE_DIM > *pRosetteNode)
bool mCheckForInternalIntersections
virtual void SetNode(unsigned nodeIndex, ChastePoint< SPACE_DIM > point)
VertexMeshOperationRecorder< ELEMENT_DIM, SPACE_DIM > * GetOperationRecorder()
void PerformIntersectionSwap(Node< SPACE_DIM > *pNode, unsigned elementIndex)
bool GetCheckForT3Swaps() const
VertexMeshOperationRecorder< ELEMENT_DIM, SPACE_DIM > mOperationRecorder
double GetT2Threshold() const
unsigned DivideElement(VertexElement< ELEMENT_DIM, SPACE_DIM > *pElement, unsigned nodeAIndex, unsigned nodeBIndex, bool placeOriginalElementBelow=false)
bool GetCheckForInternalIntersections() const
void SetT2Threshold(double t2Threshold)
c_vector< double, SPACE_DIM > mLastT2SwapLocation
void SetCellRearrangementThreshold(double cellRearrangementThreshold)