21 #ifndef _aspect_material_model_interface_h 22 #define _aspect_material_model_interface_h 28 #include <deal.II/base/point.h> 29 #include <deal.II/base/quadrature.h> 30 #include <deal.II/base/symmetric_tensor.h> 31 #include <deal.II/base/parameter_handler.h> 32 #include <deal.II/dofs/dof_handler.h> 33 #include <deal.II/dofs/dof_accessor.h> 34 #include <deal.II/fe/mapping.h> 35 #include <deal.II/fe/fe_values.h> 36 #include <deal.II/fe/component_mask.h> 37 #include <deal.II/numerics/data_postprocessor.h> 38 #include <deal.II/base/signaling_nan.h> 53 namespace MaterialModel
61 namespace NonlinearDependence
104 return Dependence(static_cast<int>(d1) | static_cast<int>(d2));
174 namespace MaterialProperties
223 return Property(static_cast<int>(d1) | static_cast<int>(d2));
255 const unsigned int n_comp);
274 const bool compute_strain_rate =
true);
297 const typename DoFHandler<dim>::active_cell_iterator &cell,
300 const bool compute_strain_rate =
true);
338 void reinit(
const FEValuesBase<dim,dim> &fe_values,
339 const typename DoFHandler<dim>::active_cell_iterator &cell,
342 const bool compute_strain_rate =
true);
348 unsigned int n_evaluation_points()
const;
449 template <
class AdditionalInputType>
450 AdditionalInputType *get_additional_input();
455 template <
class AdditionalInputType>
456 const AdditionalInputType *get_additional_input()
const;
483 const unsigned int n_comp);
520 unsigned int n_evaluation_points()
const;
621 template <
class AdditionalOutputType>
622 AdditionalOutputType *get_additional_output();
627 template <
class AdditionalOutputType>
628 const AdditionalOutputType *get_additional_output()
const;
653 namespace MaterialAveraging
730 const typename DoFHandler<dim>::active_cell_iterator &cell,
731 const Quadrature<dim> &quadrature_formula,
732 const Mapping<dim> &mapping,
741 const FullMatrix<double> &projection_matrix,
742 const FullMatrix<double> &expansion_matrix,
743 std::vector<double> &values_out);
777 const FEValuesBase<dim> &fe_values,
819 const FullMatrix<double> &,
820 const FullMatrix<double> &)
871 const unsigned int n_points);
882 const std::vector<std::string> &
get_names()
const;
888 virtual std::vector<double> get_nth_output(
const unsigned int idx)
const;
891 const FullMatrix<double> &,
892 const FullMatrix<double> &)
override 903 const std::vector<std::string>
names;
918 std::vector<double> get_nth_output(
const unsigned int idx)
const override;
925 std::vector<double>
vs;
932 std::vector<double>
vp;
961 const unsigned int n_comp);
963 std::vector<double> get_nth_output(
const unsigned int idx)
const override;
1014 const unsigned int n_comp);
1016 std::vector<double> get_nth_output(
const unsigned int idx)
const override;
1047 std::vector<double> get_nth_output(
const unsigned int idx)
const override;
1070 : rhs_u(n_points), rhs_p(n_points), rhs_melt_pc(n_points)
1077 const FullMatrix<double> &,
1078 const FullMatrix<double> &)
override 1132 std::vector<double> get_nth_output(
const unsigned int idx)
const override;
1154 : elastic_force(n_points, numbers::signaling_nan<Tensor<2,dim>>() )
1161 const FullMatrix<double> &,
1162 const FullMatrix<double> &)
override 1193 : enthalpies_of_fusion(n_points, numbers::signaling_nan<double>())
1200 const FullMatrix<double> &,
1201 const FullMatrix<double> &)
override 1270 virtual void update ();
1284 get_model_dependence ()
const;
1295 virtual bool is_compressible ()
const = 0;
1329 parse_parameters (ParameterHandler &prm);
1355 const FEValuesBase<dim> &fe_values,
1395 const std::string &description,
1396 void (*declare_parameters_function) (ParameterHandler &),
1410 std::unique_ptr<Interface<dim>>
1426 std::unique_ptr<Interface<dim>>
1470 template <
class AdditionalInputType>
1473 for (
unsigned int i=0; i<additional_inputs.size(); ++i)
1475 AdditionalInputType *result =
dynamic_cast<AdditionalInputType *
> (additional_inputs[i].get());
1484 template <
class AdditionalInputType>
1487 for (
unsigned int i=0; i<additional_inputs.size(); ++i)
1489 const AdditionalInputType *result =
dynamic_cast<const AdditionalInputType *
> (additional_inputs[i].get());
1498 template <
class AdditionalOutputType>
1503 AdditionalOutputType *result =
dynamic_cast<AdditionalOutputType *
> (
additional_outputs[i].get());
1512 template <
class AdditionalOutputType>
1517 const AdditionalOutputType *result =
dynamic_cast<const AdditionalOutputType *
> (
additional_outputs[i].get());
1528 Assert(this->
additional_outputs.empty(), ExcMessage(
"Destination of move needs to be empty!"));
1540 #define ASPECT_REGISTER_MATERIAL_MODEL(classname,name,description) \ 1541 template class classname<2>; \ 1542 template class classname<3>; \ 1543 namespace ASPECT_REGISTER_MATERIAL_MODEL_ ## classname \ 1545 aspect::internal::Plugins::RegisterHelper<aspect::MaterialModel::Interface<2>,classname<2>> \ 1546 dummy_ ## classname ## _2d (&aspect::MaterialModel::register_material_model<2>, \ 1547 name, description); \ 1548 aspect::internal::Plugins::RegisterHelper<aspect::MaterialModel::Interface<3>,classname<3>> \ 1549 dummy_ ## classname ## _3d (&aspect::MaterialModel::register_material_model<3>, \ 1550 name, description); \ void write_plugin_graph(std::ostream &output_stream)
std::vector< Tensor< 1, dim > > rhs_u
void average_property(const AveragingOperation operation, const FullMatrix< double > &projection_matrix, const FullMatrix< double > &expansion_matrix, std::vector< double > &values_out)
std::vector< double > rhs_melt_pc
::TrilinosWrappers::MPI::BlockVector BlockVector
std::vector< double > thermal_expansion_coefficients
virtual void average(const MaterialAveraging::AveragingOperation, const FullMatrix< double > &, const FullMatrix< double > &)
std::vector< std::vector< double > > prescribed_field_outputs
void register_material_model(const std::string &name, const std::string &description, void(*declare_parameters_function)(ParameterHandler &), std::unique_ptr< Interface< dim >>(*factory_function)())
ElasticOutputs(const unsigned int n_points)
AdditionalOutputType * get_additional_output()
std::vector< std::vector< double > > reaction_rates
void declare_parameters(ParameterHandler &prm)
bool identifies_single_variable(const Dependence dependence)
void average(const MaterialAveraging::AveragingOperation, const FullMatrix< double > &, const FullMatrix< double > &) override
void average(const AveragingOperation operation, const typename DoFHandler< dim >::active_cell_iterator &cell, const Quadrature< dim > &quadrature_formula, const Mapping< dim > &mapping, MaterialModelOutputs< dim > &values_out)
const std::vector< std::string > names
Property operator|=(Property &d1, const Property d2)
std::vector< double > rhs_p
void average(const MaterialAveraging::AveragingOperation operation, const FullMatrix< double > &, const FullMatrix< double > &) override
std::vector< std::vector< double > > reaction_terms
EnthalpyOutputs(const unsigned int n_points)
AveragingOperation parse_averaging_operation_name(const std::string &s)
Property operator|(const Property d1, const Property d2)
Dependence compressibility
AdditionalMaterialOutputsStokesRHS(const unsigned int n_points)
std::vector< double > dilation
std::vector< double > enthalpies_of_fusion
std::string get_averaging_operation_names()
void move_additional_outputs_from(MaterialModelOutputs< dim > &other)
std::vector< double > viscosities
std::vector< std::vector< double > > output_values
std::vector< Tensor< 2, dim > > elastic_force
void average(const MaterialAveraging::AveragingOperation operation, const FullMatrix< double > &, const FullMatrix< double > &) override
std::vector< double > entropy_derivative_pressure
std::vector< double > compressibilities
std::vector< double > thermal_conductivities
std::vector< double > prescribed_temperature_outputs
std::vector< double > entropy_derivative_temperature
NonlinearDependence::ModelDependence model_dependence
std::unique_ptr< Interface< dim > > create_material_model(const std::string &model_name)
Dependence thermal_conductivity
std::string get_valid_model_names_pattern()
std::vector< double > densities
void average(const MaterialAveraging::AveragingOperation, const FullMatrix< double > &, const FullMatrix< double > &) override
std::vector< double > specific_heat
std::vector< std::unique_ptr< AdditionalMaterialOutputs< dim > > > additional_outputs