libMesh
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
libMesh::DGFEMContext Class Reference

This class extends FEMContext in order to provide extra data required to perform local element residual and Jacobian assembly in the case of a discontinuous Galerkin (DG) discretization. More...

#include <dg_fem_context.h>

Inheritance diagram for libMesh::DGFEMContext:
[legend]

Public Types

enum  AlgebraicType {
  NONE = 0 , DOFS_ONLY , CURRENT , OLD ,
  OLD_DOFS_ONLY
}
 Enum describing what data to use when initializing algebraic structures on each element. More...
 
typedef const DenseSubVector< Number > &(DiffContext::* diff_subsolution_getter) (unsigned int) const
 Helper typedef to simplify refactoring.
 
typedef std::map< constNumericVector< Number > *, std::pair< DenseVector< Number >, std::vector< DenseSubVector< Number > > > >::iterator localized_vectors_iterator
 Typedef for the localized_vectors iterator.
 

Public Member Functions

 DGFEMContext (const System &sys)
 Constructor.
 
virtual ~DGFEMContext ()
 Destructor.
 
virtual void side_fe_reinit () override
 Override side_fe_reinit to set a boolean flag so that by default DG terms are assumed to be inactive.
 
void neighbor_side_fe_reinit ()
 Initialize neighbor side data needed to assemble DG terms.
 
const std::vector< dof_id_type > & get_neighbor_dof_indices () const
 Accessor for neighbor dof indices.
 
const std::vector< dof_id_type > & get_neighbor_dof_indices (unsigned int var) const
 Accessor for element dof indices of a particular variable corresponding to the index argument.
 
const DenseVector< Number > & get_neighbor_residual () const
 Const accessor for neighbor residual.
 
DenseVector< Number > & get_neighbor_residual ()
 Non-const accessor for neighbor residual.
 
const DenseSubVector< Number > & get_neighbor_residual (unsigned int var) const
 Const accessor for neighbor residual of a particular variable corresponding to the variable index argument.
 
DenseSubVector< Number > & get_neighbor_residual (unsigned int var)
 Non-const accessor for neighbor residual of a particular variable corresponding to the variable index argument.
 
const DenseMatrix< Number > & get_elem_elem_jacobian () const
 Const accessor for element-element Jacobian.
 
DenseMatrix< Number > & get_elem_elem_jacobian ()
 Non-const accessor for element-element Jacobian.
 
const DenseSubMatrix< Number > & get_elem_elem_jacobian (unsigned int var1, unsigned int var2) const
 Const accessor for element-element Jacobian of particular variables corresponding to the variable index arguments.
 
DenseSubMatrix< Number > & get_elem_elem_jacobian (unsigned int var1, unsigned int var2)
 Non-const accessor for element-element Jacobian of particular variables corresponding to the variable index arguments.
 
const DenseMatrix< Number > & get_elem_neighbor_jacobian () const
 Const accessor for element-neighbor Jacobian.
 
DenseMatrix< Number > & get_elem_neighbor_jacobian ()
 Non-const accessor for element -neighborJacobian.
 
const DenseSubMatrix< Number > & get_elem_neighbor_jacobian (unsigned int var1, unsigned int var2) const
 Const accessor for element-neighbor Jacobian of particular variables corresponding to the variable index arguments.
 
DenseSubMatrix< Number > & get_elem_neighbor_jacobian (unsigned int var1, unsigned int var2)
 Non-const accessor for element-neighbor Jacobian of particular variables corresponding to the variable index arguments.
 
const DenseMatrix< Number > & get_neighbor_elem_jacobian () const
 Const accessor for element-neighbor Jacobian.
 
DenseMatrix< Number > & get_neighbor_elem_jacobian ()
 Non-const accessor for element Jacobian.
 
const DenseSubMatrix< Number > & get_neighbor_elem_jacobian (unsigned int var1, unsigned int var2) const
 Const accessor for neighbor-element Jacobian of particular variables corresponding to the variable index arguments.
 
DenseSubMatrix< Number > & get_neighbor_elem_jacobian (unsigned int var1, unsigned int var2)
 Non-const accessor for neighbor-element Jacobian of particular variables corresponding to the variable index arguments.
 
const DenseMatrix< Number > & get_neighbor_neighbor_jacobian () const
 Const accessor for element-neighbor Jacobian.
 
DenseMatrix< Number > & get_neighbor_neighbor_jacobian ()
 Non-const accessor for element Jacobian.
 
const DenseSubMatrix< Number > & get_neighbor_neighbor_jacobian (unsigned int var1, unsigned int var2) const
 Const accessor for neighbor-neighbor Jacobian of particular variables corresponding to the variable index arguments.
 
DenseSubMatrix< Number > & get_neighbor_neighbor_jacobian (unsigned int var1, unsigned int var2)
 Non-const accessor for neighbor-neighbor Jacobian of particular variables corresponding to the variable index arguments.
 
void set_neighbor (const Elem &neighbor)
 Set the neighbor element which we will use to assemble DG terms.
 
const Elem & get_neighbor () const
 Accessor for current neighbor Elem object for assembling DG terms.
 
bool dg_terms_are_active () const
 Are the DG terms active, i.e.
 
template<typename OutputShape >
void get_neighbor_side_fe (unsigned int var, FEGenericBase< OutputShape > *&fe) const
 Accessor for neighbor edge/face (2D/3D) finite element object for variable var.
 
void use_default_quadrature_rules (int extra_quadrature_order=0)
 Use quadrature rules designed to over-integrate a mass matrix, plus extra_quadrature_order.
 
void use_unweighted_quadrature_rules (int extra_quadrature_order=0)
 Use quadrature rules designed to exactly integrate unweighted undistorted basis functions, plus extra_quadrature_order.
 
void use_quadrature_rules (QuadratureType qt, int extra_quadrature_order=0)
 Use a specified quadrature rule type qt for every element, side, and edge dimension, at the default quadrature order for the hardest FE type plus extra_quadrature_order.
 
bool has_side_boundary_id (boundary_id_type id) const
 Reports if the boundary id is found on the current side.
 
void side_boundary_ids (std::vector< boundary_id_type > &vec_to_fill) const
 As above, but fills in the std::set provided by the user.
 
Number interior_value (unsigned int var, unsigned int qp) const
 
template<typename OutputType >
void interior_value (unsigned int var, unsigned int qp, OutputType &u) const
 
Number side_value (unsigned int var, unsigned int qp) const
 
template<typename OutputType >
void side_value (unsigned int var, unsigned int qp, OutputType &u) const
 
Number point_value (unsigned int var, const Point &p) const
 
template<typename OutputType >
void point_value (unsigned int var, const Point &p, OutputType &u, const Real tolerance=TOLERANCE) const
 
Gradient interior_gradient (unsigned int var, unsigned int qp) const
 
template<typename OutputType >
void interior_gradient (unsigned int var, unsigned int qp, OutputType &du) const
 
Gradient side_gradient (unsigned int var, unsigned int qp) const
 
template<typename OutputType >
void side_gradient (unsigned int var, unsigned int qp, OutputType &du) const
 
Gradient point_gradient (unsigned int var, const Point &p) const
 
template<typename OutputType >
void point_gradient (unsigned int var, const Point &p, OutputType &grad_u, const Real tolerance=TOLERANCE) const
 
Tensor interior_hessian (unsigned int var, unsigned int qp) const
 
template<typename OutputType >
void interior_hessian (unsigned int var, unsigned int qp, OutputType &d2u) const
 
Tensor side_hessian (unsigned int var, unsigned int qp) const
 
template<typename OutputType >
void side_hessian (unsigned int var, unsigned int qp, OutputType &d2u) const
 
Tensor point_hessian (unsigned int var, const Point &p) const
 
template<typename OutputType >
void point_hessian (unsigned int var, const Point &p, OutputType &hess_u, const Real tolerance=TOLERANCE) const
 
Number fixed_interior_value (unsigned int var, unsigned int qp) const
 
template<typename OutputType >
void fixed_interior_value (unsigned int var, unsigned int qp, OutputType &u) const
 
Number fixed_side_value (unsigned int var, unsigned int qp) const
 
template<typename OutputType >
void fixed_side_value (unsigned int var, unsigned int qp, OutputType &u) const
 
Number fixed_point_value (unsigned int var, const Point &p) const
 
template<typename OutputType >
void fixed_point_value (unsigned int var, const Point &p, OutputType &u, const Real tolerance=TOLERANCE) const
 
Gradient fixed_interior_gradient (unsigned int var, unsigned int qp) const
 
template<typename OutputType >
void fixed_interior_gradient (unsigned int var, unsigned int qp, OutputType &grad_u) const
 
Gradient fixed_side_gradient (unsigned int var, unsigned int qp) const
 
template<typename OutputType >
void fixed_side_gradient (unsigned int var, unsigned int qp, OutputType &grad_u) const
 
Gradient fixed_point_gradient (unsigned int var, const Point &p) const
 
template<typename OutputType >
void fixed_point_gradient (unsigned int var, const Point &p, OutputType &grad_u, const Real tolerance=TOLERANCE) const
 
Tensor fixed_interior_hessian (unsigned int var, unsigned int qp) const
 
template<typename OutputType >
void fixed_interior_hessian (unsigned int var, unsigned int qp, OutputType &hess_u) const
 
Tensor fixed_side_hessian (unsigned int var, unsigned int qp) const
 
template<typename OutputType >
void fixed_side_hessian (unsigned int var, unsigned int qp, OutputType &hess_u) const
 
Tensor fixed_point_hessian (unsigned int var, const Point &p) const
 
template<typename OutputType >
void fixed_point_hessian (unsigned int var, const Point &p, OutputType &hess_u, const Real tolerance=TOLERANCE) const
 
template<typename OutputShape >
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.
 
FEBase * get_element_fe (unsigned int var) const
 Accessor for interior finite element object for scalar-valued variable var for the largest dimension in the mesh.
 
template<typename OutputShape >
void get_element_fe (unsigned int var, FEGenericBase< OutputShape > *&fe, unsigned short dim) const
 Accessor for interior finite element object for variable var for dimension dim.
 
void get_element_fe (unsigned int var, FEAbstract *&fe, unsigned short dim) const
 Accessor for interior finite element object for variable var for dimension dim.
 
FEBase * get_element_fe (unsigned int var, unsigned short dim) const
 Accessor for interior finite element object for scalar-valued variable var for dimension dim.
 
template<typename OutputShape >
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 the mesh.
 
FEBase * get_side_fe (unsigned int var) const
 Accessor for side finite element object for scalar-valued variable var for the largest dimension in the mesh.
 
template<typename OutputShape >
void get_side_fe (unsigned int var, FEGenericBase< OutputShape > *&fe, unsigned short dim) const
 Accessor for edge/face (2D/3D) finite element object for variable var for dimension dim.
 
void get_side_fe (unsigned int var, FEAbstract *&fe, unsigned short dim) const
 Accessor for edge/face (2D/3D) finite element object for variable var for dimension dim.
 
FEBase * get_side_fe (unsigned int var, unsigned short dim) const
 Accessor for side finite element object for scalar-valued variable var for dimension dim.
 
template<typename OutputShape >
void get_edge_fe (unsigned int var, FEGenericBase< OutputShape > *&fe) const
 Accessor for edge (3D only!) finite element object for variable var.
 
void get_edge_fe (unsigned int var, FEAbstract *&fe) const
 
FEBase * get_edge_fe (unsigned int var) const
 Accessor for edge (3D only!) finite element object for scalar-valued variable var.
 
template<typename OutputType >
void interior_values (unsigned int var, const NumericVector< Number > &_system_vector, std::vector< OutputType > &interior_values_vector) const
 Fills a vector of values of the _system_vector at the all the quadrature points in the current element interior.
 
template<typename OutputType >
void side_values (unsigned int var, const NumericVector< Number > &_system_vector, std::vector< OutputType > &side_values_vector) const
 Fills a vector of values of the _system_vector at the all the quadrature points on the current element side.
 
template<typename OutputType >
void interior_gradients (unsigned int var, const NumericVector< Number > &_system_vector, std::vector< OutputType > &interior_gradients_vector) const
 Fills a vector with the gradient of the solution variable var at all the quadrature points in the current element interior.
 
template<typename OutputType >
void side_gradients (unsigned int var, const NumericVector< Number > &_system_vector, std::vector< OutputType > &side_gradients_vector) const
 Fills a vector with the gradient of the solution variable var at all the quadrature points on the current element side.
 
template<typename OutputType >
void interior_hessians (unsigned int var, const NumericVector< Number > &_system_vector, std::vector< OutputType > &d2u_vals) const
 Fills a vector of hessians of the _system_vector at the all the quadrature points in the current element interior.
 
template<typename OutputType >
void side_hessians (unsigned int var, const NumericVector< Number > &_system_vector, std::vector< OutputType > &d2u_vals) const
 Fills a vector of hessians of the _system_vector at the all the quadrature points on the current element side.
 
template<typename OutputType >
void interior_rate (unsigned int var, unsigned int qp, OutputType &u) const
 
template<typename OutputType >
void interior_rate_gradient (unsigned int var, unsigned int qp, OutputType &u) const
 
template<typename OutputType >
void side_rate (unsigned int var, unsigned int qp, OutputType &u) const
 
template<typename OutputType >
void point_rate (unsigned int var, const Point &p, OutputType &u) const
 
template<typename OutputType >
void interior_accel (unsigned int var, unsigned int qp, OutputType &u) const
 
template<typename OutputType >
void side_accel (unsigned int var, unsigned int qp, OutputType &u) const
 
template<typename OutputType >
void point_accel (unsigned int var, const Point &p, OutputType &u) const
 
template<typename OutputType >
void interior_curl (unsigned int var, unsigned int qp, OutputType &curl_u) const
 
template<typename OutputType >
void point_curl (unsigned int var, const Point &p, OutputType &curl_u, const Real tolerance=TOLERANCE) const
 
template<typename OutputType >
void interior_div (unsigned int var, unsigned int qp, OutputType &div_u) const
 
virtual void elem_reinit (Real theta) override
 Resets the current time in the context.
 
virtual void elem_side_reinit (Real theta) override
 Resets the current time in the context.
 
virtual void elem_edge_reinit (Real theta) override
 Resets the current time in the context.
 
virtual void nonlocal_reinit (Real theta) override
 Gives derived classes the opportunity to reinitialize data needed for nonlocal calculations at a new point within a timestep.
 
virtual void pre_fe_reinit (const System &, const Elem *e)
 Reinitializes local data vectors/matrices on the current geometric element.
 
virtual void elem_fe_reinit (const std::vector< Point > *const pts=nullptr)
 Reinitializes interior FE objects on the current geometric element.
 
virtual void edge_fe_reinit ()
 Reinitializes edge FE objects on the current geometric element.
 
const QBase & get_element_qrule () const
 Accessor for element interior quadrature rule for the dimension of the current _elem.
 
const QBase & get_element_qrule (unsigned short dim) const
 Accessor for element interior quadrature rule.
 
const QBase & get_side_qrule () const
 Accessor for element side quadrature rule for the dimension of the current _elem.
 
const QBase & get_side_qrule (unsigned short dim) const
 Accessor for element side quadrature rule.
 
const QBase & get_edge_qrule () const
 Accessor for element edge quadrature rule.
 
virtual void set_mesh_system (System *sys)
 Tells the FEMContext that system sys contains the isoparametric Lagrangian variables which correspond to the coordinates of mesh nodes, in problems where the mesh itself is expected to move in time.
 
const System * get_mesh_system () const
 Accessor for moving mesh System.
 
System * get_mesh_system ()
 Accessor for moving mesh System.
 
unsigned int get_mesh_x_var () const
 Accessor for x-variable of moving mesh System.
 
void set_mesh_x_var (unsigned int x_var)
 Accessor for x-variable of moving mesh System.
 
unsigned int get_mesh_y_var () const
 Accessor for y-variable of moving mesh System.
 
void set_mesh_y_var (unsigned int y_var)
 Accessor for y-variable of moving mesh System.
 
unsigned int get_mesh_z_var () const
 Accessor for z-variable of moving mesh System.
 
void set_mesh_z_var (unsigned int z_var)
 Accessor for z-variable of moving mesh System.
 
bool has_elem () const
 Test for current Elem object.
 
const Elem & get_elem () const
 Accessor for current Elem object.
 
Elem & get_elem ()
 Accessor for current Elem object.
 
unsigned char get_side () const
 Accessor for current side of Elem object.
 
unsigned char get_edge () const
 Accessor for current edge of Elem object.
 
unsigned char get_dim () const
 Accessor for cached mesh dimension.
 
unsigned char get_elem_dim () const
 
const std::set< unsigned char > & elem_dimensions () const
 
void elem_position_set (Real theta)
 Uses the coordinate data specified by mesh_*_position configuration to set the geometry of elem to the value it would take after a fraction theta of a timestep.
 
void elem_position_get ()
 Uses the geometry of elem to set the coordinate data specified by mesh_*_position configuration.
 
void set_algebraic_type (const AlgebraicType atype)
 Setting which determines whether to initialize algebraic structures (elem_*) on each element and set their values from current_local_solution.
 
AlgebraicType algebraic_type () const
 
void set_custom_solution (const NumericVector< Number > *custom_sol)
 Set a NumericVector to be used in place of current_local_solution for calculating elem_solution.
 
void set_jacobian_tolerance (Real tol)
 Calls set_jacobian_tolerance() on all the FE objects controlled by this class.
 
FEType find_hardest_fe_type ()
 Helper function for creating quadrature rules.
 
void attach_quadrature_rules ()
 Helper function for attaching quadrature rules.
 
const std::vector< unsigned int > * active_vars () const
 Return a pointer to the vector of active variables being computed for, or a null pointer if all variables in the system are active.
 
template<typename OutputShape >
FEGenericBase< OutputShape > * build_new_fe (const FEGenericBase< OutputShape > *fe, const Point &p, const Real tolerance=TOLERANCE, const int get_derivative_level=-1) const
 Helper function to reduce some code duplication in the *_point_* methods.
 
template<>
FEGenericBase< Real > * cached_fe (const unsigned int elem_dim, const FEType fe_type, const int get_derivative_level) const
 
template<>
FEGenericBase< RealGradient > * cached_fe (const unsigned int elem_dim, const FEType fe_type, const int get_derivative_level) const
 
unsigned int n_vars () const
 Number of variables in solution.
 
const System & get_system () const
 Accessor for associated system.
 
const DenseVector< Number > & get_elem_solution () const
 Accessor for element solution.
 
DenseVector< Number > & get_elem_solution ()
 Non-const accessor for element solution.
 
const DenseSubVector< Number > & get_elem_solution (unsigned int var) const
 Accessor for element solution of a particular variable corresponding to the variable index argument.
 
DenseSubVector< Number > & get_elem_solution (unsigned int var)
 Accessor for element solution of a particular variable corresponding to the variable index argument.
 
const DenseVector< Number > & get_elem_solution_rate () const
 Accessor for element solution rate of change w.r.t.
 
DenseVector< Number > & get_elem_solution_rate ()
 Non-const accessor for element solution rate of change w.r.t.
 
const DenseSubVector< Number > & get_elem_solution_rate (unsigned int var) const
 Accessor for element solution rate for a particular variable corresponding to the variable index argument.
 
DenseSubVector< Number > & get_elem_solution_rate (unsigned int var)
 Accessor for element solution rate for a particular variable corresponding to the variable index argument.
 
const DenseVector< Number > & get_elem_solution_accel () const
 Accessor for element solution accel of change w.r.t.
 
DenseVector< Number > & get_elem_solution_accel ()
 Non-const accessor for element solution accel of change w.r.t.
 
const DenseSubVector< Number > & get_elem_solution_accel (unsigned int var) const
 Accessor for element solution accel for a particular variable corresponding to the variable index argument.
 
DenseSubVector< Number > & get_elem_solution_accel (unsigned int var)
 Accessor for element solution accel for a particular variable corresponding to the variable index argument.
 
const DenseVector< Number > & get_elem_fixed_solution () const
 Accessor for element fixed solution.
 
DenseVector< Number > & get_elem_fixed_solution ()
 Non-const accessor for element fixed solution.
 
const DenseSubVector< Number > & get_elem_fixed_solution (unsigned int var) const
 Accessor for element fixed solution of a particular variable corresponding to the variable index argument.
 
DenseSubVector< Number > & get_elem_fixed_solution (unsigned int var)
 Accessor for element fixed solution of a particular variable corresponding to the variable index argument.
 
const DenseVector< Number > & get_elem_residual () const
 Const accessor for element residual.
 
DenseVector< Number > & get_elem_residual ()
 Non-const accessor for element residual.
 
const DenseSubVector< Number > & get_elem_residual (unsigned int var) const
 Const accessor for element residual of a particular variable corresponding to the variable index argument.
 
DenseSubVector< Number > & get_elem_residual (unsigned int var)
 Non-const accessor for element residual of a particular variable corresponding to the variable index argument.
 
const DenseMatrix< Number > & get_elem_jacobian () const
 Const accessor for element Jacobian.
 
DenseMatrix< Number > & get_elem_jacobian ()
 Non-const accessor for element Jacobian.
 
const DenseSubMatrix< Number > & get_elem_jacobian (unsigned int var1, unsigned int var2) const
 Const accessor for element Jacobian of particular variables corresponding to the variable index arguments.
 
DenseSubMatrix< Number > & get_elem_jacobian (unsigned int var1, unsigned int var2)
 Non-const accessor for element Jacobian of particular variables corresponding to the variable index arguments.
 
const std::vector< Number > & get_qois () const
 Const accessor for QoI vector.
 
std::vector< Number > & get_qois ()
 Non-const accessor for QoI vector.
 
const std::vector< DenseVector< Number > > & get_qoi_derivatives () const
 Const accessor for QoI derivatives.
 
std::vector< DenseVector< Number > > & get_qoi_derivatives ()
 Non-const accessor for QoI derivatives.
 
const DenseSubVector< Number > & get_qoi_derivatives (std::size_t qoi, unsigned int var) const
 Const accessor for QoI derivative of a particular qoi and variable corresponding to the index arguments.
 
DenseSubVector< Number > & get_qoi_derivatives (std::size_t qoi, unsigned int var)
 Non-const accessor for QoI derivative of a particular qoi and variable corresponding to the index arguments.
 
const std::vector< dof_id_type > & get_dof_indices () const
 Accessor for element dof indices.
 
std::vector< dof_id_type > & get_dof_indices ()
 Non-const accessor for element dof indices.
 
const std::vector< dof_id_type > & get_dof_indices (unsigned int var) const
 Accessor for element dof indices of a particular variable corresponding to the index argument.
 
std::vector< dof_id_type > & get_dof_indices (unsigned int var)
 Accessor for element dof indices of a particular variable corresponding to the index argument.
 
unsigned int n_dof_indices () const
 Total number of dof indices on the element.
 
unsigned int n_dof_indices (unsigned int var) const
 Total number of dof indices of the particular variable corresponding to the index argument.
 
Real get_system_time () const
 Accessor for the time variable stored in the system class.
 
Real get_time () const
 Accessor for the time for which the current nonlinear_solution is defined.
 
void set_time (Real time_in)
 Set the time for which the current nonlinear_solution is defined.
 
Real get_elem_solution_derivative () const
 The derivative of the current elem_solution w.r.t.
 
Real get_elem_solution_rate_derivative () const
 The derivative of the current elem_solution_rate w.r.t.
 
Real get_elem_solution_accel_derivative () const
 The derivative of the current elem_solution_accel w.r.t.
 
Real get_fixed_solution_derivative () const
 The derivative of the current fixed_elem_solution w.r.t.
 
bool is_adjoint () const
 Accessor for querying whether we need to do a primal or adjoint solve.
 
bool & is_adjoint ()
 Accessor for setting whether we need to do a primal or adjoint solve.
 
void set_deltat_pointer (Real *dt)
 Points the _deltat member of this class at a timestep value stored in the creating System, for example DiffSystem::deltat.
 
Real get_deltat_value ()
 
void add_localized_vector (NumericVector< Number > &localized_vector, const System &sys)
 Adds a vector to the map of localized vectors.
 
DenseVector< Number > & get_localized_vector (const NumericVector< Number > &localized_vector)
 Return a reference to DenseVector localization of localized_vector contained in the _localized_vectors map.
 
const DenseVector< Number > & get_localized_vector (const NumericVector< Number > &localized_vector) const
 const accessible version of get_localized_vector function
 
DenseSubVector< Number > & get_localized_subvector (const NumericVector< Number > &localized_vector, unsigned int var)
 Return a reference to DenseSubVector localization of localized_vector at variable var contained in the _localized_vectors map.
 
const DenseSubVector< Number > & get_localized_subvector (const NumericVector< Number > &localized_vector, unsigned int var) const
 const accessible version of get_localized_subvector function
 

Public Attributes

unsigned char side
 Current side for side_* to examine.
 
unsigned char edge
 Current edge for edge_* to examine.
 
Real time
 For time-dependent problems, this is the time t for which the current nonlinear_solution is defined.
 
const Real system_time
 This is the time stored in the System class at the time this context was created, i.e.
 
Real elem_solution_derivative
 The derivative of elem_solution with respect to the current nonlinear solution.
 
Real elem_solution_rate_derivative
 The derivative of elem_solution_rate with respect to the current nonlinear solution, for use by systems with non default mass_residual terms.
 
Real elem_solution_accel_derivative
 The derivative of elem_solution_accel with respect to the current nonlinear solution, for use by systems with non default mass_residual terms.
 
Real fixed_solution_derivative
 The derivative of elem_fixed_solution with respect to the nonlinear solution, for use by systems constructing jacobians with elem_fixed_solution based methods.
 

Protected Member Functions

template<typename OutputShape >
FEGenericBase< OutputShape > * cached_fe (const unsigned int elem_dim, const FEType fe_type, const int get_derivative_level) const
 
void set_elem (const Elem *e)
 Helper function to promote accessor usage.
 
template<typename OutputType , typename FENeeded< OutputType >::value_getter fe_getter, diff_subsolution_getter subsolution_getter>
void some_value (unsigned int var, unsigned int qp, OutputType &u) const
 Helper function to reduce some code duplication in the *interior_value methods.
 
template<typename OutputType , typename FENeeded< OutputType >::grad_getter fe_getter, diff_subsolution_getter subsolution_getter>
void some_gradient (unsigned int var, unsigned int qp, OutputType &u) const
 Helper function to reduce some code duplication in the *interior_gradient methods.
 
template<typename OutputType , typename FENeeded< OutputType >::hess_getter fe_getter, diff_subsolution_getter subsolution_getter>
void some_hessian (unsigned int var, unsigned int qp, OutputType &u) const
 Helper function to reduce some code duplication in the *interior_hessian methods.
 

Protected Attributes

std::unique_ptr< const std::vector< unsigned int > > _active_vars
 Variables on which to enable calculations, or nullptr if all variables in the System are to be enabled.
 
System * _mesh_sys
 System from which to acquire moving mesh information.
 
unsigned int _mesh_x_var
 Variables from which to acquire moving mesh information.
 
unsigned int _mesh_y_var
 
unsigned int _mesh_z_var
 
AlgebraicType _atype
 Keep track of what type of algebra reinitialization is to be done.
 
const NumericVector< Number > * _custom_solution
 Data with which to do algebra reinitialization.
 
std::unique_ptr< FEGenericBase< Real > > _real_fe
 
std::unique_ptr< FEGenericBase< RealGradient > > _real_grad_fe
 
int _real_fe_derivative_level
 
int _real_grad_fe_derivative_level
 
bool _real_fe_is_inf
 
bool _real_grad_fe_is_inf
 
std::vector< std::map< FEType, std::unique_ptr< FEAbstract > > > _element_fe
 Finite element objects for each variable's interior, sides and edges.
 
std::vector< std::map< FEType, std::unique_ptr< FEAbstract > > > _side_fe
 
std::map< FEType, std::unique_ptr< FEAbstract > > _edge_fe
 
std::vector< std::vector< FEAbstract * > > _element_fe_var
 Pointers to the same finite element objects, but indexed by variable number.
 
std::vector< std::vector< FEAbstract * > > _side_fe_var
 
std::vector< FEAbstract * > _edge_fe_var
 
const BoundaryInfo & _boundary_info
 Saved reference to BoundaryInfo on the mesh for this System.
 
const Elem * _elem
 Current element for element_* to examine.
 
unsigned char _dim
 Cached dimension of largest dimension element in this mesh.
 
unsigned char _elem_dim
 Cached dimension of this->_elem.
 
std::set< unsigned char > _elem_dims
 Cached dimensions of elements in the mesh, plus dimension 0 if SCALAR variables are in use.
 
std::vector< std::unique_ptr< QBase > > _element_qrule
 Quadrature rule for element interior.
 
std::vector< std::unique_ptr< QBase > > _side_qrule
 Quadrature rules for element sides The FEM context will try to find a quadrature rule that correctly integrates all variables.
 
std::unique_ptr< QBase > _edge_qrule
 Quadrature rules for element edges.
 
int _extra_quadrature_order
 The extra quadrature order for this context.
 
std::map< const NumericVector< Number > *, std::pair< DenseVector< Number >, std::vector< DenseSubVector< Number > > > > _localized_vectors
 Contains pointers to vectors the user has asked to be localized, keyed with pairs of element localized versions of that vector and per variable views.
 
const bool _have_local_matrices
 Whether we have local matrices allocated/initialized.
 
DenseVector< Number > _elem_solution
 Element by element components of nonlinear_solution as adjusted by a time_solver.
 
std::vector< DenseSubVector< Number > > _elem_subsolutions
 
DenseVector< Number > _elem_solution_rate
 Element by element components of du/dt as adjusted by a time_solver.
 
std::vector< DenseSubVector< Number > > _elem_subsolution_rates
 
DenseVector< Number > _elem_solution_accel
 Element by element components of du/dt as adjusted by a time_solver.
 
std::vector< DenseSubVector< Number > > _elem_subsolution_accels
 
DenseVector< Number > _elem_fixed_solution
 Element by element components of nonlinear_solution at a fixed point in a timestep, for optional use by e.g.
 
std::vector< DenseSubVector< Number > > _elem_fixed_subsolutions
 
DenseVector< Number > _elem_residual
 Element residual vector.
 
DenseMatrix< Number > _elem_jacobian
 Element jacobian: derivatives of elem_residual with respect to elem_solution.
 
std::vector< Number > _elem_qoi
 Element quantity of interest contributions.
 
std::vector< DenseVector< Number > > _elem_qoi_derivative
 Element quantity of interest derivative contributions.
 
std::vector< std::vector< DenseSubVector< Number > > > _elem_qoi_subderivatives
 
std::vector< DenseSubVector< Number > > _elem_subresiduals
 Element residual subvectors and (if _have_local_matrices) Jacobian submatrices.
 
std::vector< std::vector< DenseSubMatrix< Number > > > _elem_subjacobians
 
std::vector< dof_id_type > _dof_indices
 Global Degree of freedom index lists.
 
std::vector< std::vector< dof_id_type > > _dof_indices_var
 

Private Member Functions

void init_internal_data (const System &sys)
 Helper function used in constructors to set up internal data.
 
void _do_elem_position_set (Real theta)
 Uses the coordinate data specified by mesh_*_position configuration to set the geometry of elem to the value it would take after a fraction theta of a timestep.
 
void _update_time_from_system (Real theta)
 Update the time in the context object for the given value of theta, based on the values of "time" and "deltat" stored in the system which created this context.
 

Private Attributes

const Elem * _neighbor
 Current neighbor element for assembling DG terms.
 
DenseVector< Number > _neighbor_residual
 Residual vector of the neighbor component.
 
DenseMatrix< Number > _elem_elem_jacobian
 The DG Jacobian terms.
 
DenseMatrix< Number > _elem_neighbor_jacobian
 
DenseMatrix< Number > _neighbor_elem_jacobian
 
DenseMatrix< Number > _neighbor_neighbor_jacobian
 
std::vector< std::unique_ptr< DenseSubVector< Number > > > _neighbor_subresiduals
 Element residual subvectors and Jacobian submatrices.
 
std::vector< std::vector< std::unique_ptr< DenseSubMatrix< Number > > > > _elem_elem_subjacobians
 
std::vector< std::vector< std::unique_ptr< DenseSubMatrix< Number > > > > _elem_neighbor_subjacobians
 
std::vector< std::vector< std::unique_ptr< DenseSubMatrix< Number > > > > _neighbor_elem_subjacobians
 
std::vector< std::vector< std::unique_ptr< DenseSubMatrix< Number > > > > _neighbor_neighbor_subjacobians
 
std::vector< dof_id_type > _neighbor_dof_indices
 Global Degree of freedom index lists for the neighbor element.
 
std::vector< std::vector< dof_id_type > > _neighbor_dof_indices_var
 
std::map< FEType, std::unique_ptr< FEAbstract > > _neighbor_side_fe
 Finite element objects for each variable's sides on the neighbor element.
 
std::vector< FEAbstract * > _neighbor_side_fe_var
 Pointers to the same finite element objects on the neighbor element, but indexed by variable number.
 
bool _dg_terms_active
 Boolean flag to indicate whether or not the DG terms have been assembled and should be used in the global matrix assembly.
 
Real * _deltat
 Defaults to nullptr, can optionally be used to point to a timestep value in the System-derived class responsible for creating this DiffContext.
 
const System & _system
 A reference to the system this context is constructed with.
 
bool _is_adjoint
 Is this context to be used for a primal or adjoint solve?
 

Detailed Description

This class extends FEMContext in order to provide extra data required to perform local element residual and Jacobian assembly in the case of a discontinuous Galerkin (DG) discretization.

Author
David Knezevic
Date
2015

Extends FEMContext to work for DG problems.

Definition at line 39 of file dg_fem_context.h.

Member Typedef Documentation

◆ diff_subsolution_getter

typedef const DenseSubVector< Number > &(DiffContext::* libMesh::FEMContext::diff_subsolution_getter) (unsigned int) const
inherited

Helper typedef to simplify refactoring.

Definition at line 1121 of file fem_context.h.

◆ localized_vectors_iterator

typedef std::map<constNumericVector<Number>*,std::pair<DenseVector<Number>,std::vector<DenseSubVector<Number>>>>::iterator libMesh::DiffContext::localized_vectors_iterator
inherited

Typedef for the localized_vectors iterator.

Definition at line 540 of file diff_context.h.

Member Enumeration Documentation

◆ AlgebraicType

Enum describing what data to use when initializing algebraic structures on each element.

Enumerator
NONE 
DOFS_ONLY 
CURRENT 
OLD 
OLD_DOFS_ONLY 

Definition at line 989 of file fem_context.h.

989 { NONE = 0, // Do not reinitialize dof_indices
990 DOFS_ONLY, // Reinitialize dof_indices, not
991 // algebraic structures
992 CURRENT, // Use dof_indices, current solution
993 OLD, // Use old_dof_indices, custom solution
994 OLD_DOFS_ONLY}; // Reinitialize old_dof_indices, not

Constructor & Destructor Documentation

◆ DGFEMContext()

libMesh::DGFEMContext::DGFEMContext ( const System &  sys)
explicit

Constructor.

Allocates some but fills no data structures.

Definition at line 29 of file dg_fem_context.C.

30 : FEMContext(sys),
31 _neighbor(nullptr),
32 _neighbor_dof_indices_var(sys.n_vars()),
33 _dg_terms_active(false)
34{
35 unsigned int nv = sys.n_vars();
36 libmesh_assert (nv);
37
38 _neighbor_subresiduals.reserve(nv);
39 _elem_elem_subjacobians.resize(nv);
43
44 for (unsigned int i=0; i != nv; ++i)
45 {
46 _neighbor_subresiduals.emplace_back(std::make_unique<DenseSubVector<Number>>(_neighbor_residual));
47 _elem_elem_subjacobians[i].reserve(nv);
48 _elem_neighbor_subjacobians[i].reserve(nv);
49 _neighbor_elem_subjacobians[i].reserve(nv);
51
52 for (unsigned int j=0; j != nv; ++j)
53 {
54 _elem_elem_subjacobians[i].emplace_back(std::make_unique<DenseSubMatrix<Number>>(_elem_elem_jacobian));
55 _elem_neighbor_subjacobians[i].emplace_back(std::make_unique<DenseSubMatrix<Number>>(_elem_neighbor_jacobian));
56 _neighbor_elem_subjacobians[i].emplace_back(std::make_unique<DenseSubMatrix<Number>>(_neighbor_elem_jacobian));
57 _neighbor_neighbor_subjacobians[i].emplace_back(std::make_unique<DenseSubMatrix<Number>>(_neighbor_neighbor_jacobian));
58 }
59 }
60
61 _neighbor_side_fe_var.resize(nv);
62 for (unsigned int i=0; i != nv; ++i)
63 {
64 FEType fe_type = sys.variable_type(i);
65
66 if (_neighbor_side_fe[fe_type] == nullptr)
67 _neighbor_side_fe[fe_type] = FEAbstract::build(this->_dim, fe_type);
68
69 _neighbor_side_fe_var[i] = _neighbor_side_fe[fe_type].get();
70 }
71}
std::vector< std::vector< std::unique_ptr< DenseSubMatrix< Number > > > > _elem_elem_subjacobians
DenseMatrix< Number > _elem_elem_jacobian
The DG Jacobian terms.
std::vector< std::vector< dof_id_type > > _neighbor_dof_indices_var
bool _dg_terms_active
Boolean flag to indicate whether or not the DG terms have been assembled and should be used in the gl...
std::vector< std::vector< std::unique_ptr< DenseSubMatrix< Number > > > > _elem_neighbor_subjacobians
DenseMatrix< Number > _neighbor_neighbor_jacobian
DenseVector< Number > _neighbor_residual
Residual vector of the neighbor component.
std::map< FEType, std::unique_ptr< FEAbstract > > _neighbor_side_fe
Finite element objects for each variable's sides on the neighbor element.
std::vector< std::vector< std::unique_ptr< DenseSubMatrix< Number > > > > _neighbor_neighbor_subjacobians
const Elem * _neighbor
Current neighbor element for assembling DG terms.
std::vector< std::unique_ptr< DenseSubVector< Number > > > _neighbor_subresiduals
Element residual subvectors and Jacobian submatrices.
DenseMatrix< Number > _neighbor_elem_jacobian
std::vector< std::vector< std::unique_ptr< DenseSubMatrix< Number > > > > _neighbor_elem_subjacobians
DenseMatrix< Number > _elem_neighbor_jacobian
std::vector< FEAbstract * > _neighbor_side_fe_var
Pointers to the same finite element objects on the neighbor element, but indexed by variable number.
unsigned int n_vars(const unsigned int s, const unsigned int vg) const
Definition dof_object.h:957
static std::unique_ptr< FEAbstract > build(const unsigned int dim, const FEType &type)
Builds a specific finite element type.
Definition fe_abstract.C:78
FEMContext(const System &sys, const std::vector< unsigned int > *active_vars=nullptr, bool allocate_local_matrices=true)
Constructor.
Definition fem_context.C:39
unsigned char _dim
Cached dimension of largest dimension element in this mesh.
libmesh_assert(ctx)

References libMesh::FEMContext::_dim, _elem_elem_jacobian, _elem_elem_subjacobians, _elem_neighbor_jacobian, _elem_neighbor_subjacobians, _neighbor_elem_jacobian, _neighbor_elem_subjacobians, _neighbor_neighbor_jacobian, _neighbor_neighbor_subjacobians, _neighbor_residual, _neighbor_side_fe, _neighbor_side_fe_var, _neighbor_subresiduals, libMesh::FEAbstract::build(), libMesh::libmesh_assert(), libMesh::System::n_vars(), and libMesh::System::variable_type().

◆ ~DGFEMContext()

libMesh::DGFEMContext::~DGFEMContext ( )
virtualdefault

Destructor.

Member Function Documentation

◆ _do_elem_position_set()

void libMesh::FEMContext::_do_elem_position_set ( Real  theta)
privateinherited

Uses the coordinate data specified by mesh_*_position configuration to set the geometry of elem to the value it would take after a fraction theta of a timestep.

This does the work of elem_position_set, but isn't safe to call without _mesh_sys/etc. defined first.

Definition at line 1632 of file fem_context.C.

1633{
1634 // This is too expensive to call unless we've been asked to move the mesh
1636
1637 // This will probably break with threading when two contexts are
1638 // operating on elements which share a node
1639 libmesh_assert_equal_to (libMesh::n_threads(), 1);
1640
1641 // If the coordinate data is in our own system, it's already
1642 // been set up for us, and we can ignore our input parameter theta
1643 // if (_mesh_sys == this->number())
1644 // {
1645 unsigned int n_nodes = this->get_elem().n_nodes();
1646
1647#ifndef NDEBUG
1648 const unsigned char dim = this->get_elem_dim();
1649
1650 // For simplicity we demand that mesh coordinates be stored
1651 // in a format that allows a direct copy
1653 (this->get_element_fe(this->get_mesh_x_var(), dim)->get_fe_type().family
1654 == FEMap::map_fe_type(this->get_elem()) &&
1655 this->get_elem_solution(this->get_mesh_x_var()).size() == n_nodes));
1657 (this->get_element_fe(this->get_mesh_y_var(), dim)->get_fe_type().family
1658 == FEMap::map_fe_type(this->get_elem()) &&
1659 this->get_elem_solution(this->get_mesh_y_var()).size() == n_nodes));
1661 (this->get_element_fe(this->get_mesh_z_var(), dim)->get_fe_type().family
1662 == FEMap::map_fe_type(this->get_elem()) &&
1663 this->get_elem_solution(this->get_mesh_z_var()).size() == n_nodes));
1664#endif
1665
1666 // Set the new point coordinates
1668 for (unsigned int i=0; i != n_nodes; ++i)
1669 const_cast<Elem &>(this->get_elem()).point(i)(0) =
1671
1673 for (unsigned int i=0; i != n_nodes; ++i)
1674 const_cast<Elem &>(this->get_elem()).point(i)(1) =
1676
1678 for (unsigned int i=0; i != n_nodes; ++i)
1679 const_cast<Elem &>(this->get_elem()).point(i)(2) =
1681 // }
1682 // FIXME - If the coordinate data is not in our own system, someone
1683 // had better get around to implementing that... - RHS
1684 // else
1685 // {
1686 // libmesh_not_implemented();
1687 // }
1688}
unsigned int dim
const DenseVector< Number > & get_elem_solution() const
Accessor for element solution.
virtual unsigned int n_nodes() const =0
System * _mesh_sys
System from which to acquire moving mesh information.
unsigned int get_mesh_y_var() const
Accessor for y-variable of moving mesh System.
const Elem & get_elem() const
Accessor for current Elem object.
unsigned char get_elem_dim() const
unsigned int get_mesh_x_var() const
Accessor for x-variable of moving mesh 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.
unsigned int get_mesh_z_var() const
Accessor for z-variable of moving mesh System.
static FEFamily map_fe_type(const Elem &elem)
Definition fe_map.C:46
const unsigned int invalid_uint
A number which is used quite often to represent an invalid or uninitialized value for an unsigned int...
Definition libmesh.h:303
LIBMESH_DEVICE_INLINE T libmesh_real(T a)
unsigned int n_threads()
const dof_id_type n_nodes
Definition tecplot_io.C:67

References libMesh::FEMContext::_mesh_sys, dim, libMesh::FEMContext::get_elem(), libMesh::FEMContext::get_elem_dim(), libMesh::DiffContext::get_elem_solution(), libMesh::FEMContext::get_element_fe(), libMesh::FEMContext::get_mesh_x_var(), libMesh::FEMContext::get_mesh_y_var(), libMesh::FEMContext::get_mesh_z_var(), libMesh::invalid_uint, libMesh::libmesh_assert(), libMesh::libmesh_real(), libMesh::FEMap::map_fe_type(), libMesh::Elem::n_nodes(), n_nodes, libMesh::n_threads(), and libMesh::Elem::point().

Referenced by libMesh::FEMContext::elem_position_set().

◆ _update_time_from_system()

void libMesh::FEMContext::_update_time_from_system ( Real  theta)
privateinherited

Update the time in the context object for the given value of theta, based on the values of "time" and "deltat" stored in the system which created this context.

Definition at line 1948 of file fem_context.C.

1949{
1950 // Update the "time" variable based on the value of theta. For this
1951 // to work, we need to know the value of deltat, a pointer to which is now
1952 // stored by our parent DiffContext class. Note: get_deltat_value() will
1953 // assert in debug mode if the requested pointer is nullptr.
1954 const Real deltat = this->get_deltat_value();
1955
1956 this->set_time(theta*(this->get_system_time() + deltat) + (1.-theta)*this->get_system_time());
1957}
Real get_system_time() const
Accessor for the time variable stored in the system class.
void set_time(Real time_in)
Set the time for which the current nonlinear_solution is defined.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

References libMesh::DiffContext::get_deltat_value(), libMesh::DiffContext::get_system_time(), libMesh::Real, and libMesh::DiffContext::set_time().

Referenced by libMesh::FEMContext::elem_edge_reinit(), libMesh::FEMContext::elem_reinit(), libMesh::FEMContext::elem_side_reinit(), and libMesh::FEMContext::nonlocal_reinit().

◆ active_vars()

const std::vector< unsigned int > * libMesh::FEMContext::active_vars ( ) const
inlineinherited

Return a pointer to the vector of active variables being computed for, or a null pointer if all variables in the system are active.

Definition at line 1052 of file fem_context.h.

1052{ return _active_vars.get(); }
std::unique_ptr< const std::vector< unsigned int > > _active_vars
Variables on which to enable calculations, or nullptr if all variables in the System are to be enable...

References libMesh::FEMContext::_active_vars.

Referenced by libMesh::FEMContext::FEMContext(), and libMesh::WrappedFunctor< Output >::init_context().

◆ add_localized_vector()

void libMesh::DiffContext::add_localized_vector ( NumericVector< Number > &  localized_vector,
const System &  sys 
)
inherited

Adds a vector to the map of localized vectors.

We can later evaluate interior_values, interior_gradients and side_values for these fields these vectors represent.

Definition at line 125 of file diff_context.C.

126{
127 // Make an empty pair keyed with a reference to this _localized_vector
128 _localized_vectors[&localized_vector] = std::make_pair(DenseVector<Number>(), std::vector<DenseSubVector<Number>>());
129
130 unsigned int nv = sys.n_vars();
131
132 _localized_vectors[&localized_vector].second.reserve(nv);
133
134 // Fill the DenseSubVector with nv copies of DenseVector
135 for (unsigned int i=0; i != nv; ++i)
136 _localized_vectors[&localized_vector].second.emplace_back(_localized_vectors[&localized_vector].first);
137}
std::map< const NumericVector< Number > *, std::pair< DenseVector< Number >, std::vector< DenseSubVector< Number > > > > _localized_vectors
Contains pointers to vectors the user has asked to be localized, keyed with pairs of element localize...

References libMesh::DiffContext::_localized_vectors, and libMesh::System::n_vars().

Referenced by SigmaPhysics::init_context().

◆ algebraic_type()

AlgebraicType libMesh::FEMContext::algebraic_type ( ) const
inlineinherited

Definition at line 1010 of file fem_context.h.

1010{ return _atype; }
AlgebraicType _atype
Keep track of what type of algebra reinitialization is to be done.

References libMesh::FEMContext::_atype.

Referenced by libMesh::FEMContext::build_new_fe(), and libMesh::FEMContext::pre_fe_reinit().

◆ attach_quadrature_rules()

void libMesh::FEMContext::attach_quadrature_rules ( )
inherited

Helper function for attaching quadrature rules.

Definition at line 126 of file fem_context.C.

127{
128 const System & sys = this->get_system();
129
130 auto attach_rules = [this, &sys](unsigned int v)
131 {
132 for (const auto & dim : _elem_dims)
133 {
134 FEType fe_type = sys.variable_type(v);
135
136 _element_fe[dim][fe_type]->attach_quadrature_rule(_element_qrule[dim].get());
137 if (dim)
138 _side_fe[dim][fe_type]->attach_quadrature_rule(_side_qrule[dim].get());
139 if (dim == 3)
140 _edge_fe[fe_type]->attach_quadrature_rule(_edge_qrule.get());
141 };
142 };
143
144 if (_active_vars)
145 for (auto v : *_active_vars)
146 attach_rules(v);
147 else
148 for (auto v : make_range(sys.n_vars()))
149 attach_rules(v);
150}
unsigned int n_vars() const
Number of variables in solution.
const System & get_system() const
Accessor for associated system.
std::map< FEType, std::unique_ptr< FEAbstract > > _edge_fe
std::vector< std::map< FEType, std::unique_ptr< FEAbstract > > > _element_fe
Finite element objects for each variable's interior, sides and edges.
std::vector< std::unique_ptr< QBase > > _side_qrule
Quadrature rules for element sides The FEM context will try to find a quadrature rule that correctly ...
std::set< unsigned char > _elem_dims
Cached dimensions of elements in the mesh, plus dimension 0 if SCALAR variables are in use.
std::vector< std::map< FEType, std::unique_ptr< FEAbstract > > > _side_fe
std::unique_ptr< QBase > _edge_qrule
Quadrature rules for element edges.
std::vector< std::unique_ptr< QBase > > _element_qrule
Quadrature rule for element interior.
const Elem & get(const ElemType type_in)
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition int_range.h:176

References libMesh::FEMContext::_active_vars, libMesh::FEMContext::_edge_fe, libMesh::FEMContext::_edge_qrule, libMesh::FEMContext::_elem_dims, libMesh::FEMContext::_element_fe, libMesh::FEMContext::_element_qrule, libMesh::FEMContext::_side_fe, libMesh::FEMContext::_side_qrule, dim, libMesh::DiffContext::get_system(), libMesh::make_range(), libMesh::System::n_vars(), and libMesh::System::variable_type().

Referenced by libMesh::FEMContext::use_default_quadrature_rules(), libMesh::FEMContext::use_quadrature_rules(), and libMesh::FEMContext::use_unweighted_quadrature_rules().

◆ build_new_fe()

template<typename OutputShape >
template LIBMESH_EXPORT FEGenericBase< RealGradient > * libMesh::FEMContext::build_new_fe ( const FEGenericBase< OutputShape > *  fe,
const Point &  p,
const Real  tolerance = TOLERANCE,
const int  get_derivative_level = -1 
) const
inherited

Helper function to reduce some code duplication in the *_point_* methods.

get_derivative_level should be -1 to get_ everything, 0 to get_phi, 1 to get_dphi, 2 to get_d2phi, or 3 to get_curl_phi

Definition at line 2048 of file fem_context.C.

2052{
2053 FEType fe_type = fe->get_fe_type();
2054
2055 // If we don't have an Elem to evaluate on, then the only functions
2056 // we can sensibly evaluate are the scalar dofs which are the same
2057 // everywhere.
2058 libmesh_assert(this->has_elem() || fe_type.family == SCALAR);
2059
2060#ifdef LIBMESH_ENABLE_AMR
2061 const int add_p_level = fe->add_p_level_in_reinit();
2062 if ((algebraic_type() == OLD) &&
2063 this->has_elem())
2064 {
2065 if (this->get_elem().p_refinement_flag() == Elem::JUST_REFINED)
2066 fe_type.order -= add_p_level;
2067 else if (this->get_elem().p_refinement_flag() == Elem::JUST_COARSENED)
2068 fe_type.order += add_p_level;
2069 }
2070#endif // LIBMESH_ENABLE_AMR
2071
2072 const unsigned int elem_dim = this->has_elem() ? this->get_elem().dim() : 0;
2073
2074 FEGenericBase<OutputShape>* fe_new =
2075 cached_fe<OutputShape>(elem_dim, fe_type, get_derivative_level);
2076#ifdef LIBMESH_ENABLE_AMR
2077 fe_new->add_p_level_in_reinit(add_p_level);
2078#endif // LIBMESH_ENABLE_AMR
2079
2080 // Map the physical co-ordinates to the master co-ordinates using the inverse_map from fe_interface.h
2081 // Build a vector of point co-ordinates to send to reinit
2082 Point master_point = this->has_elem() ?
2083 FEMap::inverse_map (elem_dim, &this->get_elem(), p, tolerance) :
2084 Point(0);
2085
2086 std::vector<Point> coor(1, master_point);
2087
2088 switch (get_derivative_level)
2089 {
2090 case -1:
2091 fe_new->get_phi();
2092 fe_new->get_dphi();
2093#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
2094 fe_new->get_d2phi();
2095#endif
2096 fe_new->get_curl_phi();
2097 break;
2098 case 0:
2099 fe_new->get_phi();
2100 break;
2101 case 1:
2102 fe_new->get_dphi();
2103 break;
2104 case 2:
2105#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
2106 fe_new->get_d2phi();
2107#else
2108 // here a different configuration is required.
2109 libmesh_not_implemented();
2110#endif
2111 break;
2112 case 3:
2113 fe_new->get_curl_phi();
2114 break;
2115 default:
2116 libmesh_error();
2117 }
2118
2119 // Reinitialize the element and compute the shape function values at coor
2120 if (this->has_elem())
2121 fe_new->reinit (&this->get_elem(), &coor);
2122 else
2123 // If !this->has_elem(), then we assume we are dealing with a SCALAR variable
2124 fe_new->reinit (nullptr, &coor);
2125
2126 return fe_new;
2127}
@ JUST_COARSENED
Definition elem.h:1571
virtual unsigned short dim() const =0
bool has_elem() const
Test for current Elem object.
AlgebraicType algebraic_type() const
static Point inverse_map(const unsigned int dim, const Elem *elem, const Point &p, const Real tolerance=TOLERANCE, const bool secure=true, const bool extra_checks=true)
Definition fe_map.C:1512

References libMesh::FEAbstract::add_p_level_in_reinit(), libMesh::FEMContext::algebraic_type(), libMesh::Elem::dim(), libMesh::FEType::family, libMesh::FEGenericBase< OutputType >::get_curl_phi(), libMesh::FEGenericBase< OutputType >::get_d2phi(), libMesh::FEGenericBase< OutputType >::get_dphi(), libMesh::FEMContext::get_elem(), libMesh::FEAbstract::get_fe_type(), libMesh::FEGenericBase< OutputType >::get_phi(), libMesh::FEMContext::has_elem(), libMesh::FEMap::inverse_map(), libMesh::Elem::JUST_COARSENED, libMesh::Elem::JUST_REFINED, libMesh::libmesh_assert(), libMesh::FEMContext::OLD, libMesh::FEType::order, libMesh::FEAbstract::reinit(), and libMesh::SCALAR.

Referenced by libMesh::FEMContext::fixed_point_gradient(), libMesh::FEMContext::fixed_point_hessian(), libMesh::FEMContext::fixed_point_value(), libMesh::FEMContext::point_curl(), libMesh::FEMContext::point_gradient(), libMesh::FEMContext::point_hessian(), and libMesh::FEMContext::point_value().

◆ cached_fe() [1/3]

template<typename OutputShape >
FEGenericBase< OutputShape > * libMesh::FEMContext::cached_fe ( const unsigned int  elem_dim,
const FEType  fe_type,
const int  get_derivative_level 
) const
protectedinherited

◆ cached_fe() [2/3]

template<>
FEGenericBase< Real > * libMesh::FEMContext::cached_fe ( const unsigned int  elem_dim,
const FEType  fe_type,
const int  get_derivative_level 
) const
inherited

Definition at line 1963 of file fem_context.C.

1966{
1967#ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
1968 const bool fe_needs_inf =
1969 this->has_elem() && this->get_elem().infinite();
1970#endif
1971
1972 if (!_real_fe ||
1973 elem_dim != _real_fe->get_dim() ||
1974 fe_type != _real_fe->get_fe_type() ||
1975 get_derivative_level != _real_fe_derivative_level)
1976 {
1977 _real_fe_derivative_level = get_derivative_level;
1978
1979 _real_fe =
1980#ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
1981 fe_needs_inf ?
1982 FEGenericBase<Real>::build_InfFE(elem_dim, fe_type) :
1983#endif
1984 FEGenericBase<Real>::build(elem_dim, fe_type);
1985 }
1986
1987#ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
1988 else if (fe_needs_inf && !_real_fe_is_inf)
1989 _real_fe =
1990 FEGenericBase<Real>::build_InfFE(elem_dim, fe_type);
1991 else if (!fe_needs_inf && _real_fe_is_inf)
1992 _real_fe =
1993 FEGenericBase<Real>::build(elem_dim, fe_type);
1994
1996 (this->has_elem() && this->get_elem().infinite());
1997#endif
1998
1999 return _real_fe.get();
2000}
virtual bool infinite() const =0
static std::unique_ptr< FEGenericBase > build(const unsigned int dim, const FEType &type)
Builds a specific finite element type.
static std::unique_ptr< FEGenericBase > build_InfFE(const unsigned int dim, const FEType &type)
Builds a specific infinite element type.
std::unique_ptr< FEGenericBase< Real > > _real_fe

References libMesh::FEMContext::_real_fe, libMesh::FEMContext::_real_fe_derivative_level, libMesh::FEMContext::_real_fe_is_inf, libMesh::FEGenericBase< OutputType >::build(), libMesh::FEGenericBase< OutputType >::build_InfFE(), libMesh::FEMContext::get_elem(), libMesh::FEMContext::has_elem(), and libMesh::Elem::infinite().

◆ cached_fe() [3/3]

template<>
FEGenericBase< RealGradient > * libMesh::FEMContext::cached_fe ( const unsigned int  elem_dim,
const FEType  fe_type,
const int  get_derivative_level 
) const
inherited

Definition at line 2005 of file fem_context.C.

2008{
2009#ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
2010 const bool fe_needs_inf =
2011 this->has_elem() && this->get_elem().infinite();
2012#endif
2013
2014 if (!_real_grad_fe ||
2015 elem_dim != _real_grad_fe->get_dim() ||
2016 fe_type != _real_grad_fe->get_fe_type() ||
2017 get_derivative_level != _real_grad_fe_derivative_level)
2018 {
2019 _real_grad_fe_derivative_level = get_derivative_level;
2020
2022#ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
2023 fe_needs_inf ?
2024 FEGenericBase<RealGradient>::build_InfFE(elem_dim, fe_type) :
2025#endif
2026 FEGenericBase<RealGradient>::build(elem_dim, fe_type);
2027 }
2028
2029#ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
2030 else if (fe_needs_inf && !_real_grad_fe_is_inf)
2033 else if (!fe_needs_inf && _real_grad_fe_is_inf)
2035 FEGenericBase<RealGradient>::build(elem_dim, fe_type);
2036
2038 (this->has_elem() && this->get_elem().infinite());
2039#endif
2040
2041 return _real_grad_fe.get();
2042}
std::unique_ptr< FEGenericBase< RealGradient > > _real_grad_fe
RealVectorValue RealGradient

References libMesh::FEMContext::_real_grad_fe, libMesh::FEMContext::_real_grad_fe_derivative_level, libMesh::FEMContext::_real_grad_fe_is_inf, libMesh::FEGenericBase< OutputType >::build(), libMesh::FEGenericBase< OutputType >::build_InfFE(), libMesh::FEMContext::get_elem(), libMesh::FEMContext::has_elem(), and libMesh::Elem::infinite().

◆ dg_terms_are_active()

bool libMesh::DGFEMContext::dg_terms_are_active ( ) const
inline

Are the DG terms active, i.e.

have they been assembled?

Definition at line 232 of file dg_fem_context.h.

233 { return _dg_terms_active; }

References _dg_terms_active.

Referenced by libMesh::RBConstruction::add_scaled_matrix_and_vector().

◆ edge_fe_reinit()

void libMesh::FEMContext::edge_fe_reinit ( )
virtualinherited

Reinitializes edge FE objects on the current geometric element.

Definition at line 1539 of file fem_context.C.

1540{
1541 libmesh_assert_equal_to (this->get_elem_dim(), 3);
1542
1543 // Initialize all the interior FE objects on elem/edge.
1544 // Logging of FE::reinit is done in the FE functions
1545 for (auto & pr : _edge_fe)
1546 pr.second->edge_reinit(&(this->get_elem()), this->get_edge());
1547}
unsigned char get_edge() const
Accessor for current edge of Elem object.

References libMesh::FEMContext::_edge_fe, libMesh::FEMContext::get_edge(), and libMesh::FEMContext::get_elem_dim().

Referenced by libMesh::FEMContext::elem_edge_reinit().

◆ elem_dimensions()

const std::set< unsigned char > & libMesh::FEMContext::elem_dimensions ( ) const
inlineinherited

◆ elem_edge_reinit()

void libMesh::FEMContext::elem_edge_reinit ( Real  theta)
overridevirtualinherited

Resets the current time in the context.

Additionally, reinitialize Elem and FE objects if there's a moving mesh present in the system such that the mesh is deformed to its position at \( t_{\theta} \).

Reimplemented from libMesh::DiffContext.

Definition at line 1476 of file fem_context.C.

1477{
1478 // Update the "time" variable of this context object
1479 this->_update_time_from_system(theta);
1480
1481 // Handle a moving element if necessary
1482 if (_mesh_sys)
1483 {
1484 // FIXME - not threadsafe yet!
1485 elem_position_set(theta);
1487 }
1488}
void elem_position_set(Real theta)
Uses the coordinate data specified by mesh_*_position configuration to set the geometry of elem to th...
void _update_time_from_system(Real theta)
Update the time in the context object for the given value of theta, based on the values of "time" and...
virtual void edge_fe_reinit()
Reinitializes edge FE objects on the current geometric element.

References libMesh::FEMContext::_mesh_sys, libMesh::FEMContext::_update_time_from_system(), libMesh::FEMContext::edge_fe_reinit(), and libMesh::FEMContext::elem_position_set().

◆ elem_fe_reinit()

void libMesh::FEMContext::elem_fe_reinit ( const std::vector< Point > *const  pts = nullptr)
virtualinherited

Reinitializes interior FE objects on the current geometric element.

Definition at line 1501 of file fem_context.C.

1502{
1503 // Initialize all the interior FE objects on elem.
1504 // Logging of FE::reinit is done in the FE functions
1505 // We only reinit the FE objects for the current element
1506 // dimension
1507 const unsigned char dim = this->get_elem_dim();
1508
1509 libmesh_assert( !_element_fe[dim].empty() );
1510
1511 for (const auto & pr : _element_fe[dim])
1512 {
1513 if (this->has_elem())
1514 pr.second->reinit(&(this->get_elem()), pts);
1515 // If !this->has_elem(), then still might need to reinit for a
1516 // SCALAR variable; everything else will depend on an elem
1517 else if (pr.first.family == SCALAR)
1518 pr.second->reinit(nullptr);
1519 }
1520}

References libMesh::FEMContext::_element_fe, dim, libMesh::FEMContext::get_elem_dim(), libMesh::FEMContext::has_elem(), libMesh::libmesh_assert(), and libMesh::SCALAR.

Referenced by libMesh::ExactSolution::_compute_error(), libMesh::RBConstruction::add_scaled_matrix_and_vector(), assembly_with_dg_fem_context(), libMesh::VariationalSmootherSystem::compute_mesh_quality_info(), libMesh::FEMContext::elem_reinit(), HilbertSystem::element_time_derivative(), libMesh::RBEIMConstruction::enrich_eim_approximation_on_sides(), libMesh::RBEIMConstruction::initialize_qp_data(), libMesh::FEMSystem::mesh_position_set(), libMesh::FEMContext::nonlocal_reinit(), Integrate::operator()(), libMesh::VariationalSmootherSystem::prepare_for_smoothing(), OverlappingAlgebraicGhostingTest::run_ghosting_test(), OverlappingCouplingGhostingTest::run_sparsity_pattern_test(), SlitMeshRefinedSystemTest::testRestart(), and SlitMeshRefinedSystemTest::testSystem().

◆ elem_position_get()

void libMesh::FEMContext::elem_position_get ( )
inherited

Uses the geometry of elem to set the coordinate data specified by mesh_*_position configuration.

Definition at line 1551 of file fem_context.C.

1552{
1553 // This is too expensive to call unless we've been asked to move the mesh
1555
1556 // This will probably break with threading when two contexts are
1557 // operating on elements which share a node
1558 libmesh_assert_equal_to (libMesh::n_threads(), 1);
1559
1560 // If the coordinate data is in our own system, it's already
1561 // been set up for us
1562 // if (_mesh_sys == this->number())
1563 // {
1564 unsigned int n_nodes = this->get_elem().n_nodes();
1565
1566#ifndef NDEBUG
1567 const unsigned char dim = this->get_elem_dim();
1568
1569 // For simplicity we demand that mesh coordinates be stored
1570 // in a format that allows a direct copy
1572 (this->get_element_fe(this->get_mesh_x_var(), dim)->get_fe_type().family
1573 == FEMap::map_fe_type(this->get_elem()) &&
1574 this->get_element_fe(this->get_mesh_x_var(), dim)->get_fe_type().order.get_order()
1575 == this->get_elem().default_order()));
1577 (this->get_element_fe(this->get_mesh_y_var(), dim)->get_fe_type().family
1578 == FEMap::map_fe_type(this->get_elem()) &&
1579 this->get_element_fe(this->get_mesh_y_var(), dim)->get_fe_type().order.get_order()
1580 == this->get_elem().default_order()));
1582 (this->get_element_fe(this->get_mesh_z_var(), dim)->get_fe_type().family
1583 == FEMap::map_fe_type(this->get_elem()) &&
1584 this->get_element_fe(this->get_mesh_z_var(), dim)->get_fe_type().order.get_order()
1585 == this->get_elem().default_order()));
1586#endif
1587
1588 // Get degree of freedom coefficients from point coordinates
1590 for (unsigned int i=0; i != n_nodes; ++i)
1591 (this->get_elem_solution(this->get_mesh_x_var()))(i) = this->get_elem().point(i)(0);
1592
1594 for (unsigned int i=0; i != n_nodes; ++i)
1595 (this->get_elem_solution(this->get_mesh_y_var()))(i) = this->get_elem().point(i)(1);
1596
1598 for (unsigned int i=0; i != n_nodes; ++i)
1599 (this->get_elem_solution(this->get_mesh_z_var()))(i) = this->get_elem().point(i)(2);
1600 // }
1601 // FIXME - If the coordinate data is not in our own system, someone
1602 // had better get around to implementing that... - RHS
1603 // else
1604 // {
1605 // libmesh_not_implemented();
1606 // }
1607}
const Point & point(const unsigned int i) const
Definition elem.h:2583

References libMesh::FEMContext::_mesh_sys, dim, libMesh::FEMContext::get_elem(), libMesh::FEMContext::get_elem_dim(), libMesh::DiffContext::get_elem_solution(), libMesh::FEMContext::get_element_fe(), libMesh::FEMContext::get_mesh_x_var(), libMesh::FEMContext::get_mesh_y_var(), libMesh::FEMContext::get_mesh_z_var(), libMesh::invalid_uint, libMesh::libmesh_assert(), libMesh::FEMap::map_fe_type(), libMesh::Elem::n_nodes(), n_nodes, libMesh::n_threads(), and libMesh::Elem::point().

Referenced by libMesh::FEMSystem::mesh_position_get().

◆ elem_position_set()

void libMesh::FEMContext::elem_position_set ( Real  theta)
inlineinherited

Uses the coordinate data specified by mesh_*_position configuration to set the geometry of elem to the value it would take after a fraction theta of a timestep.

Definition at line 1288 of file fem_context.h.

1289{
1290 if (_mesh_sys)
1291 this->_do_elem_position_set(theta);
1292}
void _do_elem_position_set(Real theta)
Uses the coordinate data specified by mesh_*_position configuration to set the geometry of elem to th...

References libMesh::FEMContext::_do_elem_position_set(), and libMesh::FEMContext::_mesh_sys.

Referenced by libMesh::FEMContext::elem_edge_reinit(), libMesh::FEMContext::elem_reinit(), libMesh::FEMContext::elem_side_reinit(), and libMesh::FEMSystem::mesh_position_set().

◆ elem_reinit()

void libMesh::FEMContext::elem_reinit ( Real  theta)
overridevirtualinherited

Resets the current time in the context.

Additionally, reinitialize Elem and FE objects if there's a moving mesh present in the system such that the mesh is deformed to its position at \( t_{\theta} \).

Reimplemented from libMesh::DiffContext.

Definition at line 1437 of file fem_context.C.

1438{
1439 // Update the "time" variable of this context object
1440 this->_update_time_from_system(theta);
1441
1442 // Handle a moving element if necessary.
1443 if (_mesh_sys)
1444 {
1445 // We assume that the ``default'' state
1446 // of the mesh is its final, theta=1.0
1447 // position, so we don't bother with
1448 // mesh motion in that case.
1449 if (theta != 1.0)
1450 {
1451 // FIXME - ALE is not threadsafe yet!
1452 libmesh_assert_equal_to (libMesh::n_threads(), 1);
1453
1454 elem_position_set(theta);
1455 }
1457 }
1458}
virtual void elem_fe_reinit(const std::vector< Point > *const pts=nullptr)
Reinitializes interior FE objects on the current geometric element.

References libMesh::FEMContext::_mesh_sys, libMesh::FEMContext::_update_time_from_system(), libMesh::FEMContext::elem_fe_reinit(), libMesh::FEMContext::elem_position_set(), and libMesh::n_threads().

◆ elem_side_reinit()

void libMesh::FEMContext::elem_side_reinit ( Real  theta)
overridevirtualinherited

Resets the current time in the context.

Additionally, reinitialize Elem and FE objects if there's a moving mesh present in the system such that the mesh is deformed to its position at \( t_{\theta} \).

Reimplemented from libMesh::DiffContext.

Definition at line 1461 of file fem_context.C.

1462{
1463 // Update the "time" variable of this context object
1464 this->_update_time_from_system(theta);
1465
1466 // Handle a moving element if necessary
1467 if (_mesh_sys)
1468 {
1469 // FIXME - not threadsafe yet!
1470 elem_position_set(theta);
1472 }
1473}
virtual void side_fe_reinit()
Reinitializes side FE objects on the current geometric element.

References libMesh::FEMContext::_mesh_sys, libMesh::FEMContext::_update_time_from_system(), libMesh::FEMContext::elem_position_set(), and libMesh::FEMContext::side_fe_reinit().

◆ find_hardest_fe_type()

FEType libMesh::FEMContext::find_hardest_fe_type ( )
inherited

Helper function for creating quadrature rules.

Definition at line 85 of file fem_context.C.

86{
87 const System & sys = this->get_system();
88 FEType hardest_fe_type =
89 sys.variable_type(_active_vars ?
90 (*_active_vars)[0] : 0);
91
92 auto check_var = [&hardest_fe_type, &sys](unsigned int v)
93 {
94 FEType fe_type = sys.variable_type(v);
95
96 // Make sure we find a non-SCALAR FE family, even in the case
97 // where the first variable(s) weren't
98 if (hardest_fe_type.family == SCALAR)
99 {
100 hardest_fe_type.family = fe_type.family;
101 hardest_fe_type.order = fe_type.order;
102 }
103
104 // FIXME - we don't yet handle mixed finite elements from
105 // different families which require different quadrature rules
106 // libmesh_assert_equal_to (fe_type.family, hardest_fe_type.family);
107
108 // We need to detect SCALAR's so we can prepare FE objects for
109 // them, and so we don't mistake high order scalars as a reason
110 // to crank up the quadrature order on other types.
111 if (fe_type.family != SCALAR && fe_type.order > hardest_fe_type.order)
112 hardest_fe_type = fe_type;
113 };
114
115 if (_active_vars)
116 for (auto v : *_active_vars)
117 check_var(v);
118 else
119 for (auto v : make_range(sys.n_vars()))
120 check_var(v);
121
122 return hardest_fe_type;
123}

References libMesh::FEMContext::_active_vars, libMesh::FEType::family, libMesh::DiffContext::get_system(), libMesh::make_range(), libMesh::System::n_vars(), libMesh::FEType::order, libMesh::SCALAR, and libMesh::System::variable_type().

Referenced by libMesh::FEMContext::use_default_quadrature_rules(), libMesh::FEMContext::use_quadrature_rules(), and libMesh::FEMContext::use_unweighted_quadrature_rules().

◆ fixed_interior_gradient() [1/2]

Gradient libMesh::FEMContext::fixed_interior_gradient ( unsigned int  var,
unsigned int  qp 
) const
inherited
Returns
The gradient of the fixed_solution variable var at the quadrature point qp on the current element interior.
Note
This API is currently present for backward compatibility.

Definition at line 1106 of file fem_context.C.

1107{
1108 Gradient du;
1109
1110 this->fixed_interior_gradient( var, qp, du );
1111
1112 return du;
1113}
Gradient fixed_interior_gradient(unsigned int var, unsigned int qp) const
NumberVectorValue Gradient

References libMesh::FEMContext::fixed_interior_gradient().

Referenced by libMesh::FEMContext::fixed_interior_gradient().

◆ fixed_interior_gradient() [2/2]

template<typename OutputType >
void libMesh::FEMContext::fixed_interior_gradient ( unsigned int  var,
unsigned int  qp,
OutputType &  grad_u 
) const
inherited
Returns
The gradient of the fixed_solution variable var at the quadrature point qp on the current element interior.
Note
This is the preferred API.

Definition at line 1117 of file fem_context.C.

1119{
1120 this->some_gradient
1121 <OutputType,
1123 <typename TensorTools::MakeReal
1124 <typename TensorTools::DecrementRank
1125 <OutputType>::type>::type>,
1127 (var, qp, du);
1128}
const DenseVector< Number > & get_elem_fixed_solution() const
Accessor for element fixed solution.
void some_gradient(unsigned int var, unsigned int qp, OutputType &u) const
Helper function to reduce some code duplication in the *interior_gradient methods.

References libMesh::DiffContext::get_elem_fixed_solution(), libMesh::FEMContext::get_element_fe(), and libMesh::FEMContext::some_gradient().

◆ fixed_interior_hessian() [1/2]

Tensor libMesh::FEMContext::fixed_interior_hessian ( unsigned int  var,
unsigned int  qp 
) const
inherited
Returns
The hessian of the fixed_solution variable var at the quadrature point qp on the current element interior.
Note
This API is currently present for backward compatibility.

Definition at line 1133 of file fem_context.C.

1134{
1135 Tensor d2u;
1136
1137 this->fixed_interior_hessian( var, qp, d2u );
1138
1139 return d2u;
1140}
Tensor fixed_interior_hessian(unsigned int var, unsigned int qp) const
NumberTensorValue Tensor

References libMesh::FEMContext::fixed_interior_hessian().

Referenced by libMesh::FEMContext::fixed_interior_hessian().

◆ fixed_interior_hessian() [2/2]

template<typename OutputType >
void libMesh::FEMContext::fixed_interior_hessian ( unsigned int  var,
unsigned int  qp,
OutputType &  hess_u 
) const
inherited
Returns
The hessian of the fixed_solution variable var at the quadrature point qp on the current element interior.
Note
This is the preferred API.

Definition at line 1144 of file fem_context.C.

1146{
1147 this->some_hessian<OutputType,
1149 <typename TensorTools::MakeReal
1150 <typename TensorTools::DecrementRank
1151 <typename TensorTools::DecrementRank
1152 <OutputType>::type>::type>::type>,
1154}
void some_hessian(unsigned int var, unsigned int qp, OutputType &u) const
Helper function to reduce some code duplication in the *interior_hessian methods.

References libMesh::DiffContext::get_elem_fixed_solution(), libMesh::FEMContext::get_element_fe(), and libMesh::FEMContext::some_hessian().

◆ fixed_interior_value() [1/2]

Number libMesh::FEMContext::fixed_interior_value ( unsigned int  var,
unsigned int  qp 
) const
inherited
Returns
The value of the fixed_solution variable var at the quadrature point qp on the current element interior.
Note
This API is currently present for backward compatibility.

Definition at line 1083 of file fem_context.C.

1084{
1085 Number u = 0.;
1086
1087 this->fixed_interior_value( var, qp, u );
1088
1089 return u;
1090}
Number fixed_interior_value(unsigned int var, unsigned int qp) const

References libMesh::FEMContext::fixed_interior_value().

Referenced by libMesh::FEMContext::fixed_interior_value().

◆ fixed_interior_value() [2/2]

template<typename OutputType >
void libMesh::FEMContext::fixed_interior_value ( unsigned int  var,
unsigned int  qp,
OutputType &  u 
) const
inherited
Returns
The value of the fixed_solution variable var at the quadrature point qp on the current element interior.
Note
This is the preferred API.

Definition at line 1095 of file fem_context.C.

1097{
1098 this->some_value<OutputType,
1102}
void some_value(unsigned int var, unsigned int qp, OutputType &u) const
Helper function to reduce some code duplication in the *interior_value methods.

References libMesh::DiffContext::get_elem_fixed_solution(), libMesh::FEMContext::get_element_fe(), and libMesh::FEMContext::some_value().

◆ fixed_point_gradient() [1/2]

Gradient libMesh::FEMContext::fixed_point_gradient ( unsigned int  var,
const Point &  p 
) const
inherited
Returns
The gradient of the fixed_solution variable var at the physical point p on the current element.
Note
This API is currently present for backward compatibility.

Definition at line 1279 of file fem_context.C.

1280{
1281 Gradient grad_u;
1282
1283 this->fixed_point_gradient( var, p, grad_u );
1284
1285 return grad_u;
1286}
Gradient fixed_point_gradient(unsigned int var, const Point &p) const

References libMesh::FEMContext::fixed_point_gradient().

Referenced by libMesh::FEMContext::fixed_point_gradient().

◆ fixed_point_gradient() [2/2]

template<typename OutputType >
void libMesh::FEMContext::fixed_point_gradient ( unsigned int  var,
const Point &  p,
OutputType &  grad_u,
const Real  tolerance = TOLERANCE 
) const
inherited
Returns
The gradient of the fixed_solution variable var at the physical point p on the current element.
Note
This is the preferred API.

Allows evaluation of points within a relative tolerance outside the element.

Definition at line 1291 of file fem_context.C.

1295{
1296 typedef typename TensorTools::MakeReal
1298 OutputShape;
1299
1300 // Get local-to-global dof index lookup
1301 const unsigned int n_dofs = cast_int<unsigned int>
1302 (this->get_dof_indices(var).size());
1303
1304 // Get current local coefficients
1305 libmesh_assert_greater (_elem_fixed_subsolutions.size(), var);
1306 const DenseSubVector<Number> & coef = this->get_elem_fixed_solution(var);
1307
1308 // Get finite element object
1309 FEGenericBase<OutputShape> * fe = nullptr;
1310 this->get_element_fe<OutputShape>( var, fe, this->get_elem_dim() );
1311
1312 // Build a FE for calculating u(p)
1313 FEGenericBase<OutputShape> * fe_new =
1314 this->build_new_fe( fe, p, tolerance, 1 );
1315
1316 // Get the values of the shape function derivatives
1317 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputGradient>> & dphi = fe_new->get_dphi();
1318
1319 grad_u = 0.0;
1320
1321 for (unsigned int l=0; l != n_dofs; l++)
1322 grad_u.add_scaled(dphi[l][0], coef(l));
1323
1324 return;
1325}
std::vector< DenseSubVector< Number > > _elem_fixed_subsolutions
const std::vector< dof_id_type > & get_dof_indices() const
Accessor for element dof indices.
FEGenericBase< OutputShape > * build_new_fe(const FEGenericBase< OutputShape > *fe, const Point &p, const Real tolerance=TOLERANCE, const int get_derivative_level=-1) const
Helper function to reduce some code duplication in the *_point_* methods.

References libMesh::DiffContext::_elem_fixed_subsolutions, libMesh::FEMContext::build_new_fe(), libMesh::DiffContext::get_dof_indices(), libMesh::FEGenericBase< OutputType >::get_dphi(), libMesh::FEMContext::get_elem_dim(), and libMesh::DiffContext::get_elem_fixed_solution().

◆ fixed_point_hessian() [1/2]

Tensor libMesh::FEMContext::fixed_point_hessian ( unsigned int  var,
const Point &  p 
) const
inherited
Returns
The hessian of the fixed_solution variable var at the physical point p on the current element.
Note
This API is currently present for backward compatibility.

Definition at line 1330 of file fem_context.C.

1331{
1332 Tensor hess_u;
1333
1334 this->fixed_point_hessian( var, p, hess_u );
1335
1336 return hess_u;
1337}
Tensor fixed_point_hessian(unsigned int var, const Point &p) const

References libMesh::FEMContext::fixed_point_hessian().

Referenced by libMesh::FEMContext::fixed_point_hessian().

◆ fixed_point_hessian() [2/2]

template<typename OutputType >
void libMesh::FEMContext::fixed_point_hessian ( unsigned int  var,
const Point &  p,
OutputType &  hess_u,
const Real  tolerance = TOLERANCE 
) const
inherited
Returns
The hessian of the fixed_solution variable var at the physical point p on the current element.
Note
This is the preferred API.

Allows evaluation of points within a relative tolerance outside the element.

Definition at line 1342 of file fem_context.C.

1346{
1347 typedef typename TensorTools::DecrementRank<OutputType>::type Rank1Decrement;
1348 typedef typename TensorTools::DecrementRank<Rank1Decrement>::type Rank2Decrement;
1349 typedef typename TensorTools::MakeReal<Rank2Decrement>::type OutputShape;
1350
1351 // Get local-to-global dof index lookup
1352 const unsigned int n_dofs = cast_int<unsigned int>
1353 (this->get_dof_indices(var).size());
1354
1355 // Get current local coefficients
1356 libmesh_assert_greater (_elem_fixed_subsolutions.size(), var);
1357 const DenseSubVector<Number> & coef = this->get_elem_fixed_solution(var);
1358
1359 // Get finite element object
1360 FEGenericBase<OutputShape> * fe = nullptr;
1361 this->get_element_fe<OutputShape>( var, fe, this->get_elem_dim() );
1362
1363 // Build a FE for calculating u(p)
1364 FEGenericBase<OutputShape> * fe_new =
1365 this->build_new_fe( fe, p, tolerance, 2 );
1366
1367 // Get the values of the shape function derivatives
1368 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputTensor>> & d2phi = fe_new->get_d2phi();
1369
1370 hess_u = 0.0;
1371
1372 for (unsigned int l=0; l != n_dofs; l++)
1373 hess_u.add_scaled(d2phi[l][0], coef(l));
1374
1375 return;
1376}

References libMesh::DiffContext::_elem_fixed_subsolutions, libMesh::FEMContext::build_new_fe(), libMesh::FEGenericBase< OutputType >::get_d2phi(), libMesh::DiffContext::get_dof_indices(), libMesh::FEMContext::get_elem_dim(), and libMesh::DiffContext::get_elem_fixed_solution().

◆ fixed_point_value() [1/2]

Number libMesh::FEMContext::fixed_point_value ( unsigned int  var,
const Point &  p 
) const
inherited
Returns
The value of the fixed_solution variable var at the physical point p on the current element.
Note
This API is currently present for backward compatibility.

Definition at line 1233 of file fem_context.C.

1234{
1235 Number u = 0.;
1236
1237 this->fixed_point_value( var, p, u );
1238
1239 return u;
1240}
Number fixed_point_value(unsigned int var, const Point &p) const

References libMesh::FEMContext::fixed_point_value().

Referenced by libMesh::FEMContext::fixed_point_value().

◆ fixed_point_value() [2/2]

template<typename OutputType >
void libMesh::FEMContext::fixed_point_value ( unsigned int  var,
const Point &  p,
OutputType &  u,
const Real  tolerance = TOLERANCE 
) const
inherited
Returns
The value of the fixed_solution variable var at the physical point p on the current element.
Note
This is the preferred API.

Allows evaluation of points within a relative tolerance outside the element.

Definition at line 1243 of file fem_context.C.

1247{
1248 typedef typename TensorTools::MakeReal<OutputType>::type OutputShape;
1249
1250 // Get local-to-global dof index lookup
1251 const unsigned int n_dofs = cast_int<unsigned int>
1252 (this->get_dof_indices(var).size());
1253
1254 // Get current local coefficients
1255 libmesh_assert_greater (_elem_fixed_subsolutions.size(), var);
1256 const DenseSubVector<Number> & coef = this->get_elem_fixed_solution(var);
1257
1258 // Get finite element object
1259 FEGenericBase<OutputShape> * fe = nullptr;
1260 this->get_element_fe<OutputShape>( var, fe, this->get_elem_dim() );
1261
1262 // Build a FE for calculating u(p)
1263 FEGenericBase<OutputShape> * fe_new =
1264 this->build_new_fe( fe, p, tolerance, 0 );
1265
1266 // Get the values of the shape function derivatives
1267 const std::vector<std::vector<OutputShape>> & phi = fe_new->get_phi();
1268
1269 u = 0.;
1270
1271 for (unsigned int l=0; l != n_dofs; l++)
1272 u += phi[l][0] * coef(l);
1273
1274 return;
1275}

References libMesh::DiffContext::_elem_fixed_subsolutions, libMesh::FEMContext::build_new_fe(), libMesh::DiffContext::get_dof_indices(), libMesh::FEMContext::get_elem_dim(), libMesh::DiffContext::get_elem_fixed_solution(), and libMesh::FEGenericBase< OutputType >::get_phi().

◆ fixed_side_gradient() [1/2]

Gradient libMesh::FEMContext::fixed_side_gradient ( unsigned int  var,
unsigned int  qp 
) const
inherited
Returns
The gradient of the fixed_solution variable var at the quadrature point qp on the current element side.
Note
This API is currently present for backward compatibility.

Definition at line 1183 of file fem_context.C.

1184{
1185 Gradient du;
1186
1187 this->fixed_side_gradient( var, qp, du );
1188
1189 return du;
1190}
Gradient fixed_side_gradient(unsigned int var, unsigned int qp) const

References libMesh::FEMContext::fixed_side_gradient().

Referenced by libMesh::FEMContext::fixed_side_gradient().

◆ fixed_side_gradient() [2/2]

template<typename OutputType >
void libMesh::FEMContext::fixed_side_gradient ( unsigned int  var,
unsigned int  qp,
OutputType &  grad_u 
) const
inherited
Returns
The gradient of the fixed_solution variable var at the quadrature point qp on the current element side.
Note
This is the preferred API.

Definition at line 1194 of file fem_context.C.

1196{
1197 this->some_gradient<OutputType,
1199 <typename TensorTools::MakeReal
1200 <typename TensorTools::DecrementRank
1201 <OutputType>::type>::type>,
1203}
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...

References libMesh::DiffContext::get_elem_fixed_solution(), libMesh::FEMContext::get_side_fe(), and libMesh::FEMContext::some_gradient().

◆ fixed_side_hessian() [1/2]

Tensor libMesh::FEMContext::fixed_side_hessian ( unsigned int  var,
unsigned int  qp 
) const
inherited
Returns
The hessian of the fixed_solution variable var at the quadrature point qp on the current element side.
Note
This API is currently present for backward compatibility.

Definition at line 1208 of file fem_context.C.

1209{
1210 Tensor d2u;
1211
1212 this->fixed_side_hessian( var, qp, d2u );
1213
1214 return d2u;
1215}
Tensor fixed_side_hessian(unsigned int var, unsigned int qp) const

References libMesh::FEMContext::fixed_side_hessian().

Referenced by libMesh::FEMContext::fixed_side_hessian().

◆ fixed_side_hessian() [2/2]

template<typename OutputType >
void libMesh::FEMContext::fixed_side_hessian ( unsigned int  var,
unsigned int  qp,
OutputType &  hess_u 
) const
inherited
Returns
The hessian of the fixed_solution variable var at the quadrature point qp on the current element side.
Note
This is the preferred API.

Definition at line 1218 of file fem_context.C.

1220{
1221 this->some_hessian<OutputType,
1223 <typename TensorTools::MakeReal
1224 <typename TensorTools::DecrementRank
1225 <typename TensorTools::DecrementRank
1226 <OutputType>::type>::type>::type>,
1228}

References libMesh::DiffContext::get_elem_fixed_solution(), libMesh::FEMContext::get_side_fe(), and libMesh::FEMContext::some_hessian().

◆ fixed_side_value() [1/2]

Number libMesh::FEMContext::fixed_side_value ( unsigned int  var,
unsigned int  qp 
) const
inherited
Returns
The value of the fixed_solution variable var at the quadrature point qp on the current element side.
Note
This API is currently present for backward compatibility.

Definition at line 1159 of file fem_context.C.

1160{
1161 Number u = 0.;
1162
1163 this->fixed_side_value( var, qp, u );
1164
1165 return u;
1166}
Number fixed_side_value(unsigned int var, unsigned int qp) const

References libMesh::FEMContext::fixed_side_value().

Referenced by libMesh::FEMContext::fixed_side_value().

◆ fixed_side_value() [2/2]

template<typename OutputType >
void libMesh::FEMContext::fixed_side_value ( unsigned int  var,
unsigned int  qp,
OutputType &  u 
) const
inherited
Returns
The value of the fixed_solution variable var at the quadrature point qp on the current element side.
Note
This is the preferred API.

Definition at line 1170 of file fem_context.C.

1172{
1173 this->some_value
1174 <OutputType,
1178 (var, qp, u);
1179}

References libMesh::DiffContext::get_elem_fixed_solution(), libMesh::FEMContext::get_side_fe(), and libMesh::FEMContext::some_value().

◆ get_deltat_value()

Real libMesh::DiffContext::get_deltat_value ( )
inherited
Returns
The value currently pointed to by this class's _deltat member

Definition at line 117 of file diff_context.C.

118{
120
121 return *_deltat;
122}
Real * _deltat
Defaults to nullptr, can optionally be used to point to a timestep value in the System-derived class ...

References libMesh::DiffContext::_deltat, and libMesh::libmesh_assert().

Referenced by libMesh::FEMContext::_update_time_from_system().

◆ get_dim()

unsigned char libMesh::FEMContext::get_dim ( ) const
inlineinherited

Accessor for cached mesh dimension.

This is the largest dimension of the elements in the mesh. For the dimension of this->_elem, use get_elem_dim();

Definition at line 954 of file fem_context.h.

955 { return this->_dim; }

References libMesh::FEMContext::_dim.

Referenced by libMesh::VariationalSmootherSystem::element_time_derivative(), neighbor_side_fe_reinit(), and SolidSystem::side_time_derivative().

◆ get_dof_indices() [1/4]

std::vector< dof_id_type > & libMesh::DiffContext::get_dof_indices ( )
inlineinherited

Non-const accessor for element dof indices.

Definition at line 369 of file diff_context.h.

370 { return _dof_indices; }
std::vector< dof_id_type > _dof_indices
Global Degree of freedom index lists.

References libMesh::DiffContext::_dof_indices.

◆ get_dof_indices() [2/4]

const std::vector< dof_id_type > & libMesh::DiffContext::get_dof_indices ( ) const
inlineinherited

Accessor for element dof indices.

Definition at line 363 of file diff_context.h.

364 { return _dof_indices; }

References libMesh::DiffContext::_dof_indices.

Referenced by libMesh::NewmarkSolver::_general_residual(), libMesh::Euler2Solver::_general_residual(), libMesh::EulerSolver::_general_residual(), libMesh::RBConstruction::add_scaled_matrix_and_vector(), assembly_with_dg_fem_context(), AssemblyF0::boundary_assembly(), AssemblyF1::boundary_assembly(), AssemblyF2::boundary_assembly(), AssemblyA0::boundary_assembly(), AssemblyA1::boundary_assembly(), AssemblyA2::boundary_assembly(), A2::boundary_assembly(), A3::boundary_assembly(), F0::boundary_assembly(), Output0::boundary_assembly(), libMesh::FirstOrderUnsteadySolver::compute_second_order_eqns(), SecondOrderScalarSystemSecondOrderTimeSolverBase::damping_residual(), SecondOrderScalarSystemFirstOrderTimeSolverBase::damping_residual(), FirstOrderScalarSystemBase::element_time_derivative(), SecondOrderScalarSystemFirstOrderTimeSolverBase::element_time_derivative(), libMesh::FEMContext::fixed_point_gradient(), libMesh::FEMContext::fixed_point_hessian(), libMesh::FEMContext::fixed_point_value(), A0::interior_assembly(), A1::interior_assembly(), A2::interior_assembly(), F0::interior_assembly(), OutputAssembly::interior_assembly(), B::interior_assembly(), M0::interior_assembly(), EIM_IP_assembly::interior_assembly(), EIM_F::interior_assembly(), AssemblyA0::interior_assembly(), AssemblyA1::interior_assembly(), AssemblyA2::interior_assembly(), InnerProductAssembly::interior_assembly(), AssemblyEIM::interior_assembly(), AssemblyF0::interior_assembly(), AssemblyF1::interior_assembly(), Ex6InnerProduct::interior_assembly(), AcousticsInnerProduct::interior_assembly(), libMesh::FEMContext::interior_curl(), libMesh::FEMContext::interior_div(), libMesh::FEMContext::interior_gradients(), libMesh::FEMContext::interior_hessians(), libMesh::FEMContext::interior_values(), libMesh::FEMPhysics::mass_residual(), FirstOrderScalarSystemBase::mass_residual(), SecondOrderScalarSystemSecondOrderTimeSolverBase::mass_residual(), SecondOrderScalarSystemFirstOrderTimeSolverBase::mass_residual(), libMesh::FEMSystem::mesh_position_get(), neighbor_side_fe_reinit(), libMesh::DifferentiablePhysics::nonlocal_mass_residual(), libMesh::FEMSystem::numerical_jacobian(), libMesh::FEMContext::point_curl(), libMesh::FEMContext::point_gradient(), libMesh::FEMContext::point_hessian(), libMesh::FEMContext::point_value(), libMesh::FEMContext::pre_fe_reinit(), OverlappingCouplingGhostingTest::run_sparsity_pattern_test(), libMesh::FEMContext::side_gradient(), libMesh::FEMContext::side_gradients(), libMesh::FEMContext::side_hessians(), libMesh::FEMContext::side_values(), libMesh::FEMContext::some_gradient(), libMesh::FEMContext::some_hessian(), and libMesh::FEMContext::some_value().

◆ get_dof_indices() [3/4]

std::vector< dof_id_type > & libMesh::DiffContext::get_dof_indices ( unsigned int  var)
inlineinherited

Accessor for element dof indices of a particular variable corresponding to the index argument.

Definition at line 386 of file diff_context.h.

387 {
388 libmesh_assert_greater(_dof_indices_var.size(), var);
389 return _dof_indices_var[var];
390 }
std::vector< std::vector< dof_id_type > > _dof_indices_var

References libMesh::DiffContext::_dof_indices_var.

◆ get_dof_indices() [4/4]

const std::vector< dof_id_type > & libMesh::DiffContext::get_dof_indices ( unsigned int  var) const
inlineinherited

Accessor for element dof indices of a particular variable corresponding to the index argument.

Definition at line 376 of file diff_context.h.

377 {
378 libmesh_assert_greater(_dof_indices_var.size(), var);
379 return _dof_indices_var[var];
380 }

References libMesh::DiffContext::_dof_indices_var.

◆ get_edge()

unsigned char libMesh::FEMContext::get_edge ( ) const
inlineinherited

Accessor for current edge of Elem object.

Definition at line 946 of file fem_context.h.

947 { return edge; }
unsigned char edge
Current edge for edge_* to examine.

References libMesh::FEMContext::edge.

Referenced by libMesh::FEMContext::edge_fe_reinit().

◆ get_edge_fe() [1/3]

FEBase * libMesh::FEMContext::get_edge_fe ( unsigned int  var) const
inlineinherited

Accessor for edge (3D only!) finite element object for scalar-valued variable var.

Definition at line 1364 of file fem_context.h.

1365{
1366 libmesh_assert_less ( var, _edge_fe_var.size() );
1367 return cast_ptr<FEBase *>( _edge_fe_var[var] );
1368}
std::vector< FEAbstract * > _edge_fe_var

References libMesh::FEMContext::_edge_fe_var.

◆ get_edge_fe() [2/3]

void libMesh::FEMContext::get_edge_fe ( unsigned int  var,
FEAbstract *&  fe 
) const
inlineinherited

Definition at line 1357 of file fem_context.h.

1358{
1359 libmesh_assert_less ( var, _edge_fe_var.size() );
1360 fe = _edge_fe_var[var];
1361}

References libMesh::FEMContext::_edge_fe_var.

◆ get_edge_fe() [3/3]

template<typename OutputShape >
void libMesh::FEMContext::get_edge_fe ( unsigned int  var,
FEGenericBase< OutputShape > *&  fe 
) const
inlineinherited

Accessor for edge (3D only!) finite element object for variable var.

Definition at line 1350 of file fem_context.h.

1351{
1352 libmesh_assert_less ( var, _edge_fe_var.size() );
1353 fe = cast_ptr<FEGenericBase<OutputShape> *>( _edge_fe_var[var] );
1354}

References libMesh::FEMContext::_edge_fe_var.

Referenced by libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::SubFunctor::SubFunctor().

◆ get_edge_qrule()

const QBase & libMesh::FEMContext::get_edge_qrule ( ) const
inlineinherited

Accessor for element edge quadrature rule.

Definition at line 849 of file fem_context.h.

850 { return *(this->_edge_qrule); }

References libMesh::FEMContext::_edge_qrule.

◆ get_elem() [1/2]

Elem & libMesh::FEMContext::get_elem ( )
inlineinherited

Accessor for current Elem object.

Definition at line 933 of file fem_context.h.

934 { libmesh_assert(this->_elem);
935 return *(const_cast<Elem *>(this->_elem)); }
const Elem * _elem
Current element for element_* to examine.

References libMesh::FEMContext::_elem, and libMesh::libmesh_assert().

◆ get_elem() [2/2]

const Elem & libMesh::FEMContext::get_elem ( ) const
inlineinherited

Accessor for current Elem object.

Definition at line 926 of file fem_context.h.

927 { libmesh_assert(this->_elem);
928 return *(this->_elem); }

References libMesh::FEMContext::_elem, and libMesh::libmesh_assert().

Referenced by libMesh::FEMContext::_do_elem_position_set(), libMesh::RBConstruction::add_scaled_matrix_and_vector(), AssemblyF0::boundary_assembly(), AssemblyF1::boundary_assembly(), AssemblyF2::boundary_assembly(), AssemblyA0::boundary_assembly(), AssemblyA1::boundary_assembly(), AssemblyA2::boundary_assembly(), libMesh::FEMContext::build_new_fe(), libMesh::FEMContext::cached_fe(), libMesh::OldSolutionBase< Output, point_output >::check_old_context(), libMesh::OldSolutionBase< Output, point_output >::check_old_context(), libMesh::FEMContext::elem_position_get(), HeatSystem::element_time_derivative(), SolidSystem::element_time_derivative(), HilbertSystem::element_time_derivative(), libMesh::VariationalSmootherSystem::element_time_derivative(), libMesh::OldSolutionValue< Output, point_output >::eval_at_node(), libMesh::OldSolutionCoefs< Output, point_output >::eval_at_node(), libMesh::OldSolutionValue< Output, point_output >::eval_at_node(), libMesh::OldSolutionCoefs< Output, point_output >::eval_at_node(), libMesh::FEMContext::has_side_boundary_id(), libMesh::RBEIMConstruction::initialize_qp_data(), OutputAssembly::interior_assembly(), A0::interior_assembly(), A1::interior_assembly(), EIM_F::interior_assembly(), AssemblyEIM::interior_assembly(), libMesh::FEMSystem::mesh_position_set(), libMesh::FEMSystem::numerical_jacobian(), SlitFunc::operator()(), libMesh::FEMContext::pre_fe_reinit(), libMesh::FEMContext::side_boundary_ids(), NavierSystem::side_constraint(), and SolidSystem::side_time_derivative().

◆ get_elem_dim()

unsigned char libMesh::FEMContext::get_elem_dim ( ) const
inlineinherited
Returns
The dimension of this->_elem. For mixed dimension meshes, this may be different from get_dim(). If no element init has happened yet, fall back on get_dim().

Definition at line 962 of file fem_context.h.

963 { return this->_elem ? this->_elem_dim : this->_dim; }
unsigned char _elem_dim
Cached dimension of this->_elem.

References libMesh::FEMContext::_dim, libMesh::FEMContext::_elem, and libMesh::FEMContext::_elem_dim.

Referenced by libMesh::FEMContext::_do_elem_position_set(), libMesh::FEMContext::edge_fe_reinit(), libMesh::FEMContext::elem_fe_reinit(), libMesh::FEMContext::elem_position_get(), libMesh::RBEIMConstruction::enrich_eim_approximation_on_interiors(), libMesh::FEMContext::fixed_point_gradient(), libMesh::FEMContext::fixed_point_hessian(), libMesh::FEMContext::fixed_point_value(), libMesh::FEMContext::get_element_fe(), libMesh::FEMContext::get_element_fe(), libMesh::FEMContext::get_element_qrule(), libMesh::FEMContext::get_side_fe(), libMesh::FEMContext::get_side_fe(), libMesh::FEMContext::get_side_qrule(), libMesh::FEMContext::interior_curl(), libMesh::FEMContext::interior_div(), libMesh::FEMContext::interior_gradients(), libMesh::FEMContext::interior_hessians(), libMesh::FEMContext::interior_values(), libMesh::FEMContext::point_curl(), libMesh::FEMContext::point_gradient(), libMesh::FEMContext::point_hessian(), libMesh::FEMContext::point_value(), libMesh::RBParametrizedFunction::preevaluate_parametrized_function_on_mesh(), libMesh::FEMContext::side_fe_reinit(), libMesh::FEMContext::side_gradient(), libMesh::FEMContext::side_gradients(), libMesh::FEMContext::side_hessians(), libMesh::FEMContext::side_values(), libMesh::FEMContext::some_gradient(), libMesh::FEMContext::some_hessian(), and libMesh::FEMContext::some_value().

◆ get_elem_elem_jacobian() [1/4]

DenseMatrix< Number > & libMesh::DGFEMContext::get_elem_elem_jacobian ( )
inline

Non-const accessor for element-element Jacobian.

Definition at line 116 of file dg_fem_context.h.

117 { return _elem_elem_jacobian; }

References _elem_elem_jacobian.

◆ get_elem_elem_jacobian() [2/4]

const DenseMatrix< Number > & libMesh::DGFEMContext::get_elem_elem_jacobian ( ) const
inline

Const accessor for element-element Jacobian.

Definition at line 110 of file dg_fem_context.h.

111 { return _elem_elem_jacobian; }

References _elem_elem_jacobian.

Referenced by libMesh::RBConstruction::add_scaled_matrix_and_vector(), and assembly_with_dg_fem_context().

◆ get_elem_elem_jacobian() [3/4]

DenseSubMatrix< Number > & libMesh::DGFEMContext::get_elem_elem_jacobian ( unsigned int  var1,
unsigned int  var2 
)
inline

Non-const accessor for element-element Jacobian of particular variables corresponding to the variable index arguments.

Definition at line 130 of file dg_fem_context.h.

131 { return *(_elem_elem_subjacobians[var1][var2]); }

References _elem_elem_subjacobians.

◆ get_elem_elem_jacobian() [4/4]

const DenseSubMatrix< Number > & libMesh::DGFEMContext::get_elem_elem_jacobian ( unsigned int  var1,
unsigned int  var2 
) const
inline

Const accessor for element-element Jacobian of particular variables corresponding to the variable index arguments.

Definition at line 123 of file dg_fem_context.h.

124 { return *(_elem_elem_subjacobians[var1][var2]); }

References _elem_elem_subjacobians.

◆ get_elem_fixed_solution() [1/4]

DenseVector< Number > & libMesh::DiffContext::get_elem_fixed_solution ( )
inlineinherited

Non-const accessor for element fixed solution.

Definition at line 216 of file diff_context.h.

217 { return _elem_fixed_solution; }
DenseVector< Number > _elem_fixed_solution
Element by element components of nonlinear_solution at a fixed point in a timestep,...

References libMesh::DiffContext::_elem_fixed_solution.

◆ get_elem_fixed_solution() [2/4]

const DenseVector< Number > & libMesh::DiffContext::get_elem_fixed_solution ( ) const
inlineinherited

◆ get_elem_fixed_solution() [3/4]

DenseSubVector< Number > & libMesh::DiffContext::get_elem_fixed_solution ( unsigned int  var)
inlineinherited

Accessor for element fixed solution of a particular variable corresponding to the variable index argument.

Definition at line 233 of file diff_context.h.

234 {
235 libmesh_assert_greater(_elem_fixed_subsolutions.size(), var);
236 return _elem_fixed_subsolutions[var];
237 }

References libMesh::DiffContext::_elem_fixed_subsolutions.

◆ get_elem_fixed_solution() [4/4]

const DenseSubVector< Number > & libMesh::DiffContext::get_elem_fixed_solution ( unsigned int  var) const
inlineinherited

Accessor for element fixed solution of a particular variable corresponding to the variable index argument.

Definition at line 223 of file diff_context.h.

224 {
225 libmesh_assert_greater(_elem_fixed_subsolutions.size(), var);
226 return _elem_fixed_subsolutions[var];
227 }

References libMesh::DiffContext::_elem_fixed_subsolutions.

◆ get_elem_jacobian() [1/4]

DenseMatrix< Number > & libMesh::DiffContext::get_elem_jacobian ( )
inlineinherited

Non-const accessor for element Jacobian.

Definition at line 283 of file diff_context.h.

284 {
286 return _elem_jacobian;
287 }
DenseMatrix< Number > _elem_jacobian
Element jacobian: derivatives of elem_residual with respect to elem_solution.
const bool _have_local_matrices
Whether we have local matrices allocated/initialized.

References libMesh::DiffContext::_elem_jacobian, libMesh::DiffContext::_have_local_matrices, and libMesh::libmesh_assert().

◆ get_elem_jacobian() [2/4]

const DenseMatrix< Number > & libMesh::DiffContext::get_elem_jacobian ( ) const
inlineinherited

Const accessor for element Jacobian.

Definition at line 274 of file diff_context.h.

275 {
277 return _elem_jacobian;
278 }

References libMesh::DiffContext::_elem_jacobian, libMesh::DiffContext::_have_local_matrices, and libMesh::libmesh_assert().

Referenced by libMesh::NewmarkSolver::_general_residual(), libMesh::Euler2Solver::_general_residual(), libMesh::EulerSolver::_general_residual(), libMesh::RBConstruction::add_scaled_matrix_and_vector(), libMesh::FEMSystem::assembly(), assembly_with_dg_fem_context(), AssemblyA0::boundary_assembly(), AssemblyA1::boundary_assembly(), AssemblyA2::boundary_assembly(), A2::boundary_assembly(), A3::boundary_assembly(), libMesh::FirstOrderUnsteadySolver::compute_second_order_eqns(), SecondOrderScalarSystemSecondOrderTimeSolverBase::damping_residual(), SecondOrderScalarSystemFirstOrderTimeSolverBase::damping_residual(), CoupledSystem::element_constraint(), NavierSystem::element_constraint(), libMesh::EigenTimeSolver::element_residual(), LaplaceSystem::element_time_derivative(), CoupledSystem::element_time_derivative(), HeatSystem::element_time_derivative(), PoissonSystem::element_time_derivative(), NavierSystem::element_time_derivative(), SolidSystem::element_time_derivative(), ElasticitySystem::element_time_derivative(), CurlCurlSystem::element_time_derivative(), SigmaPhysics::element_time_derivative(), NonlinearDiffusionSystem::element_time_derivative(), HilbertSystem::element_time_derivative(), libMesh::VariationalSmootherSystem::element_time_derivative(), A0::interior_assembly(), A1::interior_assembly(), A2::interior_assembly(), B::interior_assembly(), M0::interior_assembly(), EIM_IP_assembly::interior_assembly(), AssemblyA0::interior_assembly(), AssemblyA1::interior_assembly(), AssemblyA2::interior_assembly(), InnerProductAssembly::interior_assembly(), AssemblyEIM::interior_assembly(), Ex6InnerProduct::interior_assembly(), AcousticsInnerProduct::interior_assembly(), libMesh::FEMPhysics::mass_residual(), NavierSystem::mass_residual(), ElasticitySystem::mass_residual(), FirstOrderScalarSystemBase::mass_residual(), SecondOrderScalarSystemSecondOrderTimeSolverBase::mass_residual(), SecondOrderScalarSystemFirstOrderTimeSolverBase::mass_residual(), libMesh::DifferentiablePhysics::nonlocal_mass_residual(), libMesh::EigenTimeSolver::nonlocal_residual(), libMesh::FEMSystem::numerical_jacobian(), libMesh::FEMContext::pre_fe_reinit(), OverlappingCouplingGhostingTest::run_sparsity_pattern_test(), LaplaceSystem::side_constraint(), NavierSystem::side_constraint(), libMesh::EigenTimeSolver::side_residual(), SolidSystem::side_time_derivative(), and CurlCurlSystem::side_time_derivative().

◆ get_elem_jacobian() [3/4]

DenseSubMatrix< Number > & libMesh::DiffContext::get_elem_jacobian ( unsigned int  var1,
unsigned int  var2 
)
inlineinherited

Non-const accessor for element Jacobian of particular variables corresponding to the variable index arguments.

Only available if _have_local_matrices

Definition at line 306 of file diff_context.h.

307 {
309 libmesh_assert_greater(_elem_subjacobians.size(), var1);
310 libmesh_assert_greater(_elem_subjacobians[var1].size(), var2);
311 return _elem_subjacobians[var1][var2];
312 }
std::vector< std::vector< DenseSubMatrix< Number > > > _elem_subjacobians

References libMesh::DiffContext::_elem_subjacobians, libMesh::DiffContext::_have_local_matrices, and libMesh::libmesh_assert().

◆ get_elem_jacobian() [4/4]

const DenseSubMatrix< Number > & libMesh::DiffContext::get_elem_jacobian ( unsigned int  var1,
unsigned int  var2 
) const
inlineinherited

Const accessor for element Jacobian of particular variables corresponding to the variable index arguments.

Definition at line 293 of file diff_context.h.

294 {
296 libmesh_assert_greater(_elem_subjacobians.size(), var1);
297 libmesh_assert_greater(_elem_subjacobians[var1].size(), var2);
298 return _elem_subjacobians[var1][var2];
299 }

References libMesh::DiffContext::_elem_subjacobians, libMesh::DiffContext::_have_local_matrices, and libMesh::libmesh_assert().

◆ get_elem_neighbor_jacobian() [1/4]

DenseMatrix< Number > & libMesh::DGFEMContext::get_elem_neighbor_jacobian ( )
inline

Non-const accessor for element -neighborJacobian.

Definition at line 142 of file dg_fem_context.h.

143 { return _elem_neighbor_jacobian; }

References _elem_neighbor_jacobian.

◆ get_elem_neighbor_jacobian() [2/4]

const DenseMatrix< Number > & libMesh::DGFEMContext::get_elem_neighbor_jacobian ( ) const
inline

Const accessor for element-neighbor Jacobian.

Definition at line 136 of file dg_fem_context.h.

137 { return _elem_neighbor_jacobian; }

References _elem_neighbor_jacobian.

Referenced by libMesh::RBConstruction::add_scaled_matrix_and_vector(), and assembly_with_dg_fem_context().

◆ get_elem_neighbor_jacobian() [3/4]

DenseSubMatrix< Number > & libMesh::DGFEMContext::get_elem_neighbor_jacobian ( unsigned int  var1,
unsigned int  var2 
)
inline

Non-const accessor for element-neighbor Jacobian of particular variables corresponding to the variable index arguments.

Definition at line 156 of file dg_fem_context.h.

157 { return *(_elem_neighbor_subjacobians[var1][var2]); }

References _elem_neighbor_subjacobians.

◆ get_elem_neighbor_jacobian() [4/4]

const DenseSubMatrix< Number > & libMesh::DGFEMContext::get_elem_neighbor_jacobian ( unsigned int  var1,
unsigned int  var2 
) const
inline

Const accessor for element-neighbor Jacobian of particular variables corresponding to the variable index arguments.

Definition at line 149 of file dg_fem_context.h.

150 { return *(_elem_neighbor_subjacobians[var1][var2]); }

References _elem_neighbor_subjacobians.

◆ get_elem_residual() [1/4]

DenseVector< Number > & libMesh::DiffContext::get_elem_residual ( )
inlineinherited

Non-const accessor for element residual.

Definition at line 248 of file diff_context.h.

249 { return _elem_residual; }
DenseVector< Number > _elem_residual
Element residual vector.

References libMesh::DiffContext::_elem_residual.

◆ get_elem_residual() [2/4]

const DenseVector< Number > & libMesh::DiffContext::get_elem_residual ( ) const
inlineinherited

Const accessor for element residual.

Definition at line 242 of file diff_context.h.

243 { return _elem_residual; }

References libMesh::DiffContext::_elem_residual.

Referenced by libMesh::Euler2Solver::_general_residual(), libMesh::RBConstruction::add_scaled_matrix_and_vector(), libMesh::FEMSystem::assembly(), assembly_with_dg_fem_context(), AssemblyF0::boundary_assembly(), AssemblyF1::boundary_assembly(), AssemblyF2::boundary_assembly(), F0::boundary_assembly(), Output0::boundary_assembly(), libMesh::FirstOrderUnsteadySolver::compute_second_order_eqns(), SecondOrderScalarSystemSecondOrderTimeSolverBase::damping_residual(), SecondOrderScalarSystemFirstOrderTimeSolverBase::damping_residual(), CoupledSystem::element_constraint(), NavierSystem::element_constraint(), LaplaceSystem::element_time_derivative(), CoupledSystem::element_time_derivative(), HeatSystem::element_time_derivative(), PoissonSystem::element_time_derivative(), NavierSystem::element_time_derivative(), SolidSystem::element_time_derivative(), ElasticitySystem::element_time_derivative(), CurlCurlSystem::element_time_derivative(), SigmaPhysics::element_time_derivative(), NonlinearDiffusionSystem::element_time_derivative(), FirstOrderScalarSystemBase::element_time_derivative(), SecondOrderScalarSystemFirstOrderTimeSolverBase::element_time_derivative(), HilbertSystem::element_time_derivative(), libMesh::VariationalSmootherSystem::element_time_derivative(), F0::interior_assembly(), OutputAssembly::interior_assembly(), EIM_F::interior_assembly(), AssemblyF0::interior_assembly(), AssemblyF1::interior_assembly(), libMesh::FEMPhysics::mass_residual(), NavierSystem::mass_residual(), ElasticitySystem::mass_residual(), FirstOrderScalarSystemBase::mass_residual(), SecondOrderScalarSystemSecondOrderTimeSolverBase::mass_residual(), SecondOrderScalarSystemFirstOrderTimeSolverBase::mass_residual(), libMesh::DifferentiablePhysics::nonlocal_mass_residual(), libMesh::FEMSystem::numerical_jacobian(), libMesh::FEMContext::pre_fe_reinit(), LaplaceSystem::side_constraint(), NavierSystem::side_constraint(), SolidSystem::side_time_derivative(), ElasticitySystem::side_time_derivative(), and CurlCurlSystem::side_time_derivative().

◆ get_elem_residual() [3/4]

DenseSubVector< Number > & libMesh::DiffContext::get_elem_residual ( unsigned int  var)
inlineinherited

Non-const accessor for element residual of a particular variable corresponding to the variable index argument.

Definition at line 265 of file diff_context.h.

266 {
267 libmesh_assert_greater(_elem_subresiduals.size(), var);
268 return _elem_subresiduals[var];
269 }
std::vector< DenseSubVector< Number > > _elem_subresiduals
Element residual subvectors and (if _have_local_matrices) Jacobian submatrices.

References libMesh::DiffContext::_elem_subresiduals.

◆ get_elem_residual() [4/4]

const DenseSubVector< Number > & libMesh::DiffContext::get_elem_residual ( unsigned int  var) const
inlineinherited

Const accessor for element residual of a particular variable corresponding to the variable index argument.

Definition at line 255 of file diff_context.h.

256 {
257 libmesh_assert_greater(_elem_subresiduals.size(), var);
258 return _elem_subresiduals[var];
259 }

References libMesh::DiffContext::_elem_subresiduals.

◆ get_elem_solution() [1/4]

DenseVector< Number > & libMesh::DiffContext::get_elem_solution ( )
inlineinherited

Non-const accessor for element solution.

Definition at line 118 of file diff_context.h.

119 { return _elem_solution; }
DenseVector< Number > _elem_solution
Element by element components of nonlinear_solution as adjusted by a time_solver.

References libMesh::DiffContext::_elem_solution.

◆ get_elem_solution() [2/4]

const DenseVector< Number > & libMesh::DiffContext::get_elem_solution ( ) const
inlineinherited

◆ get_elem_solution() [3/4]

DenseSubVector< Number > & libMesh::DiffContext::get_elem_solution ( unsigned int  var)
inlineinherited

Accessor for element solution of a particular variable corresponding to the variable index argument.

Definition at line 135 of file diff_context.h.

136 {
137 libmesh_assert_greater(_elem_subsolutions.size(), var);
138 return _elem_subsolutions[var];
139 }
std::vector< DenseSubVector< Number > > _elem_subsolutions

References libMesh::DiffContext::_elem_subsolutions.

◆ get_elem_solution() [4/4]

const DenseSubVector< Number > & libMesh::DiffContext::get_elem_solution ( unsigned int  var) const
inlineinherited

Accessor for element solution of a particular variable corresponding to the variable index argument.

Definition at line 125 of file diff_context.h.

126 {
127 libmesh_assert_greater(_elem_subsolutions.size(), var);
128 return _elem_subsolutions[var];
129 }

References libMesh::DiffContext::_elem_subsolutions.

◆ get_elem_solution_accel() [1/4]

DenseVector< Number > & libMesh::DiffContext::get_elem_solution_accel ( )
inlineinherited

Non-const accessor for element solution accel of change w.r.t.

time.

Definition at line 184 of file diff_context.h.

185 { return _elem_solution_accel; }
DenseVector< Number > _elem_solution_accel
Element by element components of du/dt as adjusted by a time_solver.

References libMesh::DiffContext::_elem_solution_accel.

◆ get_elem_solution_accel() [2/4]

const DenseVector< Number > & libMesh::DiffContext::get_elem_solution_accel ( ) const
inlineinherited

◆ get_elem_solution_accel() [3/4]

DenseSubVector< Number > & libMesh::DiffContext::get_elem_solution_accel ( unsigned int  var)
inlineinherited

Accessor for element solution accel for a particular variable corresponding to the variable index argument.

Definition at line 201 of file diff_context.h.

202 {
203 libmesh_assert_greater(_elem_subsolution_accels.size(), var);
204 return _elem_subsolution_accels[var];
205 }
std::vector< DenseSubVector< Number > > _elem_subsolution_accels

References libMesh::DiffContext::_elem_subsolution_accels.

◆ get_elem_solution_accel() [4/4]

const DenseSubVector< Number > & libMesh::DiffContext::get_elem_solution_accel ( unsigned int  var) const
inlineinherited

Accessor for element solution accel for a particular variable corresponding to the variable index argument.

Definition at line 191 of file diff_context.h.

192 {
193 libmesh_assert_greater(_elem_subsolution_accels.size(), var);
194 return _elem_subsolution_accels[var];
195 }

References libMesh::DiffContext::_elem_subsolution_accels.

◆ get_elem_solution_accel_derivative()

Real libMesh::DiffContext::get_elem_solution_accel_derivative ( ) const
inlineinherited

The derivative of the current elem_solution_accel w.r.t.

the unknown solution. Corresponding Jacobian contributions should be multiplied by this amount, or may be skipped if get_elem_solution_accel_derivative() is 0.

Definition at line 450 of file diff_context.h.

Real elem_solution_accel_derivative
The derivative of elem_solution_accel with respect to the current nonlinear solution,...

References libMesh::DiffContext::elem_solution_accel_derivative.

Referenced by ElasticitySystem::mass_residual(), SecondOrderScalarSystemSecondOrderTimeSolverBase::mass_residual(), and SecondOrderScalarSystemFirstOrderTimeSolverBase::mass_residual().

◆ get_elem_solution_derivative()

Real libMesh::DiffContext::get_elem_solution_derivative ( ) const
inlineinherited

The derivative of the current elem_solution w.r.t.

the unknown solution. Corresponding Jacobian contributions should be multiplied by this amount, or may be skipped if get_elem_solution_derivative() is 0.

Definition at line 432 of file diff_context.h.

433 { return elem_solution_derivative; }
Real elem_solution_derivative
The derivative of elem_solution with respect to the current nonlinear solution.

References libMesh::DiffContext::elem_solution_derivative.

Referenced by libMesh::FirstOrderUnsteadySolver::compute_second_order_eqns(), NavierSystem::element_constraint(), HeatSystem::element_time_derivative(), ElasticitySystem::element_time_derivative(), NonlinearDiffusionSystem::element_time_derivative(), HilbertSystem::element_time_derivative(), NavierSystem::mass_residual(), and NavierSystem::side_constraint().

◆ get_elem_solution_rate() [1/4]

DenseVector< Number > & libMesh::DiffContext::get_elem_solution_rate ( )
inlineinherited

Non-const accessor for element solution rate of change w.r.t.

time.

Definition at line 151 of file diff_context.h.

152 { return _elem_solution_rate; }
DenseVector< Number > _elem_solution_rate
Element by element components of du/dt as adjusted by a time_solver.

References libMesh::DiffContext::_elem_solution_rate.

◆ get_elem_solution_rate() [2/4]

const DenseVector< Number > & libMesh::DiffContext::get_elem_solution_rate ( ) const
inlineinherited

◆ get_elem_solution_rate() [3/4]

DenseSubVector< Number > & libMesh::DiffContext::get_elem_solution_rate ( unsigned int  var)
inlineinherited

Accessor for element solution rate for a particular variable corresponding to the variable index argument.

Definition at line 168 of file diff_context.h.

169 {
170 libmesh_assert_greater(_elem_subsolution_rates.size(), var);
171 return _elem_subsolution_rates[var];
172 }
std::vector< DenseSubVector< Number > > _elem_subsolution_rates

References libMesh::DiffContext::_elem_subsolution_rates.

◆ get_elem_solution_rate() [4/4]

const DenseSubVector< Number > & libMesh::DiffContext::get_elem_solution_rate ( unsigned int  var) const
inlineinherited

Accessor for element solution rate for a particular variable corresponding to the variable index argument.

Definition at line 158 of file diff_context.h.

159 {
160 libmesh_assert_greater(_elem_subsolution_rates.size(), var);
161 return _elem_subsolution_rates[var];
162 }

References libMesh::DiffContext::_elem_subsolution_rates.

◆ get_elem_solution_rate_derivative()

Real libMesh::DiffContext::get_elem_solution_rate_derivative ( ) const
inlineinherited

The derivative of the current elem_solution_rate w.r.t.

the unknown solution. Corresponding Jacobian contributions should be multiplied by this amount, or may be skipped if get_elem_solution_rate_derivative() is 0.

Definition at line 441 of file diff_context.h.

Real elem_solution_rate_derivative
The derivative of elem_solution_rate with respect to the current nonlinear solution,...

References libMesh::DiffContext::elem_solution_rate_derivative.

Referenced by libMesh::FirstOrderUnsteadySolver::compute_second_order_eqns(), SecondOrderScalarSystemSecondOrderTimeSolverBase::damping_residual(), SecondOrderScalarSystemFirstOrderTimeSolverBase::damping_residual(), FirstOrderScalarSystemBase::mass_residual(), and libMesh::FirstOrderUnsteadySolver::prepare_accel().

◆ get_element_fe() [1/5]

FEBase * libMesh::FEMContext::get_element_fe ( unsigned int  var) const
inlineinherited

Accessor for interior finite element object for scalar-valued variable var for the largest dimension in the mesh.

We default to the largest mesh dim if this method is called before the Elem * is set in the FEMContext, e.g. in FEMSystem::init_context (or a subclass).

Definition at line 304 of file fem_context.h.

305 { return this->get_element_fe(var,this->get_elem_dim()); }

References libMesh::FEMContext::get_elem_dim(), and libMesh::FEMContext::get_element_fe().

◆ get_element_fe() [2/5]

void libMesh::FEMContext::get_element_fe ( unsigned int  var,
FEAbstract *&  fe,
unsigned short  dim 
) const
inlineinherited

Accessor for interior finite element object for variable var for dimension dim.

Definition at line 1305 of file fem_context.h.

1307{
1308 libmesh_assert( !_element_fe_var[dim].empty() );
1309 libmesh_assert_less ( var, (_element_fe_var[dim].size() ) );
1310 fe = _element_fe_var[dim][var];
1311}
std::vector< std::vector< FEAbstract * > > _element_fe_var
Pointers to the same finite element objects, but indexed by variable number.

References libMesh::FEMContext::_element_fe_var, dim, and libMesh::libmesh_assert().

◆ get_element_fe() [3/5]

template<typename OutputShape >
void libMesh::FEMContext::get_element_fe ( unsigned int  var,
FEGenericBase< OutputShape > *&  fe 
) const
inlineinherited

Accessor for interior finite element object for variable var for the largest dimension in the mesh.

We default to the largest mesh dim if this method is called before the Elem * is set in the FEMContext, e.g. in FEMSystem::init_context (or a subclass).

Definition at line 295 of file fem_context.h.

296 { this->get_element_fe<OutputShape>(var,fe,this->get_elem_dim()); }

References libMesh::FEMContext::get_elem_dim().

Referenced by libMesh::ExactSolution::_compute_error(), libMesh::FEMContext::_do_elem_position_set(), libMesh::RBConstruction::add_scaled_matrix_and_vector(), assembly_with_dg_fem_context(), libMesh::VariationalSmootherSystem::compute_mesh_quality_info(), libMesh::FirstOrderUnsteadySolver::compute_second_order_eqns(), libMesh::FEMContext::elem_position_get(), CoupledSystem::element_constraint(), NavierSystem::element_constraint(), LaplaceSystem::element_postprocess(), PoissonSystem::element_postprocess(), LaplaceQoI::element_qoi(), HeatSystem::element_qoi(), HeatSystem::element_qoi_derivative(), LaplaceSystem::element_qoi_derivative(), LaplaceQoI::element_qoi_derivative(), LaplaceSystem::element_time_derivative(), CoupledSystem::element_time_derivative(), HeatSystem::element_time_derivative(), PoissonSystem::element_time_derivative(), NavierSystem::element_time_derivative(), SolidSystem::element_time_derivative(), ElasticitySystem::element_time_derivative(), CurlCurlSystem::element_time_derivative(), SigmaPhysics::element_time_derivative(), NonlinearDiffusionSystem::element_time_derivative(), HilbertSystem::element_time_derivative(), libMesh::VariationalSmootherSystem::element_time_derivative(), libMesh::RBEIMConstruction::enrich_eim_approximation_on_interiors(), libMesh::RBEIMConstruction::enrich_eim_approximation_on_sides(), libMesh::FEMContext::fixed_interior_gradient(), libMesh::FEMContext::fixed_interior_hessian(), libMesh::FEMContext::fixed_interior_value(), libMesh::FEMContext::get_element_fe(), libMesh::ParsedFEMFunction< Output >::init_context(), libMesh::WrappedFunctor< Output >::init_context(), CoupledSystemQoI::init_context(), libMesh::FEMSystem::init_context(), LaplaceSystem::init_context(), LaplaceQoI::init_context(), CoupledSystem::init_context(), HeatSystem::init_context(), PoissonSystem::init_context(), NavierSystem::init_context(), SolidSystem::init_context(), ElasticitySystem::init_context(), CurlCurlSystem::init_context(), SigmaPhysics::init_context(), NonlinearDiffusionSystem::init_context(), libMesh::RBEIMConstruction::init_context(), SimpleRBConstruction::init_context(), ElasticityRBConstruction::init_context(), HilbertSystem::init_context(), libMesh::VariationalSmootherSystem::init_context(), libMesh::RBEIMConstruction::initialize_qp_data(), libMesh::FEMContext::interior_accel(), A0::interior_assembly(), A1::interior_assembly(), A2::interior_assembly(), F0::interior_assembly(), OutputAssembly::interior_assembly(), B::interior_assembly(), M0::interior_assembly(), EIM_IP_assembly::interior_assembly(), EIM_F::interior_assembly(), AssemblyA0::interior_assembly(), AssemblyA1::interior_assembly(), AssemblyA2::interior_assembly(), InnerProductAssembly::interior_assembly(), AssemblyEIM::interior_assembly(), AssemblyF0::interior_assembly(), AssemblyF1::interior_assembly(), Ex6InnerProduct::interior_assembly(), AcousticsInnerProduct::interior_assembly(), libMesh::FEMContext::interior_gradient(), libMesh::FEMContext::interior_hessian(), libMesh::FEMContext::interior_rate(), libMesh::FEMContext::interior_rate_gradient(), libMesh::FEMPhysics::mass_residual(), NavierSystem::mass_residual(), ElasticitySystem::mass_residual(), Integrate::operator()(), libMesh::RBParametrizedFunction::preevaluate_parametrized_function_on_mesh(), libMesh::RBParametrizedFunction::preevaluate_parametrized_function_on_mesh_sides(), libMesh::VariationalSmootherSystem::prepare_for_smoothing(), OverlappingAlgebraicGhostingTest::run_ghosting_test(), OverlappingCouplingGhostingTest::run_sparsity_pattern_test(), NavierSystem::side_constraint(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::SubFunctor::SubFunctor(), SlitMeshRefinedSystemTest::testRestart(), and SlitMeshRefinedSystemTest::testSystem().

◆ get_element_fe() [4/5]

template<typename OutputShape >
void libMesh::FEMContext::get_element_fe ( unsigned int  var,
FEGenericBase< OutputShape > *&  fe,
unsigned short  dim 
) const
inlineinherited

Accessor for interior finite element object for variable var for dimension dim.

Definition at line 1296 of file fem_context.h.

1298{
1299 libmesh_assert( !_element_fe_var[dim].empty() );
1300 libmesh_assert_less ( var, (_element_fe_var[dim].size() ) );
1301 fe = cast_ptr<FEGenericBase<OutputShape> *>( (_element_fe_var[dim][var] ) );
1302}

References libMesh::FEMContext::_element_fe_var, dim, and libMesh::libmesh_assert().

◆ get_element_fe() [5/5]

FEBase * libMesh::FEMContext::get_element_fe ( unsigned int  var,
unsigned short  dim 
) const
inlineinherited

Accessor for interior finite element object for scalar-valued variable var for dimension dim.

Definition at line 1314 of file fem_context.h.

1315{
1316 libmesh_assert( !_element_fe_var[dim].empty() );
1317 libmesh_assert_less ( var, (_element_fe_var[dim].size() ) );
1318 return cast_ptr<FEBase *>( (_element_fe_var[dim][var] ) );
1319}

References libMesh::FEMContext::_element_fe_var, dim, and libMesh::libmesh_assert().

◆ get_element_qrule() [1/2]

const QBase & libMesh::FEMContext::get_element_qrule ( ) const
inlineinherited

Accessor for element interior quadrature rule for the dimension of the current _elem.

Definition at line 820 of file fem_context.h.

821 { return this->get_element_qrule(this->get_elem_dim()); }
const QBase & get_element_qrule() const
Accessor for element interior quadrature rule for the dimension of the current _elem.

References libMesh::FEMContext::get_elem_dim(), and libMesh::FEMContext::get_element_qrule().

Referenced by assembly_with_dg_fem_context(), libMesh::VariationalSmootherSystem::compute_mesh_quality_info(), libMesh::FirstOrderUnsteadySolver::compute_second_order_eqns(), SecondOrderScalarSystemSecondOrderTimeSolverBase::damping_residual(), SecondOrderScalarSystemFirstOrderTimeSolverBase::damping_residual(), CoupledSystem::element_constraint(), NavierSystem::element_constraint(), LaplaceSystem::element_postprocess(), PoissonSystem::element_postprocess(), LaplaceQoI::element_qoi(), HeatSystem::element_qoi(), HeatSystem::element_qoi_derivative(), LaplaceSystem::element_qoi_derivative(), LaplaceQoI::element_qoi_derivative(), LaplaceSystem::element_time_derivative(), CoupledSystem::element_time_derivative(), HeatSystem::element_time_derivative(), PoissonSystem::element_time_derivative(), NavierSystem::element_time_derivative(), SolidSystem::element_time_derivative(), ElasticitySystem::element_time_derivative(), CurlCurlSystem::element_time_derivative(), SigmaPhysics::element_time_derivative(), FirstOrderScalarSystemBase::element_time_derivative(), SecondOrderScalarSystemFirstOrderTimeSolverBase::element_time_derivative(), HilbertSystem::element_time_derivative(), libMesh::VariationalSmootherSystem::element_time_derivative(), libMesh::RBEIMConstruction::enrich_eim_approximation_on_interiors(), libMesh::FEMPhysics::eulerian_residual(), libMesh::FEMContext::get_element_qrule(), libMesh::VariationalSmootherSystem::get_target_to_reference_jacobian(), A0::interior_assembly(), A1::interior_assembly(), A2::interior_assembly(), F0::interior_assembly(), OutputAssembly::interior_assembly(), B::interior_assembly(), M0::interior_assembly(), EIM_IP_assembly::interior_assembly(), EIM_F::interior_assembly(), AssemblyA0::interior_assembly(), AssemblyA1::interior_assembly(), AssemblyA2::interior_assembly(), InnerProductAssembly::interior_assembly(), AssemblyEIM::interior_assembly(), AssemblyF0::interior_assembly(), AssemblyF1::interior_assembly(), Ex6InnerProduct::interior_assembly(), AcousticsInnerProduct::interior_assembly(), libMesh::FEMPhysics::mass_residual(), NavierSystem::mass_residual(), ElasticitySystem::mass_residual(), FirstOrderScalarSystemBase::mass_residual(), SecondOrderScalarSystemSecondOrderTimeSolverBase::mass_residual(), SecondOrderScalarSystemFirstOrderTimeSolverBase::mass_residual(), and libMesh::RBParametrizedFunction::preevaluate_parametrized_function_on_mesh().

◆ get_element_qrule() [2/2]

const QBase & libMesh::FEMContext::get_element_qrule ( unsigned short  dim) const
inlineinherited

Accessor for element interior quadrature rule.

Definition at line 833 of file fem_context.h.

835 return *(this->_element_qrule[dim]); }

References libMesh::FEMContext::_element_qrule, dim, and libMesh::libmesh_assert().

◆ get_fixed_solution_derivative()

Real libMesh::DiffContext::get_fixed_solution_derivative ( ) const
inlineinherited

The derivative of the current fixed_elem_solution w.r.t.

the unknown solution. Corresponding Jacobian contributions should be multiplied by this amount, or may be skipped if get_fixed_elem_solution_derivative() is 0.

Definition at line 459 of file diff_context.h.

460 { return fixed_solution_derivative; }
Real fixed_solution_derivative
The derivative of elem_fixed_solution with respect to the nonlinear solution, for use by systems cons...

References libMesh::DiffContext::fixed_solution_derivative.

◆ get_localized_subvector() [1/2]

DenseSubVector< Number > & libMesh::DiffContext::get_localized_subvector ( const NumericVector< Number > &  localized_vector,
unsigned int  var 
)
inherited

Return a reference to DenseSubVector localization of localized_vector at variable var contained in the _localized_vectors map.

Definition at line 154 of file diff_context.C.

155{
156 return _localized_vectors[&localized_vector].second[var];
157}

References libMesh::DiffContext::_localized_vectors.

Referenced by libMesh::FEMContext::interior_gradients(), libMesh::FEMContext::interior_hessians(), libMesh::FEMContext::interior_values(), libMesh::FEMContext::side_gradients(), libMesh::FEMContext::side_hessians(), and libMesh::FEMContext::side_values().

◆ get_localized_subvector() [2/2]

const DenseSubVector< Number > & libMesh::DiffContext::get_localized_subvector ( const NumericVector< Number > &  localized_vector,
unsigned int  var 
) const
inherited

const accessible version of get_localized_subvector function

Definition at line 160 of file diff_context.C.

161{
162 auto localized_vectors_it = _localized_vectors.find(&localized_vector);
163 libmesh_assert(localized_vectors_it != _localized_vectors.end());
164 return localized_vectors_it->second.second[var];
165}

References libMesh::DiffContext::_localized_vectors, and libMesh::libmesh_assert().

◆ get_localized_vector() [1/2]

DenseVector< Number > & libMesh::DiffContext::get_localized_vector ( const NumericVector< Number > &  localized_vector)
inherited

Return a reference to DenseVector localization of localized_vector contained in the _localized_vectors map.

Definition at line 140 of file diff_context.C.

141{
142 return _localized_vectors[&localized_vector].first;
143}

References libMesh::DiffContext::_localized_vectors.

◆ get_localized_vector() [2/2]

const DenseVector< Number > & libMesh::DiffContext::get_localized_vector ( const NumericVector< Number > &  localized_vector) const
inherited

const accessible version of get_localized_vector function

Definition at line 146 of file diff_context.C.

147{
148 auto localized_vectors_it = _localized_vectors.find(&localized_vector);
149 libmesh_assert(localized_vectors_it != _localized_vectors.end());
150 return localized_vectors_it->second.first;
151}

References libMesh::DiffContext::_localized_vectors, and libMesh::libmesh_assert().

◆ get_mesh_system() [1/2]

System * libMesh::FEMContext::get_mesh_system ( )
inlineinherited

Accessor for moving mesh System.

Definition at line 872 of file fem_context.h.

873 { return this->_mesh_sys; }

References libMesh::FEMContext::_mesh_sys.

◆ get_mesh_system() [2/2]

const System * libMesh::FEMContext::get_mesh_system ( ) const
inlineinherited

Accessor for moving mesh System.

Definition at line 866 of file fem_context.h.

867 { return this->_mesh_sys; }

References libMesh::FEMContext::_mesh_sys.

◆ get_mesh_x_var()

unsigned int libMesh::FEMContext::get_mesh_x_var ( ) const
inlineinherited

Accessor for x-variable of moving mesh System.

Definition at line 878 of file fem_context.h.

879 { return _mesh_x_var; }
unsigned int _mesh_x_var
Variables from which to acquire moving mesh information.

References libMesh::FEMContext::_mesh_x_var.

Referenced by libMesh::FEMContext::_do_elem_position_set(), and libMesh::FEMContext::elem_position_get().

◆ get_mesh_y_var()

unsigned int libMesh::FEMContext::get_mesh_y_var ( ) const
inlineinherited

Accessor for y-variable of moving mesh System.

Definition at line 892 of file fem_context.h.

893 { return _mesh_y_var; }
unsigned int _mesh_y_var

References libMesh::FEMContext::_mesh_y_var.

Referenced by libMesh::FEMContext::_do_elem_position_set(), and libMesh::FEMContext::elem_position_get().

◆ get_mesh_z_var()

unsigned int libMesh::FEMContext::get_mesh_z_var ( ) const
inlineinherited

Accessor for z-variable of moving mesh System.

Definition at line 906 of file fem_context.h.

907 { return _mesh_z_var; }
unsigned int _mesh_z_var

References libMesh::FEMContext::_mesh_z_var.

Referenced by libMesh::FEMContext::_do_elem_position_set(), and libMesh::FEMContext::elem_position_get().

◆ get_neighbor()

const Elem & libMesh::DGFEMContext::get_neighbor ( ) const
inline

Accessor for current neighbor Elem object for assembling DG terms.

Definition at line 226 of file dg_fem_context.h.

227 { return *_neighbor; }

References _neighbor.

Referenced by neighbor_side_fe_reinit().

◆ get_neighbor_dof_indices() [1/2]

const std::vector< dof_id_type > & libMesh::DGFEMContext::get_neighbor_dof_indices ( ) const
inline

Accessor for neighbor dof indices.

Definition at line 71 of file dg_fem_context.h.

72 { return _neighbor_dof_indices; }
std::vector< dof_id_type > _neighbor_dof_indices
Global Degree of freedom index lists for the neighbor element.

References _neighbor_dof_indices.

Referenced by libMesh::RBConstruction::add_scaled_matrix_and_vector(), and assembly_with_dg_fem_context().

◆ get_neighbor_dof_indices() [2/2]

const std::vector< dof_id_type > & libMesh::DGFEMContext::get_neighbor_dof_indices ( unsigned int  var) const
inline

Accessor for element dof indices of a particular variable corresponding to the index argument.

Definition at line 78 of file dg_fem_context.h.

79 { return _neighbor_dof_indices_var[var]; }

References _neighbor_dof_indices_var.

◆ get_neighbor_elem_jacobian() [1/4]

DenseMatrix< Number > & libMesh::DGFEMContext::get_neighbor_elem_jacobian ( )
inline

Non-const accessor for element Jacobian.

Definition at line 168 of file dg_fem_context.h.

169 { return _neighbor_elem_jacobian; }

References _neighbor_elem_jacobian.

◆ get_neighbor_elem_jacobian() [2/4]

const DenseMatrix< Number > & libMesh::DGFEMContext::get_neighbor_elem_jacobian ( ) const
inline

Const accessor for element-neighbor Jacobian.

Definition at line 162 of file dg_fem_context.h.

163 { return _neighbor_elem_jacobian; }

References _neighbor_elem_jacobian.

Referenced by libMesh::RBConstruction::add_scaled_matrix_and_vector(), and assembly_with_dg_fem_context().

◆ get_neighbor_elem_jacobian() [3/4]

DenseSubMatrix< Number > & libMesh::DGFEMContext::get_neighbor_elem_jacobian ( unsigned int  var1,
unsigned int  var2 
)
inline

Non-const accessor for neighbor-element Jacobian of particular variables corresponding to the variable index arguments.

Definition at line 182 of file dg_fem_context.h.

183 { return *(_neighbor_elem_subjacobians[var1][var2]); }

References _neighbor_elem_subjacobians.

◆ get_neighbor_elem_jacobian() [4/4]

const DenseSubMatrix< Number > & libMesh::DGFEMContext::get_neighbor_elem_jacobian ( unsigned int  var1,
unsigned int  var2 
) const
inline

Const accessor for neighbor-element Jacobian of particular variables corresponding to the variable index arguments.

Definition at line 175 of file dg_fem_context.h.

176 { return *(_neighbor_elem_subjacobians[var1][var2]); }

References _neighbor_elem_subjacobians.

◆ get_neighbor_neighbor_jacobian() [1/4]

DenseMatrix< Number > & libMesh::DGFEMContext::get_neighbor_neighbor_jacobian ( )
inline

Non-const accessor for element Jacobian.

Definition at line 194 of file dg_fem_context.h.

References _neighbor_neighbor_jacobian.

◆ get_neighbor_neighbor_jacobian() [2/4]

const DenseMatrix< Number > & libMesh::DGFEMContext::get_neighbor_neighbor_jacobian ( ) const
inline

Const accessor for element-neighbor Jacobian.

Definition at line 188 of file dg_fem_context.h.

References _neighbor_neighbor_jacobian.

Referenced by libMesh::RBConstruction::add_scaled_matrix_and_vector(), and assembly_with_dg_fem_context().

◆ get_neighbor_neighbor_jacobian() [3/4]

DenseSubMatrix< Number > & libMesh::DGFEMContext::get_neighbor_neighbor_jacobian ( unsigned int  var1,
unsigned int  var2 
)
inline

Non-const accessor for neighbor-neighbor Jacobian of particular variables corresponding to the variable index arguments.

Definition at line 208 of file dg_fem_context.h.

209 { return *(_neighbor_neighbor_subjacobians[var1][var2]); }

References _neighbor_neighbor_subjacobians.

◆ get_neighbor_neighbor_jacobian() [4/4]

const DenseSubMatrix< Number > & libMesh::DGFEMContext::get_neighbor_neighbor_jacobian ( unsigned int  var1,
unsigned int  var2 
) const
inline

Const accessor for neighbor-neighbor Jacobian of particular variables corresponding to the variable index arguments.

Definition at line 201 of file dg_fem_context.h.

202 { return *(_neighbor_neighbor_subjacobians[var1][var2]); }

References _neighbor_neighbor_subjacobians.

◆ get_neighbor_residual() [1/4]

DenseVector< Number > & libMesh::DGFEMContext::get_neighbor_residual ( )
inline

Non-const accessor for neighbor residual.

Definition at line 90 of file dg_fem_context.h.

91 { return _neighbor_residual; }

References _neighbor_residual.

◆ get_neighbor_residual() [2/4]

const DenseVector< Number > & libMesh::DGFEMContext::get_neighbor_residual ( ) const
inline

Const accessor for neighbor residual.

Definition at line 84 of file dg_fem_context.h.

85 { return _neighbor_residual; }

References _neighbor_residual.

◆ get_neighbor_residual() [3/4]

DenseSubVector< Number > & libMesh::DGFEMContext::get_neighbor_residual ( unsigned int  var)
inline

Non-const accessor for neighbor residual of a particular variable corresponding to the variable index argument.

Definition at line 104 of file dg_fem_context.h.

105 { return *(_neighbor_subresiduals[var]); }

References _neighbor_subresiduals.

◆ get_neighbor_residual() [4/4]

const DenseSubVector< Number > & libMesh::DGFEMContext::get_neighbor_residual ( unsigned int  var) const
inline

Const accessor for neighbor residual of a particular variable corresponding to the variable index argument.

Definition at line 97 of file dg_fem_context.h.

98 { return *(_neighbor_subresiduals[var]); }

References _neighbor_subresiduals.

◆ get_neighbor_side_fe()

template<typename OutputShape >
void libMesh::DGFEMContext::get_neighbor_side_fe ( unsigned int  var,
FEGenericBase< OutputShape > *&  fe 
) const
inline

Accessor for neighbor edge/face (2D/3D) finite element object for variable var.

Definition at line 301 of file dg_fem_context.h.

302{
303 libmesh_assert_less ( var, _neighbor_side_fe_var.size() );
304 fe = cast_ptr<FEGenericBase<OutputShape> *>( _neighbor_side_fe_var[var] );
305}

References _neighbor_side_fe_var.

Referenced by assembly_with_dg_fem_context().

◆ get_qoi_derivatives() [1/4]

std::vector< DenseVector< Number > > & libMesh::DiffContext::get_qoi_derivatives ( )
inlineinherited

Non-const accessor for QoI derivatives.

Definition at line 335 of file diff_context.h.

336 { return _elem_qoi_derivative; }
std::vector< DenseVector< Number > > _elem_qoi_derivative
Element quantity of interest derivative contributions.

References libMesh::DiffContext::_elem_qoi_derivative.

◆ get_qoi_derivatives() [2/4]

const std::vector< DenseVector< Number > > & libMesh::DiffContext::get_qoi_derivatives ( ) const
inlineinherited

◆ get_qoi_derivatives() [3/4]

DenseSubVector< Number > & libMesh::DiffContext::get_qoi_derivatives ( std::size_t  qoi,
unsigned int  var 
)
inlineinherited

Non-const accessor for QoI derivative of a particular qoi and variable corresponding to the index arguments.

Definition at line 353 of file diff_context.h.

354 {
355 libmesh_assert_greater(_elem_qoi_subderivatives.size(), qoi);
356 libmesh_assert_greater(_elem_qoi_subderivatives[qoi].size(), var);
357 return _elem_qoi_subderivatives[qoi][var];
358 }
std::vector< std::vector< DenseSubVector< Number > > > _elem_qoi_subderivatives

References libMesh::DiffContext::_elem_qoi_subderivatives.

◆ get_qoi_derivatives() [4/4]

const DenseSubVector< Number > & libMesh::DiffContext::get_qoi_derivatives ( std::size_t  qoi,
unsigned int  var 
) const
inlineinherited

Const accessor for QoI derivative of a particular qoi and variable corresponding to the index arguments.

Definition at line 342 of file diff_context.h.

343 {
344 libmesh_assert_greater(_elem_qoi_subderivatives.size(), qoi);
345 libmesh_assert_greater(_elem_qoi_subderivatives[qoi].size(), var);
346 return _elem_qoi_subderivatives[qoi][var];
347 }

References libMesh::DiffContext::_elem_qoi_subderivatives.

◆ get_qois() [1/2]

std::vector< Number > & libMesh::DiffContext::get_qois ( )
inlineinherited

Non-const accessor for QoI vector.

Definition at line 323 of file diff_context.h.

324 { return _elem_qoi; }
std::vector< Number > _elem_qoi
Element quantity of interest contributions.

References libMesh::DiffContext::_elem_qoi.

◆ get_qois() [2/2]

const std::vector< Number > & libMesh::DiffContext::get_qois ( ) const
inlineinherited

Const accessor for QoI vector.

Definition at line 317 of file diff_context.h.

318 { return _elem_qoi; }

References libMesh::DiffContext::_elem_qoi.

Referenced by LaplaceQoI::element_qoi(), HeatSystem::element_qoi(), and CoupledSystemQoI::side_qoi().

◆ get_side()

unsigned char libMesh::FEMContext::get_side ( ) const
inlineinherited

Accessor for current side of Elem object.

Definition at line 940 of file fem_context.h.

941 { return side; }
unsigned char side
Current side for side_* to examine.

References libMesh::FEMContext::side.

Referenced by libMesh::RBConstruction::add_scaled_matrix_and_vector(), assembly_with_dg_fem_context(), libMesh::FEMContext::side_fe_reinit(), and SolidSystem::side_time_derivative().

◆ get_side_fe() [1/5]

FEBase * libMesh::FEMContext::get_side_fe ( unsigned int  var) const
inlineinherited

Accessor for side finite element object for scalar-valued variable var for the largest dimension in the mesh.

We default to the largest mesh dim if this method is called before the Elem * is set in the FEMContext, e.g. in FEMSystem::init_context (or a subclass).

Definition at line 344 of file fem_context.h.

345 { return this->get_side_fe(var,this->get_elem_dim()); }

References libMesh::FEMContext::get_elem_dim(), and libMesh::FEMContext::get_side_fe().

◆ get_side_fe() [2/5]

void libMesh::FEMContext::get_side_fe ( unsigned int  var,
FEAbstract *&  fe,
unsigned short  dim 
) const
inlineinherited

Accessor for edge/face (2D/3D) finite element object for variable var for dimension dim.

Definition at line 1332 of file fem_context.h.

1334{
1335 libmesh_assert( !_side_fe_var[dim].empty() );
1336 libmesh_assert_less ( var, (_side_fe_var[dim].size() ) );
1337 fe = _side_fe_var[dim][var];
1338}
std::vector< std::vector< FEAbstract * > > _side_fe_var

References libMesh::FEMContext::_side_fe_var, dim, and libMesh::libmesh_assert().

◆ get_side_fe() [3/5]

template<typename OutputShape >
void libMesh::FEMContext::get_side_fe ( unsigned int  var,
FEGenericBase< OutputShape > *&  fe 
) const
inlineinherited

Accessor for edge/face (2D/3D) finite element object for variable var for the largest dimension in the mesh.

We default to the largest mesh dim if this method is called before the Elem * is set in the FEMContext, e.g. in FEMSystem::init_context (or a subclass).

Definition at line 335 of file fem_context.h.

336 { this->get_side_fe<OutputShape>(var,fe,this->get_elem_dim()); }

References libMesh::FEMContext::get_elem_dim().

Referenced by assembly_with_dg_fem_context(), AssemblyF0::boundary_assembly(), AssemblyF1::boundary_assembly(), AssemblyF2::boundary_assembly(), AssemblyA0::boundary_assembly(), AssemblyA1::boundary_assembly(), AssemblyA2::boundary_assembly(), A2::boundary_assembly(), A3::boundary_assembly(), F0::boundary_assembly(), Output0::boundary_assembly(), libMesh::RBEIMConstruction::enrich_eim_approximation_on_sides(), libMesh::ParsedFEMFunction< Output >::eval_args(), libMesh::FEMContext::fixed_side_gradient(), libMesh::FEMContext::fixed_side_hessian(), libMesh::FEMContext::fixed_side_value(), libMesh::FEMContext::get_side_fe(), libMesh::ParsedFEMFunction< Output >::init_context(), CoupledSystemQoI::init_context(), LaplaceSystem::init_context(), CoupledSystem::init_context(), HeatSystem::init_context(), PoissonSystem::init_context(), NavierSystem::init_context(), SolidSystem::init_context(), ElasticitySystem::init_context(), CurlCurlSystem::init_context(), SigmaPhysics::init_context(), NonlinearDiffusionSystem::init_context(), libMesh::RBEIMConstruction::init_context(), SimpleRBConstruction::init_context(), ElasticityRBConstruction::init_context(), libMesh::DiscontinuityMeasure::init_context(), libMesh::LaplacianErrorEstimator::init_context(), libMesh::KellyErrorEstimator::init_context(), HilbertSystem::init_context(), libMesh::VariationalSmootherSystem::init_context(), libMesh::RBEIMConstruction::initialize_qp_data(), libMesh::RBParametrizedFunction::preevaluate_parametrized_function_on_mesh_sides(), libMesh::FEMContext::side_accel(), LaplaceSystem::side_constraint(), libMesh::FEMContext::side_hessian(), LaplaceSystem::side_postprocess(), CoupledSystemQoI::side_qoi(), LaplaceSystem::side_qoi_derivative(), CoupledSystemQoI::side_qoi_derivative(), libMesh::FEMContext::side_rate(), SolidSystem::side_time_derivative(), ElasticitySystem::side_time_derivative(), CurlCurlSystem::side_time_derivative(), and libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::SubFunctor::SubFunctor().

◆ get_side_fe() [4/5]

template<typename OutputShape >
void libMesh::FEMContext::get_side_fe ( unsigned int  var,
FEGenericBase< OutputShape > *&  fe,
unsigned short  dim 
) const
inlineinherited

Accessor for edge/face (2D/3D) finite element object for variable var for dimension dim.

Definition at line 1323 of file fem_context.h.

1325{
1326 libmesh_assert( !_side_fe_var[dim].empty() );
1327 libmesh_assert_less ( var, (_side_fe_var[dim].size() ) );
1328 fe = cast_ptr<FEGenericBase<OutputShape> *>( (_side_fe_var[dim][var] ) );
1329}

References libMesh::FEMContext::_side_fe_var, dim, and libMesh::libmesh_assert().

◆ get_side_fe() [5/5]

FEBase * libMesh::FEMContext::get_side_fe ( unsigned int  var,
unsigned short  dim 
) const
inlineinherited

Accessor for side finite element object for scalar-valued variable var for dimension dim.

Definition at line 1341 of file fem_context.h.

1342{
1343 libmesh_assert( !_side_fe_var[dim].empty() );
1344 libmesh_assert_less ( var, (_side_fe_var[dim].size() ) );
1345 return cast_ptr<FEBase *>( (_side_fe_var[dim][var] ) );
1346}

References libMesh::FEMContext::_side_fe_var, dim, and libMesh::libmesh_assert().

◆ get_side_qrule() [1/2]

const QBase & libMesh::FEMContext::get_side_qrule ( ) const
inlineinherited

◆ get_side_qrule() [2/2]

const QBase & libMesh::FEMContext::get_side_qrule ( unsigned short  dim) const
inlineinherited

Accessor for element side quadrature rule.

Definition at line 840 of file fem_context.h.

841 {
843 return *(this->_side_qrule[dim]);
844 }

References libMesh::FEMContext::_side_qrule, dim, and libMesh::libmesh_assert().

◆ get_system()

const System & libMesh::DiffContext::get_system ( ) const
inlineinherited

◆ get_system_time()

Real libMesh::DiffContext::get_system_time ( ) const
inlineinherited

Accessor for the time variable stored in the system class.

Definition at line 411 of file diff_context.h.

412 { return system_time; }
const Real system_time
This is the time stored in the System class at the time this context was created, i....

References libMesh::DiffContext::system_time.

Referenced by libMesh::FEMContext::_update_time_from_system().

◆ get_time()

Real libMesh::DiffContext::get_time ( ) const
inlineinherited

Accessor for the time for which the current nonlinear_solution is defined.

Definition at line 417 of file diff_context.h.

418 { return time; }
Real time
For time-dependent problems, this is the time t for which the current nonlinear_solution is defined.

References libMesh::DiffContext::time.

◆ has_elem()

bool libMesh::FEMContext::has_elem ( ) const
inlineinherited

Test for current Elem object.

Definition at line 920 of file fem_context.h.

921 { return (this->_elem != nullptr); }

References libMesh::FEMContext::_elem.

Referenced by libMesh::FEMContext::build_new_fe(), libMesh::FEMContext::cached_fe(), libMesh::FEMContext::elem_fe_reinit(), and libMesh::FEMContext::pre_fe_reinit().

◆ has_side_boundary_id()

bool libMesh::FEMContext::has_side_boundary_id ( boundary_id_type  id) const
inherited

Reports if the boundary id is found on the current side.

Definition at line 322 of file fem_context.C.

323{
324 return _boundary_info.has_boundary_id(&(this->get_elem()), side, id);
325}
bool has_boundary_id(const Node *const node, const boundary_id_type id) const
const BoundaryInfo & _boundary_info
Saved reference to BoundaryInfo on the mesh for this System.

References libMesh::FEMContext::_boundary_info, libMesh::FEMContext::get_elem(), libMesh::BoundaryInfo::has_boundary_id(), and libMesh::FEMContext::side.

Referenced by A2::boundary_assembly(), A3::boundary_assembly(), F0::boundary_assembly(), Output0::boundary_assembly(), CoupledSystemQoI::side_qoi(), CoupledSystemQoI::side_qoi_derivative(), and ElasticitySystem::side_time_derivative().

◆ init_internal_data()

void libMesh::FEMContext::init_internal_data ( const System &  sys)
privateinherited

Helper function used in constructors to set up internal data.

Definition at line 223 of file fem_context.C.

224{
225 // Reserve space for the FEAbstract and QBase objects for each
226 // element dimension possibility (0,1,2,3)
227
228 // Note: we would simply resize() all four of these vectors, but
229 // some compilers (ICC 19, MSVC) generate a diagnostic about copying
230 // a std::unique_ptr in this case, so the following two lines are a
231 // workaround.
232 _element_fe = std::vector<std::map<FEType, std::unique_ptr<FEAbstract>>>(4);
233 _side_fe = std::vector<std::map<FEType, std::unique_ptr<FEAbstract>>>(4);
234 _element_fe_var.resize(4);
235 _side_fe_var.resize(4);
236
237 // We need to know which of our variables has the hardest
238 // shape functions to numerically integrate.
239
240 unsigned int nv = sys.n_vars();
241 libmesh_assert (nv);
242
243 bool have_scalar = false;
244
245 if (_active_vars)
246 {
247 for (auto v : *_active_vars)
248 if (sys.variable_type(v).family == SCALAR)
249 {
250 have_scalar = true;
251 break;
252 }
253 }
254 else
255 {
256 for (auto v : make_range(sys.n_vars()))
257 if (sys.variable_type(v).family == SCALAR)
258 {
259 have_scalar = true;
260 break;
261 }
262 }
263
264 if (have_scalar)
265 // SCALAR FEs have dimension 0 by assumption
266 _elem_dims.insert(0);
267
268 auto build_var_fe = [this, &sys](unsigned int dim,
269 unsigned int i)
270 {
271 FEType fe_type = sys.variable_type(i);
272 const bool add_p_level = fe_type.p_refinement;
273
274 auto & element_fe = _element_fe[dim][fe_type];
275 auto & side_fe = _side_fe[dim][fe_type];
276 if (!element_fe)
277 {
278 element_fe = FEAbstract::build(dim, fe_type);
279 element_fe->add_p_level_in_reinit(add_p_level);
280 side_fe = FEAbstract::build(dim, fe_type);
281 side_fe->add_p_level_in_reinit(add_p_level);
282
283 if (dim == 3)
284 {
285 auto & edge_fe = _edge_fe[fe_type];
286 edge_fe = FEAbstract::build(dim, fe_type);
287 edge_fe->add_p_level_in_reinit(add_p_level);
288 }
289 }
290
291 _element_fe_var[dim][i] = element_fe.get();
292 _side_fe_var[dim][i] = side_fe.get();
293 if ((dim) == 3)
294 _edge_fe_var[i] = _edge_fe[fe_type].get();
295 };
296
297 for (const auto & dim : _elem_dims)
298 {
299 // Create finite element objects
300 _element_fe_var[dim].resize(nv);
301 _side_fe_var[dim].resize(nv);
302 if (dim == 3)
303 _edge_fe_var.resize(nv);
304
305 if (_active_vars)
306 for (auto v : *_active_vars)
307 build_var_fe(dim, v);
308 else
309 for (auto v : make_range(nv))
310 build_var_fe(dim, v);
311 }
312
314}
void use_default_quadrature_rules(int extra_quadrature_order=0)
Use quadrature rules designed to over-integrate a mass matrix, plus extra_quadrature_order.
int _extra_quadrature_order
The extra quadrature order for this context.

References libMesh::FEMContext::_active_vars, libMesh::FEMContext::_edge_fe, libMesh::FEMContext::_edge_fe_var, libMesh::FEMContext::_elem_dims, libMesh::FEMContext::_element_fe, libMesh::FEMContext::_element_fe_var, libMesh::FEMContext::_extra_quadrature_order, libMesh::FEMContext::_side_fe, libMesh::FEMContext::_side_fe_var, libMesh::FEAbstract::build(), dim, libMesh::FEType::family, libMesh::libmesh_assert(), libMesh::make_range(), libMesh::System::n_vars(), libMesh::FEType::p_refinement, libMesh::SCALAR, libMesh::FEMContext::use_default_quadrature_rules(), and libMesh::System::variable_type().

Referenced by libMesh::FEMContext::FEMContext().

◆ interior_accel()

template<typename OutputType >
template LIBMESH_EXPORT void libMesh::FEMContext::interior_accel< Gradient > ( unsigned int  var,
unsigned int  qp,
OutputType &  u 
) const
inherited
Returns
The second time derivative (acceleration) of the solution variable var at the quadrature point qp on the current element interior.

Definition at line 1414 of file fem_context.C.

1416{
1417 this->some_value<OutputType,
1421}
const DenseVector< Number > & get_elem_solution_accel() const
Accessor for element solution accel of change w.r.t.

References libMesh::DiffContext::get_elem_solution_accel(), libMesh::FEMContext::get_element_fe(), and libMesh::FEMContext::some_value().

Referenced by ElasticitySystem::mass_residual(), SecondOrderScalarSystemSecondOrderTimeSolverBase::mass_residual(), and SecondOrderScalarSystemFirstOrderTimeSolverBase::mass_residual().

◆ interior_curl()

template<typename OutputType >
template LIBMESH_EXPORT void libMesh::FEMContext::interior_curl< Gradient > ( unsigned int  var,
unsigned int  qp,
OutputType &  curl_u 
) const
inherited
Returns
The curl of the solution variable var at the physical point p on the current element.

Definition at line 622 of file fem_context.C.

624{
625 typedef typename TensorTools::MakeReal<OutputType>::type OutputShape;
626
627 // Get local-to-global dof index lookup
628 const unsigned int n_dofs = cast_int<unsigned int>
629 (this->get_dof_indices(var).size());
630
631 // Get current local coefficients
632 libmesh_assert_greater (this->_elem_subsolutions.size(), var);
633 const DenseSubVector<Number> & coef = this->get_elem_solution(var);
634
635 // Get finite element object
636 FEGenericBase<OutputShape> * fe = nullptr;
637 this->get_element_fe<OutputShape>( var, fe, this->get_elem_dim() );
638
639 // Get shape function values at quadrature point
640 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputShape>> & curl_phi = fe->get_curl_phi();
641
642 // Accumulate solution curl
643 curl_u = 0.;
644
645 for (unsigned int l=0; l != n_dofs; l++)
646 curl_u.add_scaled(curl_phi[l][qp], coef(l));
647
648 return;
649}

References libMesh::DiffContext::_elem_subsolutions, libMesh::FEGenericBase< OutputType >::get_curl_phi(), libMesh::DiffContext::get_dof_indices(), libMesh::FEMContext::get_elem_dim(), and libMesh::DiffContext::get_elem_solution().

Referenced by CurlCurlSystem::element_time_derivative().

◆ interior_div()

template<typename OutputType >
template LIBMESH_EXPORT void libMesh::FEMContext::interior_div< Number > ( unsigned int  var,
unsigned int  qp,
OutputType &  div_u 
) const
inherited
Returns
The divergence of the solution variable var at the physical point p on the current element.

Definition at line 653 of file fem_context.C.

655{
656 typedef typename
657 TensorTools::IncrementRank
658 <typename TensorTools::MakeReal<OutputType>::type>::type OutputShape;
659
660 // Get local-to-global dof index lookup
661 const unsigned int n_dofs = cast_int<unsigned int>
662 (this->get_dof_indices(var).size());
663
664 // Get current local coefficients
665 libmesh_assert_greater (this->_elem_subsolutions.size(), var);
666 const DenseSubVector<Number> & coef = this->get_elem_solution(var);
667
668 // Get finite element object
669 FEGenericBase<OutputShape> * fe = nullptr;
670 this->get_element_fe<OutputShape>( var, fe, this->get_elem_dim() );
671
672 // Get shape function values at quadrature point
673 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputDivergence>> & div_phi = fe->get_div_phi();
674
675 // Accumulate solution curl
676 div_u = 0.;
677
678 for (unsigned int l=0; l != n_dofs; l++)
679 div_u += div_phi[l][qp] * coef(l);
680
681 return;
682}

References libMesh::DiffContext::_elem_subsolutions, libMesh::FEGenericBase< OutputType >::get_div_phi(), libMesh::DiffContext::get_dof_indices(), libMesh::FEMContext::get_elem_dim(), and libMesh::DiffContext::get_elem_solution().

◆ interior_gradient() [1/2]

Gradient libMesh::FEMContext::interior_gradient ( unsigned int  var,
unsigned int  qp 
) const
inherited

◆ interior_gradient() [2/2]

template<typename OutputType >
void libMesh::FEMContext::interior_gradient ( unsigned int  var,
unsigned int  qp,
OutputType &  du 
) const
inherited
Returns
The gradient of the solution variable var at the quadrature point qp on the current element interior.
Note
This is the preferred API.

Definition at line 504 of file fem_context.C.

507{
508 this->some_gradient<OutputType,
509 &FEMContext::get_element_fe<typename TensorTools::MakeReal
510 <typename TensorTools::DecrementRank
511 <OutputType>::type>::type>,
512 &DiffContext::get_elem_solution>(var, qp, du);
513}

References libMesh::DiffContext::get_elem_solution(), libMesh::FEMContext::get_element_fe(), and libMesh::FEMContext::some_gradient().

◆ interior_gradients()

template<typename OutputType >
template LIBMESH_EXPORT void libMesh::FEMContext::interior_gradients< Tensor > ( unsigned int  var,
const NumericVector< Number > &  _system_vector,
std::vector< OutputType > &  interior_gradients_vector 
) const
inherited

Fills a vector with the gradient of the solution variable var at all the quadrature points in the current element interior.

Note
This is the preferred API.

Definition at line 518 of file fem_context.C.

521{
522 typedef typename TensorTools::MakeReal
524 OutputShape;
525
526 // Get local-to-global dof index lookup
527 const unsigned int n_dofs = cast_int<unsigned int>
528 (this->get_dof_indices(var).size());
529
530 // Get current local coefficients
531 const DenseSubVector<Number> & coef = get_localized_subvector(_system_vector, var);
532
533 // Get finite element object
534 FEGenericBase<OutputShape> * fe = nullptr;
535 this->get_element_fe<OutputShape>( var, fe, this->get_elem_dim() );
536
537 // Get shape function values at quadrature point
538 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputGradient>> & dphi = fe->get_dphi();
539
540 // Loop over all the q_points in this finite element
541 for (auto qp : index_range(du_vals))
542 {
543 OutputType & du = du_vals[qp];
544
545 // Compute the gradient at this q_point
546 du = 0;
547
548 for (unsigned int l=0; l != n_dofs; l++)
549 du.add_scaled(dphi[l][qp], coef(l));
550 }
551
552 return;
553}
DenseSubVector< Number > & get_localized_subvector(const NumericVector< Number > &localized_vector, unsigned int var)
Return a reference to DenseSubVector localization of localized_vector at variable var contained in th...
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition int_range.h:153

References libMesh::DiffContext::get_dof_indices(), libMesh::FEGenericBase< OutputType >::get_dphi(), libMesh::FEMContext::get_elem_dim(), libMesh::DiffContext::get_localized_subvector(), and libMesh::index_range().

◆ interior_hessian() [1/2]

Tensor libMesh::FEMContext::interior_hessian ( unsigned int  var,
unsigned int  qp 
) const
inherited
Returns
The hessian of the solution variable var at the quadrature point qp on the current element interior.
Note
This API is currently present for backward compatibility.

Definition at line 556 of file fem_context.C.

557{
558 Tensor d2u;
559
560 this->interior_hessian( var, qp, d2u );
561
562 return d2u;
563}
Tensor interior_hessian(unsigned int var, unsigned int qp) const

References libMesh::FEMContext::interior_hessian().

Referenced by libMesh::FEMContext::interior_hessian().

◆ interior_hessian() [2/2]

template<typename OutputType >
void libMesh::FEMContext::interior_hessian ( unsigned int  var,
unsigned int  qp,
OutputType &  d2u 
) const
inherited
Returns
The hessian of the solution variable var at the quadrature point qp on the current element interior.
Note
This is the preferred API.

Definition at line 566 of file fem_context.C.

568{
569 this->some_hessian<OutputType,
571 <typename TensorTools::MakeReal
572 <typename TensorTools::DecrementRank
573 <typename TensorTools::DecrementRank
574 <OutputType>::type>::type>::type>,
575 &DiffContext::get_elem_solution>(var, qp, d2u);
576}

References libMesh::DiffContext::get_elem_solution(), libMesh::FEMContext::get_element_fe(), and libMesh::FEMContext::some_hessian().

◆ interior_hessians()

template<typename OutputType >
template LIBMESH_EXPORT void libMesh::FEMContext::interior_hessians< Tensor > ( unsigned int  var,
const NumericVector< Number > &  _system_vector,
std::vector< OutputType > &  d2u_vals 
) const
inherited

Fills a vector of hessians of the _system_vector at the all the quadrature points in the current element interior.

This is the preferred API.

Definition at line 580 of file fem_context.C.

583{
584 typedef typename TensorTools::DecrementRank<OutputType>::type Rank1Decrement;
585 typedef typename TensorTools::DecrementRank<Rank1Decrement>::type Rank2Decrement;
586 typedef typename TensorTools::MakeReal<Rank2Decrement>::type OutputShape;
587
588 // Get local-to-global dof index lookup
589 const unsigned int n_dofs = cast_int<unsigned int>
590 (this->get_dof_indices(var).size());
591
592 // Get current local coefficients
593 const DenseSubVector<Number> & coef = get_localized_subvector(_system_vector, var);
594
595 // Get finite element object
596 FEGenericBase<OutputShape> * fe = nullptr;
597 this->get_element_fe<OutputShape>( var, fe, this->get_elem_dim() );
598
599 // Get shape function values at quadrature point
600 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputTensor>> & d2phi = fe->get_d2phi();
601
602 // Loop over all the q_points in this finite element
603 for (auto qp : index_range(d2u_vals))
604 {
605 OutputType & d2u = d2u_vals[qp];
606
607 // Compute the gradient at this q_point
608 d2u = 0;
609
610 for (unsigned int l=0; l != n_dofs; l++)
611 d2u.add_scaled(d2phi[l][qp], coef(l));
612 }
613
614 return;
615}

References libMesh::FEGenericBase< OutputType >::get_d2phi(), libMesh::DiffContext::get_dof_indices(), libMesh::FEMContext::get_elem_dim(), libMesh::DiffContext::get_localized_subvector(), and libMesh::index_range().

◆ interior_rate()

template<typename OutputType >
template LIBMESH_EXPORT void libMesh::FEMContext::interior_rate< Gradient > ( unsigned int  var,
unsigned int  qp,
OutputType &  u 
) const
inherited
Returns
The time derivative (rate) of the solution variable var at the quadrature point qp on the current element interior.

Definition at line 1383 of file fem_context.C.

1385{
1386 this->some_value<OutputType,
1390}
const DenseVector< Number > & get_elem_solution_rate() const
Accessor for element solution rate of change w.r.t.

References libMesh::DiffContext::get_elem_solution_rate(), libMesh::FEMContext::get_element_fe(), and libMesh::FEMContext::some_value().

Referenced by libMesh::FirstOrderUnsteadySolver::compute_second_order_eqns(), SecondOrderScalarSystemSecondOrderTimeSolverBase::damping_residual(), SecondOrderScalarSystemFirstOrderTimeSolverBase::damping_residual(), libMesh::FEMPhysics::mass_residual(), NavierSystem::mass_residual(), and FirstOrderScalarSystemBase::mass_residual().

◆ interior_rate_gradient()

template<typename OutputType >
template LIBMESH_EXPORT void libMesh::FEMContext::interior_rate_gradient< Tensor > ( unsigned int  var,
unsigned int  qp,
OutputType &  u 
) const
inherited
Returns
The time derivative (rate) of the solution gradient of variable var at the quadrature point qp on the current element interior.

Definition at line 1393 of file fem_context.C.

1395{
1396 this->some_gradient<OutputType,
1397 &FEMContext::get_element_fe<typename TensorTools::MakeReal
1398 <typename TensorTools::DecrementRank
1399 <OutputType>::type>::type>,
1400 &DiffContext::get_elem_solution_rate>(var, qp, dudot);
1401}

References libMesh::DiffContext::get_elem_solution_rate(), libMesh::FEMContext::get_element_fe(), and libMesh::FEMContext::some_gradient().

◆ interior_value() [1/2]

Number libMesh::FEMContext::interior_value ( unsigned int  var,
unsigned int  qp 
) const
inherited
Returns
The value of the solution variable var at the quadrature point qp on the current element interior.
Note
This API is currently present for backward compatibility.

Definition at line 436 of file fem_context.C.

437{
438 Number u;
439
440 this->interior_value( var, qp, u );
441
442 return u;
443}
Number interior_value(unsigned int var, unsigned int qp) const

References libMesh::FEMContext::interior_value().

Referenced by libMesh::FirstOrderUnsteadySolver::compute_second_order_eqns(), LaplaceSystem::element_postprocess(), LaplaceQoI::element_qoi(), HeatSystem::element_qoi(), CoupledSystem::element_time_derivative(), NavierSystem::element_time_derivative(), CurlCurlSystem::element_time_derivative(), HilbertSystem::element_time_derivative(), libMesh::FEMContext::interior_value(), SlitMeshRefinedSystemTest::testRestart(), and SlitMeshRefinedSystemTest::testSystem().

◆ interior_value() [2/2]

template<typename OutputType >
void libMesh::FEMContext::interior_value ( unsigned int  var,
unsigned int  qp,
OutputType &  u 
) const
inherited
Returns
The value of the solution variable var at the quadrature point qp on the current element interior.
Note
This is the preferred API.

Definition at line 446 of file fem_context.C.

448{
449 this->some_value<OutputType,
450 &FEMContext::get_element_fe<typename TensorTools::MakeReal<OutputType>::type>,
451 &DiffContext::get_elem_solution>(var, qp, u);
452}

References libMesh::DiffContext::get_elem_solution(), and libMesh::FEMContext::some_value().

◆ interior_values()

template<typename OutputType >
template LIBMESH_EXPORT void libMesh::FEMContext::interior_values< Gradient > ( unsigned int  var,
const NumericVector< Number > &  _system_vector,
std::vector< OutputType > &  interior_values_vector 
) const
inherited

Fills a vector of values of the _system_vector at the all the quadrature points in the current element interior.

Definition at line 456 of file fem_context.C.

459{
460 typedef typename TensorTools::MakeReal<OutputType>::type OutputShape;
461
462 // Get local-to-global dof index lookup
463 const unsigned int n_dofs = cast_int<unsigned int>
464 (this->get_dof_indices(var).size());
465
466 // Get current local coefficients
467 const DenseSubVector<Number> & coef = get_localized_subvector(_system_vector, var);
468
469 // Get the finite element object
470 FEGenericBase<OutputShape> * fe = nullptr;
471 this->get_element_fe<OutputShape>( var, fe, this->get_elem_dim() );
472
473 // Get shape function values at quadrature point
474 const std::vector<std::vector<OutputShape>> & phi = fe->get_phi();
475
476 // Loop over all the q_points on this element
477 for (auto qp : index_range(u_vals))
478 {
479 OutputType & u = u_vals[qp];
480
481 // Compute the value at this q_point
482 u = 0.;
483
484 for (unsigned int l=0; l != n_dofs; l++)
485 u += phi[l][qp] * coef(l);
486 }
487
488 return;
489}

References libMesh::DiffContext::get_dof_indices(), libMesh::FEMContext::get_elem_dim(), libMesh::DiffContext::get_localized_subvector(), libMesh::FEGenericBase< OutputType >::get_phi(), and libMesh::index_range().

Referenced by HeatSystem::element_qoi_derivative().

◆ is_adjoint() [1/2]

bool & libMesh::DiffContext::is_adjoint ( )
inlineinherited

Accessor for setting whether we need to do a primal or adjoint solve.

Definition at line 473 of file diff_context.h.

474 { return _is_adjoint; }
bool _is_adjoint
Is this context to be used for a primal or adjoint solve?

References libMesh::DiffContext::_is_adjoint.

◆ is_adjoint() [2/2]

bool libMesh::DiffContext::is_adjoint ( ) const
inlineinherited

Accessor for querying whether we need to do a primal or adjoint solve.

Definition at line 466 of file diff_context.h.

467 { return _is_adjoint; }

References libMesh::DiffContext::_is_adjoint.

Referenced by SigmaPhysics::init_context().

◆ n_dof_indices() [1/2]

unsigned int libMesh::DiffContext::n_dof_indices ( ) const
inlineinherited

◆ n_dof_indices() [2/2]

unsigned int libMesh::DiffContext::n_dof_indices ( unsigned int  var) const
inlineinherited

Total number of dof indices of the particular variable corresponding to the index argument.

Definition at line 402 of file diff_context.h.

403 {
404 libmesh_assert_greater(_dof_indices_var.size(), var);
405 return cast_int<unsigned int>(_dof_indices_var[var].size());
406 }

References libMesh::DiffContext::_dof_indices_var.

◆ n_vars()

unsigned int libMesh::DiffContext::n_vars ( ) const
inlineinherited

◆ neighbor_side_fe_reinit()

void libMesh::DGFEMContext::neighbor_side_fe_reinit ( )

Initialize neighbor side data needed to assemble DG terms.

The neighbor element is determined by the current value of get_neighbor().

Definition at line 84 of file dg_fem_context.C.

85{
86 // Call this *after* side_fe_reinit
87
88 // Initialize all the neighbor side FE objects based on inverse mapping
89 // the quadrature points on the current side
90 std::vector<Point> qface_side_points;
91 std::vector<Point> qface_neighbor_points;
92 for (auto & [neighbor_side_fe_type, fe] : _neighbor_side_fe)
93 {
94 FEAbstract * side_fe = _side_fe[this->get_dim()][neighbor_side_fe_type].get();
95 qface_side_points = side_fe->get_xyz();
96
98 qface_side_points, qface_neighbor_points);
99
100 fe->reinit(&get_neighbor(), &qface_neighbor_points);
101 }
102
103 // Set boolean flag to indicate that the DG terms are active on this element
104 _dg_terms_active = true;
105
106 // Also, initialize data required for DG assembly on the current side,
107 // analogously to FEMContext::pre_fe_reinit
108
109 // Initialize the per-element data for elem.
111
112 const unsigned int n_dofs = cast_int<unsigned int>
113 (this->get_dof_indices().size());
114 const unsigned int n_neighbor_dofs = cast_int<unsigned int>
115 (_neighbor_dof_indices.size());
116
117 // These resize calls also zero out the residual and jacobian
118 _neighbor_residual.resize(n_neighbor_dofs);
119 _elem_elem_jacobian.resize(n_dofs, n_dofs);
120 _elem_neighbor_jacobian.resize(n_dofs, n_neighbor_dofs);
121 _neighbor_elem_jacobian.resize(n_neighbor_dofs, n_dofs);
122 _neighbor_neighbor_jacobian.resize(n_neighbor_dofs, n_neighbor_dofs);
123
124 // Initialize the per-variable data for elem.
125 {
126 unsigned int sub_dofs = 0;
127 for (auto i : make_range(get_system().n_vars()))
128 {
130
131 const unsigned int n_dofs_var = cast_int<unsigned int>
132 (_neighbor_dof_indices_var[i].size());
133
134 _neighbor_subresiduals[i]->reposition
135 (sub_dofs, n_dofs_var);
136
137 for (unsigned int j=0; j != i; ++j)
138 {
139 const unsigned int n_dofs_var_j =
140 cast_int<unsigned int>
141 (this->get_dof_indices(j).size());
142
143 _elem_elem_subjacobians[i][j]->reposition
144 (sub_dofs, _neighbor_subresiduals[j]->i_off(),
145 n_dofs_var, n_dofs_var_j);
146 _elem_elem_subjacobians[j][i]->reposition
147 (_neighbor_subresiduals[j]->i_off(), sub_dofs,
148 n_dofs_var_j, n_dofs_var);
149
150 _elem_neighbor_subjacobians[i][j]->reposition
151 (sub_dofs, _neighbor_subresiduals[j]->i_off(),
152 n_dofs_var, n_dofs_var_j);
153 _elem_neighbor_subjacobians[j][i]->reposition
154 (_neighbor_subresiduals[j]->i_off(), sub_dofs,
155 n_dofs_var_j, n_dofs_var);
156
157 _neighbor_elem_subjacobians[i][j]->reposition
158 (sub_dofs, _neighbor_subresiduals[j]->i_off(),
159 n_dofs_var, n_dofs_var_j);
160 _neighbor_elem_subjacobians[j][i]->reposition
161 (_neighbor_subresiduals[j]->i_off(), sub_dofs,
162 n_dofs_var_j, n_dofs_var);
163
164 _neighbor_neighbor_subjacobians[i][j]->reposition
165 (sub_dofs, _neighbor_subresiduals[j]->i_off(),
166 n_dofs_var, n_dofs_var_j);
167 _neighbor_neighbor_subjacobians[j][i]->reposition
168 (_neighbor_subresiduals[j]->i_off(), sub_dofs,
169 n_dofs_var_j, n_dofs_var);
170 }
171 _elem_elem_subjacobians[i][i]->reposition
172 (sub_dofs, sub_dofs,
173 n_dofs_var,
174 n_dofs_var);
175 _elem_neighbor_subjacobians[i][i]->reposition
176 (sub_dofs, sub_dofs,
177 n_dofs_var,
178 n_dofs_var);
179 _neighbor_elem_subjacobians[i][i]->reposition
180 (sub_dofs, sub_dofs,
181 n_dofs_var,
182 n_dofs_var);
183 _neighbor_neighbor_subjacobians[i][i]->reposition
184 (sub_dofs, sub_dofs,
185 n_dofs_var,
186 n_dofs_var);
187 sub_dofs += n_dofs_var;
188 }
189 libmesh_assert_equal_to (sub_dofs, n_dofs);
190 }
191
192}
const Elem & get_neighbor() const
Accessor for current neighbor Elem object for assembling DG terms.
void resize(const unsigned int new_m, const unsigned int new_n)
Resizes the matrix to the specified size and calls zero().
void resize(const unsigned int n)
Resize the vector.
void dof_indices(const Elem *const elem, std::vector< dof_id_type > &di) const
Definition dof_map.C:2203
unsigned char get_dim() const
Accessor for cached mesh dimension.
const DofMap & get_dof_map() const
Definition system.h:2417

References _dg_terms_active, _elem_elem_jacobian, _elem_elem_subjacobians, _elem_neighbor_jacobian, _elem_neighbor_subjacobians, _neighbor_dof_indices, _neighbor_dof_indices_var, _neighbor_elem_jacobian, _neighbor_elem_subjacobians, _neighbor_neighbor_jacobian, _neighbor_neighbor_subjacobians, _neighbor_residual, _neighbor_side_fe, _neighbor_subresiduals, libMesh::FEMContext::_side_fe, libMesh::DofMap::dof_indices(), libMesh::FEMContext::get_dim(), libMesh::DiffContext::get_dof_indices(), libMesh::System::get_dof_map(), get_neighbor(), libMesh::DiffContext::get_system(), libMesh::FEAbstract::get_xyz(), libMesh::FEMap::inverse_map(), libMesh::make_range(), libMesh::DiffContext::n_vars(), libMesh::DenseVector< T >::resize(), and libMesh::DenseMatrix< T >::resize().

Referenced by assembly_with_dg_fem_context().

◆ nonlocal_reinit()

void libMesh::FEMContext::nonlocal_reinit ( Real  theta)
overridevirtualinherited

Gives derived classes the opportunity to reinitialize data needed for nonlocal calculations at a new point within a timestep.

Reimplemented from libMesh::DiffContext.

Definition at line 1491 of file fem_context.C.

1492{
1493 // Update the "time" variable of this context object
1494 this->_update_time_from_system(theta);
1495
1496 // We can reuse the Elem FE safely here.
1498}

References libMesh::FEMContext::_update_time_from_system(), and libMesh::FEMContext::elem_fe_reinit().

◆ point_accel()

template<typename OutputType >
void libMesh::FEMContext::point_accel ( unsigned int  var,
const Point &  p,
OutputType &  u 
) const
inherited
Returns
The second time derivative (acceleration) of the solution variable var at the physical point p on the current element.

◆ point_curl()

template<typename OutputType >
template LIBMESH_EXPORT void libMesh::FEMContext::point_curl< Gradient > ( unsigned int  var,
const Point &  p,
OutputType &  curl_u,
const Real  tolerance = TOLERANCE 
) const
inherited
Returns
The curl of the solution variable var at the physical point p on the current element.

Allows evaluation of points within a relative tolerance outside the element.

Definition at line 1047 of file fem_context.C.

1051{
1052 typedef typename TensorTools::MakeReal<OutputType>::type OutputShape;
1053
1054 // Get local-to-global dof index lookup
1055 const unsigned int n_dofs = cast_int<unsigned int>
1056 (this->get_dof_indices(var).size());
1057
1058 // Get current local coefficients
1059 libmesh_assert_greater (this->_elem_subsolutions.size(), var);
1060 const DenseSubVector<Number> & coef = this->get_elem_solution(var);
1061
1062 // Get finite element object
1063 FEGenericBase<OutputShape> * fe = nullptr;
1064 this->get_element_fe<OutputShape>( var, fe, this->get_elem_dim() );
1065
1066 // Build a FE for calculating u(p)
1067 FEGenericBase<OutputShape> * fe_new =
1068 this->build_new_fe( fe, p, tolerance, 3 );
1069
1070 // Get the values of the shape function derivatives
1071 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputShape>> & curl_phi = fe_new->get_curl_phi();
1072
1073 curl_u = 0.0;
1074
1075 for (unsigned int l=0; l != n_dofs; l++)
1076 curl_u.add_scaled(curl_phi[l][0], coef(l));
1077
1078 return;
1079}

References libMesh::DiffContext::_elem_subsolutions, libMesh::FEMContext::build_new_fe(), libMesh::FEGenericBase< OutputType >::get_curl_phi(), libMesh::DiffContext::get_dof_indices(), libMesh::FEMContext::get_elem_dim(), and libMesh::DiffContext::get_elem_solution().

◆ point_gradient() [1/2]

Gradient libMesh::FEMContext::point_gradient ( unsigned int  var,
const Point &  p 
) const
inherited
Returns
The gradient of the solution variable var at the physical point p on the current element.
Note
This API is currently present for backward compatibility.

Definition at line 944 of file fem_context.C.

945{
946 Gradient grad_u;
947
948 this->point_gradient( var, p, grad_u );
949
950 return grad_u;
951}
Gradient point_gradient(unsigned int var, const Point &p) const

References libMesh::FEMContext::point_gradient().

Referenced by libMesh::ParsedFEMFunction< Output >::eval_args(), CoupledFEMFunctionsx::operator()(), CoupledFEMFunctionsy::operator()(), and libMesh::FEMContext::point_gradient().

◆ point_gradient() [2/2]

template<typename OutputType >
void libMesh::FEMContext::point_gradient ( unsigned int  var,
const Point &  p,
OutputType &  grad_u,
const Real  tolerance = TOLERANCE 
) const
inherited
Returns
The gradient of the solution variable var at the physical point p on the current element.
Note
This is the preferred API.

Allows evaluation of points within a relative tolerance outside the element.

Definition at line 956 of file fem_context.C.

960{
961 typedef typename TensorTools::MakeReal
963 OutputShape;
964
965 // Get local-to-global dof index lookup
966 const unsigned int n_dofs = cast_int<unsigned int>
967 (this->get_dof_indices(var).size());
968
969 // Get current local coefficients
970 libmesh_assert_greater (this->_elem_subsolutions.size(), var);
971 const DenseSubVector<Number> & coef = this->get_elem_solution(var);
972
973 // Get finite element object
974 FEGenericBase<OutputShape> * fe = nullptr;
975 this->get_element_fe<OutputShape>( var, fe, this->get_elem_dim() );
976
977 // Build a FE for calculating u(p)
978 FEGenericBase<OutputShape> * fe_new =
979 this->build_new_fe( fe, p, tolerance, 1 );
980
981 // Get the values of the shape function derivatives
982 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputGradient>> & dphi = fe_new->get_dphi();
983
984 grad_u = 0.0;
985
986 for (unsigned int l=0; l != n_dofs; l++)
987 grad_u.add_scaled(dphi[l][0], coef(l));
988
989 return;
990}

References libMesh::DiffContext::_elem_subsolutions, libMesh::FEMContext::build_new_fe(), libMesh::DiffContext::get_dof_indices(), libMesh::FEGenericBase< OutputType >::get_dphi(), libMesh::FEMContext::get_elem_dim(), and libMesh::DiffContext::get_elem_solution().

◆ point_hessian() [1/2]

Tensor libMesh::FEMContext::point_hessian ( unsigned int  var,
const Point &  p 
) const
inherited
Returns
The hessian of the solution variable var at the physical point p on the current element.
Note
This API currently present for backward compatibility.

Definition at line 996 of file fem_context.C.

997{
998 Tensor hess_u;
999
1000 this->point_hessian( var, p, hess_u );
1001
1002 return hess_u;
1003}
Tensor point_hessian(unsigned int var, const Point &p) const

References libMesh::FEMContext::point_hessian().

Referenced by libMesh::ParsedFEMFunction< Output >::eval_args(), and libMesh::FEMContext::point_hessian().

◆ point_hessian() [2/2]

template<typename OutputType >
void libMesh::FEMContext::point_hessian ( unsigned int  var,
const Point &  p,
OutputType &  hess_u,
const Real  tolerance = TOLERANCE 
) const
inherited
Returns
The hessian of the solution variable var at the physical point p on the current element.
Note
This is the preferred API.

Allows evaluation of points within a relative tolerance outside the element.

Definition at line 1007 of file fem_context.C.

1011{
1012 typedef typename TensorTools::DecrementRank<OutputType>::type Rank1Decrement;
1013 typedef typename TensorTools::DecrementRank<Rank1Decrement>::type Rank2Decrement;
1014 typedef typename TensorTools::MakeReal<Rank2Decrement>::type OutputShape;
1015
1016 // Get local-to-global dof index lookup
1017 const unsigned int n_dofs = cast_int<unsigned int>
1018 (this->get_dof_indices(var).size());
1019
1020 // Get current local coefficients
1021 libmesh_assert_greater (this->_elem_subsolutions.size(), var);
1022 const DenseSubVector<Number> & coef = this->get_elem_solution(var);
1023
1024 // Get finite element object
1025 FEGenericBase<OutputShape> * fe = nullptr;
1026 this->get_element_fe<OutputShape>( var, fe, this->get_elem_dim() );
1027
1028 // Build a FE for calculating u(p)
1029 FEGenericBase<OutputShape> * fe_new =
1030 this->build_new_fe( fe, p, tolerance, 2 );
1031
1032 // Get the values of the shape function derivatives
1033 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputTensor>> & d2phi = fe_new->get_d2phi();
1034
1035 hess_u = 0.0;
1036
1037 for (unsigned int l=0; l != n_dofs; l++)
1038 hess_u.add_scaled(d2phi[l][0], coef(l));
1039
1040 return;
1041}

References libMesh::DiffContext::_elem_subsolutions, libMesh::FEMContext::build_new_fe(), libMesh::FEGenericBase< OutputType >::get_d2phi(), libMesh::DiffContext::get_dof_indices(), libMesh::FEMContext::get_elem_dim(), and libMesh::DiffContext::get_elem_solution().

◆ point_rate()

template<typename OutputType >
void libMesh::FEMContext::point_rate ( unsigned int  var,
const Point &  p,
OutputType &  u 
) const
inherited
Returns
The time derivative (rate) of the solution variable var at the physical point p on the current element.

◆ point_value() [1/2]

Number libMesh::FEMContext::point_value ( unsigned int  var,
const Point &  p 
) const
inherited
Returns
The value of the solution variable var at the physical point p on the current element.
Note
This API is currently present for backward compatibility.

Definition at line 898 of file fem_context.C.

899{
900 Number u = 0.;
901
902 this->point_value( var, p, u );
903
904 return u;
905}
Number point_value(unsigned int var, const Point &p) const

References libMesh::FEMContext::point_value().

Referenced by libMesh::ParsedFEMFunction< Output >::eval_args(), CoupledFEMFunctionsx::operator()(), CoupledFEMFunctionsy::operator()(), libMesh::FEMContext::point_value(), and NavierSystem::side_constraint().

◆ point_value() [2/2]

template<typename OutputType >
void libMesh::FEMContext::point_value ( unsigned int  var,
const Point &  p,
OutputType &  u,
const Real  tolerance = TOLERANCE 
) const
inherited
Returns
The value of the solution variable var at the physical point p on the current element.
Note
This is the preferred API.

Allows evaluation of points within a relative tolerance outside the element.

Definition at line 908 of file fem_context.C.

912{
913 typedef typename TensorTools::MakeReal<OutputType>::type OutputShape;
914
915 // Get local-to-global dof index lookup
916 const unsigned int n_dofs = cast_int<unsigned int>
917 (this->get_dof_indices(var).size());
918
919 // Get current local coefficients
920 libmesh_assert_greater (this->_elem_subsolutions.size(), var);
921 const DenseSubVector<Number> & coef = this->get_elem_solution(var);
922
923 // Get finite element object
924 FEGenericBase<OutputShape> * fe = nullptr;
925 this->get_element_fe<OutputShape>( var, fe, this->get_elem_dim() );
926
927 // Build a FE for calculating u(p)
928 FEGenericBase<OutputShape> * fe_new =
929 this->build_new_fe( fe, p, tolerance, 0 );
930
931 // Get the values of the shape function derivatives
932 const std::vector<std::vector<OutputShape>> & phi = fe_new->get_phi();
933
934 u = 0.;
935
936 for (unsigned int l=0; l != n_dofs; l++)
937 u += phi[l][0] * coef(l);
938
939 return;
940}

References libMesh::DiffContext::_elem_subsolutions, libMesh::FEMContext::build_new_fe(), libMesh::DiffContext::get_dof_indices(), libMesh::FEMContext::get_elem_dim(), libMesh::DiffContext::get_elem_solution(), and libMesh::FEGenericBase< OutputType >::get_phi().

◆ pre_fe_reinit()

void libMesh::FEMContext::pre_fe_reinit ( const System &  sys,
const Elem *  e 
)
virtualinherited

Reinitializes local data vectors/matrices on the current geometric element.

Definition at line 1708 of file fem_context.C.

1709{
1710 this->set_elem(e);
1711
1712 if (algebraic_type() == CURRENT ||
1714 {
1715 // Initialize the per-element data for elem.
1716 if (this->has_elem())
1717 sys.get_dof_map().dof_indices (&(this->get_elem()), this->get_dof_indices());
1718 else
1719 // If !this->has_elem(), then we assume we are dealing with a SCALAR variable
1720 sys.get_dof_map().dof_indices
1721 (static_cast<Elem*>(nullptr), this->get_dof_indices());
1722 }
1723#ifdef LIBMESH_ENABLE_AMR
1724 else if (algebraic_type() == OLD ||
1726 {
1727 // Initialize the per-element data for elem.
1728 if (this->has_elem())
1729 sys.get_dof_map().old_dof_indices (&(this->get_elem()), this->get_dof_indices());
1730 else
1731 // If !this->has_elem(), then we assume we are dealing with a SCALAR variable
1732 sys.get_dof_map().old_dof_indices
1733 (static_cast<Elem*>(nullptr), this->get_dof_indices());
1734 }
1735#endif // LIBMESH_ENABLE_AMR
1736
1737 const unsigned int n_dofs = cast_int<unsigned int>
1738 (this->get_dof_indices().size());
1739 const unsigned int n_qoi = sys.n_qois();
1740
1741 if (this->algebraic_type() != NONE &&
1742 this->algebraic_type() != DOFS_ONLY &&
1743 this->algebraic_type() != OLD_DOFS_ONLY)
1744 {
1745 // This also resizes elem_solution
1746 if (_custom_solution == nullptr)
1747 sys.current_local_solution->get(this->get_dof_indices(), this->get_elem_solution().get_values());
1748 else
1749 _custom_solution->get(this->get_dof_indices(), this->get_elem_solution().get_values());
1750
1751 if (sys.use_fixed_solution)
1752 this->get_elem_fixed_solution().resize(n_dofs);
1753
1754 // Only make space for these if we're using DiffSystem
1755 // This is assuming *only* DiffSystem is using elem_solution_rate/accel
1756 const DifferentiableSystem * diff_system = dynamic_cast<const DifferentiableSystem *>(&sys);
1757 if (diff_system)
1758 {
1759 // Now, we only need these if the solver is unsteady
1760 if (!diff_system->get_time_solver().is_steady())
1761 {
1762 this->get_elem_solution_rate().resize(n_dofs);
1763
1764 // We only need accel space if the TimeSolver is second order
1765 const UnsteadySolver & time_solver = cast_ref<const UnsteadySolver &>(diff_system->get_time_solver());
1766
1767 if (time_solver.time_order() >= 2 || !diff_system->get_second_order_vars().empty())
1768 this->get_elem_solution_accel().resize(n_dofs);
1769 }
1770 }
1771
1772 if (algebraic_type() != OLD)
1773 {
1774 // These resize calls also zero out the residual and jacobian
1775 this->get_elem_residual().resize(n_dofs);
1776 if (this->_have_local_matrices)
1777 this->get_elem_jacobian().resize(n_dofs, n_dofs);
1778
1779 this->get_qoi_derivatives().resize(n_qoi);
1780 this->_elem_qoi_subderivatives.resize(n_qoi);
1781 for (std::size_t q=0; q != n_qoi; ++q)
1782 (this->get_qoi_derivatives())[q].resize(n_dofs);
1783 }
1784 }
1785
1786 // Initialize the per-variable data for elem.
1787 {
1788 unsigned int sub_dofs = 0;
1789 for (auto i : make_range(sys.n_vars()))
1790 {
1791 if (algebraic_type() == CURRENT ||
1793 {
1794 if (this->has_elem())
1795 sys.get_dof_map().dof_indices (&(this->get_elem()), this->get_dof_indices(i), i);
1796 else
1797 // If !this->has_elem(), then we assume we are dealing with a SCALAR variable
1798 sys.get_dof_map().dof_indices
1799 (static_cast<Elem*>(nullptr), this->get_dof_indices(i), i);
1800 }
1801#ifdef LIBMESH_ENABLE_AMR
1802 else if (algebraic_type() == OLD ||
1804 {
1805 if (this->has_elem())
1806 sys.get_dof_map().old_dof_indices (&(this->get_elem()), this->get_dof_indices(i), i);
1807 else
1808 // If !this->has_elem(), then we assume we are dealing with a SCALAR variable
1809 sys.get_dof_map().old_dof_indices
1810 (static_cast<Elem*>(nullptr), this->get_dof_indices(i), i);
1811 }
1812#endif // LIBMESH_ENABLE_AMR
1813
1814 if (this->algebraic_type() != NONE &&
1815 this->algebraic_type() != DOFS_ONLY &&
1816 this->algebraic_type() != OLD_DOFS_ONLY)
1817 {
1818 const unsigned int n_dofs_var = cast_int<unsigned int>
1819 (this->get_dof_indices(i).size());
1820
1821
1822 if (!_active_vars ||
1823 std::binary_search(_active_vars->begin(),
1824 _active_vars->end(), i))
1825 {
1826 this->get_elem_solution(i).reposition
1827 (sub_dofs, n_dofs_var);
1828
1829 // Only make space for these if we're using DiffSystem
1830 // This is assuming *only* DiffSystem is using elem_solution_rate/accel
1831 const DifferentiableSystem * diff_system = dynamic_cast<const DifferentiableSystem *>(&sys);
1832 if (diff_system)
1833 {
1834 // Now, we only need these if the solver is unsteady
1835 if (!diff_system->get_time_solver().is_steady())
1836 {
1837 this->get_elem_solution_rate(i).reposition
1838 (sub_dofs, n_dofs_var);
1839
1840 // We only need accel space if the TimeSolver is second order
1841 const UnsteadySolver & time_solver = cast_ref<const UnsteadySolver &>(diff_system->get_time_solver());
1842
1843 if (time_solver.time_order() >= 2 || !diff_system->get_second_order_vars().empty())
1844 this->get_elem_solution_accel(i).reposition
1845 (sub_dofs, n_dofs_var);
1846 }
1847 }
1848
1849 if (sys.use_fixed_solution)
1850 this->get_elem_fixed_solution(i).reposition
1851 (sub_dofs, n_dofs_var);
1852
1853 if (algebraic_type() != OLD)
1854 {
1855 this->get_elem_residual(i).reposition
1856 (sub_dofs, n_dofs_var);
1857
1858 for (std::size_t q=0; q != n_qoi; ++q)
1859 this->get_qoi_derivatives(q,i).reposition
1860 (sub_dofs, n_dofs_var);
1861
1862 if (this->_have_local_matrices)
1863 {
1864 for (unsigned int j=0; j != i; ++j)
1865 {
1866 const unsigned int n_dofs_var_j =
1867 cast_int<unsigned int>
1868 (this->get_dof_indices(j).size());
1869
1870 this->get_elem_jacobian(i,j).reposition
1871 (sub_dofs, this->get_elem_residual(j).i_off(),
1872 n_dofs_var, n_dofs_var_j);
1873 this->get_elem_jacobian(j,i).reposition
1874 (this->get_elem_residual(j).i_off(), sub_dofs,
1875 n_dofs_var_j, n_dofs_var);
1876 }
1877 this->get_elem_jacobian(i,i).reposition
1878 (sub_dofs, sub_dofs,
1879 n_dofs_var,
1880 n_dofs_var);
1881 }
1882 }
1883 }
1884
1885 sub_dofs += n_dofs_var;
1886 }
1887 }
1888
1889 if (this->algebraic_type() != NONE &&
1890 this->algebraic_type() != DOFS_ONLY &&
1891 this->algebraic_type() != OLD &&
1892 this->algebraic_type() != OLD_DOFS_ONLY)
1893 libmesh_assert_equal_to (sub_dofs, n_dofs);
1894 }
1895
1896 // Now do the localization for the user requested vectors
1897 if (this->algebraic_type() != NONE &&
1898 this->algebraic_type() != DOFS_ONLY &&
1899 this->algebraic_type() != OLD_DOFS_ONLY)
1900 {
1901 DiffContext::localized_vectors_iterator localized_vec_it = this->_localized_vectors.begin();
1902 const DiffContext::localized_vectors_iterator localized_vec_end = this->_localized_vectors.end();
1903
1904 for (; localized_vec_it != localized_vec_end; ++localized_vec_it)
1905 {
1906 const NumericVector<Number> & current_localized_vector = *localized_vec_it->first;
1907 DenseVector<Number> & target_vector = localized_vec_it->second.first;
1908
1909 current_localized_vector.get(this->get_dof_indices(), target_vector.get_values());
1910
1911 // Initialize the per-variable data for elem.
1912 unsigned int sub_dofs = 0;
1913 auto init_localized_var_data = [this, localized_vec_it, &sub_dofs](unsigned int i)
1914 {
1915 const unsigned int n_dofs_var = cast_int<unsigned int>
1916 (this->get_dof_indices(i).size());
1917
1918 // This is redundant with earlier initialization, isn't it? - RHS
1919 // sys.get_dof_map().dof_indices (&(this->get_elem()), this->get_dof_indices(i), i);
1920
1921 localized_vec_it->second.second[i].reposition
1922 (sub_dofs, n_dofs_var);
1923
1924 sub_dofs += n_dofs_var;
1925 };
1926
1927 if (_active_vars)
1928 for (auto v : *_active_vars)
1929 init_localized_var_data(v);
1930 else
1931 for (auto v : make_range(sys.n_vars()))
1932 init_localized_var_data(v);
1933
1934 libmesh_assert_equal_to (sub_dofs, n_dofs);
1935 }
1936 }
1937}
std::map< constNumericVector< Number > *, std::pair< DenseVector< Number >, std::vector< DenseSubVector< Number > > > >::iterator localized_vectors_iterator
Typedef for the localized_vectors iterator.
const std::vector< DenseVector< Number > > & get_qoi_derivatives() const
Const accessor for QoI derivatives.
const DenseVector< Number > & get_elem_residual() const
Const accessor for element residual.
const DenseMatrix< Number > & get_elem_jacobian() const
Const accessor for element Jacobian.
const NumericVector< Number > * _custom_solution
Data with which to do algebra reinitialization.
void set_elem(const Elem *e)
Helper function to promote accessor usage.
virtual void get(const std::vector< numeric_index_type > &index, T *values) const
Access multiple components at once.
template class LIBMESH_EXPORT NumericVector< Number >

References libMesh::FEMContext::_active_vars, libMesh::FEMContext::_custom_solution, libMesh::DiffContext::_elem_qoi_subderivatives, libMesh::DiffContext::_have_local_matrices, libMesh::DiffContext::_localized_vectors, libMesh::FEMContext::algebraic_type(), libMesh::FEMContext::CURRENT, libMesh::System::current_local_solution, libMesh::DofMap::dof_indices(), libMesh::FEMContext::DOFS_ONLY, libMesh::NumericVector< T >::get(), libMesh::DiffContext::get_dof_indices(), libMesh::System::get_dof_map(), libMesh::FEMContext::get_elem(), libMesh::DiffContext::get_elem_fixed_solution(), libMesh::DiffContext::get_elem_jacobian(), libMesh::DiffContext::get_elem_residual(), libMesh::DiffContext::get_elem_solution(), libMesh::DiffContext::get_elem_solution_accel(), libMesh::DiffContext::get_elem_solution_rate(), libMesh::DiffContext::get_qoi_derivatives(), libMesh::DifferentiablePhysics::get_second_order_vars(), libMesh::DifferentiableSystem::get_time_solver(), libMesh::DenseVector< T >::get_values(), libMesh::FEMContext::has_elem(), libMesh::TimeSolver::is_steady(), libMesh::make_range(), libMesh::System::n_qois(), libMesh::System::n_vars(), libMesh::FEMContext::NONE, libMesh::FEMContext::OLD, libMesh::DofMap::old_dof_indices(), libMesh::FEMContext::OLD_DOFS_ONLY, libMesh::DenseVector< T >::resize(), libMesh::DenseMatrix< T >::resize(), libMesh::FEMContext::set_elem(), libMesh::UnsteadySolver::time_order(), and libMesh::System::use_fixed_solution.

Referenced by libMesh::ExactSolution::_compute_error(), libMesh::RBConstruction::add_scaled_matrix_and_vector(), libMesh::FEMSystem::assembly(), assembly_with_dg_fem_context(), libMesh::VariationalSmootherSystem::compute_mesh_quality_info(), HilbertSystem::element_time_derivative(), libMesh::RBEIMConstruction::enrich_eim_approximation_on_interiors(), libMesh::RBEIMConstruction::enrich_eim_approximation_on_sides(), libMesh::RBEIMConstruction::initialize_qp_data(), libMesh::FEMSystem::mesh_position_get(), libMesh::FEMSystem::mesh_position_set(), Integrate::operator()(), libMesh::WeightedPatchRecoveryErrorEstimator::EstimateError::operator()(), libMesh::RBParametrizedFunction::preevaluate_parametrized_function_on_mesh(), libMesh::RBParametrizedFunction::preevaluate_parametrized_function_on_mesh_sides(), libMesh::VariationalSmootherSystem::prepare_for_smoothing(), libMesh::System::project_vector(), OverlappingAlgebraicGhostingTest::run_ghosting_test(), OverlappingCouplingGhostingTest::run_sparsity_pattern_test(), SlitMeshRefinedSystemTest::testRestart(), and SlitMeshRefinedSystemTest::testSystem().

◆ set_algebraic_type()

void libMesh::FEMContext::set_algebraic_type ( const AlgebraicType  atype)
inlineinherited

Setting which determines whether to initialize algebraic structures (elem_*) on each element and set their values from current_local_solution.

Algebraic initialization may be disabled for efficiency in cases where FEMContext is only used as a convenient container of FE objects.

Definition at line 1004 of file fem_context.h.

1005 { _atype = atype; }

References libMesh::FEMContext::_atype.

Referenced by libMesh::OldSolutionBase< Output, point_output >::init_context().

◆ set_custom_solution()

void libMesh::FEMContext::set_custom_solution ( const NumericVector< Number > *  custom_sol)
inlineinherited

Set a NumericVector to be used in place of current_local_solution for calculating elem_solution.

Set to nullptr to restore the current_local_solution behavior. Advanced DifferentiableSystem specific capabilities will only be enabled in the current_local_solution case.

Definition at line 1019 of file fem_context.h.

1020 { _custom_solution = custom_sol; }

References libMesh::FEMContext::_custom_solution.

◆ set_deltat_pointer()

void libMesh::DiffContext::set_deltat_pointer ( Real *  dt)
inherited

Points the _deltat member of this class at a timestep value stored in the creating System, for example DiffSystem::deltat.

Definition at line 109 of file diff_context.C.

110{
111 // We may actually want to be able to set this pointer to nullptr, so
112 // don't report an error for that.
113 _deltat = dt;
114}

References libMesh::DiffContext::_deltat.

Referenced by libMesh::FEMSystem::init_context().

◆ set_elem()

void libMesh::FEMContext::set_elem ( const Elem *  e)
protectedinherited

Helper function to promote accessor usage.

Definition at line 1939 of file fem_context.C.

1940{
1941 this->_elem = e;
1942
1943 // If e is nullptr, we assume it's SCALAR and set _elem_dim to 0.
1944 this->_elem_dim =
1945 cast_int<unsigned char>(this->_elem ? this->_elem->dim() : 0);
1946}

References libMesh::FEMContext::_elem, libMesh::FEMContext::_elem_dim, and libMesh::Elem::dim().

Referenced by libMesh::FEMContext::pre_fe_reinit().

◆ set_jacobian_tolerance()

void libMesh::FEMContext::set_jacobian_tolerance ( Real  tol)
inherited

Calls set_jacobian_tolerance() on all the FE objects controlled by this class.

(Actually, it calls this on the underlying)

Definition at line 1611 of file fem_context.C.

1612{
1613 for (auto & m : _element_fe)
1614 for (auto & pr : m)
1615 pr.second->get_fe_map().set_jacobian_tolerance(tol);
1616
1617 for (auto & m : _side_fe)
1618 for (auto & pr : m)
1619 pr.second->get_fe_map().set_jacobian_tolerance(tol);
1620
1621 for (auto & pr : _edge_fe)
1622 pr.second->get_fe_map().set_jacobian_tolerance(tol);
1623}
void set_jacobian_tolerance(Real tol)
Calls set_jacobian_tolerance() on all the FE objects controlled by this class.

References libMesh::FEMContext::_edge_fe, libMesh::FEMContext::_element_fe, and libMesh::FEMContext::_side_fe.

◆ set_mesh_system()

virtual void libMesh::FEMContext::set_mesh_system ( System *  sys)
inlinevirtualinherited

Tells the FEMContext that system sys contains the isoparametric Lagrangian variables which correspond to the coordinates of mesh nodes, in problems where the mesh itself is expected to move in time.

This should be set automatically if the FEMPhysics requires it.

Definition at line 860 of file fem_context.h.

861 { this->_mesh_sys = sys; }

References libMesh::FEMContext::_mesh_sys.

◆ set_mesh_x_var()

void libMesh::FEMContext::set_mesh_x_var ( unsigned int  x_var)
inlineinherited

Accessor for x-variable of moving mesh System.

This should be set automatically if the FEMPhysics requires it.

Definition at line 886 of file fem_context.h.

887 { _mesh_x_var = x_var; }

References libMesh::FEMContext::_mesh_x_var.

◆ set_mesh_y_var()

void libMesh::FEMContext::set_mesh_y_var ( unsigned int  y_var)
inlineinherited

Accessor for y-variable of moving mesh System.

This should be set automatically if the FEMPhysics requires it.

Definition at line 900 of file fem_context.h.

901 { _mesh_y_var = y_var; }

References libMesh::FEMContext::_mesh_y_var.

◆ set_mesh_z_var()

void libMesh::FEMContext::set_mesh_z_var ( unsigned int  z_var)
inlineinherited

Accessor for z-variable of moving mesh System.

This should be set automatically if the FEMPhysics requires it.

Definition at line 914 of file fem_context.h.

915 { _mesh_z_var = z_var; }

References libMesh::FEMContext::_mesh_z_var.

◆ set_neighbor()

void libMesh::DGFEMContext::set_neighbor ( const Elem &  neighbor)
inline

Set the neighbor element which we will use to assemble DG terms.

Note
We do not assume that this element is get_elem().neighbor(side) because we also need to be able to handle the special case of DG terms on "cracks" in a mesh to model certain types of interface conditions. In this case, we need to be able to specify the neighbor element manually. Also, this should give us more flexibility to handle non-conforming meshes.

Definition at line 220 of file dg_fem_context.h.

221 { _neighbor = &neighbor; }

References _neighbor.

Referenced by assembly_with_dg_fem_context().

◆ set_time()

void libMesh::DiffContext::set_time ( Real  time_in)
inlineinherited

Set the time for which the current nonlinear_solution is defined.

Definition at line 423 of file diff_context.h.

424 { time = time_in; }

References libMesh::DiffContext::time.

Referenced by libMesh::FEMContext::_update_time_from_system().

◆ side_accel()

template<typename OutputType >
template LIBMESH_EXPORT void libMesh::FEMContext::side_accel< Gradient > ( unsigned int  var,
unsigned int  qp,
OutputType &  u 
) const
inherited
Returns
The second time derivative (acceleration) of the solution variable var at the quadrature point qp on the current element side.

Definition at line 1426 of file fem_context.C.

1428{
1429 this->some_value<OutputType,
1433}

References libMesh::DiffContext::get_elem_solution_accel(), libMesh::FEMContext::get_side_fe(), and libMesh::FEMContext::some_value().

◆ side_boundary_ids()

void libMesh::FEMContext::side_boundary_ids ( std::vector< boundary_id_type > &  vec_to_fill) const
inherited

As above, but fills in the std::set provided by the user.

Definition at line 329 of file fem_context.C.

330{
331 _boundary_info.boundary_ids(&(this->get_elem()), side, vec_to_fill);
332}
void boundary_ids(const Node *node, std::vector< boundary_id_type > &vec_to_fill) const
Fills a user-provided std::vector with the boundary ids associated with Node node.

References libMesh::FEMContext::_boundary_info, libMesh::BoundaryInfo::boundary_ids(), libMesh::FEMContext::get_elem(), and libMesh::FEMContext::side.

◆ side_fe_reinit()

void libMesh::DGFEMContext::side_fe_reinit ( )
overridevirtual

Override side_fe_reinit to set a boolean flag so that by default DG terms are assumed to be inactive.

DG terms are only active if neighbor_side_fe_reinit is called.

Reimplemented from libMesh::FEMContext.

Definition at line 75 of file dg_fem_context.C.

76{
78
79 // By default we assume that the DG terms are inactive
80 // They are only active if neighbor_side_fe_reinit is called
81 _dg_terms_active = false;
82}

References _dg_terms_active, and libMesh::FEMContext::side_fe_reinit().

Referenced by libMesh::RBConstruction::add_scaled_matrix_and_vector(), and assembly_with_dg_fem_context().

◆ side_gradient() [1/2]

Gradient libMesh::FEMContext::side_gradient ( unsigned int  var,
unsigned int  qp 
) const
inherited
Returns
The gradient of the solution variable var at the quadrature point qp on the current element side.
Note
This API is currently present for backward compatibility.

Definition at line 743 of file fem_context.C.

744{
745 Gradient du;
746
747 this->side_gradient( var, qp, du );
748
749 return du;
750}
Gradient side_gradient(unsigned int var, unsigned int qp) const

References libMesh::FEMContext::side_gradient().

Referenced by libMesh::FEMContext::side_gradient(), and LaplaceSystem::side_postprocess().

◆ side_gradient() [2/2]

template<typename OutputType >
void libMesh::FEMContext::side_gradient ( unsigned int  var,
unsigned int  qp,
OutputType &  du 
) const
inherited
Returns
The gradient of the solution variable var at the quadrature point qp on the current element side.
Note
This is the preferred API.

Definition at line 754 of file fem_context.C.

756{
757 typedef typename TensorTools::MakeReal
759 OutputShape;
760
761 // Get local-to-global dof index lookup
762 const unsigned int n_dofs = cast_int<unsigned int>
763 (this->get_dof_indices(var).size());
764
765 // Get current local coefficients
766 libmesh_assert_greater (this->_elem_subsolutions.size(), var);
767 const DenseSubVector<Number> & coef = this->get_elem_solution(var);
768
769 // Get finite element object
770 FEGenericBase<OutputShape> * the_side_fe = nullptr;
771 this->get_side_fe<OutputShape>( var, the_side_fe, this->get_elem_dim() );
772
773 // Get shape function values at quadrature point
774 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputGradient>> & dphi = the_side_fe->get_dphi();
775
776 // Accumulate solution derivatives
777 du = 0.;
778
779 for (unsigned int l=0; l != n_dofs; l++)
780 du.add_scaled(dphi[l][qp], coef(l));
781
782 return;
783}

References libMesh::DiffContext::_elem_subsolutions, libMesh::DiffContext::get_dof_indices(), libMesh::FEGenericBase< OutputType >::get_dphi(), libMesh::FEMContext::get_elem_dim(), and libMesh::DiffContext::get_elem_solution().

◆ side_gradients()

template<typename OutputType >
template LIBMESH_EXPORT void libMesh::FEMContext::side_gradients< Tensor > ( unsigned int  var,
const NumericVector< Number > &  _system_vector,
std::vector< OutputType > &  side_gradients_vector 
) const
inherited

Fills a vector with the gradient of the solution variable var at all the quadrature points on the current element side.

Note
This is the preferred API.

Definition at line 788 of file fem_context.C.

791{
792 typedef typename TensorTools::MakeReal
794 OutputShape;
795
796 // Get local-to-global dof index lookup
797 const unsigned int n_dofs = cast_int<unsigned int>
798 (this->get_dof_indices(var).size());
799
800 // Get current local coefficients
801 const DenseSubVector<Number> & coef = get_localized_subvector(_system_vector, var);
802
803 // Get finite element object
804 FEGenericBase<OutputShape> * the_side_fe = nullptr;
805 this->get_side_fe<OutputShape>( var, the_side_fe, this->get_elem_dim() );
806
807 // Get shape function values at quadrature point
808 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputGradient>> & dphi = the_side_fe->get_dphi();
809
810 // Loop over all the q_points in this finite element
811 for (auto qp : index_range(du_vals))
812 {
813 OutputType & du = du_vals[qp];
814
815 du = 0;
816
817 // Compute the gradient at this q_point
818 for (unsigned int l=0; l != n_dofs; l++)
819 du.add_scaled(dphi[l][qp], coef(l));
820 }
821
822 return;
823}

References libMesh::DiffContext::get_dof_indices(), libMesh::FEGenericBase< OutputType >::get_dphi(), libMesh::FEMContext::get_elem_dim(), libMesh::DiffContext::get_localized_subvector(), and libMesh::index_range().

◆ side_hessian() [1/2]

Tensor libMesh::FEMContext::side_hessian ( unsigned int  var,
unsigned int  qp 
) const
inherited
Returns
The hessian of the solution variable var at the quadrature point qp on the current element side.
Note
This API is currently present for backward compatibility.

Definition at line 826 of file fem_context.C.

828{
829 Tensor d2u;
830
831 this->side_hessian( var, qp, d2u );
832
833 return d2u;
834}
Tensor side_hessian(unsigned int var, unsigned int qp) const

References libMesh::FEMContext::side_hessian().

Referenced by libMesh::FEMContext::side_hessian().

◆ side_hessian() [2/2]

template<typename OutputType >
void libMesh::FEMContext::side_hessian ( unsigned int  var,
unsigned int  qp,
OutputType &  d2u 
) const
inherited
Returns
The hessian of the solution variable var at the quadrature point qp on the current element side.
Note
This is the preferred API.

Definition at line 839 of file fem_context.C.

842{
843 this->some_hessian<OutputType,
845 <typename TensorTools::MakeReal
846 <typename TensorTools::DecrementRank
847 <typename TensorTools::DecrementRank
848 <OutputType>::type>::type>::type>,
849 &DiffContext::get_elem_solution>(var, qp, d2u);
850}

References libMesh::DiffContext::get_elem_solution(), libMesh::FEMContext::get_side_fe(), and libMesh::FEMContext::some_hessian().

◆ side_hessians()

template<typename OutputType >
template LIBMESH_EXPORT void libMesh::FEMContext::side_hessians< Tensor > ( unsigned int  var,
const NumericVector< Number > &  _system_vector,
std::vector< OutputType > &  d2u_vals 
) const
inherited

Fills a vector of hessians of the _system_vector at the all the quadrature points on the current element side.

This is the preferred API.

Definition at line 855 of file fem_context.C.

858{
859 typedef typename TensorTools::DecrementRank<OutputType>::type Rank1Decrement;
860 typedef typename TensorTools::DecrementRank<Rank1Decrement>::type Rank2Decrement;
861 typedef typename TensorTools::MakeReal<Rank2Decrement>::type OutputShape;
862
863 // Get local-to-global dof index lookup
864 const unsigned int n_dofs = cast_int<unsigned int>
865 (this->get_dof_indices(var).size());
866
867 // Get current local coefficients
868 const DenseSubVector<Number> & coef = get_localized_subvector(_system_vector, var);
869
870 // Get finite element object
871 FEGenericBase<OutputShape> * the_side_fe = nullptr;
872 this->get_side_fe<OutputShape>( var, the_side_fe, this->get_elem_dim() );
873
874 // Get shape function values at quadrature point
875 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputTensor>> & d2phi = the_side_fe->get_d2phi();
876
877 // Loop over all the q_points in this finite element
878 for (auto qp : index_range(d2u_vals))
879 {
880 OutputType & d2u = d2u_vals[qp];
881
882 // Compute the gradient at this q_point
883 d2u = 0;
884
885 for (unsigned int l=0; l != n_dofs; l++)
886 d2u.add_scaled(d2phi[l][qp], coef(l));
887 }
888
889 return;
890}

References libMesh::FEGenericBase< OutputType >::get_d2phi(), libMesh::DiffContext::get_dof_indices(), libMesh::FEMContext::get_elem_dim(), libMesh::DiffContext::get_localized_subvector(), and libMesh::index_range().

◆ side_rate()

template<typename OutputType >
template LIBMESH_EXPORT void libMesh::FEMContext::side_rate< Gradient > ( unsigned int  var,
unsigned int  qp,
OutputType &  u 
) const
inherited
Returns
The time derivative (rate) of the solution variable var at the quadrature point qp on the current element side.

Definition at line 1404 of file fem_context.C.

1406{
1407 this->some_value<OutputType,
1411}

References libMesh::DiffContext::get_elem_solution_rate(), libMesh::FEMContext::get_side_fe(), and libMesh::FEMContext::some_value().

◆ side_value() [1/2]

Number libMesh::FEMContext::side_value ( unsigned int  var,
unsigned int  qp 
) const
inherited
Returns
The value of the solution variable var at the quadrature point qp on the current element side.
Note
This API currently is present for backward compatibility.

Definition at line 685 of file fem_context.C.

687{
688 Number u = 0.;
689
690 this->side_value( var, qp, u );
691
692 return u;
693}
Number side_value(unsigned int var, unsigned int qp) const

References libMesh::FEMContext::side_value().

Referenced by LaplaceSystem::side_constraint(), CoupledSystemQoI::side_qoi(), CoupledSystemQoI::side_qoi_derivative(), CurlCurlSystem::side_time_derivative(), and libMesh::FEMContext::side_value().

◆ side_value() [2/2]

template<typename OutputType >
void libMesh::FEMContext::side_value ( unsigned int  var,
unsigned int  qp,
OutputType &  u 
) const
inherited
Returns
The value of the solution variable var at the quadrature point qp on the current element side.
Note
This is the preferred API.

Definition at line 697 of file fem_context.C.

700{
701 this->some_value<OutputType,
702 &FEMContext::get_side_fe<typename TensorTools::MakeReal<OutputType>::type>,
703 &DiffContext::get_elem_solution>(var, qp, u);
704}

References libMesh::DiffContext::get_elem_solution(), and libMesh::FEMContext::some_value().

◆ side_values()

template<typename OutputType >
template LIBMESH_EXPORT void libMesh::FEMContext::side_values< Gradient > ( unsigned int  var,
const NumericVector< Number > &  _system_vector,
std::vector< OutputType > &  side_values_vector 
) const
inherited

Fills a vector of values of the _system_vector at the all the quadrature points on the current element side.

Definition at line 708 of file fem_context.C.

711{
712 typedef typename TensorTools::MakeReal<OutputType>::type OutputShape;
713
714 // Get local-to-global dof index lookup
715 const unsigned int n_dofs = cast_int<unsigned int>
716 (this->get_dof_indices(var).size());
717
718 // Get current local coefficients
719 const DenseSubVector<Number> & coef = get_localized_subvector(_system_vector, var);
720
721 // Get the finite element object
722 FEGenericBase<OutputShape> * the_side_fe = nullptr;
723 this->get_side_fe<OutputShape>( var, the_side_fe, this->get_elem_dim() );
724
725 // Get shape function values at quadrature point
726 const std::vector<std::vector<OutputShape>> & phi = the_side_fe->get_phi();
727
728 // Loop over all the q_points on this element
729 for (auto qp : index_range(u_vals))
730 {
731 OutputType & u = u_vals[qp];
732
733 // Compute the value at this q_point
734 u = 0.;
735
736 for (unsigned int l=0; l != n_dofs; l++)
737 u += phi[l][qp] * coef(l);
738 }
739
740 return;
741}

References libMesh::DiffContext::get_dof_indices(), libMesh::FEMContext::get_elem_dim(), libMesh::DiffContext::get_localized_subvector(), libMesh::FEGenericBase< OutputType >::get_phi(), and libMesh::index_range().

◆ some_gradient()

template<typename OutputType , typename FEMContext::FENeeded< OutputType >::grad_getter fe_getter, FEMContext::diff_subsolution_getter subsolution_getter>
void libMesh::FEMContext::some_gradient ( unsigned int  var,
unsigned int  qp,
OutputType &  u 
) const
protectedinherited

Helper function to reduce some code duplication in the *interior_gradient methods.

Definition at line 373 of file fem_context.C.

374{
375 // Get local-to-global dof index lookup
376 const unsigned int n_dofs = cast_int<unsigned int>
377 (this->get_dof_indices(var).size());
378
379 // Get current local coefficients
380 const DenseSubVector<Number> & coef = (this->*subsolution_getter)(var);
381
382 // Get finite element object
383 typename FENeeded<OutputType>::grad_base * fe = nullptr;
384 (this->*fe_getter)( var, fe, this->get_elem_dim() );
385
386 // Get shape function values at quadrature point
387 const std::vector<std::vector
389 & dphi = fe->get_dphi();
390
391 // Accumulate solution derivatives
392 du = 0;
393
394 for (unsigned int l=0; l != n_dofs; l++)
395 du.add_scaled(dphi[l][qp], coef(l));
396
397 return;
398}
TensorTools::IncrementRank< OutputShape >::type OutputGradient
Definition fe_base.h:120
FEGenericBase< grad_shape > grad_base

References libMesh::DiffContext::get_dof_indices(), libMesh::FEGenericBase< OutputType >::get_dphi(), and libMesh::FEMContext::get_elem_dim().

Referenced by libMesh::FEMContext::fixed_interior_gradient(), libMesh::FEMContext::fixed_side_gradient(), libMesh::FEMContext::interior_gradient(), and libMesh::FEMContext::interior_rate_gradient().

◆ some_hessian()

template<typename OutputType , typename FEMContext::FENeeded< OutputType >::hess_getter fe_getter, FEMContext::diff_subsolution_getter subsolution_getter>
void libMesh::FEMContext::some_hessian ( unsigned int  var,
unsigned int  qp,
OutputType &  u 
) const
protectedinherited

Helper function to reduce some code duplication in the *interior_hessian methods.

Definition at line 406 of file fem_context.C.

407{
408 // Get local-to-global dof index lookup
409 const unsigned int n_dofs = cast_int<unsigned int>
410 (this->get_dof_indices(var).size());
411
412 // Get current local coefficients
413 const DenseSubVector<Number> & coef = (this->*subsolution_getter)(var);
414
415 // Get finite element object
416 typename FENeeded<OutputType>::hess_base * fe = nullptr;
417 (this->*fe_getter)( var, fe, this->get_elem_dim() );
418
419 // Get shape function values at quadrature point
420 const std::vector<std::vector
422 & d2phi = fe->get_d2phi();
423
424 // Accumulate solution second derivatives
425 d2u = 0.0;
426
427 for (unsigned int l=0; l != n_dofs; l++)
428 d2u.add_scaled(d2phi[l][qp], coef(l));
429
430 return;
431}
TensorTools::IncrementRank< OutputGradient >::type OutputTensor
Definition fe_base.h:121
FEGenericBase< hess_shape > hess_base

References libMesh::FEGenericBase< OutputType >::get_d2phi(), libMesh::DiffContext::get_dof_indices(), and libMesh::FEMContext::get_elem_dim().

Referenced by libMesh::FEMContext::fixed_interior_hessian(), libMesh::FEMContext::fixed_side_hessian(), libMesh::FEMContext::interior_hessian(), and libMesh::FEMContext::side_hessian().

◆ some_value()

template<typename OutputType , typename FEMContext::FENeeded< OutputType >::value_getter fe_getter, FEMContext::diff_subsolution_getter subsolution_getter>
void libMesh::FEMContext::some_value ( unsigned int  var,
unsigned int  qp,
OutputType &  u 
) const
protectedinherited

Helper function to reduce some code duplication in the *interior_value methods.

Definition at line 339 of file fem_context.C.

340{
341 // Get local-to-global dof index lookup
342 const unsigned int n_dofs = cast_int<unsigned int>
343 (this->get_dof_indices(var).size());
344
345 // Get current local coefficients
346 const DenseSubVector<Number> & coef = (this->*subsolution_getter)(var);
347 libmesh_assert_equal_to(coef.size(), n_dofs);
348
349 // Get finite element object
350 typename FENeeded<OutputType>::value_base * fe = nullptr;
351 (this->*fe_getter)( var, fe, this->get_elem_dim() );
352
353 // Get shape function values at quadrature point
354 const std::vector<std::vector
355 <typename FENeeded<OutputType>::value_shape>> & phi = fe->get_phi();
356 libmesh_assert_equal_to(phi.size(), n_dofs);
357
358 // Accumulate solution value
359 u = 0.;
360
361 for (unsigned int l=0; l != n_dofs; l++)
362 {
363 libmesh_assert_less(qp, phi[l].size());
364 u += phi[l][qp] * coef(l);
365 }
366}
TensorTools::MakeReal< OutputType >::type value_shape
FEGenericBase< value_shape > value_base

References libMesh::DiffContext::get_dof_indices(), libMesh::FEMContext::get_elem_dim(), libMesh::FEGenericBase< OutputType >::get_phi(), and libMesh::DenseSubVector< T >::size().

Referenced by libMesh::FEMContext::fixed_interior_value(), libMesh::FEMContext::fixed_side_value(), libMesh::FEMContext::interior_accel(), libMesh::FEMContext::interior_rate(), libMesh::FEMContext::interior_value(), libMesh::FEMContext::side_accel(), libMesh::FEMContext::side_rate(), and libMesh::FEMContext::side_value().

◆ use_default_quadrature_rules()

void libMesh::FEMContext::use_default_quadrature_rules ( int  extra_quadrature_order = 0)
inherited

Use quadrature rules designed to over-integrate a mass matrix, plus extra_quadrature_order.

Definition at line 154 of file fem_context.C.

155{
156 _extra_quadrature_order = extra_quadrature_order;
157
158 FEType hardest_fe_type = this->find_hardest_fe_type();
159
160 for (const auto & dim : _elem_dims)
161 {
162 // Create an adequate quadrature rule
164 hardest_fe_type.default_quadrature_rule(dim, _extra_quadrature_order);
165 if (dim)
167 hardest_fe_type.default_quadrature_rule(dim-1, _extra_quadrature_order);
168 if (dim == 3)
169 _edge_qrule = hardest_fe_type.default_quadrature_rule(1, _extra_quadrature_order);
170 }
171
173}
FEType find_hardest_fe_type()
Helper function for creating quadrature rules.
Definition fem_context.C:85
void attach_quadrature_rules()
Helper function for attaching quadrature rules.

References libMesh::FEMContext::_edge_qrule, libMesh::FEMContext::_elem_dims, libMesh::FEMContext::_element_qrule, libMesh::FEMContext::_extra_quadrature_order, libMesh::FEMContext::_side_qrule, libMesh::FEMContext::attach_quadrature_rules(), libMesh::FEType::default_quadrature_rule(), dim, and libMesh::FEMContext::find_hardest_fe_type().

Referenced by libMesh::FEMContext::init_internal_data().

◆ use_quadrature_rules()

void libMesh::FEMContext::use_quadrature_rules ( QuadratureType  qt,
int  extra_quadrature_order = 0 
)
inherited

Use a specified quadrature rule type qt for every element, side, and edge dimension, at the default quadrature order for the hardest FE type plus extra_quadrature_order.

This is useful when the default Gauss rules (whose points lie in the element interior) are inadequate. For example, rules whose points include the element vertices (QTRAP, QSIMPSON, QNODAL, QGAUSS_LOBATTO) can detect integrand behavior that is localized at element corners — a feature interior Gauss points can miss entirely. Note that not every quadrature type is defined for every element type (e.g. QGAUSS_LOBATTO is only available for tensor-product elements); it is the caller's responsibility to pick a type compatible with the mesh.

Definition at line 197 of file fem_context.C.

198{
199 _extra_quadrature_order = extra_quadrature_order;
200
201 const FEType hardest_fe_type = this->find_hardest_fe_type();
202
203 // Match the accuracy of the default rule (which over-integrates a mass
204 // matrix), then add any requested extra order on top.
205 const Order order = static_cast<Order>(hardest_fe_type.default_quadrature_order()
206 + extra_quadrature_order);
207
208 for (const auto & dim : _elem_dims)
209 {
210 // Create the requested quadrature rule for the element and its
211 // lower-dimensional sides/edges
212 _element_qrule[dim] = QBase::build(qt, dim, order);
213 if (dim)
214 _side_qrule[dim] = QBase::build(qt, cast_int<unsigned int>(dim - 1), order);
215 if (dim == 3)
216 _edge_qrule = QBase::build(qt, 1, order);
217 }
218
220}
static std::unique_ptr< QBase > build(std::string_view name, const unsigned int dim, const Order order=INVALID_ORDER)
Builds a specific quadrature rule based on the name string.

References libMesh::FEMContext::_edge_qrule, libMesh::FEMContext::_elem_dims, libMesh::FEMContext::_element_qrule, libMesh::FEMContext::_extra_quadrature_order, libMesh::FEMContext::_side_qrule, libMesh::FEMContext::attach_quadrature_rules(), libMesh::QBase::build(), libMesh::FEType::default_quadrature_order(), dim, and libMesh::FEMContext::find_hardest_fe_type().

Referenced by libMesh::VariationalSmootherSystem::init_context().

◆ use_unweighted_quadrature_rules()

void libMesh::FEMContext::use_unweighted_quadrature_rules ( int  extra_quadrature_order = 0)
inherited

Use quadrature rules designed to exactly integrate unweighted undistorted basis functions, plus extra_quadrature_order.

Definition at line 176 of file fem_context.C.

177{
178 _extra_quadrature_order = extra_quadrature_order;
179
180 FEType hardest_fe_type = this->find_hardest_fe_type();
181
182 for (const auto & dim : _elem_dims)
183 {
184 // Create an adequate quadrature rule
186 hardest_fe_type.unweighted_quadrature_rule(dim, _extra_quadrature_order);
188 hardest_fe_type.unweighted_quadrature_rule(dim-1, _extra_quadrature_order);
189 if (dim == 3)
190 _edge_qrule = hardest_fe_type.unweighted_quadrature_rule(1, _extra_quadrature_order);
191 }
192
194}

References libMesh::FEMContext::_edge_qrule, libMesh::FEMContext::_elem_dims, libMesh::FEMContext::_element_qrule, libMesh::FEMContext::_extra_quadrature_order, libMesh::FEMContext::_side_qrule, libMesh::FEMContext::attach_quadrature_rules(), dim, libMesh::FEMContext::find_hardest_fe_type(), and libMesh::FEType::unweighted_quadrature_rule().

Member Data Documentation

◆ _active_vars

std::unique_ptr<const std::vector<unsigned int> > libMesh::FEMContext::_active_vars
protectedinherited

◆ _atype

AlgebraicType libMesh::FEMContext::_atype
protectedinherited

Keep track of what type of algebra reinitialization is to be done.

Definition at line 1087 of file fem_context.h.

Referenced by libMesh::FEMContext::algebraic_type(), and libMesh::FEMContext::set_algebraic_type().

◆ _boundary_info

const BoundaryInfo& libMesh::FEMContext::_boundary_info
protectedinherited

Saved reference to BoundaryInfo on the mesh for this System.

Used to answer boundary id requests.

Definition at line 1205 of file fem_context.h.

Referenced by libMesh::FEMContext::has_side_boundary_id(), and libMesh::FEMContext::side_boundary_ids().

◆ _custom_solution

const NumericVector<Number>* libMesh::FEMContext::_custom_solution
protectedinherited

Data with which to do algebra reinitialization.

Definition at line 1092 of file fem_context.h.

Referenced by libMesh::FEMContext::pre_fe_reinit(), and libMesh::FEMContext::set_custom_solution().

◆ _deltat

Real* libMesh::DiffContext::_deltat
privateinherited

Defaults to nullptr, can optionally be used to point to a timestep value in the System-derived class responsible for creating this DiffContext.

In DiffSystem's build_context() function, is assigned to point to the deltat member of that class.

Accessible via public get_deltat()/set_deltat() methods of this class.

Always test for nullptr before using!

Definition at line 655 of file diff_context.h.

Referenced by libMesh::DiffContext::get_deltat_value(), and libMesh::DiffContext::set_deltat_pointer().

◆ _dg_terms_active

bool libMesh::DGFEMContext::_dg_terms_active
private

Boolean flag to indicate whether or not the DG terms have been assembled and should be used in the global matrix assembly.

Definition at line 296 of file dg_fem_context.h.

Referenced by dg_terms_are_active(), neighbor_side_fe_reinit(), and side_fe_reinit().

◆ _dim

unsigned char libMesh::FEMContext::_dim
protectedinherited

Cached dimension of largest dimension element in this mesh.

Definition at line 1215 of file fem_context.h.

Referenced by DGFEMContext(), libMesh::FEMContext::get_dim(), and libMesh::FEMContext::get_elem_dim().

◆ _dof_indices

std::vector<dof_id_type> libMesh::DiffContext::_dof_indices
protectedinherited

Global Degree of freedom index lists.

Definition at line 639 of file diff_context.h.

Referenced by libMesh::DiffContext::get_dof_indices(), libMesh::DiffContext::get_dof_indices(), and libMesh::DiffContext::n_dof_indices().

◆ _dof_indices_var

std::vector<std::vector<dof_id_type> > libMesh::DiffContext::_dof_indices_var
protectedinherited

◆ _edge_fe

std::map<FEType, std::unique_ptr<FEAbstract> > libMesh::FEMContext::_edge_fe
protectedinherited

◆ _edge_fe_var

std::vector<FEAbstract *> libMesh::FEMContext::_edge_fe_var
protectedinherited

◆ _edge_qrule

std::unique_ptr<QBase> libMesh::FEMContext::_edge_qrule
protectedinherited

Quadrature rules for element edges.

If the FEM context is told to prepare for edge integration on 3D elements, it will try to find a quadrature rule that correctly integrates all variables. Because edge rules only apply to 3D elements, we don't need to worry about multiple dimensions

Definition at line 1251 of file fem_context.h.

Referenced by libMesh::FEMContext::attach_quadrature_rules(), libMesh::FEMContext::get_edge_qrule(), libMesh::FEMContext::use_default_quadrature_rules(), libMesh::FEMContext::use_quadrature_rules(), and libMesh::FEMContext::use_unweighted_quadrature_rules().

◆ _elem

const Elem* libMesh::FEMContext::_elem
protectedinherited

◆ _elem_dim

unsigned char libMesh::FEMContext::_elem_dim
protectedinherited

Cached dimension of this->_elem.

Definition at line 1220 of file fem_context.h.

Referenced by libMesh::FEMContext::get_elem_dim(), and libMesh::FEMContext::set_elem().

◆ _elem_dims

std::set<unsigned char> libMesh::FEMContext::_elem_dims
protectedinherited

◆ _elem_elem_jacobian

DenseMatrix<Number> libMesh::DGFEMContext::_elem_elem_jacobian
private

The DG Jacobian terms.

Trial and test functions come from either element or neighbor.

Definition at line 257 of file dg_fem_context.h.

Referenced by DGFEMContext(), get_elem_elem_jacobian(), get_elem_elem_jacobian(), and neighbor_side_fe_reinit().

◆ _elem_elem_subjacobians

std::vector<std::vector<std::unique_ptr<DenseSubMatrix<Number> > > > libMesh::DGFEMContext::_elem_elem_subjacobians
private

◆ _elem_fixed_solution

DenseVector<Number> libMesh::DiffContext::_elem_fixed_solution
protectedinherited

Element by element components of nonlinear_solution at a fixed point in a timestep, for optional use by e.g.

stabilized methods

Definition at line 604 of file diff_context.h.

Referenced by libMesh::DiffContext::DiffContext(), libMesh::DiffContext::get_elem_fixed_solution(), and libMesh::DiffContext::get_elem_fixed_solution().

◆ _elem_fixed_subsolutions

std::vector<DenseSubVector<Number> > libMesh::DiffContext::_elem_fixed_subsolutions
protectedinherited

◆ _elem_jacobian

DenseMatrix<Number> libMesh::DiffContext::_elem_jacobian
protectedinherited

Element jacobian: derivatives of elem_residual with respect to elem_solution.

Only initialized if _have_local_matrices

Definition at line 616 of file diff_context.h.

Referenced by libMesh::DiffContext::DiffContext(), libMesh::DiffContext::get_elem_jacobian(), and libMesh::DiffContext::get_elem_jacobian().

◆ _elem_neighbor_jacobian

DenseMatrix<Number> libMesh::DGFEMContext::_elem_neighbor_jacobian
private

◆ _elem_neighbor_subjacobians

std::vector<std::vector<std::unique_ptr<DenseSubMatrix<Number> > > > libMesh::DGFEMContext::_elem_neighbor_subjacobians
private

◆ _elem_qoi

std::vector<Number> libMesh::DiffContext::_elem_qoi
protectedinherited

Element quantity of interest contributions.

Definition at line 621 of file diff_context.h.

Referenced by libMesh::DiffContext::DiffContext(), libMesh::DiffContext::get_qois(), and libMesh::DiffContext::get_qois().

◆ _elem_qoi_derivative

std::vector<DenseVector<Number> > libMesh::DiffContext::_elem_qoi_derivative
protectedinherited

Element quantity of interest derivative contributions.

Definition at line 626 of file diff_context.h.

Referenced by libMesh::DiffContext::DiffContext(), libMesh::DiffContext::get_qoi_derivatives(), and libMesh::DiffContext::get_qoi_derivatives().

◆ _elem_qoi_subderivatives

std::vector<std::vector<DenseSubVector<Number> > > libMesh::DiffContext::_elem_qoi_subderivatives
protectedinherited

◆ _elem_residual

DenseVector<Number> libMesh::DiffContext::_elem_residual
protectedinherited

◆ _elem_solution

DenseVector<Number> libMesh::DiffContext::_elem_solution
protectedinherited

Element by element components of nonlinear_solution as adjusted by a time_solver.

Definition at line 582 of file diff_context.h.

Referenced by libMesh::DiffContext::DiffContext(), libMesh::DiffContext::get_elem_solution(), and libMesh::DiffContext::get_elem_solution().

◆ _elem_solution_accel

DenseVector<Number> libMesh::DiffContext::_elem_solution_accel
protectedinherited

Element by element components of du/dt as adjusted by a time_solver.

Definition at line 596 of file diff_context.h.

Referenced by libMesh::DiffContext::DiffContext(), libMesh::DiffContext::get_elem_solution_accel(), and libMesh::DiffContext::get_elem_solution_accel().

◆ _elem_solution_rate

DenseVector<Number> libMesh::DiffContext::_elem_solution_rate
protectedinherited

Element by element components of du/dt as adjusted by a time_solver.

Definition at line 589 of file diff_context.h.

Referenced by libMesh::DiffContext::DiffContext(), libMesh::DiffContext::get_elem_solution_rate(), and libMesh::DiffContext::get_elem_solution_rate().

◆ _elem_subjacobians

std::vector<std::vector<DenseSubMatrix<Number> > > libMesh::DiffContext::_elem_subjacobians
protectedinherited

◆ _elem_subresiduals

std::vector<DenseSubVector<Number> > libMesh::DiffContext::_elem_subresiduals
protectedinherited

Element residual subvectors and (if _have_local_matrices) Jacobian submatrices.

Definition at line 633 of file diff_context.h.

Referenced by libMesh::DiffContext::DiffContext(), libMesh::DiffContext::get_elem_residual(), and libMesh::DiffContext::get_elem_residual().

◆ _elem_subsolution_accels

std::vector<DenseSubVector<Number> > libMesh::DiffContext::_elem_subsolution_accels
protectedinherited

◆ _elem_subsolution_rates

std::vector<DenseSubVector<Number> > libMesh::DiffContext::_elem_subsolution_rates
protectedinherited

◆ _elem_subsolutions

std::vector<DenseSubVector<Number> > libMesh::DiffContext::_elem_subsolutions
protectedinherited

◆ _element_fe

std::vector<std::map<FEType, std::unique_ptr<FEAbstract> > > libMesh::FEMContext::_element_fe
protectedinherited

Finite element objects for each variable's interior, sides and edges.

We store FE objects for each element dimension present in the mesh, except for edge_fe which only applies to 3D elements.

Definition at line 1186 of file fem_context.h.

Referenced by libMesh::FEMContext::attach_quadrature_rules(), libMesh::FEMContext::elem_fe_reinit(), libMesh::FEMContext::init_internal_data(), and libMesh::FEMContext::set_jacobian_tolerance().

◆ _element_fe_var

std::vector<std::vector<FEAbstract *> > libMesh::FEMContext::_element_fe_var
protectedinherited

Pointers to the same finite element objects, but indexed by variable number.

We store FE objects for each element dimension present in the mesh, except for edge_fe_var which only applies for 3D elements.

Definition at line 1197 of file fem_context.h.

Referenced by libMesh::FEMContext::get_element_fe(), libMesh::FEMContext::get_element_fe(), libMesh::FEMContext::get_element_fe(), and libMesh::FEMContext::init_internal_data().

◆ _element_qrule

std::vector<std::unique_ptr<QBase> > libMesh::FEMContext::_element_qrule
protectedinherited

Quadrature rule for element interior.

The FEM context will try to find a quadrature rule that correctly integrates all variables. We prepare quadrature rules for each element dimension in the mesh.

Definition at line 1234 of file fem_context.h.

Referenced by libMesh::FEMContext::attach_quadrature_rules(), libMesh::FEMContext::get_element_qrule(), libMesh::FEMContext::use_default_quadrature_rules(), libMesh::FEMContext::use_quadrature_rules(), and libMesh::FEMContext::use_unweighted_quadrature_rules().

◆ _extra_quadrature_order

int libMesh::FEMContext::_extra_quadrature_order
protectedinherited

◆ _have_local_matrices

const bool libMesh::DiffContext::_have_local_matrices
protectedinherited

◆ _is_adjoint

bool libMesh::DiffContext::_is_adjoint
privateinherited

Is this context to be used for a primal or adjoint solve?

Definition at line 665 of file diff_context.h.

Referenced by libMesh::DiffContext::is_adjoint(), and libMesh::DiffContext::is_adjoint().

◆ _localized_vectors

std::map<const NumericVector<Number> *, std::pair<DenseVector<Number>, std::vector<DenseSubVector<Number> > > > libMesh::DiffContext::_localized_vectors
protectedinherited

Contains pointers to vectors the user has asked to be localized, keyed with pairs of element localized versions of that vector and per variable views.

Definition at line 571 of file diff_context.h.

Referenced by libMesh::DiffContext::add_localized_vector(), libMesh::DiffContext::get_localized_subvector(), libMesh::DiffContext::get_localized_subvector(), libMesh::DiffContext::get_localized_vector(), libMesh::DiffContext::get_localized_vector(), and libMesh::FEMContext::pre_fe_reinit().

◆ _mesh_sys

System* libMesh::FEMContext::_mesh_sys
protectedinherited

◆ _mesh_x_var

unsigned int libMesh::FEMContext::_mesh_x_var
protectedinherited

Variables from which to acquire moving mesh information.

Definition at line 1082 of file fem_context.h.

Referenced by libMesh::FEMContext::get_mesh_x_var(), and libMesh::FEMContext::set_mesh_x_var().

◆ _mesh_y_var

unsigned int libMesh::FEMContext::_mesh_y_var
protectedinherited

◆ _mesh_z_var

unsigned int libMesh::FEMContext::_mesh_z_var
protectedinherited

◆ _neighbor

const Elem* libMesh::DGFEMContext::_neighbor
private

Current neighbor element for assembling DG terms.

Definition at line 246 of file dg_fem_context.h.

Referenced by get_neighbor(), and set_neighbor().

◆ _neighbor_dof_indices

std::vector<dof_id_type> libMesh::DGFEMContext::_neighbor_dof_indices
private

Global Degree of freedom index lists for the neighbor element.

Definition at line 274 of file dg_fem_context.h.

Referenced by get_neighbor_dof_indices(), and neighbor_side_fe_reinit().

◆ _neighbor_dof_indices_var

std::vector<std::vector<dof_id_type> > libMesh::DGFEMContext::_neighbor_dof_indices_var
private

Definition at line 275 of file dg_fem_context.h.

Referenced by get_neighbor_dof_indices(), and neighbor_side_fe_reinit().

◆ _neighbor_elem_jacobian

DenseMatrix<Number> libMesh::DGFEMContext::_neighbor_elem_jacobian
private

◆ _neighbor_elem_subjacobians

std::vector<std::vector<std::unique_ptr<DenseSubMatrix<Number> > > > libMesh::DGFEMContext::_neighbor_elem_subjacobians
private

◆ _neighbor_neighbor_jacobian

DenseMatrix<Number> libMesh::DGFEMContext::_neighbor_neighbor_jacobian
private

◆ _neighbor_neighbor_subjacobians

std::vector<std::vector<std::unique_ptr<DenseSubMatrix<Number> > > > libMesh::DGFEMContext::_neighbor_neighbor_subjacobians
private

◆ _neighbor_residual

DenseVector<Number> libMesh::DGFEMContext::_neighbor_residual
private

Residual vector of the neighbor component.

Definition at line 251 of file dg_fem_context.h.

Referenced by DGFEMContext(), get_neighbor_residual(), get_neighbor_residual(), and neighbor_side_fe_reinit().

◆ _neighbor_side_fe

std::map<FEType, std::unique_ptr<FEAbstract> > libMesh::DGFEMContext::_neighbor_side_fe
private

Finite element objects for each variable's sides on the neighbor element.

We do not need FE objects for neighbor element interior since we just need to handle DG interface terms here.

Definition at line 284 of file dg_fem_context.h.

Referenced by DGFEMContext(), and neighbor_side_fe_reinit().

◆ _neighbor_side_fe_var

std::vector<FEAbstract *> libMesh::DGFEMContext::_neighbor_side_fe_var
private

Pointers to the same finite element objects on the neighbor element, but indexed by variable number.

Definition at line 290 of file dg_fem_context.h.

Referenced by DGFEMContext(), and get_neighbor_side_fe().

◆ _neighbor_subresiduals

std::vector<std::unique_ptr<DenseSubVector<Number> > > libMesh::DGFEMContext::_neighbor_subresiduals
private

Element residual subvectors and Jacobian submatrices.

Definition at line 265 of file dg_fem_context.h.

Referenced by DGFEMContext(), get_neighbor_residual(), get_neighbor_residual(), and neighbor_side_fe_reinit().

◆ _real_fe

std::unique_ptr<FEGenericBase<Real> > libMesh::FEMContext::_real_fe
mutableprotectedinherited

Definition at line 1094 of file fem_context.h.

Referenced by libMesh::FEMContext::cached_fe().

◆ _real_fe_derivative_level

int libMesh::FEMContext::_real_fe_derivative_level
mutableprotectedinherited

Definition at line 1096 of file fem_context.h.

Referenced by libMesh::FEMContext::cached_fe().

◆ _real_fe_is_inf

bool libMesh::FEMContext::_real_fe_is_inf
mutableprotectedinherited

Definition at line 1100 of file fem_context.h.

Referenced by libMesh::FEMContext::cached_fe().

◆ _real_grad_fe

std::unique_ptr<FEGenericBase<RealGradient> > libMesh::FEMContext::_real_grad_fe
mutableprotectedinherited

Definition at line 1095 of file fem_context.h.

Referenced by libMesh::FEMContext::cached_fe().

◆ _real_grad_fe_derivative_level

int libMesh::FEMContext::_real_grad_fe_derivative_level
mutableprotectedinherited

Definition at line 1097 of file fem_context.h.

Referenced by libMesh::FEMContext::cached_fe().

◆ _real_grad_fe_is_inf

bool libMesh::FEMContext::_real_grad_fe_is_inf
mutableprotectedinherited

Definition at line 1101 of file fem_context.h.

Referenced by libMesh::FEMContext::cached_fe().

◆ _side_fe

std::vector<std::map<FEType, std::unique_ptr<FEAbstract> > > libMesh::FEMContext::_side_fe
protectedinherited

◆ _side_fe_var

std::vector<std::vector<FEAbstract *> > libMesh::FEMContext::_side_fe_var
protectedinherited

◆ _side_qrule

std::vector<std::unique_ptr<QBase> > libMesh::FEMContext::_side_qrule
protectedinherited

Quadrature rules for element sides The FEM context will try to find a quadrature rule that correctly integrates all variables.

We prepare quadrature rules for each element dimension in the mesh.

Definition at line 1242 of file fem_context.h.

Referenced by libMesh::FEMContext::attach_quadrature_rules(), libMesh::FEMContext::get_side_qrule(), libMesh::FEMContext::use_default_quadrature_rules(), libMesh::FEMContext::use_quadrature_rules(), and libMesh::FEMContext::use_unweighted_quadrature_rules().

◆ _system

const System& libMesh::DiffContext::_system
privateinherited

A reference to the system this context is constructed with.

Definition at line 660 of file diff_context.h.

Referenced by libMesh::DiffContext::get_system().

◆ edge

unsigned char libMesh::FEMContext::edge
inherited

Current edge for edge_* to examine.

Definition at line 1036 of file fem_context.h.

Referenced by libMesh::FEMContext::get_edge().

◆ elem_solution_accel_derivative

Real libMesh::DiffContext::elem_solution_accel_derivative
inherited

The derivative of elem_solution_accel with respect to the current nonlinear solution, for use by systems with non default mass_residual terms.

Definition at line 510 of file diff_context.h.

Referenced by libMesh::NewmarkSolver::_general_residual(), libMesh::DiffContext::get_elem_solution_accel_derivative(), and libMesh::FirstOrderUnsteadySolver::prepare_accel().

◆ elem_solution_derivative

Real libMesh::DiffContext::elem_solution_derivative
inherited

◆ elem_solution_rate_derivative

Real libMesh::DiffContext::elem_solution_rate_derivative
inherited

◆ fixed_solution_derivative

Real libMesh::DiffContext::fixed_solution_derivative
inherited

The derivative of elem_fixed_solution with respect to the nonlinear solution, for use by systems constructing jacobians with elem_fixed_solution based methods.

Definition at line 517 of file diff_context.h.

Referenced by libMesh::Euler2Solver::_general_residual(), libMesh::EulerSolver::_general_residual(), libMesh::SteadySolver::_general_residual(), and libMesh::DiffContext::get_fixed_solution_derivative().

◆ side

unsigned char libMesh::FEMContext::side
inherited

◆ system_time

const Real libMesh::DiffContext::system_time
inherited

This is the time stored in the System class at the time this context was created, i.e.

the time at the beginning of the current timestep. This value gets set in the constructor and unlike DiffContext::time, is not tweaked mid-timestep by transient solvers: it remains equal to the value it was assigned at construction.

Definition at line 490 of file diff_context.h.

Referenced by libMesh::DiffContext::get_system_time().

◆ time

Real libMesh::DiffContext::time
inherited

For time-dependent problems, this is the time t for which the current nonlinear_solution is defined.

FIXME - this needs to be tweaked mid-timestep by all transient solvers!

Definition at line 481 of file diff_context.h.

Referenced by libMesh::DiffContext::get_time(), and libMesh::DiffContext::set_time().


The documentation for this class was generated from the following files: