6#include <deal.II/base/config.h>
7#include <deal.II/base/exceptions.h>
8#include <deal.II/base/point.h>
9#include <deal.II/base/symmetric_tensor.h>
10#include <deal.II/base/tensor.h>
11#include <deal.II/lac/vector.h>
12#include <deal.II/matrix_free/evaluation_flags.h>
13#include <deal.II/matrix_free/fe_evaluation.h>
14#include <deal.II/matrix_free/matrix_free.h>
24#include <prismspf/config.h>
45template <
unsigned int dim,
unsigned int degree,
typename number>
59 template <TensorRank Rank>
64 template <TensorRank Rank>
67 template <TensorRank Rank>
70 template <TensorRank Rank>
72 dealii::FEEvaluation<dim,
75 dealii::Tensor<int(Rank), dim>::n_independent_components,
82 template <
typename ValType>
85 if constexpr (std::is_same_v<ValType, ScalarValue> ||
86 std::is_same_v<ValType, typename ScalarValue::value_type>)
99 template <
typename GradType>
102 if constexpr (std::is_same_v<GradType, ScalarValue>)
116 template <TensorRank Rank>
184 unsigned int _field_index,
185 unsigned int _block_index,
188 template <DependencyType type>
192 template <DependencyType type>
203 reinit(
unsigned int cell);
238 FieldContainer(
const std::vector<FieldAttributes> &_field_attributes,
240 unsigned int _relative_level,
243 const MatrixFree<dim, number> &matrix_free);
249 reinit(
unsigned int cell);
311 template <TensorRank Rank, DependencyType type>
318 template <TensorRank Rank>
325 template <TensorRank Rank, DependencyType type>
332 template <TensorRank Rank>
339 template <TensorRank Rank, DependencyType type>
346 template <TensorRank Rank>
353 template <TensorRank Rank, DependencyType type>
360 template <TensorRank Rank>
367 template <TensorRank Rank, DependencyType type>
374 template <TensorRank Rank>
381 template <TensorRank Rank, DependencyType type>
388 template <TensorRank Rank>
395 template <TensorRank Rank, DependencyType type>
396 [[nodiscard]] dealii::SymmetricTensor<2, dim, ScalarValue>
402 template <TensorRank Rank>
403 [[nodiscard]] dealii::SymmetricTensor<2, dim, ScalarValue>
409 template <TensorRank Rank, DependencyType type>
410 [[nodiscard]] dealii::Tensor<1, (dim == 2 ? 1 : dim),
ScalarValue>
416 template <TensorRank Rank>
417 [[nodiscard]] dealii::Tensor<1, (dim == 2 ? 1 : dim),
ScalarValue>
423 [[nodiscard]] dealii::Point<dim, ScalarValue>
435 [[nodiscard]]
unsigned int
441 template <
typename ValType>
448 template <
typename GradType>
455 template <
typename ValType>
459 unsigned int dof_index);
464 template <
typename ValType>
472 template <TensorRank Rank>
473 std::vector<FEEValuationDeps<Rank>> &
476 template <TensorRank Rank>
477 const std::vector<FEEValuationDeps<Rank>> &
501 dealii::EvaluationFlags::EvaluationFlags flag)
const;
566template <
unsigned int dim,
unsigned int degree,
typename number>
567template <TensorRank Rank>
569 const MatrixFree<dim, number> &matrix_free,
572 unsigned int _field_index,
573 unsigned int _block_index,
582 fe_eval = std::make_shared<FEEDepPair>(FEEval<Rank>(matrix_free, field_index),
587 for (
unsigned int age = 0; age < dependency.
old_flags.size(); ++age)
599 std::make_shared<FEEDepPair>(FEEval<Rank>(matrix_free, field_index),
600 dependency.src_flag);
614 return "Access was attempted for a field that was not declared as a "
615 "dependency for the current solve block.\n";
621 out <<
what() << std::flush;
628# define AssertAccessible(fe_eval_pair_ptr, dependency_type) \
629 AssertThrowDebug(block_index != -1, ExcDepNotInitialized(dependency_type)); \
630 AssertThrowDebug(fe_eval_pair_ptr, ExcDepNotInitialized(dependency_type));
632# define AssertAccessible(fe_eval_pair_ptr, dependency_type)
635template <
unsigned int dim,
unsigned int degree,
typename number>
636template <TensorRank Rank>
637template <DependencyType Type>
660template <
unsigned int dim,
unsigned int degree,
typename number>
661template <TensorRank Rank>
662template <DependencyType Type>
663inline DEAL_II_ALWAYS_INLINE
685template <
unsigned int dim,
unsigned int degree,
typename number>
686template <TensorRank Rank>
709template <
unsigned int dim,
unsigned int degree,
typename number>
710template <TensorRank Rank>
711inline DEAL_II_ALWAYS_INLINE
732template <
unsigned int dim,
unsigned int degree,
typename number>
733template <TensorRank Rank>
745 old_fe_eval->first.reinit(cell);
754template <
unsigned int dim,
unsigned int degree,
typename number>
755template <TensorRank Rank>
768 for (
unsigned int age = 0; age <
fe_eval_old.size(); ++age)
772 old_fe_eval->first.read_dof_values_plain(
774 old_fe_eval->first.evaluate(old_fe_eval->second);
792template <
unsigned int dim,
unsigned int degree,
typename number>
793template <TensorRank Rank>
808 for (
unsigned int age = 0; age <
fe_eval_old.size(); ++age)
812 old_fe_eval->first.reinit(cell);
813 old_fe_eval->first.read_dof_values_plain(
815 old_fe_eval->first.evaluate(old_fe_eval->second);
837template <
unsigned int dim,
unsigned int degree,
typename number>
838template <TensorRank Rank>
848template <
unsigned int dim,
unsigned int degree,
typename number>
849template <TensorRank Rank>
859template <
unsigned int dim,
unsigned int degree,
typename number>
860template <TensorRank Rank>
872template <
unsigned int dim,
unsigned int degree,
typename number>
873template <TensorRank Rank>
885template <
unsigned int dim,
unsigned int degree,
typename number>
891 fe_eval.reinit(cell);
895 fe_eval.reinit(cell);
900template <
unsigned int dim,
unsigned int degree,
typename number>
907 fe_eval.eval(src_solutions, plain);
911 fe_eval.eval(src_solutions, plain);
916template <
unsigned int dim,
unsigned int degree,
typename number>
925 fe_eval.reinit_and_eval(cell, src_solutions, plain);
929 fe_eval.reinit_and_eval(cell, src_solutions, plain);
935template <
unsigned int dim,
unsigned int degree,
typename number>
941 fe_eval.eval_without_read();
945 fe_eval.eval_without_read();
949template <
unsigned int dim,
unsigned int degree,
typename number>
968template <
unsigned int dim,
unsigned int degree,
typename number>
986template <
unsigned int dim,
unsigned int degree,
typename number>
1002template <
unsigned int dim,
unsigned int degree,
typename number>
1021template <
unsigned int dim,
unsigned int degree,
typename number>
1022inline DEAL_II_ALWAYS_INLINE
void
1032#define GetterTempl(dependency_type) template get<dependency_type>()
1033#define GetterNoTempl(dependency_type) get(dependency_type)
1034#define ReturnGetter(get_handle, Rank, field_index, dependency_type, getter) \
1037 AssertThrowDebug((field_index) < get_relevant_feeval_vector<Rank>().size(), \
1038 dealii::ExcMessage("Error: Field index " + \
1039 std::to_string(field_index) + \
1040 " is not associated with any field.")); \
1041 return get_relevant_feeval_vector<Rank>()[field_index] \
1042 .getter(dependency_type) \
1043 .get_handle(q_point); \
1045 catch (const ExcDepNotInitialized &e) \
1047 std::cerr << "Error when trying to access field with index " << (field_index) \
1048 << " and dependency type " \
1049 << dependency_type_to_string.at(dependency_type) << ":\n" \
1051 << "Ensure that each dependency is requested in the solve block.\n" \
1055 catch (const dealii::internal::ExcAccessToUninitializedField &e) \
1057 std::cerr << "Error when trying to access field with index " << (field_index) \
1058 << " and dependency type " \
1059 << dependency_type_to_string.at(dependency_type) \
1060 << ":\nAccess was attempted for values or gradients that were " \
1061 "not requested.\n" \
1066template <
unsigned int dim,
unsigned int degree,
typename number>
1067template <TensorRank Rank, DependencyType type>
1068inline DEAL_II_ALWAYS_INLINE
1075template <
unsigned int dim,
unsigned int degree,
typename number>
1076template <TensorRank Rank>
1077inline DEAL_II_ALWAYS_INLINE
1085template <
unsigned int dim,
unsigned int degree,
typename number>
1086template <TensorRank Rank, DependencyType type>
1087inline DEAL_II_ALWAYS_INLINE
1094template <
unsigned int dim,
unsigned int degree,
typename number>
1095template <TensorRank Rank>
1096inline DEAL_II_ALWAYS_INLINE
1104template <
unsigned int dim,
unsigned int degree,
typename number>
1105template <TensorRank Rank, DependencyType type>
1106inline DEAL_II_ALWAYS_INLINE
1113template <
unsigned int dim,
unsigned int degree,
typename number>
1114template <TensorRank Rank>
1115inline DEAL_II_ALWAYS_INLINE
1123template <
unsigned int dim,
unsigned int degree,
typename number>
1124template <TensorRank Rank, DependencyType type>
1125inline DEAL_II_ALWAYS_INLINE
1133template <
unsigned int dim,
unsigned int degree,
typename number>
1134template <TensorRank Rank>
1135inline DEAL_II_ALWAYS_INLINE
1143template <
unsigned int dim,
unsigned int degree,
typename number>
1144template <TensorRank Rank, DependencyType type>
1145inline DEAL_II_ALWAYS_INLINE
1152template <
unsigned int dim,
unsigned int degree,
typename number>
1153template <TensorRank Rank>
1154inline DEAL_II_ALWAYS_INLINE
1162template <
unsigned int dim,
unsigned int degree,
typename number>
1163template <TensorRank Rank, DependencyType type>
1167 static_assert(Rank == 1,
"Divergences are only available for vector fields");
1171template <
unsigned int dim,
unsigned int degree,
typename number>
1172template <TensorRank Rank>
1177 static_assert(Rank == 1,
"Divergences are only available for vector fields");
1181template <
unsigned int dim,
unsigned int degree,
typename number>
1182template <TensorRank Rank, DependencyType type>
1183inline DEAL_II_ALWAYS_INLINE dealii::
1184 SymmetricTensor<2, dim, typename FieldContainer<dim, degree, number>::ScalarValue>
1188 static_assert(Rank == 1,
"Symmetric gradients are only available for vector fields");
1192template <
unsigned int dim,
unsigned int degree,
typename number>
1193template <TensorRank Rank>
1194inline DEAL_II_ALWAYS_INLINE dealii::
1195 SymmetricTensor<2, dim, typename FieldContainer<dim, degree, number>::ScalarValue>
1199 static_assert(Rank == 1,
"Symmetric gradients are only available for vector fields");
1203template <
unsigned int dim,
unsigned int degree,
typename number>
1204template <TensorRank Rank, DependencyType type>
1205inline DEAL_II_ALWAYS_INLINE
1207 (dim == 2 ? 1 : dim),
1211 static_assert(Rank == 1,
"Curl is only available for vector fields");
1215 "Curl is only available for vector fields with dimension greater than 1."));
1219template <
unsigned int dim,
unsigned int degree,
typename number>
1220template <TensorRank Rank>
1221inline DEAL_II_ALWAYS_INLINE
1223 (dim == 2 ? 1 : dim),
1228 static_assert(Rank == 1,
"Curl is only available for vector fields");
1232 "Curl is only available for vector fields with dimension greater than 1."));
1236template <
unsigned int dim,
unsigned int degree,
typename number>
1237inline DEAL_II_ALWAYS_INLINE
1238 dealii::Point<dim, typename FieldContainer<dim, degree, number>::ScalarValue>
1244template <
unsigned int dim,
unsigned int degree,
typename number>
1252template <
unsigned int dim,
unsigned int degree,
typename number>
1253inline DEAL_II_ALWAYS_INLINE
unsigned int
1259template <
unsigned int dim,
unsigned int degree,
typename number>
1260template <
typename ValType>
1261inline DEAL_II_ALWAYS_INLINE
void
1267 dealii::ExcMessage(
"Error: Field index " +
1268 std::to_string(field_index) +
1269 " is not associated with any field."));
1270 auto &relevant_feeval_vector =
1274 relevant_feeval_vector.template get<DependencyType::DST>().submit_value(val,
1276 relevant_feeval_vector.integration_flags |= dealii::EvaluationFlags::values;
1280 std::cerr <<
"Error when trying to submit value for field with index "
1282 <<
": Error: Submission for field not part of this solve block.\n"
1288template <
unsigned int dim,
unsigned int degree,
typename number>
1289template <
typename GradType>
1290inline DEAL_II_ALWAYS_INLINE
void
1292 const GradType &val)
1296 dealii::ExcMessage(
"Error: Field index " +
1297 std::to_string(field_index) +
1298 " is not associated with any field."));
1299 auto &relevant_feeval_vector =
1303 relevant_feeval_vector.template get<DependencyType::DST>().submit_gradient(val,
1305 relevant_feeval_vector.integration_flags |= dealii::EvaluationFlags::gradients;
1309 std::cerr <<
"Error when trying to submit gradient for field with index "
1311 <<
": Error: Submission for field not part of this solve block.\n"
1317template <
unsigned int dim,
unsigned int degree,
typename number>
1318template <
typename ValType>
1319inline DEAL_II_ALWAYS_INLINE
void
1322 unsigned int dof_index)
1326 dealii::ExcMessage(
"Error: Field index " +
1327 std::to_string(field_index) +
1328 " is not associated with any field."));
1329 auto &relevant_feeval_vector =
1334 relevant_feeval_vector.template get<DependencyType::DST>().get_dof_value(
1339 std::cerr <<
"Error when trying to get dof value for field with index "
1340 << (field_index) <<
": Error: Field not part of this solve block.\n"
1346template <
unsigned int dim,
unsigned int degree,
typename number>
1347template <
typename ValType>
1348inline DEAL_II_ALWAYS_INLINE
void
1351 unsigned int dof_index)
1355 dealii::ExcMessage(
"Error: Field index " +
1356 std::to_string(field_index) +
1357 " is not associated with any field."));
1358 auto &relevant_feevals =
1362 relevant_feevals.template get<DependencyType::DST>().submit_dof_value(val,
1367 std::cerr <<
"Error when trying to submit dof value for field with index "
1369 <<
": Error: Submission for field not part of this solve block.\n"
1375template <
unsigned int dim,
unsigned int degree,
typename number>
1376template <TensorRank Rank>
1377inline DEAL_II_ALWAYS_INLINE std::vector<
1391template <
unsigned int dim,
unsigned int degree,
typename number>
1392template <TensorRank Rank>
1393inline DEAL_II_ALWAYS_INLINE
const std::vector<
1407template <
unsigned int dim,
unsigned int degree,
typename number>
1408inline DEAL_II_ALWAYS_INLINE
void
1415template <
unsigned int dim,
unsigned int degree,
typename number>
1416inline DEAL_II_ALWAYS_INLINE
void
1424template <
unsigned int dim,
unsigned int degree,
typename number>
1425inline DEAL_II_ALWAYS_INLINE
void
1429 [[maybe_unused]] dealii::EvaluationFlags::EvaluationFlags flag)
const
1434template <
unsigned int dim,
unsigned int degree,
typename number>
1435inline DEAL_II_ALWAYS_INLINE
void
1443#undef AssertAccessible
1448PRISMS_PF_END_NAMESPACE
Definition field_container.h:605
ExcDepNotInitialized(DependencyType _dependency_type)
Definition field_container.h:607
const char * what() const noexcept override
Definition field_container.h:612
void print_info(std::ostream &out) const override
Definition field_container.h:619
DependencyType dependency_type
Definition field_container.h:625
This class permits the access of a subset of indexed fields and gives an error if any non-allowed fie...
Definition field_container.h:47
std::vector< FEEValuationDeps< Rank > > & get_relevant_feeval_vector()
void set_value_term(Types::Index field_index, const ValType &val)
Set the value of the specified scalar/vector field.
Value< Rank > get_value(Types::Index field_index, DependencyType type) const
Return the value of the specified field.
void set_gradient_term(Types::Index field_index, const GradType &val)
Set the gradient of the specified scalar/vector field.
void submit_dof_value(Types::Index field_index, const ValType &val, unsigned int dof_index)
Set the dof values directly at a node.
Gradient< Rank > get_hessian_diagonal(Types::Index field_index, DependencyType type) const
Return the diagonal of the hessian of the specified field.
dealii::Tensor< int(Rank)+2, dim, ScalarValue > Hessian
Definition field_container.h:68
void eval(const BlockVector< number > *src_solutions, bool plain)
Read solution vector, and evaluate based on dependency flags for all dependencies.
Definition field_container.h:902
void access_valid(Types::Index field_index, DependencyType dependency_type, dealii::EvaluationFlags::EvaluationFlags flag) const
Check that a variable value/gradient/hessians was marked as needed and thus properly initialized.
Definition field_container.h:1426
Hessian< Rank > get_hessian(Types::Index field_index) const
Return the hessian of the specified field.
Value< Rank > get_laplacian(Types::Index field_index, DependencyType type) const
Return the laplacian of the specified field.
FEEval< TensorRank::Scalar > shared_feeval_scalar
FEEvaluation object for generic cell operations.
Definition field_container.h:543
dealii::Tensor< 1, dim, ScalarValue > VectorValue
Typedef for the basic vector that the user manipulates.
Definition field_container.h:57
unsigned int relative_level
Multigrid level.
Definition field_container.h:548
FieldContainer(const std::vector< FieldAttributes > &_field_attributes, const SolutionIndexer< dim, number > &_solution_indexer, unsigned int _relative_level, const DependencyMap &dependency_map, const SolveBlock &_solve_block, const MatrixFree< dim, number > &matrix_free)
Constructor.
Definition field_container.cc:14
dealii::Tensor< 1,(dim==2 ? 1 :dim), ScalarValue > get_curl(Types::Index field_index) const
Return the curl of the specified field.
ScalarValue get_divergence(Types::Index field_index) const
Return the divergence of the specified field.
Hessian< Rank > get_hessian(Types::Index field_index, DependencyType type) const
Return the hessian of the specified field.
void set_q_point(unsigned int q)
Set the current quadrature point.
Definition field_container.h:1023
void submission_valid(Types::Index field_index, DependencyType dependency_type) const
Check that a value is valid for submission.
Definition field_container.h:1436
dealii::FEEvaluation< dim, degree, degree+1, dealii::Tensor< int(Rank), dim >::n_independent_components, number, ScalarValue > FEEval
Definition field_container.h:71
unsigned int q_point
The quadrature point.
Definition field_container.h:553
static constexpr unsigned int dofs_per_component
Definition field_container.h:468
dealii::Tensor< int(Rank)+1, dim, ScalarValue > Gradient
Definition field_container.h:65
dealii::VectorizedArray< number > ScalarValue
Typedef for the basic value that the user manipulates.
Definition field_container.h:52
void integrate()
Integrate the values.
Definition field_container.h:951
dealii::SymmetricTensor< 2, dim, ScalarValue > get_symmetric_gradient(Types::Index field_index) const
Return the symmetric gradient of the specified field.
void reinit_and_eval(unsigned int cell, const BlockVector< number > *src_solutions, bool plain)
Initialize based on cell, read solution vector, and evaluate based on dependency flags for all depend...
Definition field_container.h:918
Value< Rank > get_laplacian(Types::Index field_index) const
Return the laplacian of the specified field.
ScalarValue get_divergence(Types::Index field_index, DependencyType type) const
Return the divergence of the specified field.
std::vector< FEEValuationDeps< TensorRank::Vector > > feeval_deps_vector
Collection of FEEvaluation dependencies for vector fields.
Definition field_container.h:527
const std::vector< FEEValuationDeps< Rank > > & get_relevant_feeval_vector() const
static constexpr TensorRank RankFromVal
Return the tensor rank from the specified template value.
Definition field_container.h:83
void distribute(BlockVector< number > *dst_solutions)
Distribute the integrated values to a solution vector.
Definition field_container.h:970
void reinit(unsigned int cell)
Initialize based on cell for all dependencies.
Definition field_container.h:887
Gradient< Rank > get_gradient(Types::Index field_index, DependencyType type) const
Return the gradient of the specified field.
std::conditional_t< Rank==TensorRank::Scalar||dim==1, ScalarValue, dealii::Tensor< int(Rank), dim, ScalarValue > > Value
Definition field_container.h:60
std::vector< FEEValuationDeps< TensorRank::Scalar > > feeval_deps_scalar
Collection of FEEvaluation dependencies for scalar fields.
Definition field_container.h:522
void feevaluation_exists(Types::Index field_index, Types::Index dependency_index) const
Check whether the entry for the FEEvaluation is within the bounds of the vector and not a nullptr.
Definition field_container.h:1417
void integrate_and_distribute(BlockVector< number > *dst_solutions)
Integrate the values and distribute from local to global.
Definition field_container.h:1004
const std::vector< FieldAttributes > * field_attributes_ptr
Pointer to the vector of field attributes.
Definition field_container.h:512
void eval_without_read()
Evaluate src to quad pts based on dependency flags. Assume feeval has local dof values already.
Definition field_container.h:937
void get_dof_value_to(ValType &destination, Types::Index field_index, unsigned int dof_index)
Get the dof values directly from a node.
dealii::SymmetricTensor< 2, dim, ScalarValue > get_symmetric_gradient(Types::Index field_index, DependencyType type) const
Return the symmetric gradient of the specified field.
Gradient< Rank > get_gradient(Types::Index field_index) const
Return the gradient of the specified field.
unsigned int get_n_q_points() const
Return the number of quadrature points.
Definition field_container.h:1254
Gradient< Rank > get_hessian_diagonal(Types::Index field_index) const
Return the diagonal of the hessian of the specified field.
dealii::Point< dim, ScalarValue > get_q_point_location() const
Return the quadrature point location.
Definition field_container.h:1239
ScalarValue get_element_volume() const
Return the quadrature point location.
Definition field_container.h:1246
static constexpr TensorRank RankFromGrad
Return the tensor rank from the specified template gradient.
Definition field_container.h:100
const SolveBlock * solve_block
Solve block information.
Definition field_container.h:532
const SolutionIndexer< dim, number > * solution_indexer
Pointer to the solution indexer.
Definition field_container.h:517
dealii::Tensor< 1,(dim==2 ? 1 :dim), ScalarValue > get_curl(Types::Index field_index, DependencyType type) const
Return the curl of the specified field.
void feevaluation_size_valid(Types::Index field_index) const
Check whether the entry for the FEEvaluation is within the bounds of the vector.
Definition field_container.h:1409
Value< Rank > get_value(Types::Index field_index) const
Return the value of the specified field.
Class that provides access to solution vectors spread across different groups.
Definition solution_indexer.h:20
Structure to hold the attributes of a solve-block.
Definition solve_block.h:59
static const dealii::QGaussLobatto< dim > quadrature
Quadrature rule.
Definition system_wide.h:41
std::map< Types::Index, Dependency > DependencyMap
Definition dependencies.h:129
#define AssertThrowDebug(cond, exc)
Definition exceptions.h:26
#define AssertAccessible(fe_eval_pair_ptr, dependency_type)
Definition field_container.h:632
#define GetterNoTempl(dependency_type)
Definition field_container.h:1033
#define GetterTempl(dependency_type)
Definition field_container.h:1032
static const std::map< DependencyType, std::string > dependency_type_to_string
Definition field_container.h:556
#define ReturnGetter(get_handle, Rank, field_index, dependency_type, getter)
Definition field_container.h:1034
@ Value
Use value of the variable as a criterion for refinement.
Definition grid_refiner_criterion.h:31
@ Gradient
Use gradient of the variable as a criterion for refinement.
Definition grid_refiner_criterion.h:36
dealii::LinearAlgebra::distributed::BlockVector< number > BlockVector
Typedef for solution block vector.
Definition group_solution_handler.h:29
Definition conditional_ostreams.cc:20
unsigned int Index
Type for field indices.
Definition types.h:19
Type
Factory function to create appropriate reader based on input file type not a member of ReadFieldBase ...
Definition read_field_factory.h:30
Dependency struct containing evaluation flags for each field.
Definition dependencies.h:30
EvalFlags src_flag
Evaluation flags for the DependencyType::SRC solution.
Definition dependencies.h:42
std::vector< EvalFlags > old_flags
Collection of evaluation flags for the old solutions.
Definition dependencies.h:47
EvalFlags flag
Evaluation flags for the current solution.
Definition dependencies.h:36
FEEDepPairPtr fe_eval_src_dst
FEEvaluation for the src and dst solutions.
Definition field_container.h:138
void eval_without_read()
Definition field_container.h:840
void integrate()
Definition field_container.h:851
std::shared_ptr< FEEDepPair > FEEDepPairPtr
Pointer the the FEEDepPair. We have to use ptrs because we don't want to construct fields we don't ne...
Definition field_container.h:128
const FEEval< Rank > & get() const
EvalFlags integration_flags
Destination integration flags. We use this to integrate value and gradient terms, if they exist.
Definition field_container.h:149
void distribute(BlockVector< number > *dst_solutions)
Definition field_container.h:862
void reinit(unsigned int cell)
Definition field_container.h:735
FEEDepPairPtr fe_eval
FEEvaluation for the current solution.
Definition field_container.h:133
void reinit_and_eval(unsigned int cell, const BlockVector< number > *_src_solutions, bool plain)
Definition field_container.h:795
void eval(const BlockVector< number > *_src_solutions, bool plain)
Definition field_container.h:757
FEEValuationDeps()=default
Default constructor.
std::vector< FEEDepPairPtr > fe_eval_old
Collection of FEEvaluation for old solutions (< n-1 state).
Definition field_container.h:143
void integrate_and_distribute(BlockVector< number > *dst_solutions)
Definition field_container.h:875
const SolutionLevel< dim, number > * solution_level
The solution block.
Definition field_container.h:157
std::pair< FEEval< Rank >, EvalFlags > FEEDepPair
dealii::FEEvaluation object and the evaluation flags.
Definition field_container.h:122
unsigned int block_index
The solution block index.
Definition field_container.h:174
unsigned int field_index
The solution field index.
Definition field_container.h:166
The solution vectors with respect to on some multigrid level.
Definition group_solution_handler.h:58
DependencyType
Internal classification for types of variable dependencies.
Definition type_enums.h:94
@ Current
Definition type_enums.h:101
@ DST
Definition type_enums.h:95
@ OldFour
Definition type_enums.h:105
@ OldThree
Definition type_enums.h:104
@ SRC
Definition type_enums.h:96
@ OldOne
Definition type_enums.h:102
@ OldTwo
Definition type_enums.h:103
TensorRank
Tensor rank of the field.
Definition type_enums.h:52
@ Vector
Definition type_enums.h:55
@ Scalar
Definition type_enums.h:54
dealii::EvaluationFlags::EvaluationFlags EvalFlags
Definition types.h:86