DeformedBoundaryElement.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 "DeformedBoundaryElement.hpp"
00030
00031 template<unsigned ELEM_DIM, unsigned SPACE_DIM>
00032 DeformedBoundaryElement<ELEM_DIM,SPACE_DIM>::DeformedBoundaryElement()
00033 : BoundaryElement<ELEM_DIM,SPACE_DIM>()
00034 {
00035 assert(ELEM_DIM>0 && ELEM_DIM<3);
00036 assert(ELEM_DIM+1==SPACE_DIM);
00037
00038 c_vector<double,SPACE_DIM> x0 = zero_vector<double>(SPACE_DIM);
00039 this->AddNode(new Node<SPACE_DIM>(UINT_MAX, x0));
00040
00041 c_vector<double,SPACE_DIM> x1 = zero_vector<double>(SPACE_DIM);
00042 x1(0) = 1.0;
00043 this->AddNode(new Node<SPACE_DIM>(UINT_MAX, x1));
00044
00045 if (ELEM_DIM==2)
00046 {
00047 c_vector<double,SPACE_DIM> x2 = zero_vector<double>(SPACE_DIM);
00048 x2(1) = 1.0;
00049 this->AddNode(new Node<SPACE_DIM>(UINT_MAX, x2));
00050 }
00051 }
00052
00053 template<unsigned ELEM_DIM, unsigned SPACE_DIM>
00054 DeformedBoundaryElement<ELEM_DIM,SPACE_DIM>::~DeformedBoundaryElement()
00055 {
00056 for(unsigned i=0; i<this->mNodes.size(); i++)
00057 {
00058 delete this->mNodes[i];
00059 }
00060 }
00061
00062 template<unsigned ELEM_DIM, unsigned SPACE_DIM>
00063 void DeformedBoundaryElement<ELEM_DIM,SPACE_DIM>::ApplyUndeformedElementAndDisplacement(BoundaryElement<ELEM_DIM,SPACE_DIM>* pUndeformedElement,
00064 std::vector<c_vector<double,SPACE_DIM> >& rDisplacement)
00065 {
00066 for (unsigned i=0; i<NUM_NODES; i++)
00067 {
00068 for (unsigned j=0; j<SPACE_DIM; j++)
00069 {
00070 this->GetNode(i)->rGetModifiableLocation()[j]
00071 = pUndeformedElement->GetNode(i)->rGetLocation()[j] + rDisplacement[i](j);
00072 }
00073 }
00074 }
00075
00077
00079
00080 template class DeformedBoundaryElement<1,2>;
00081 template class DeformedBoundaryElement<2,3>;