21 #ifndef _aspect_material_model_interface_h
22 #define _aspect_material_model_interface_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));
234 class AdditionalMaterialInputs;
257 const unsigned int n_comp);
276 const bool compute_strain_rate =
true);
302 const bool compute_strain_rate =
true);
341 const typename
DoFHandler<dim>::active_cell_iterator &cell,
344 const
bool compute_strain_rate = true);
446 template <class AdditionalInputType>
447 std::shared_ptr<AdditionalInputType>
454 template <class AdditionalInputType>
455 std::shared_ptr<const AdditionalInputType>
463 template <class AdditionalInputType>
465 AdditionalInputType *
473 template <class AdditionalInputType>
475 const AdditionalInputType *
487 template <class AdditionalInputType>
526 const unsigned int n_comp);
568 std::vector<
double> viscosities;
573 std::vector<
double> densities;
579 std::vector<
double> thermal_expansion_coefficients;
589 std::vector<
double> thermal_conductivities;
595 std::vector<
double> compressibilities;
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
826 std::vector<double> &values_out);
968 const unsigned int n_points);
1058 const unsigned int n_comp);
1111 const unsigned int n_comp);
1167 : rhs_u(n_points), rhs_p(n_points), rhs_melt_pc(n_points)
1315 : enthalpies_of_fusion(n_points,
numbers::signaling_nan<double>())
1471 const std::string &description,
1486 std::unique_ptr<Interface<dim>>
1502 std::unique_ptr<Interface<dim>>
1546 template <
class AdditionalInputType>
1547 std::shared_ptr<AdditionalInputType>
1559 template <
class AdditionalInputType>
1560 std::shared_ptr<const AdditionalInputType>
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>
1648 template <
class AdditionalOutputType>
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 average(const MaterialAveraging::AveragingOperation, const FullMatrix< double > &, const FullMatrix< double > &) override
AdditionalMaterialOutputsStokesRHS(const unsigned int n_points)
std::vector< double > rhs_p
std::vector< double > rhs_melt_pc
~AdditionalMaterialOutputsStokesRHS() override=default
std::vector< Tensor< 1, dim > > rhs_u
virtual void average(const MaterialAveraging::AveragingOperation, const FullMatrix< double > &, const FullMatrix< double > &)
virtual ~AdditionalMaterialOutputs()=default
~ElasticOutputs() override=default
ElasticOutputs(const unsigned int n_points)
void average(const MaterialAveraging::AveragingOperation operation, const FullMatrix< double > &, const FullMatrix< double > &) override
std::vector< SymmetricTensor< 2, dim > > viscoelastic_strain_rate
std::vector< SymmetricTensor< 2, dim > > elastic_force
void average(const MaterialAveraging::AveragingOperation operation, const FullMatrix< double > &, const FullMatrix< double > &) override
std::vector< double > enthalpies_of_fusion
virtual ~EnthalpyOutputs()=default
EnthalpyOutputs(const unsigned int n_points)
virtual void evaluate(const MaterialModel::MaterialModelInputs< dim > &in, MaterialModel::MaterialModelOutputs< dim > &out) const =0
virtual bool is_compressible() const =0
virtual void create_additional_named_outputs(MaterialModelOutputs &outputs) const
NonlinearDependence::ModelDependence model_dependence
const NonlinearDependence::ModelDependence & get_model_dependence() const
virtual void fill_additional_material_model_inputs(MaterialModel::MaterialModelInputs< dim > &input, const LinearAlgebra::BlockVector &solution, const FEValuesBase< dim > &fe_values, const Introspection< dim > &introspection) const
bool has_additional_output_object() const
MaterialModelOutputs(MaterialModelOutputs &&) noexcept=default
std::shared_ptr< AdditionalOutputType > get_additional_output_object()
MaterialModelOutputs(const MaterialModelOutputs &source)
void move_additional_outputs_from(MaterialModelOutputs< dim > &other)
MaterialModelOutputs(const unsigned int n_points, const unsigned int n_comp)
DEAL_II_DEPRECATED AdditionalOutputType * get_additional_output()
std::vector< std::shared_ptr< AdditionalMaterialOutputs< dim > > > additional_outputs
NamedAdditionalMaterialOutputs(const std::vector< std::string > &output_names, const unsigned int n_points)
NamedAdditionalMaterialOutputs(const std::vector< std::string > &output_names)
const std::vector< std::string > & get_names() const
virtual std::vector< double > get_nth_output(const unsigned int idx) const
const std::vector< std::string > names
~NamedAdditionalMaterialOutputs() override
void average(const MaterialAveraging::AveragingOperation, const FullMatrix< double > &, const FullMatrix< double > &) override
std::vector< std::vector< double > > output_values
PhaseOutputs(const unsigned int n_points)
PrescribedFieldOutputs(const unsigned int n_points, const unsigned int n_comp)
std::vector< std::vector< double > > prescribed_field_outputs
std::vector< double > get_nth_output(const unsigned int idx) const override
std::vector< double > dilation_rhs_term
std::vector< double > dilation_lhs_term
PrescribedPlasticDilation(const unsigned int n_points)
std::vector< double > get_nth_output(const unsigned int idx) const override
std::vector< double > get_nth_output(const unsigned int idx) const override
std::vector< double > prescribed_temperature_outputs
PrescribedTemperatureOutputs(const unsigned int n_points)
std::vector< std::vector< double > > reaction_rates
std::vector< double > get_nth_output(const unsigned int idx) const override
ReactionRateOutputs(const unsigned int n_points, const unsigned int n_comp)
SeismicAdditionalOutputs(const unsigned int n_points)
std::vector< double > get_nth_output(const unsigned int idx) const override
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)
void declare_parameters(ParameterHandler &prm)
std::unique_ptr< Interface< dim > > create_material_model(const std::string &model_name)
void register_material_model(const std::string &name, const std::string &description, void(*declare_parameters_function)(ParameterHandler &), std::unique_ptr< Interface< dim >>(*factory_function)())
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)
AveragingOperation parse_averaging_operation_name(const std::string &s)
@ harmonic_average_only_viscosity
@ geometric_average_only_viscosity
@ project_to_Q1_only_viscosity
AveragingOperation get_averaging_operation_for_viscosity(const AveragingOperation operation)
std::string get_averaging_operation_names()
void average_property(const AveragingOperation operation, const FullMatrix< double > &projection_matrix, const FullMatrix< double > &expansion_matrix, std::vector< double > &values_out)
@ equation_of_state_properties
@ thermal_expansion_coefficient
@ entropy_derivative_temperature
@ entropy_derivative_pressure
Property operator|=(Property &d1, const Property d2)
Property operator|(const Property d1, const Property d2)
Dependence operator|(const Dependence d1, const Dependence d2)
bool identifies_single_variable(const Dependence dependence)
Dependence operator|=(Dependence &d1, const Dependence d2)
std::string get_valid_model_names_pattern()
void write_plugin_graph(std::ostream &output_stream)
Dependence thermal_conductivity
Dependence compressibility