Line data Source code
1 : // The libMesh Finite Element Library. 2 : // Copyright (C) 2002-2025 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner 3 : 4 : // This library is free software; you can redistribute it and/or 5 : // modify it under the terms of the GNU Lesser General Public 6 : // License as published by the Free Software Foundation; either 7 : // version 2.1 of the License, or (at your option) any later version. 8 : 9 : // This library is distributed in the hope that it will be useful, 10 : // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 : // Lesser General Public License for more details. 13 : 14 : // You should have received a copy of the GNU Lesser General Public 15 : // License along with this library; if not, write to the Free Software 16 : // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 : 18 : #ifndef LIBMESH_ELEM_ASSEMBLY_H 19 : #define LIBMESH_ELEM_ASSEMBLY_H 20 : 21 : #include "libmesh/reference_counted_object.h" 22 : #include "libmesh/dense_matrix.h" 23 : 24 : namespace libMesh 25 : { 26 : 27 : class FEMContext; 28 : class System; 29 : class Node; 30 : 31 : /** 32 : * ElemAssembly provides a per-element (interior and boundary) assembly 33 : * functionality. 34 : * 35 : * \author David J. Knezevic 36 : * \date 2011 37 : */ 38 : class ElemAssembly : public ReferenceCountedObject<ElemAssembly> 39 : { 40 : public: 41 : 42 : /** 43 : * Constructor. 44 : */ 45 0 : ElemAssembly () = default; 46 : 47 : /** 48 : * Destructor. 49 : */ 50 0 : virtual ~ElemAssembly () = default; 51 : 52 : /** 53 : * Perform the element interior assembly. 54 : */ 55 39600 : virtual void interior_assembly(FEMContext &) { } 56 : 57 : /** 58 : * Perform the element boundary assembly. 59 : */ 60 89176 : virtual void boundary_assembly(FEMContext &) { } 61 : 62 : /** 63 : * Get values to add to the matrix or rhs vector based on \p node. 64 : * This allows one to impose point loads or springs, for example. 65 : */ 66 : virtual void 67 305700 : get_nodal_values(std::vector<dof_id_type>& , 68 : DenseMatrix<Number>& , 69 : DenseVector<Number>& , 70 : const System & , 71 : const Node &) 72 : { 73 : // Do nothing by default 74 305700 : } 75 : 76 : protected: 77 : 78 : }; 79 : 80 : } 81 : 82 : #endif // LIBMESH_ELEM_ASSEMBLY_H