BoundaryElement.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 #include "BoundaryElement.hpp"
00030
00031 #include <cassert>
00032
00034
00036
00037
00038 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00039 BoundaryElement<ELEMENT_DIM, SPACE_DIM>::BoundaryElement(unsigned index, const std::vector<Node<SPACE_DIM>*>& rNodes)
00040 : AbstractTetrahedralElement<ELEMENT_DIM, SPACE_DIM>(index, rNodes)
00041 {
00042 RegisterWithNodes();
00043 }
00044
00045 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00046 BoundaryElement<ELEMENT_DIM, SPACE_DIM>::BoundaryElement(unsigned index, Node<SPACE_DIM>* pNode)
00047 : AbstractTetrahedralElement<ELEMENT_DIM,SPACE_DIM>(index)
00048 {
00049 assert(ELEMENT_DIM == 0);
00050
00051
00052 this->mNodes.push_back(pNode);
00053 RegisterWithNodes();
00054 }
00055
00056 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00057 void BoundaryElement<ELEMENT_DIM, SPACE_DIM>::RegisterWithNodes()
00058 {
00059 for (unsigned i=0; i<this->mNodes.size(); i++)
00060 {
00061 this->mNodes[i]->AddBoundaryElement(this->mIndex);
00062 }
00063 }
00064
00065 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00066 void BoundaryElement<ELEMENT_DIM, SPACE_DIM>::ResetIndex(unsigned index)
00067 {
00068 for (unsigned i=0; i<this->GetNumNodes(); i++)
00069 {
00070 this->mNodes[i]->RemoveBoundaryElement(this->mIndex);
00071 }
00072 this->mIndex = index;
00073 RegisterWithNodes();
00074 }
00075
00076 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00077 void BoundaryElement<ELEMENT_DIM, SPACE_DIM>::MarkAsDeleted()
00078 {
00079 this->mIsDeleted = true;
00080
00081
00082 for (unsigned i=0; i<this->GetNumNodes(); i++)
00083 {
00084 this->mNodes[i]->RemoveBoundaryElement(this->mIndex);
00085 }
00086 }
00087
00088 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00089 void BoundaryElement<ELEMENT_DIM, SPACE_DIM>::UpdateNode(const unsigned& rIndex, Node<SPACE_DIM>* pNode)
00090 {
00091 assert(rIndex < this->mNodes.size());
00092
00093
00094 this->mNodes[rIndex]->RemoveBoundaryElement(this->mIndex);
00095
00096
00097 this->mNodes[rIndex] = pNode;
00098
00099
00100 this->mNodes[rIndex]->AddBoundaryElement(this->mIndex);
00101 }
00102
00103
00105
00107
00108 template class BoundaryElement<0,1>;
00109 template class BoundaryElement<0,2>;
00110 template class BoundaryElement<1,2>;
00111 template class BoundaryElement<0,3>;
00112 template class BoundaryElement<1,3>;
00113 template class BoundaryElement<2,3>;