18 #include "libmesh/getpot.h" 22 #include "libmesh/dof_map.h" 23 #include "libmesh/fe_base.h" 24 #include "libmesh/fe_interface.h" 25 #include "libmesh/fem_context.h" 26 #include "libmesh/mesh.h" 27 #include "libmesh/quadrature.h" 28 #include "libmesh/string_to_enum.h" 35 const std::string & name_in,
36 const unsigned int number_in) :
44 GetPot infile(
"laplace.in");
61 FEMSystem::init_data();
66 #ifdef LIBMESH_ENABLE_DIRICHLET 79 #endif // LIBMESH_ENABLE_DIRICHLET 84 FEMContext & c = cast_ref<FEMContext &>(context);
108 FEMContext & c = cast_ref<FEMContext &>(context);
118 const std::vector<Real> & JxW = fe->get_JxW();
121 const std::vector<std::vector<RealGradient>> & phi = fe->get_phi();
125 const std::vector<std::vector<RealTensor>> & grad_phi = fe->get_dphi();
127 const std::vector<Point> & qpoint = fe->get_xyz();
144 for (
unsigned int qp=0; qp != n_qpoints; qp++)
156 for (
unsigned int i=0; i != n_u_dofs; i++)
158 Fu(i) += (grad_u.
contract(grad_phi[i][qp]) - f*phi[i][qp])*JxW[qp];
161 if (request_jacobian)
162 for (
unsigned int j=0; j != n_u_dofs; j++)
163 Kuu(i,j) += grad_phi[j][qp].contract(grad_phi[i][qp])*JxW[qp];
167 return request_jacobian;
233 const Real eps = 1.e-3;
virtual void init_context(DiffContext &context)
RealVectorValue RealGradient
This is the EquationSystems class.
const DenseMatrix< Number > & get_elem_jacobian() const
Const accessor for element Jacobian.
Real verify_analytic_jacobians
If verify_analytic_jacobian is equal to zero (as it is by default), no numeric jacobians will be calc...
This class provides all data required for a physics package (e.g.
RealGradient forcing(const Point &p)
void get_side_fe(unsigned int var, FEGenericBase< OutputShape > *&fe) const
Accessor for edge/face (2D/3D) finite element object for variable var for the largest dimension in th...
unsigned int n_dof_indices() const
Total number of dof indices on the element.
void init_dirichlet_bcs()
LaplaceSystem(EquationSystems &es, const std::string &name_in, const unsigned int number_in)
This class allows one to associate Dirichlet boundary values with a given set of mesh boundary ids an...
virtual bool element_time_derivative(bool request_jacobian, DiffContext &context)
Adds the time derivative contribution on elem to elem_residual.
The libMesh namespace provides an interface to certain functionality in the library.
virtual void time_evolving(unsigned int var, unsigned int order)
Tells the DiffSystem that variable var is evolving with respect to time.
bool print_jacobians
Set print_jacobians to true to print J whenever it is assembled.
This class provides a specific system class.
Defines a dense subvector for use in finite element computations.
Gradient interior_gradient(unsigned int var, unsigned int qp) const
Defines a dense submatrix for use in Finite Element-type computations.
virtual_for_inffe const std::vector< Real > & get_JxW() const
This class provides all data required for a physics package (e.g.
unsigned int add_variable(std::string_view var, const FEType &type, const std::set< subdomain_id_type > *const active_subdomains=nullptr)
Adds the variable var to the list of variables for this system.
unsigned int n_points() const
CompareTypes< T, T2 >::supertype contract(const TypeTensor< T2 > &) const
Multiply 2 tensors together to return a scalar, i.e.
const DenseVector< Number > & get_elem_residual() const
Const accessor for element residual.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
bool print_element_jacobians
Set print_element_jacobians to true to print each J_elem contribution.
void add_dirichlet_boundary(const DirichletBoundary &dirichlet_boundary)
Adds a copy of the specified Dirichlet boundary to the system.
void get_element_fe(unsigned int var, FEGenericBase< OutputShape > *&fe) const
Accessor for interior finite element object for variable var for the largest dimension in the mesh...
LaplaceExactSolution exact_solution
const DofMap & get_dof_map() const
A Point defines a location in LIBMESH_DIM dimensional Real space.
virtual void init_data()
Initializes the member data fields associated with the system, so that, e.g., assemble() may be used...
This class forms the foundation from which generic finite elements may be derived.
const QBase & get_element_qrule() const
Accessor for element interior quadrature rule for the dimension of the current _elem.
This class defines a tensor in LIBMESH_DIM dimensional Real or Complex space.
const std::vector< std::vector< OutputShape > > & get_phi() const