39 : boussinesq_term(
false),
40 boussinesq_dynamic_part_only(
false),
41 thermal_expansion_coefficient(1.0),
42 reference_temperature(0.0)
46 std::shared_ptr<dealii::Function<dim>> f;
50 bool boussinesq_dynamic_part_only;
51 double thermal_expansion_coefficient;
52 double reference_temperature;
53 std::shared_ptr<dealii::Function<dim>> gravitational_force;
60 typedef dealii::VectorizedArray<Number> scalar;
61 typedef dealii::Tensor<1, dim, dealii::VectorizedArray<Number>> vector;
63 typedef CellIntegrator<dim, dim, Number> Integrator;
64 typedef CellIntegrator<dim, 1, Number> IntegratorScalar;
78 flags.cells = dealii::update_JxW_values |
79 dealii::update_quadrature_points;
89 inline DEAL_II_ALWAYS_INLINE
91 get_volume_flux(Integrator
const & integrator,
92 IntegratorScalar
const & integrator_temperature,
94 Number
const & time)
const
96 dealii::Point<dim, scalar> q_points = integrator.quadrature_point(q);
98 vector f = FunctionEvaluator<1, dim, Number>::value(*(data.f), q_points, time);
100 if(data.boussinesq_term)
103 FunctionEvaluator<1, dim, Number>::value(*(data.gravitational_force), q_points, time);
104 scalar T = integrator_temperature.get_value(q);
105 scalar T_ref = data.reference_temperature;
107 if(data.boussinesq_dynamic_part_only)
108 f += g * (-data.thermal_expansion_coefficient * (T - T_ref));
110 f += g * (1.0 - data.thermal_expansion_coefficient * (T - T_ref));
142 typedef RHSOperator<dim, Number> This;
144 typedef dealii::LinearAlgebra::distributed::Vector<Number> VectorType;
146 typedef std::pair<unsigned int, unsigned int> Range;
148 typedef CellIntegrator<dim, dim, Number> Integrator;
150 typedef CellIntegrator<dim, 1, Number> IntegratorScalar;
155 initialize(dealii::MatrixFree<dim, Number>
const & matrix_free,
159 evaluate(VectorType & dst, Number
const evaluation_time)
const;
162 evaluate_add(VectorType & dst, Number
const evaluation_time)
const;
165 set_temperature(VectorType
const & T);
169 do_cell_integral(Integrator & integrator, IntegratorScalar & integrator_temperature)
const;
172 cell_loop(dealii::MatrixFree<dim, Number>
const & matrix_free,
174 VectorType
const & src,
175 Range
const & cell_range)
const;
177 dealii::MatrixFree<dim, Number>
const * matrix_free;
185 VectorType
const * temperature;