15 #ifndef _aspect_material_model_interface_h 16 #define _aspect_material_model_interface_h 47 namespace MaterialModel
53 namespace NonlinearDependence
96 return Dependence(static_cast<int>(d1) | static_cast<int>(d2));
166 namespace MaterialProperties
215 return Property(static_cast<int>(d1) | static_cast<int>(d2));
251 const unsigned int n_comp);
270 const bool compute_strain_rate =
true);
296 const bool compute_strain_rate =
true);
313 resize(
const unsigned int n_points,
314 const unsigned int n_comp);
356 const bool compute_strain_rate =
true);
362 unsigned int n_evaluation_points()
const;
458 template <
class AdditionalInputType>
459 std::shared_ptr<AdditionalInputType>
460 get_additional_input_object();
466 template <
class AdditionalInputType>
467 std::shared_ptr<const AdditionalInputType>
468 get_additional_input_object()
const;
475 template <
class AdditionalInputType>
477 AdditionalInputType *
478 get_additional_input();
485 template <
class AdditionalInputType>
487 const AdditionalInputType *
488 get_additional_input()
const;
499 template <
class AdditionalInputType>
501 has_additional_input_object()
const;
538 const unsigned int n_comp);
562 resize(
const unsigned int n_points,
563 const unsigned int n_comp,
564 const bool remove_additional_outputs =
true);
601 unsigned int n_evaluation_points()
const;
704 template <
class AdditionalOutputType>
705 std::shared_ptr<AdditionalOutputType>
706 get_additional_output_object();
712 template <
class AdditionalOutputType>
713 std::shared_ptr<const AdditionalOutputType>
714 get_additional_output_object()
const;
721 template <
class AdditionalOutputType>
723 AdditionalOutputType *
724 get_additional_output();
731 template <
class AdditionalOutputType>
733 const AdditionalOutputType *
734 get_additional_output()
const;
745 template <
class AdditionalInputType>
747 has_additional_output_object()
const;
772 namespace MaterialAveraging
864 std::vector<double> &values_out);
1009 const unsigned int n_points);
1020 const std::vector<std::string> &
get_names()
const;
1026 virtual std::vector<double> get_nth_output(
const unsigned int idx)
const;
1056 std::vector<double> get_nth_output(
const unsigned int idx)
const override;
1099 const unsigned int n_comp);
1101 std::vector<double> get_nth_output(
const unsigned int idx)
const override;
1152 const unsigned int n_comp);
1154 std::vector<double> get_nth_output(
const unsigned int idx)
const override;
1185 std::vector<double> get_nth_output(
const unsigned int idx)
const override;
1208 : rhs_u(n_points), rhs_p(n_points), rhs_melt_pc(n_points)
1282 std::vector<double> get_nth_output(
const unsigned int idx)
const override;
1356 : enthalpies_of_fusion(n_points,
numbers::signaling_nan<
double>())
1427 get_model_dependence ()
const;
1438 virtual bool is_compressible ()
const = 0;
1512 const std::string &description,
1527 std::unique_ptr<Interface<dim>>
1543 std::unique_ptr<Interface<dim>>
1587 template <
class AdditionalInputType>
1588 std::shared_ptr<AdditionalInputType>
1591 for (
unsigned int i=0; i<additional_inputs.size(); ++i)
1592 if (dynamic_cast<AdditionalInputType *> (additional_inputs[i].
get()))
1593 return std::dynamic_pointer_cast<AdditionalInputType>(additional_inputs[i]);
1600 template <
class AdditionalInputType>
1601 std::shared_ptr<const AdditionalInputType>
1604 for (
unsigned int i=0; i<additional_inputs.size(); ++i)
1605 if (dynamic_cast<AdditionalInputType *> (additional_inputs[i].
get()))
1606 return std::dynamic_pointer_cast<const AdditionalInputType>(additional_inputs[i]);
1613 template <
class AdditionalOutputType>
1614 std::shared_ptr<AdditionalOutputType>
1626 template <
class AdditionalOutputType>
1627 std::shared_ptr<const AdditionalOutputType>
1640 template <
class AdditionalInputType>
1641 AdditionalInputType *
1644 return get_additional_input_object<AdditionalInputType>().
get();
1649 template <
class AdditionalInputType>
1650 const AdditionalInputType *
1653 return get_additional_input_object<AdditionalInputType>().
get();
1658 template <
class AdditionalOutputType>
1659 AdditionalOutputType *
1662 return get_additional_output_object<AdditionalOutputType>().
get();
1667 template <
class AdditionalOutputType>
1668 const AdditionalOutputType *
1671 return get_additional_output_object<AdditionalOutputType>().
get();
1676 template <
class AdditionalInputType>
1680 for (
unsigned int i=0; i<additional_inputs.size(); ++i)
1681 if (dynamic_cast<AdditionalInputType *> (additional_inputs[i].
get()))
1689 template <
class AdditionalOutputType>
1717 #define ASPECT_REGISTER_MATERIAL_MODEL(classname,name,description) \ 1718 template class classname<2>; \ 1719 template class classname<3>; \ 1720 namespace ASPECT_REGISTER_MATERIAL_MODEL_ ## classname \ 1722 aspect::internal::Plugins::RegisterHelper<aspect::MaterialModel::Interface<2>,classname<2>> \ 1723 dummy_ ## classname ## _2d (&aspect::MaterialModel::register_material_model<2>, \ 1724 name, description); \ 1725 aspect::internal::Plugins::RegisterHelper<aspect::MaterialModel::Interface<3>,classname<3>> \ 1726 dummy_ ## classname ## _3d (&aspect::MaterialModel::register_material_model<3>, \ 1727 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
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)())
#define AssertThrow(cond, exc)
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
static ::ExceptionBase & ExcNotImplemented()
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)
#define Assert(cond, exc)
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
static ::ExceptionBase & ExcMessage(std::string arg1)
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
#define DEAL_II_DEPRECATED
std::vector< std::shared_ptr< AdditionalMaterialOutputs< dim > > > additional_outputs