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, std::vector<Node<SPACE_DIM>*> nodes)
00040 : AbstractTetrahedralElement<ELEMENT_DIM, SPACE_DIM>(index, nodes)
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
00054
00055
00056
00057
00058
00059 RegisterWithNodes();
00060 }
00061
00062 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00063 void BoundaryElement<ELEMENT_DIM, SPACE_DIM>::RegisterWithNodes()
00064 {
00065 for (unsigned i=0; i<this->mNodes.size(); i++)
00066 {
00067 this->mNodes[i]->AddBoundaryElement(this->mIndex);
00068 }
00069 }
00070
00071 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00072 void BoundaryElement<ELEMENT_DIM, SPACE_DIM>::ResetIndex(unsigned index)
00073 {
00074 for (unsigned i=0; i<this->GetNumNodes(); i++)
00075 {
00076 this->mNodes[i]->RemoveBoundaryElement(this->mIndex);
00077 }
00078 this->mIndex = index;
00079 RegisterWithNodes();
00080 }
00081
00082 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00083 void BoundaryElement<ELEMENT_DIM, SPACE_DIM>::MarkAsDeleted()
00084 {
00085 this->mIsDeleted = true;
00086
00087
00088 for (unsigned i=0; i<this->GetNumNodes(); i++)
00089 {
00090 this->mNodes[i]->RemoveBoundaryElement(this->mIndex);
00091 }
00092 }
00093
00094 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00095 void BoundaryElement<ELEMENT_DIM, SPACE_DIM>::UpdateNode(const unsigned& rIndex, Node<SPACE_DIM>* pNode)
00096 {
00097 assert(rIndex < this->mNodes.size());
00098
00099
00100 this->mNodes[rIndex]->RemoveBoundaryElement(this->mIndex);
00101
00102
00103 this->mNodes[rIndex] = pNode;
00104
00105
00106 this->mNodes[rIndex]->AddBoundaryElement(this->mIndex);
00107 }
00108
00109
00111
00113
00114 template class BoundaryElement<0,1>;
00115 template class BoundaryElement<0,2>;
00116 template class BoundaryElement<1,2>;
00117 template class BoundaryElement<0,3>;
00118 template class BoundaryElement<1,3>;
00119 template class BoundaryElement<2,3>;