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
59 namespace NonlinearDependence
102 return Dependence(static_cast<int>(d1) | static_cast<int>(d2));
172 namespace MaterialProperties
221 return Property(static_cast<int>(d1) | static_cast<int>(d2));
257 const unsigned int n_comp);
276 const bool compute_strain_rate =
true);
299 const typename DoFHandler<dim>::active_cell_iterator &cell,
302 const bool compute_strain_rate =
true);
340 void reinit(
const FEValuesBase<dim,dim> &fe_values,
341 const typename DoFHandler<dim>::active_cell_iterator &cell,
344 const bool compute_strain_rate =
true);
350 unsigned int n_evaluation_points()
const;
446 template <
class AdditionalInputType>
447 std::shared_ptr<AdditionalInputType>
448 get_additional_input_object();
454 template <
class AdditionalInputType>
455 std::shared_ptr<const AdditionalInputType>
456 get_additional_input_object()
const;
463 template <
class AdditionalInputType>
465 AdditionalInputType *
466 get_additional_input();
473 template <
class AdditionalInputType>
475 const AdditionalInputType *
476 get_additional_input()
const;
487 template <
class AdditionalInputType>
489 has_additional_input_object()
const;
526 const unsigned int n_comp);
563 unsigned int n_evaluation_points()
const;
666 template <
class AdditionalOutputType>
667 std::shared_ptr<AdditionalOutputType>
668 get_additional_output_object();
674 template <
class AdditionalOutputType>
675 std::shared_ptr<const AdditionalOutputType>
676 get_additional_output_object()
const;
683 template <
class AdditionalOutputType>
685 AdditionalOutputType *
686 get_additional_output();
693 template <
class AdditionalOutputType>
695 const AdditionalOutputType *
696 get_additional_output()
const;
707 template <
class AdditionalInputType>
709 has_additional_output_object()
const;
734 namespace MaterialAveraging
812 const typename DoFHandler<dim>::active_cell_iterator &cell,
813 const Quadrature<dim> &quadrature_formula,
814 const Mapping<dim> &mapping,
824 const FullMatrix<double> &projection_matrix,
825 const FullMatrix<double> &expansion_matrix,
826 std::vector<double> &values_out);
874 const FEValuesBase<dim> &fe_values,
916 const FullMatrix<double> &,
917 const FullMatrix<double> &)
968 const unsigned int n_points);
979 const std::vector<std::string> &
get_names()
const;
985 virtual std::vector<double> get_nth_output(
const unsigned int idx)
const;
988 const FullMatrix<double> &,
989 const FullMatrix<double> &)
override 1015 std::vector<double> get_nth_output(
const unsigned int idx)
const override;
1058 const unsigned int n_comp);
1060 std::vector<double> get_nth_output(
const unsigned int idx)
const override;
1111 const unsigned int n_comp);
1113 std::vector<double> get_nth_output(
const unsigned int idx)
const override;
1144 std::vector<double> get_nth_output(
const unsigned int idx)
const override;
1167 : rhs_u(n_points), rhs_p(n_points), rhs_melt_pc(n_points)
1174 const FullMatrix<double> &,
1175 const FullMatrix<double> &)
override 1241 std::vector<double> get_nth_output(
const unsigned int idx)
const override;
1269 : elastic_force(n_points, numbers::signaling_nan<SymmetricTensor<2,dim>>()),
1270 viscoelastic_strain_rate(n_points, numbers::signaling_nan<SymmetricTensor<2,dim>>())
1277 const FullMatrix<double> &,
1278 const FullMatrix<double> &)
override 1315 : enthalpies_of_fusion(n_points, numbers::signaling_nan<double>())
1322 const FullMatrix<double> &,
1323 const FullMatrix<double> &)
override 1386 get_model_dependence ()
const;
1397 virtual bool is_compressible ()
const = 0;
1431 const FEValuesBase<dim> &fe_values,
1471 const std::string &description,
1472 void (*declare_parameters_function) (ParameterHandler &),
1486 std::unique_ptr<Interface<dim>>
1502 std::unique_ptr<Interface<dim>>
1546 template <
class AdditionalInputType>
1547 std::shared_ptr<AdditionalInputType>
1550 for (
unsigned int i=0; i<additional_inputs.size(); ++i)
1551 if (dynamic_cast<AdditionalInputType *> (additional_inputs[i].
get()))
1552 return std::dynamic_pointer_cast<AdditionalInputType>(additional_inputs[i]);
1559 template <
class AdditionalInputType>
1560 std::shared_ptr<const AdditionalInputType>
1563 for (
unsigned int i=0; i<additional_inputs.size(); ++i)
1564 if (dynamic_cast<AdditionalInputType *> (additional_inputs[i].
get()))
1565 return std::dynamic_pointer_cast<const AdditionalInputType>(additional_inputs[i]);
1572 template <
class AdditionalOutputType>
1573 std::shared_ptr<AdditionalOutputType>
1585 template <
class AdditionalOutputType>
1586 std::shared_ptr<const AdditionalOutputType>
1599 template <
class AdditionalInputType>
1600 AdditionalInputType *
1603 return get_additional_input_object<AdditionalInputType>().
get();
1608 template <
class AdditionalInputType>
1609 const AdditionalInputType *
1612 return get_additional_input_object<AdditionalInputType>().
get();
1617 template <
class AdditionalOutputType>
1618 AdditionalOutputType *
1621 return get_additional_output_object<AdditionalOutputType>().
get();
1626 template <
class AdditionalOutputType>
1627 const AdditionalOutputType *
1630 return get_additional_output_object<AdditionalOutputType>().
get();
1635 template <
class AdditionalInputType>
1639 for (
unsigned int i=0; i<additional_inputs.size(); ++i)
1640 if (dynamic_cast<AdditionalInputType *> (additional_inputs[i].
get()))
1648 template <
class AdditionalOutputType>
1664 Assert(this->
additional_outputs.empty(), ExcMessage(
"Destination of move needs to be empty!"));
1676 #define ASPECT_REGISTER_MATERIAL_MODEL(classname,name,description) \ 1677 template class classname<2>; \ 1678 template class classname<3>; \ 1679 namespace ASPECT_REGISTER_MATERIAL_MODEL_ ## classname \ 1681 aspect::internal::Plugins::RegisterHelper<aspect::MaterialModel::Interface<2>,classname<2>> \ 1682 dummy_ ## classname ## _2d (&aspect::MaterialModel::register_material_model<2>, \ 1683 name, description); \ 1684 aspect::internal::Plugins::RegisterHelper<aspect::MaterialModel::Interface<3>,classname<3>> \ 1685 dummy_ ## classname ## _3d (&aspect::MaterialModel::register_material_model<3>, \ 1686 name, description); \ void write_plugin_graph(std::ostream &output_stream)
AveragingOperation get_averaging_operation_for_viscosity(const AveragingOperation operation)
std::vector< double > entropy_derivative_pressure
std::vector< Tensor< 1, dim > > rhs_u
std::vector< double > compressibilities
std::vector< double > entropy_derivative_temperature
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
std::vector< double > dilation_rhs_term
std::vector< double > specific_heat
::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)())
std::vector< double > thermal_conductivities
ElasticOutputs(const unsigned int n_points)
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
std::vector< std::vector< double > > reaction_terms
std::vector< double > dilation_lhs_term
const std::vector< std::string > names
std::vector< double > densities
std::vector< double > rhs_p
void average(const MaterialAveraging::AveragingOperation operation, const FullMatrix< double > &, const FullMatrix< double > &) override
std::shared_ptr< AdditionalOutputType > get_additional_output_object()
EnthalpyOutputs(const unsigned int n_points)
AveragingOperation parse_averaging_operation_name(const std::string &s)
Dependence compressibility
AdditionalMaterialOutputsStokesRHS(const unsigned int n_points)
Dependence operator|=(Dependence &d1, const Dependence d2)
void move_additional_outputs_from(MaterialModelOutputs< dim > &other)
std::vector< double > enthalpies_of_fusion
std::string get_averaging_operation_names()
std::vector< SymmetricTensor< 2, dim > > elastic_force
DEAL_II_DEPRECATED AdditionalOutputType * get_additional_output()
std::vector< std::vector< double > > output_values
void average(const MaterialAveraging::AveragingOperation operation, const FullMatrix< double > &, const FullMatrix< double > &) override
std::vector< double > viscosities
std::vector< double > prescribed_temperature_outputs
bool has_additional_output_object() const
NonlinearDependence::ModelDependence model_dependence
std::unique_ptr< Interface< dim > > create_material_model(const std::string &model_name)
void average(const AveragingOperation operation, const typename DoFHandler< dim >::active_cell_iterator &cell, const Quadrature< dim > &quadrature_formula, const Mapping< dim > &mapping, const MaterialProperties::Property &requested_properties, MaterialModelOutputs< dim > &values_out)
Dependence thermal_conductivity
std::string get_valid_model_names_pattern()
Dependence operator|(const Dependence d1, const Dependence d2)
std::vector< SymmetricTensor< 2, dim > > viscoelastic_strain_rate
void average(const MaterialAveraging::AveragingOperation, const FullMatrix< double > &, const FullMatrix< double > &) override
std::vector< std::shared_ptr< AdditionalMaterialOutputs< dim > > > additional_outputs