Cylindrical2dNodesOnlyMesh.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include <map>
00037 #include "Cylindrical2dNodesOnlyMesh.hpp"
00038
00039 Cylindrical2dNodesOnlyMesh::Cylindrical2dNodesOnlyMesh(double width)
00040 : NodesOnlyMesh<2>(),
00041 mWidth(width)
00042 {
00043 assert(width > 0.0);
00044 }
00045
00046 void Cylindrical2dNodesOnlyMesh::SetUpBoxCollection(double cutOffLength, c_vector<double, 2*2> domainSize, int numLocalRows, bool isPeriodic)
00047 {
00048 NodesOnlyMesh<2>::SetUpBoxCollection(cutOffLength, domainSize, PETSC_DECIDE, true);
00049
00050 this->AddNodesToBoxes();
00051 }
00052
00053 double Cylindrical2dNodesOnlyMesh::GetWidth(const unsigned& rDimension) const
00054 {
00055 double width = 0.0;
00056 assert(rDimension==0 || rDimension==1);
00057 if (rDimension==0)
00058 {
00059 width = mWidth;
00060 }
00061 else
00062 {
00063 width = MutableMesh<2,2>::GetWidth(rDimension);
00064 }
00065 return width;
00066 }
00067
00068
00069 void Cylindrical2dNodesOnlyMesh::SetNode(unsigned nodeIndex, ChastePoint<2> point, bool concreteMove)
00070 {
00071
00072 assert(!concreteMove);
00073
00074 double x_coord = point.rGetLocation()[0];
00075
00076
00077 if (x_coord >= mWidth)
00078 {
00079
00080 point.SetCoordinate(0, x_coord - mWidth);
00081 }
00082 else if (x_coord < 0.0)
00083 {
00084
00085 point.SetCoordinate(0, x_coord + mWidth);
00086 }
00087
00088
00089 this->GetNode(nodeIndex)->SetPoint(point);
00090 }
00091
00092 unsigned Cylindrical2dNodesOnlyMesh::AddNode(Node<2>* pNewNode)
00093 {
00094
00095 unsigned node_index = NodesOnlyMesh<2>::AddNode(pNewNode);
00096
00097
00098 ChastePoint<2> new_node_point = pNewNode->GetPoint();
00099 SetNode(node_index, new_node_point);
00100
00101 return node_index;
00102
00103 }
00104
00105 c_vector<double, 2> Cylindrical2dNodesOnlyMesh::GetVectorFromAtoB(const c_vector<double, 2>& rLocation1, const c_vector<double, 2>& rLocation2)
00106 {
00107 c_vector<double, 2> vector = rLocation2 - rLocation1;
00108 vector[0] = fmod(vector[0], mWidth);
00109
00110
00111
00112
00113
00114 if (vector[0] > 0.5*mWidth)
00115 {
00116 vector[0] -= mWidth;
00117 }
00118 else if (vector[0] < -0.5*mWidth)
00119 {
00120 vector[0] += mWidth;
00121 }
00122 return vector;
00123 }
00124
00125
00126 #include "SerializationExportWrapperForCpp.hpp"
00127 CHASTE_CLASS_EXPORT(Cylindrical2dNodesOnlyMesh)