7#include <deal.II/base/multithread_info.h>
8#include <deal.II/base/quadrature_lib.h>
9#include <deal.II/base/timer.h>
10#include <deal.II/dofs/dof_handler.h>
11#include <deal.II/fe/fe_interface_values.h>
12#include <deal.II/fe/fe_values.h>
13#include <deal.II/lac/full_matrix.h>
14#include <deal.II/lac/sparse_matrix.h>
15#include <deal.II/lac/vector.h>
16#include <deal.II/meshworker/mesh_loop.h>
17#include <deal.II/numerics/fe_field_function.h>
18#include <deal.II/numerics/matrix_tools.h>
19#include <deal.II/numerics/vector_tools.h>
31 using namespace dealii;
34 template <
typename... T>
auto fe_tie(T &&...t)
36 return named_tuple<std::tuple<T &...>,
"variables">(std::tie(t...));
58 if (
threads == 0)
threads = dealii::MultithreadInfo::n_threads() / 2;
59 static_assert(Components::count_fe_functions() == 0,
"The pure variable assembler cannot handle FE functions!");
73 readouts(data_out, solution, variables);
103 auto helper = [&](
auto EoMfun,
auto outputter) {
105 outputter(data_out, Point<0>(),
fe_tie(variables));
107 model.template readouts_multiple(helper, data_out);
129 void log(
const std::string logger)
const
131 std::stringstream ss;
132 ss <<
"Variable Assembler: " << std::endl;
137 spdlog::get(logger)->info(ss.str());
This is the general assembler interface for any kind of discretization. An assembler is responsible f...
Definition abstract_assembler.hh:39
Class to manage writing to files. FEM functions are written to vtk files and other data is written to...
Definition data_output.hh:20
A wrapper around the boost json value class.
Definition json.hh:19
The basic assembler that can be used for any standard CG scheme with flux and source.
Definition variables.hh:45
virtual void reinit() override
Reinitialize the assembler. This is necessary if the mesh has changed, e.g. after a mesh refinement.
Definition variables.hh:76
virtual void reinit_vector(VectorType &vec) const override
Reinitialize an arbitrary vector so that it has the correct size and structure.
Definition variables.hh:63
virtual void residual_variables(VectorType &residual, const VectorType &variables, const VectorType &) override
When coupling the spatial discretization to additional variables, this function should calculate the ...
Definition variables.hh:86
std::vector< double > timings_jacobian
Definition variables.hh:170
virtual void set_time(double t) override
Set the current time. The assembler should usually just forward this to the numerical model.
Definition variables.hh:78
virtual void residual(VectorType &, const VectorType &, NumberType, const VectorType &, NumberType, const VectorType &variables=VectorType()) override
Definition variables.hh:112
virtual IndexSet get_differential_indices() const override
Obtain the dofs which contain time derivatives.
Definition variables.hh:65
void log(const std::string logger) const
Definition variables.hh:129
virtual void attach_data_output(DataOutput< dim, VectorType > &data_out, const VectorType &solution, const VectorType &variables, const VectorType &dt_solution=VectorType(), const VectorType &residual=VectorType())
Attach any data output to the DataOutput object provided. This can be used to extract additional data...
Definition variables.hh:67
uint threads
Definition variables.hh:163
Model & model
Definition variables.hh:161
SparsityPattern sparsity_pattern_mass
Definition variables.hh:165
static constexpr uint dim
Definition variables.hh:54
uint num_jacobians() const
Definition variables.hh:158
uint num_residuals() const
Definition variables.hh:148
void readouts(DataOutput< dim, VectorType > &data_out, const VectorType &, const VectorType &variables) const
Definition variables.hh:101
virtual void jacobian_mass(SparseMatrix< NumberType > &, const VectorType &, const VectorType &, NumberType, NumberType) override
Definition variables.hh:118
virtual const SparseMatrix< NumberType > & get_mass_matrix() const override
Obtain the mass matrix.
Definition variables.hh:84
typename Model_::Components Components
Definition variables.hh:53
SparsityPattern sparsity_pattern_jacobian
Definition variables.hh:166
Model_ Model
Definition variables.hh:49
double average_time_jacobian_assembly()
Definition variables.hh:150
std::vector< double > timings_residual
Definition variables.hh:169
Assembler(Model &model, const JSONValue &json)
Definition variables.hh:56
SparseMatrix< NumberType > mass_matrix
Definition variables.hh:167
virtual void jacobian(SparseMatrix< NumberType > &, const VectorType &, NumberType, const VectorType &, NumberType, NumberType, const VectorType &variables=VectorType()) override
Definition variables.hh:123
virtual void mass(VectorType &, const VectorType &, const VectorType &, NumberType) override
Definition variables.hh:110
virtual const SparsityPattern & get_sparsity_pattern_jacobian() const override
Obtain the sparsity pattern of the jacobian matrix.
Definition variables.hh:80
Vector< double > VectorType
Definition variables.hh:51
static constexpr int nothing
Definition variables.hh:46
double NumberType
Definition variables.hh:50
double average_time_residual_assembly()
Definition variables.hh:140
virtual void jacobian_variables(FullMatrix< NumberType > &jacobian, const VectorType &variables, const VectorType &) override
Definition variables.hh:93
auto fe_tie(T &&...t)
Definition variables.hh:34
Definition complex_math.hh:14
unsigned int uint
Definition utils.hh:22
A class to store a tuple with elements that can be accessed by name. The names are stored as FixedStr...
Definition tuples.hh:27