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 #ifndef _SIMPLENONLINEARELLIPTICASSEMBLER_HPP_
00029 #define _SIMPLENONLINEARELLIPTICASSEMBLER_HPP_
00030
00031 #include "AbstractNonlinearAssembler.hpp"
00032 #include "BoundaryConditionsContainer.hpp"
00033 #include "AbstractNonlinearEllipticPde.hpp"
00034 #include "AbstractMesh.hpp"
00035
00036
00037
00049 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00050 class SimpleNonlinearEllipticAssembler
00051 : public AbstractNonlinearAssembler<ELEMENT_DIM, SPACE_DIM, 1, SimpleNonlinearEllipticAssembler<ELEMENT_DIM, SPACE_DIM> >
00052 {
00053 public:
00054 static const unsigned E_DIM = ELEMENT_DIM;
00055 static const unsigned S_DIM = SPACE_DIM;
00056 static const unsigned P_DIM = 1u;
00057
00058 typedef SimpleNonlinearEllipticAssembler<ELEMENT_DIM, SPACE_DIM> SelfType;
00059 typedef AbstractNonlinearAssembler<ELEMENT_DIM, SPACE_DIM, 1, SelfType> BaseClassType;
00060
00061 private:
00062 friend class AbstractStaticAssembler<ELEMENT_DIM, SPACE_DIM, 1, true, SelfType>;
00063
00064
00065 friend class TestSimpleNonlinearEllipticAssembler;
00066
00068 AbstractNonlinearEllipticPde<SPACE_DIM> *mpNonlinearEllipticPde;
00069
00070
00078 virtual c_matrix<double,1*(ELEMENT_DIM+1),1*(ELEMENT_DIM+1)> ComputeMatrixTerm(
00079 c_vector<double, ELEMENT_DIM+1> &rPhi,
00080 c_matrix<double, ELEMENT_DIM, ELEMENT_DIM+1> &rGradPhi,
00081 ChastePoint<SPACE_DIM> &rX,
00082 c_vector<double,1> &u,
00083 c_matrix<double,1,SPACE_DIM> &rGradU,
00084 Element<ELEMENT_DIM,SPACE_DIM>* pElement);
00085
00093 virtual c_vector<double,1*(ELEMENT_DIM+1)> ComputeVectorTerm(
00094 c_vector<double, ELEMENT_DIM+1> &rPhi,
00095 c_matrix<double, ELEMENT_DIM, ELEMENT_DIM+1> &rGradPhi,
00096 ChastePoint<SPACE_DIM> &rX,
00097 c_vector<double,1> &u,
00098 c_matrix<double,1,SPACE_DIM> &rGradU,
00099 Element<ELEMENT_DIM,SPACE_DIM>* pElement);
00100
00108 virtual c_vector<double, 1*ELEMENT_DIM> ComputeVectorSurfaceTerm(
00109 const BoundaryElement<ELEMENT_DIM-1,SPACE_DIM> &rSurfaceElement,
00110 c_vector<double, ELEMENT_DIM> &rPhi,
00111 ChastePoint<SPACE_DIM> &rX );
00112 ;
00113 public :
00114
00119 SimpleNonlinearEllipticAssembler( AbstractMesh<ELEMENT_DIM, SPACE_DIM>* pMesh,
00120 AbstractNonlinearEllipticPde<SPACE_DIM>* pPde,
00121 BoundaryConditionsContainer<ELEMENT_DIM, SPACE_DIM, 1>* pBoundaryConditions,
00122 unsigned numQuadPoints = 2);
00123 };
00124
00125
00126 #endif // _SIMPLENONLINEARELLIPTICASSEMBLER_HPP_