40 : boussinesq_term(
false),
41 boussinesq_dynamic_part_only(
false),
42 thermal_expansion_coefficient(1.0),
43 reference_temperature(0.0)
47 std::shared_ptr<dealii::Function<dim>> f;
51 bool boussinesq_dynamic_part_only;
52 double thermal_expansion_coefficient;
53 double reference_temperature;
54 std::shared_ptr<dealii::Function<dim>> gravitational_force;
61 typedef dealii::VectorizedArray<Number> scalar;
62 typedef dealii::Tensor<1, dim, dealii::VectorizedArray<Number>> vector;
64 typedef CellIntegrator<dim, dim, Number> Integrator;
65 typedef CellIntegrator<dim, 1, Number> IntegratorScalar;
79 flags.cells = dealii::update_JxW_values |
80 dealii::update_quadrature_points;
90 inline DEAL_II_ALWAYS_INLINE
92 get_volume_flux(Integrator
const & integrator,
93 IntegratorScalar
const & integrator_temperature,
95 Number
const & time)
const
97 dealii::Point<dim, scalar> q_points = integrator.quadrature_point(q);
99 vector f = FunctionEvaluator<1, dim, Number>::value(*(data.f), q_points, time);
101 if(data.boussinesq_term)
104 FunctionEvaluator<1, dim, Number>::value(*(data.gravitational_force), q_points, time);
105 scalar T = integrator_temperature.get_value(q);
106 scalar T_ref = data.reference_temperature;
108 if(data.boussinesq_dynamic_part_only)
109 f += g * (-data.thermal_expansion_coefficient * (T - T_ref));
111 f += g * (1.0 - data.thermal_expansion_coefficient * (T - T_ref));
143 typedef RHSOperator<dim, Number> This;
145 typedef dealii::LinearAlgebra::distributed::Vector<Number> VectorType;
147 typedef std::pair<unsigned int, unsigned int> Range;
149 typedef CellIntegrator<dim, dim, Number> Integrator;
151 typedef CellIntegrator<dim, 1, Number> IntegratorScalar;
156 initialize(dealii::MatrixFree<dim, Number>
const & matrix_free,
160 evaluate(VectorType & dst, Number
const evaluation_time)
const;
163 evaluate_add(VectorType & dst, Number
const evaluation_time)
const;
166 set_temperature(VectorType
const & T);
170 do_cell_integral(Integrator & integrator, IntegratorScalar & integrator_temperature)
const;
173 cell_loop(dealii::MatrixFree<dim, Number>
const & matrix_free,
175 VectorType
const & src,
176 Range
const & cell_range)
const;
178 dealii::MatrixFree<dim, Number>
const * matrix_free;
186 VectorType
const * temperature;