45 _custom_solution(nullptr),
46 _boundary_info(sys.get_mesh().get_boundary_info()),
48 _dim(
cast_int<unsigned char>(sys.get_mesh().mesh_dimension())),
50 _elem_dims(sys.get_mesh().elem_dimensions()),
53 _extra_quadrature_order(sys.extra_quadrature_order)
66 _custom_solution(nullptr),
67 _boundary_info(sys.get_mesh().get_boundary_info()),
69 _dim(
cast_int<unsigned char>(sys.get_mesh().mesh_dimension())),
71 _elem_dims(sys.get_mesh().elem_dimensions()),
74 _extra_quadrature_order(extra_quadrature_order)
90 for (
int i=0; i<4; ++i)
94 for (
int i=0; i<4; ++i)
95 _side_fe.push_back(std::map<
FEType, std::unique_ptr<FEAbstract>>());
103 unsigned int nv = sys.
n_vars();
108 bool have_scalar =
false;
110 for (
unsigned int i=0; i != nv; ++i)
131 else if (fe_type.
order > hardest_fe_type.
order)
132 hardest_fe_type = fe_type;
156 for (
unsigned int i=0; i != nv; ++i)
195 #ifdef LIBMESH_ENABLE_DEPRECATED 198 libmesh_deprecated();
211 template<
typename OutputType,
217 const unsigned int n_dofs = cast_int<unsigned int>
228 const std::vector<std::vector
234 for (
unsigned int l=0; l != n_dofs; l++)
235 u += phi[l][qp] * coef(l);
240 template<
typename OutputType,
246 const unsigned int n_dofs = cast_int<unsigned int>
257 const std::vector<std::vector
264 for (
unsigned int l=0; l != n_dofs; l++)
265 du.add_scaled(dphi[l][qp], coef(l));
272 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 273 template<
typename OutputType,
279 const unsigned int n_dofs = cast_int<unsigned int>
290 const std::vector<std::vector
297 for (
unsigned int l=0; l != n_dofs; l++)
298 d2u.add_scaled(d2phi[l][qp], coef(l));
315 template<
typename OutputType>
317 OutputType & u)
const 320 &FEMContext::get_element_fe<typename TensorTools::MakeReal<OutputType>::type>,
325 template<
typename OutputType>
328 std::vector<OutputType> & u_vals)
const 333 const unsigned int n_dofs = cast_int<unsigned int>
341 this->get_element_fe<OutputShape>( var, fe, this->
get_elem_dim() );
344 const std::vector<std::vector<OutputShape>> & phi = fe->
get_phi();
347 for (std::size_t qp=0; qp != u_vals.size(); qp++)
349 OutputType & u = u_vals[qp];
354 for (
unsigned int l=0; l != n_dofs; l++)
355 u += phi[l][qp] * coef(l);
362 unsigned int qp)
const 373 template<
typename OutputType>
376 OutputType & du)
const 381 <OutputType>::type>::type>,
387 template<
typename OutputType>
390 std::vector<OutputType> & du_vals)
const 397 const unsigned int n_dofs = cast_int<unsigned int>
405 this->get_element_fe<OutputShape>( var, fe, this->
get_elem_dim() );
408 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputGradient>> & dphi = fe->
get_dphi();
411 for (std::size_t qp=0; qp != du_vals.size(); qp++)
413 OutputType & du = du_vals[qp];
418 for (
unsigned int l=0; l != n_dofs; l++)
419 du.add_scaled(dphi[l][qp], coef(l));
425 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 435 template<
typename OutputType>
437 OutputType & d2u)
const 444 <OutputType>::type>::type>::type>,
449 template<
typename OutputType>
452 std::vector<OutputType> & d2u_vals)
const 459 const unsigned int n_dofs = cast_int<unsigned int>
467 this->get_element_fe<OutputShape>( var, fe, this->
get_elem_dim() );
470 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputTensor>> & d2phi = fe->
get_d2phi();
473 for (std::size_t qp=0; qp != d2u_vals.size(); qp++)
475 OutputType & d2u = d2u_vals[qp];
480 for (
unsigned int l=0; l != n_dofs; l++)
481 d2u.add_scaled(d2phi[l][qp], coef(l));
488 #endif // ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 491 template<
typename OutputType>
493 OutputType & curl_u)
const 498 const unsigned int n_dofs = cast_int<unsigned int>
507 this->get_element_fe<OutputShape>( var, fe, this->
get_elem_dim() );
510 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputShape>> & curl_phi = fe->
get_curl_phi();
515 for (
unsigned int l=0; l != n_dofs; l++)
516 curl_u.add_scaled(curl_phi[l][qp], coef(l));
522 template<
typename OutputType>
524 OutputType & div_u)
const 531 const unsigned int n_dofs = cast_int<unsigned int>
540 this->get_element_fe<OutputShape>( var, fe, this->
get_elem_dim() );
543 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputDivergence>> & div_phi = fe->
get_div_phi();
548 for (
unsigned int l=0; l != n_dofs; l++)
549 div_u += div_phi[l][qp] * coef(l);
556 unsigned int qp)
const 566 template<
typename OutputType>
569 OutputType & u)
const 572 &FEMContext::get_side_fe<typename TensorTools::MakeReal<OutputType>::type>,
577 template<
typename OutputType>
580 std::vector<OutputType> & u_vals)
const 585 const unsigned int n_dofs = cast_int<unsigned int>
593 this->get_side_fe<OutputShape>( var, the_side_fe, this->
get_elem_dim() );
596 const std::vector<std::vector<OutputShape>> & phi = the_side_fe->
get_phi();
599 for (std::size_t qp=0; qp != u_vals.size(); qp++)
601 OutputType & u = u_vals[qp];
606 for (
unsigned int l=0; l != n_dofs; l++)
607 u += phi[l][qp] * coef(l);
623 template<
typename OutputType>
625 OutputType & du)
const 632 const unsigned int n_dofs = cast_int<unsigned int>
641 this->get_side_fe<OutputShape>( var, the_side_fe, this->
get_elem_dim() );
644 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputGradient>> & dphi = the_side_fe->
get_dphi();
649 for (
unsigned int l=0; l != n_dofs; l++)
650 du.add_scaled(dphi[l][qp], coef(l));
657 template<
typename OutputType>
660 std::vector<OutputType> & du_vals)
const 667 const unsigned int n_dofs = cast_int<unsigned int>
675 this->get_side_fe<OutputShape>( var, the_side_fe, this->
get_elem_dim() );
678 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputGradient>> & dphi = the_side_fe->
get_dphi();
681 for (std::size_t qp=0; qp != du_vals.size(); qp++)
683 OutputType & du = du_vals[qp];
688 for (
unsigned int l=0; l != n_dofs; l++)
689 du.add_scaled(dphi[l][qp], coef(l));
695 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 697 unsigned int qp)
const 708 template<
typename OutputType>
711 OutputType & d2u)
const 718 <OutputType>::type>::type>::type>,
724 template<
typename OutputType>
727 std::vector<OutputType> & d2u_vals)
const 734 const unsigned int n_dofs = cast_int<unsigned int>
742 this->get_side_fe<OutputShape>( var, the_side_fe, this->
get_elem_dim() );
745 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputTensor>> & d2phi = the_side_fe->
get_d2phi();
748 for (std::size_t qp=0; qp != d2u_vals.size(); qp++)
750 OutputType & d2u = d2u_vals[qp];
755 for (
unsigned int l=0; l != n_dofs; l++)
756 d2u.add_scaled(d2phi[l][qp], coef(l));
764 #endif // ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 777 template<
typename OutputType>
781 const Real tolerance)
const 786 const unsigned int n_dofs = cast_int<unsigned int>
795 this->get_element_fe<OutputShape>( var, fe, this->
get_elem_dim() );
802 const std::vector<std::vector<OutputShape>> & phi = fe_new->get_phi();
806 for (
unsigned int l=0; l != n_dofs; l++)
807 u += phi[l][0] * coef(l);
825 template<
typename OutputType>
829 const Real tolerance)
const 836 const unsigned int n_dofs = cast_int<unsigned int>
845 this->get_element_fe<OutputShape>( var, fe, this->
get_elem_dim() );
852 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputGradient>> & dphi = fe_new->get_dphi();
856 for (
unsigned int l=0; l != n_dofs; l++)
857 grad_u.add_scaled(dphi[l][0], coef(l));
864 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 876 template<
typename OutputType>
880 const Real tolerance)
const 887 const unsigned int n_dofs = cast_int<unsigned int>
896 this->get_element_fe<OutputShape>( var, fe, this->
get_elem_dim() );
903 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputTensor>> & d2phi = fe_new->get_d2phi();
907 for (
unsigned int l=0; l != n_dofs; l++)
908 hess_u.add_scaled(d2phi[l][0], coef(l));
913 #endif // LIBMESH_ENABLE_SECOND_DERIVATIVES 916 template<
typename OutputType>
920 const Real tolerance)
const 925 const unsigned int n_dofs = cast_int<unsigned int>
934 this->get_element_fe<OutputShape>( var, fe, this->
get_elem_dim() );
941 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputShape>> & curl_phi = fe_new->get_curl_phi();
945 for (
unsigned int l=0; l != n_dofs; l++)
946 curl_u.add_scaled(curl_phi[l][0], coef(l));
964 template<
typename OutputType>
966 OutputType & u)
const 986 template<
typename OutputType>
988 OutputType & du)
const 995 <OutputType>::type>::type>,
1002 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 1013 template<
typename OutputType>
1015 OutputType & d2u)
const 1022 <OutputType>::type>::type>::type>,
1025 #endif // ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 1039 template<
typename OutputType>
1041 OutputType & u)
const 1063 template<
typename OutputType>
1065 OutputType & du)
const 1071 <OutputType>::type>::type>,
1077 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 1087 template<
typename OutputType>
1089 OutputType & d2u)
const 1096 <OutputType>::type>::type>::type>,
1099 #endif // ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 1112 template<
typename OutputType>
1116 const Real tolerance)
const 1121 const unsigned int n_dofs = cast_int<unsigned int>
1130 this->get_element_fe<OutputShape>( var, fe, this->
get_elem_dim() );
1137 const std::vector<std::vector<OutputShape>> & phi = fe_new->get_phi();
1141 for (
unsigned int l=0; l != n_dofs; l++)
1142 u += phi[l][0] * coef(l);
1160 template<
typename OutputType>
1163 OutputType & grad_u,
1164 const Real tolerance)
const 1171 const unsigned int n_dofs = cast_int<unsigned int>
1180 this->get_element_fe<OutputShape>( var, fe, this->
get_elem_dim() );
1187 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputGradient>> & dphi = fe_new->get_dphi();
1191 for (
unsigned int l=0; l != n_dofs; l++)
1192 grad_u.add_scaled(dphi[l][0], coef(l));
1198 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 1211 template<
typename OutputType>
1214 OutputType & hess_u,
1215 const Real tolerance)
const 1222 const unsigned int n_dofs = cast_int<unsigned int>
1231 this->get_element_fe<OutputShape>( var, fe, this->
get_elem_dim() );
1238 const std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputTensor>> & d2phi = fe_new->get_d2phi();
1242 for (
unsigned int l=0; l != n_dofs; l++)
1243 hess_u.add_scaled(d2phi[l][0], coef(l));
1248 #endif // LIBMESH_ENABLE_SECOND_DERIVATIVES 1252 template<
typename OutputType>
1254 OutputType & u)
const 1264 template<
typename OutputType>
1266 OutputType & u)
const 1274 template<
typename OutputType>
1276 OutputType & u)
const 1286 template<
typename OutputType>
1288 OutputType & u)
const 1375 pr.second->reinit(&(this->
get_elem()), pts);
1378 pr.second->reinit(
nullptr);
1391 libmesh_assert( !
_side_fe[dim].empty() );
1450 for (
unsigned int i=0; i !=
n_nodes; ++i)
1454 for (
unsigned int i=0; i !=
n_nodes; ++i)
1458 for (
unsigned int i=0; i !=
n_nodes; ++i)
1512 for (
unsigned int i=0; i !=
n_nodes; ++i)
1513 const_cast<Elem &>(this->
get_elem()).point(i)(0) =
1517 for (
unsigned int i=0; i !=
n_nodes; ++i)
1518 const_cast<Elem &>(this->
get_elem()).point(i)(1) =
1522 for (
unsigned int i=0; i !=
n_nodes; ++i)
1523 const_cast<Elem &>(this->
get_elem()).point(i)(2) =
1567 #ifdef LIBMESH_ENABLE_AMR 1579 #endif // LIBMESH_ENABLE_AMR 1581 const unsigned int n_dofs = cast_int<unsigned int>
1583 const unsigned int n_qoi = sys.
n_qois();
1624 for (std::size_t q=0; q != n_qoi; ++q)
1631 unsigned int sub_dofs = 0;
1632 for (
unsigned int i=0; i != sys.
n_vars(); ++i)
1644 #ifdef LIBMESH_ENABLE_AMR 1655 #endif // LIBMESH_ENABLE_AMR 1661 const unsigned int n_dofs_var = cast_int<unsigned int>
1665 (sub_dofs, n_dofs_var);
1676 (sub_dofs, n_dofs_var);
1683 (sub_dofs, n_dofs_var);
1689 (sub_dofs, n_dofs_var);
1694 (sub_dofs, n_dofs_var);
1696 for (std::size_t q=0; q != n_qoi; ++q)
1698 (sub_dofs, n_dofs_var);
1700 for (
unsigned int j=0; j != i; ++j)
1702 const unsigned int n_dofs_var_j =
1703 cast_int<unsigned int>
1708 n_dofs_var, n_dofs_var_j);
1711 n_dofs_var_j, n_dofs_var);
1714 (sub_dofs, sub_dofs,
1719 sub_dofs += n_dofs_var;
1727 libmesh_assert_equal_to (sub_dofs, n_dofs);
1738 for (; localized_vec_it != localized_vec_end; ++localized_vec_it)
1746 unsigned int sub_dofs = 0;
1747 for (
unsigned int i=0; i != sys.
n_vars(); ++i)
1749 const unsigned int n_dofs_var = cast_int<unsigned int>
1755 localized_vec_it->second.second[i]->reposition
1756 (sub_dofs, n_dofs_var);
1758 sub_dofs += n_dofs_var;
1760 libmesh_assert_equal_to (sub_dofs, n_dofs);
1771 cast_int<unsigned char>(this->
_elem ? this->
_elem->
dim() : 0);
1790 const FEType fe_type )
const 1792 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 1793 const bool fe_needs_inf =
1799 fe_type !=
_real_fe->get_fe_type())
1801 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
1807 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 1826 const FEType fe_type )
const 1828 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 1829 const bool fe_needs_inf =
1837 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
1843 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 1860 template<
typename OutputShape>
1864 const Real tolerance)
const 1873 #ifdef LIBMESH_ENABLE_AMR 1880 fe_type.
order = static_cast<Order>(fe_type.
order + 1);
1882 #endif // LIBMESH_ENABLE_AMR 1895 tolerance) :
Point(0);
1897 std::vector<Point> coor(1, master_point);
1904 fe_new->
reinit (
nullptr, &coor);
1914 template void FEMContext::interior_value<Number>(
unsigned int,
unsigned int,
Number &)
const;
1916 std::vector<Number> &)
const;
1917 template void FEMContext::interior_value<Gradient>(
unsigned int,
unsigned int,
Gradient &)
const;
1919 std::vector<Gradient> &)
const;
1921 template void FEMContext::interior_gradient<Gradient>(
unsigned int,
unsigned int,
Gradient &)
const;
1923 std::vector<Gradient> &)
const;
1924 template void FEMContext::interior_gradient<Tensor>(
unsigned int,
unsigned int,
Tensor &)
const;
1926 std::vector<Tensor> &)
const;
1928 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 1929 template void FEMContext::interior_hessian<Tensor>(
unsigned int,
unsigned int,
Tensor &)
const;
1931 std::vector<Tensor> &)
const;
1938 template void FEMContext::interior_curl<Gradient>(
unsigned int,
unsigned int,
Gradient &)
const;
1940 template void FEMContext::interior_div<Number>(
unsigned int,
unsigned int,
Number &)
const;
1942 template void FEMContext::side_value<Number>(
unsigned int,
unsigned int,
Number &)
const;
1943 template void FEMContext::side_value<Gradient>(
unsigned int,
unsigned int,
Gradient &)
const;
1945 std::vector<Number> &)
const;
1947 std::vector<Gradient> &)
const;
1949 template void FEMContext::side_gradient<Gradient>(
unsigned int,
unsigned int,
Gradient &)
const;
1951 std::vector<Gradient> &)
const;
1952 template void FEMContext::side_gradient<Tensor>(
unsigned int,
unsigned int,
Tensor &)
const;
1954 std::vector<Tensor> &)
const;
1957 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 1958 template void FEMContext::side_hessian<Tensor>(
unsigned int,
unsigned int,
Tensor &)
const;
1960 std::vector<Tensor> &)
const;
1968 template void FEMContext::point_value<Number>(
unsigned int,
const Point &,
Number &,
const Real)
const;
1969 template void FEMContext::point_value<Gradient>(
unsigned int,
const Point &,
Gradient &,
const Real)
const;
1971 template void FEMContext::point_gradient<Gradient>(
unsigned int,
const Point &,
Gradient &,
const Real)
const;
1972 template void FEMContext::point_gradient<Tensor>(
unsigned int,
const Point &,
Tensor &,
const Real)
const;
1974 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 1975 template void FEMContext::point_hessian<Tensor>(
unsigned int,
const Point &,
Tensor &,
const Real)
const;
1980 template void FEMContext::point_curl<Gradient>(
unsigned int,
const Point &,
Gradient &,
const Real)
const;
1982 template void FEMContext::fixed_interior_value<Number>(
unsigned int,
unsigned int,
Number &)
const;
1983 template void FEMContext::fixed_interior_value<Gradient>(
unsigned int,
unsigned int,
Gradient &)
const;
1985 template void FEMContext::fixed_interior_gradient<Gradient>(
unsigned int,
unsigned int,
Gradient &)
const;
1986 template void FEMContext::fixed_interior_gradient<Tensor>(
unsigned int,
unsigned int,
Tensor &)
const;
1988 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 1989 template void FEMContext::fixed_interior_hessian<Tensor>(
unsigned int,
unsigned int,
Tensor &)
const;
1994 template void FEMContext::fixed_side_value<Number>(
unsigned int,
unsigned int,
Number &)
const;
1995 template void FEMContext::fixed_side_value<Gradient>(
unsigned int,
unsigned int,
Gradient &)
const;
1997 template void FEMContext::fixed_side_gradient<Gradient>(
unsigned int,
unsigned int,
Gradient &)
const;
1998 template void FEMContext::fixed_side_gradient<Tensor>(
unsigned int,
unsigned int,
Tensor &)
const;
2000 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 2001 template void FEMContext::fixed_side_hessian<Tensor>(
unsigned int,
unsigned int,
Tensor &)
const;
2006 template void FEMContext::fixed_point_value<Number>(
unsigned int,
const Point &,
Number &,
const Real)
const;
2007 template void FEMContext::fixed_point_value<Gradient>(
unsigned int,
const Point &,
Gradient &,
const Real)
const;
2009 template void FEMContext::fixed_point_gradient<Gradient>(
unsigned int,
const Point &,
Gradient &,
const Real)
const;
2010 template void FEMContext::fixed_point_gradient<Tensor>(
unsigned int,
const Point &,
Tensor &,
const Real)
const;
2012 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 2013 template void FEMContext::fixed_point_hessian<Tensor>(
unsigned int,
const Point &,
Tensor &,
const Real)
const;
2018 template void FEMContext::interior_rate<Number>(
unsigned int,
unsigned int,
Number &)
const;
2019 template void FEMContext::interior_rate<Gradient>(
unsigned int,
unsigned int,
Gradient &)
const;
2021 template void FEMContext::side_rate<Number>(
unsigned int,
unsigned int,
Number &)
const;
2022 template void FEMContext::side_rate<Gradient>(
unsigned int,
unsigned int,
Gradient &)
const;
2024 template void FEMContext::interior_accel<Number>(
unsigned int,
unsigned int,
Number &)
const;
2025 template void FEMContext::interior_accel<Gradient>(
unsigned int,
unsigned int,
Gradient &)
const;
2027 template void FEMContext::side_accel<Number>(
unsigned int,
unsigned int,
Number &)
const;
2028 template void FEMContext::side_accel<Gradient>(
unsigned int,
unsigned int,
Gradient &)
const;
Manages the family, order, etc. parameters for a given FE.
unsigned char get_edge() const
virtual void nonlocal_reinit(Real theta) override
const DenseMatrix< Number > & get_elem_jacobian() const
Number fixed_side_value(unsigned int var, unsigned int qp) const
Number side_value(unsigned int var, unsigned int qp) const
Tensor fixed_point_hessian(unsigned int var, const Point &p) const
Number interior_value(unsigned int var, unsigned int qp) const
void interior_div(unsigned int var, unsigned int qp, OutputType &div_u) const
void elem_position_set(Real theta)
void get_side_fe(unsigned int var, FEGenericBase< OutputShape > *&fe) const
virtual void pre_fe_reinit(const System &, const Elem *e)
bool has_boundary_id(const Node *const node, const boundary_id_type id) const
const unsigned int invalid_uint
unsigned int get_mesh_x_var() const
const NumericVector< Number > * _custom_solution
void set_elem(const Elem *e)
std::unique_ptr< FEGenericBase< RealGradient > > _real_grad_fe
virtual void get(const std::vector< numeric_index_type > &index, T *values) const
void dof_indices(const Elem *const elem, std::vector< dof_id_type > &di) const
const DenseVector< Number > & get_elem_fixed_solution() const
const DenseVector< Number > & get_elem_solution_rate() const
unsigned char get_elem_dim() const
const Elem & get_elem() const
bool _real_grad_fe_is_inf
unsigned int n_qois() const
TensorTools::MakeReal< OutputType >::type value_shape
const DenseSubVector< Number > &(DiffContext::* diff_subsolution_getter)(unsigned int) const
void resize(const unsigned int n)
RefinementState p_refinement_flag() const
std::vector< T > & get_values()
virtual void elem_edge_reinit(Real theta) override
The base class for all geometric element types.
std::vector< std::vector< std::unique_ptr< DenseSubVector< Number > > > > _elem_qoi_subderivatives
int _extra_quadrature_order
virtual bool is_steady() const =0
const std::vector< std::vector< OutputDivergence > > & get_div_phi() const
void interior_gradients(unsigned int var, const NumericVector< Number > &_system_vector, std::vector< OutputType > &interior_gradients_vector) const
bool has_side_boundary_id(boundary_id_type id) const
unsigned char get_side() const
Number point_value(unsigned int var, const Point &p) const
void old_dof_indices(const Elem *const elem, std::vector< dof_id_type > &di, const unsigned int vn=libMesh::invalid_uint) const
std::vector< std::map< FEType, std::unique_ptr< FEAbstract > > > _element_fe
virtual void elem_fe_reinit(const std::vector< Point > *const pts=nullptr)
std::unique_ptr< FEGenericBase< Real > > _real_fe
Number fixed_interior_value(unsigned int var, unsigned int qp) const
Tnew cast_int(Told oldvar)
FEType get_fe_type() const
std::vector< boundary_id_type > boundary_ids(const Node *node) const
Tensor fixed_side_hessian(unsigned int var, unsigned int qp) const
std::unique_ptr< QBase > default_quadrature_rule(const unsigned int dim, const int extraorder=0) const
const std::vector< std::vector< OutputGradient > > & get_dphi() const
std::set< unsigned char > _elem_dims
Gradient interior_gradient(unsigned int var, unsigned int qp) const
const dof_id_type n_nodes
virtual unsigned int time_order() const =0
const std::set< unsigned int > & get_second_order_vars() const
std::map< const NumericVector< Number > *, std::pair< DenseVector< Number >, std::vector< std::unique_ptr< DenseSubVector< Number > > > > > _localized_vectors
void point_curl(unsigned int var, const Point &p, OutputType &curl_u, const Real tolerance=TOLERANCE) const
const DenseVector< Number > & get_elem_solution() const
void side_values(unsigned int var, const NumericVector< Number > &_system_vector, std::vector< OutputType > &side_values_vector) const
Tensor side_hessian(unsigned int var, unsigned int qp) const
virtual void side_fe_reinit()
void interior_hessians(unsigned int var, const NumericVector< Number > &_system_vector, std::vector< OutputType > &d2u_vals) const
std::map< FEType, std::unique_ptr< FEAbstract > > _edge_fe
void _update_time_from_system(Real theta)
virtual unsigned int n_nodes() const =0
void init_internal_data(const System &sys)
Gradient fixed_point_gradient(unsigned int var, const Point &p) const
void interior_values(unsigned int var, const NumericVector< Number > &_system_vector, std::vector< OutputType > &interior_values_vector) const
Manages consistently variables, degrees of freedom, and coefficient vectors.
void some_value(unsigned int var, unsigned int qp, OutputType &u) const
void some_hessian(unsigned int var, unsigned int qp, OutputType &u) const
std::vector< std::unique_ptr< DenseSubVector< Number > > > _elem_subsolutions
Tensor interior_hessian(unsigned int var, unsigned int qp) const
Tensor point_hessian(unsigned int var, const Point &p) const
Gradient fixed_interior_gradient(unsigned int var, unsigned int qp) const
static std::unique_ptr< FEGenericBase > build(const unsigned int dim, const FEType &type)
virtual void reinit(const Elem *elem, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr)=0
static Point inverse_map(const unsigned int dim, const FEType &fe_t, const Elem *elem, const Point &p, const Real tolerance=TOLERANCE, const bool secure=true)
const std::vector< dof_id_type > & get_dof_indices() const
const BoundaryInfo & _boundary_info
void set_time(Real time_in)
std::vector< std::vector< FEAbstract * > > _element_fe_var
const std::vector< std::vector< OutputTensor > > & get_d2phi() const
std::vector< boundary_id_type > side_boundary_ids() const
virtual void elem_side_reinit(Real theta) override
DenseSubVector< Number > & get_localized_subvector(const NumericVector< Number > &localized_vector, unsigned int var)
Real get_system_time() const
Number fixed_point_value(unsigned int var, const Point &p) const
virtual void edge_fe_reinit()
std::vector< FEAbstract * > _edge_fe_var
const std::vector< std::vector< OutputShape > > & get_curl_phi() const
const DenseVector< Number > & get_elem_residual() const
void interior_rate(unsigned int var, unsigned int qp, OutputType &u) const
std::vector< std::unique_ptr< QBase > > _side_qrule
const FEType & variable_type(const unsigned int i) const
std::vector< std::map< FEType, std::unique_ptr< FEAbstract > > > _side_fe
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
std::vector< std::unique_ptr< QBase > > _element_qrule
void side_accel(unsigned int var, unsigned int qp, OutputType &u) const
virtual unsigned short dim() const =0
void interior_curl(unsigned int var, unsigned int qp, OutputType &curl_u) const
const DenseVector< Number > & get_elem_solution_accel() const
static std::unique_ptr< FEAbstract > build(const unsigned int dim, const FEType &type)
void resize(const unsigned int new_m, const unsigned int new_n)
std::unique_ptr< QBase > _edge_qrule
std::unique_ptr< NumericVector< Number > > current_local_solution
FEMContext(const System &sys)
void side_gradients(unsigned int var, const NumericVector< Number > &_system_vector, std::vector< OutputType > &side_gradients_vector) const
void get_element_fe(unsigned int var, FEGenericBase< OutputShape > *&fe) const
static std::unique_ptr< FEGenericBase > build_InfFE(const unsigned int dim, const FEType &type)
Gradient fixed_side_gradient(unsigned int var, unsigned int qp) const
unsigned int get_mesh_y_var() const
AlgebraicType algebraic_type() const
virtual bool infinite() const =0
void some_gradient(unsigned int var, unsigned int qp, OutputType &u) const
std::vector< std::vector< FEAbstract * > > _side_fe_var
FEGenericBase< OutputShape > * build_new_fe(const FEGenericBase< OutputShape > *fe, const Point &p, const Real tolerance=TOLERANCE) const
unsigned int n_vars() const
Gradient point_gradient(unsigned int var, const Point &p) const
FEGenericBase< OutputShape > * cached_fe(const unsigned int elem_dim, const FEType fe_type) const
void _do_elem_position_set(Real theta)
virtual Order default_order() const =0
const std::vector< DenseVector< Number > > & get_qoi_derivatives() const
Gradient side_gradient(unsigned int var, unsigned int qp) const
const DofMap & get_dof_map() const
void side_hessians(unsigned int var, const NumericVector< Number > &_system_vector, std::vector< OutputType > &d2u_vals) const
void side_rate(unsigned int var, unsigned int qp, OutputType &u) const
A geometric point in (x,y,z) space.
const Point & point(const unsigned int i) const
std::vector< std::unique_ptr< DenseSubVector< Number > > > _elem_fixed_subsolutions
virtual void elem_reinit(Real theta) override
unsigned int get_mesh_z_var() const
void interior_accel(unsigned int var, unsigned int qp, OutputType &u) const
const std::vector< std::vector< OutputShape > > & get_phi() const
TimeSolver & get_time_solver()
std::map< const NumericVector< Number > *, std::pair< DenseVector< Number >, std::vector< std::unique_ptr< DenseSubVector< Number > > > > >::iterator localized_vectors_iterator
Tensor fixed_interior_hessian(unsigned int var, unsigned int qp) const