16 #ifndef parsed_tools_mapping_fe_field_h
17 #define parsed_tools_mapping_fe_field_h
73 template <
int dim,
int spacedim = dim>
78 const dealii::DoFHandler<dim, spacedim> &dh,
80 const std::string &initial_configuration_or_displacement =
"",
82 const dealii::ComponentMask &
mask = dealii::ComponentMask());
90 template <
typename VectorType>
101 template <
typename VectorType>
104 VectorType &locally_relevant_configuration_or_displacement);
109 operator const dealii::Mapping<dim, spacedim> &()
const;
114 const dealii::Mapping<dim, spacedim> &
121 const dealii::SmartPointer<const dealii::DoFHandler<dim, spacedim>>
127 const dealii::ComponentMask
mask;
142 std::unique_ptr<dealii::Mapping<dim, spacedim>>
mapping;
148 template <
int dim,
int spacedim>
149 template <
typename VectorType>
152 VectorType &configuration_or_displacement)
154 initialize(configuration_or_displacement, configuration_or_displacement);
159 template <
int dim,
int spacedim>
160 template <
typename VectorType>
163 VectorType &configuration_or_displacement,
164 VectorType &locally_relevant_configuration_or_displacement)
167 if (initial_configuration_or_displacement_expression !=
"")
169 dealii::FunctionParser<spacedim> initial_configuration(
170 initial_configuration_or_displacement_expression);
173 dof_handler->get_fe().n_components(),
175 "configuration expression must be equal "
176 "to the number of components in the "
180 dealii::VectorTools::interpolate(*dof_handler,
181 initial_configuration,
182 configuration_or_displacement,
187 if (use_displacement)
188 configuration_or_displacement = 0;
191 if (dof_handler->get_triangulation()
192 .all_reference_cells_are_hyper_cube())
193 dealii::VectorTools::get_position_vector(
194 *dof_handler, configuration_or_displacement, mask);
198 const std::string
id[3] = {
"x",
"y",
"z"};
199 std::string id_expression;
200 std::string sep =
"";
202 for (
unsigned int i = 0;
206 if (mask[i] && j < spacedim)
207 id_expression += sep +
id[j++];
209 id_expression += sep +
"0";
213 dealii::FunctionParser<spacedim> initial_configuration(
216 dealii::VectorTools::interpolate(*dof_handler,
217 initial_configuration,
218 configuration_or_displacement,
224 locally_relevant_configuration_or_displacement =
225 configuration_or_displacement;
227 if (use_displacement)
232 dof_handler->get_triangulation().all_reference_cells_are_hyper_cube(),
234 "supported for hypercube grids."));
238 "Using the displacement is only possible with default "
241 const auto degree = dof_handler->get_fe().degree;
242 mapping.reset(
new dealii::MappingQEulerian<dim, VectorType, spacedim>(
245 locally_relevant_configuration_or_displacement));
251 mapping.reset(
new dealii::MappingFEField<dim, spacedim, VectorType>(
252 *dof_handler, locally_relevant_configuration_or_displacement, mask));
const std::string section_name
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)