25 : boussinesq_term(
false),
26 boussinesq_dynamic_part_only(
false),
27 thermal_expansion_coefficient(1.0),
28 reference_temperature(0.0)
32 std::shared_ptr<dealii::Function<dim>> f;
36 bool boussinesq_dynamic_part_only;
37 double thermal_expansion_coefficient;
38 double reference_temperature;
39 std::shared_ptr<dealii::Function<dim>> gravitational_force;
46 typedef dealii::VectorizedArray<Number> scalar;
47 typedef dealii::Tensor<1, dim, dealii::VectorizedArray<Number>> vector;
49 typedef CellIntegrator<dim, dim, Number> Integrator;
50 typedef CellIntegrator<dim, 1, Number> IntegratorScalar;
64 flags.cells = dealii::update_JxW_values |
65 dealii::update_quadrature_points;
75 inline DEAL_II_ALWAYS_INLINE
77 get_volume_flux(Integrator
const & integrator,
78 IntegratorScalar
const & integrator_temperature,
80 Number
const & time)
const
82 dealii::Point<dim, scalar> q_points = integrator.quadrature_point(q);
86 if(data.boussinesq_term)
90 scalar T = integrator_temperature.get_value(q);
91 scalar T_ref = data.reference_temperature;
93 if(data.boussinesq_dynamic_part_only)
94 f += g * (-data.thermal_expansion_coefficient * (T - T_ref));
96 f += g * (1.0 - data.thermal_expansion_coefficient * (T - T_ref));
130 typedef dealii::LinearAlgebra::distributed::Vector<Number> VectorType;
132 typedef std::pair<unsigned int, unsigned int> Range;
134 typedef CellIntegrator<dim, dim, Number> Integrator;
136 typedef CellIntegrator<dim, 1, Number> IntegratorScalar;
141 initialize(dealii::MatrixFree<dim, Number>
const & matrix_free,
145 evaluate(VectorType & dst, Number
const evaluation_time)
const;
148 evaluate_add(VectorType & dst, Number
const evaluation_time)
const;
151 set_temperature(VectorType
const & T);
155 do_cell_integral(Integrator & integrator, IntegratorScalar & integrator_temperature)
const;
158 cell_loop(dealii::MatrixFree<dim, Number>
const & matrix_free,
160 VectorType
const & src,
161 Range
const & cell_range)
const;
163 dealii::MatrixFree<dim, Number>
const * matrix_free;
171 VectorType
const * temperature;