21#ifndef INCLUDE_EXADG_OPERATORS_VARIABLE_COEFFICIENTS_H_
22#define INCLUDE_EXADG_OPERATORS_VARIABLE_COEFFICIENTS_H_
38template<
typename coefficient_type>
55 template<
int dim,
typename Number>
57 initialize(dealii::MatrixFree<dim, Number>
const & matrix_free,
58 unsigned int const quad_index,
59 bool const store_face_data_in,
60 bool const store_cell_based_face_data_in)
62 if(not store_face_data_in)
63 AssertThrow(not store_cell_based_face_data_in,
64 dealii::ExcMessage(
"Storing only cell-based face data does not make sense"
65 " if storing face data is disabled."));
67 store_face_data = store_face_data_in;
68 store_cell_based_face_data = store_cell_based_face_data_in;
70 reinit(matrix_free, quad_index);
79 fill(constant_coefficient);
88 return coefficients_cell[cell][q];
98 coefficient_type
const & coefficient)
100 coefficients_cell[cell][q] = coefficient;
109 return coefficients_face[face][q];
117 unsigned int const q,
118 coefficient_type
const & coefficient)
120 coefficients_face[face][q] = coefficient;
129 return coefficients_face_neighbor[face][q];
138 unsigned int const q,
139 coefficient_type
const & coefficient)
141 coefficients_face_neighbor[face][q] = coefficient;
151 return coefficients_face_cell_based[cell_based_face][q];
160 unsigned int const q,
161 coefficient_type
const & coefficient)
163 coefficients_face_cell_based[cell_based_face][q] = coefficient;
171 template<
int dim,
typename Number>
173 reinit(dealii::MatrixFree<dim, Number>
const & matrix_free,
unsigned int const quad_index)
175 coefficients_cell.reinit(matrix_free.n_cell_batches(), matrix_free.get_n_q_points(quad_index));
179 coefficients_face.reinit(matrix_free.n_inner_face_batches() +
180 matrix_free.n_boundary_face_batches(),
181 matrix_free.get_n_q_points_face(quad_index));
182 coefficients_face_neighbor.reinit(matrix_free.n_inner_face_batches(),
183 matrix_free.get_n_q_points_face(quad_index));
185 if(store_cell_based_face_data)
187 unsigned int const n_faces_per_cell =
188 matrix_free.get_dof_handler().get_triangulation().get_reference_cells()[0].n_faces();
190 coefficients_face_cell_based.reinit(matrix_free.n_cell_batches() * n_faces_per_cell,
191 matrix_free.get_n_q_points_face(quad_index));
200 fill(coefficient_type
const & constant_coefficient)
202 coefficients_cell.fill(constant_coefficient);
206 coefficients_face.fill(constant_coefficient);
207 coefficients_face_neighbor.fill(constant_coefficient);
209 if(store_cell_based_face_data)
210 coefficients_face_cell_based.fill(constant_coefficient);
215 dealii::Table<2, coefficient_type> coefficients_cell;
218 dealii::Table<2, coefficient_type> coefficients_face;
221 dealii::Table<2, coefficient_type> coefficients_face_neighbor;
224 dealii::Table<2, coefficient_type> coefficients_face_cell_based;
227 bool store_face_data{
false};
235 bool store_cell_based_face_data{
false};
Definition variable_coefficients.h:40
coefficient_type get_coefficient_cell(unsigned int const cell, unsigned int const q) const
Definition variable_coefficients.h:86
coefficient_type get_coefficient_face_neighbor(unsigned int const face, unsigned int const q) const
Definition variable_coefficients.h:127
void initialize(dealii::MatrixFree< dim, Number > const &matrix_free, unsigned int const quad_index, bool const store_face_data_in, bool const store_cell_based_face_data_in)
Definition variable_coefficients.h:57
void set_coefficient_cell(unsigned int const cell, unsigned int const q, coefficient_type const &coefficient)
Definition variable_coefficients.h:96
void set_coefficient_face(unsigned int const face, unsigned int const q, coefficient_type const &coefficient)
Definition variable_coefficients.h:116
void set_coefficients(coefficient_type const &constant_coefficient)
Definition variable_coefficients.h:77
coefficient_type get_coefficient_face_cell_based(unsigned int const cell_based_face, unsigned int const q) const
Definition variable_coefficients.h:149
void set_coefficient_face_cell_based(unsigned int const cell_based_face, unsigned int const q, coefficient_type const &coefficient)
Definition variable_coefficients.h:159
void set_coefficient_face_neighbor(unsigned int const face, unsigned int const q, coefficient_type const &coefficient)
Definition variable_coefficients.h:137
coefficient_type get_coefficient_face(unsigned int const face, unsigned int const q) const
Definition variable_coefficients.h:107