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> 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));
194 const unsigned int n_comp);
206 const bool use_strain_rate =
true);
225 const bool use_strain_rates =
true);
266 const bool use_strain_rates =
true);
365 template <
class AdditionalInputType>
366 AdditionalInputType *get_additional_input();
371 template <
class AdditionalInputType>
372 const AdditionalInputType *get_additional_input()
const;
399 const unsigned int n_comp);
532 template <
class AdditionalOutputType>
533 AdditionalOutputType *get_additional_output();
538 template <
class AdditionalOutputType>
539 const AdditionalOutputType *get_additional_output()
const;
558 namespace MaterialAveraging
641 std::vector<double> &values_out);
768 const std::vector<std::string> &
get_names()
const;
774 virtual std::vector<double> get_nth_output(
const unsigned int idx)
const = 0;
782 const std::vector<std::string>
names;
797 virtual std::vector<double> get_nth_output(
const unsigned int idx)
const;
804 std::vector<double>
vs;
811 std::vector<double>
vp;
840 const unsigned int n_comp);
842 virtual std::vector<double> get_nth_output(
const unsigned int idx)
const;
878 const unsigned int n_comp);
880 virtual std::vector<double> get_nth_output(
const unsigned int idx)
const;
911 virtual std::vector<double> get_nth_output(
const unsigned int idx)
const;
934 : rhs_u(n_points), rhs_p(n_points), rhs_melt_pc(n_points)
978 : elastic_force(n_points,
numbers::signaling_nan<
Tensor<2,dim> >() )
1055 virtual void update ();
1069 get_model_dependence ()
const;
1080 virtual bool is_compressible ()
const = 0;
1107 virtual double reference_viscosity ()
const = 0;
1154 create_additional_named_outputs (MaterialModelOutputs &outputs)
const;
1208 const std::string &description,
1283 template <
class AdditionalInputType>
1286 for (
unsigned int i=0; i<additional_inputs.size(); ++i)
1288 AdditionalInputType *result =
dynamic_cast<AdditionalInputType *
> (additional_inputs[i].get());
1297 template <
class AdditionalInputType>
1300 for (
unsigned int i=0; i<additional_inputs.size(); ++i)
1302 const AdditionalInputType *result =
dynamic_cast<const AdditionalInputType *
> (additional_inputs[i].get());
1311 template <
class AdditionalOutputType>
1314 for (
unsigned int i=0; i<additional_outputs.size(); ++i)
1316 AdditionalOutputType *result =
dynamic_cast<AdditionalOutputType *
> (additional_outputs[i].get());
1325 template <
class AdditionalOutputType>
1328 for (
unsigned int i=0; i<additional_outputs.size(); ++i)
1330 const AdditionalOutputType *result =
dynamic_cast<const AdditionalOutputType *
> (additional_outputs[i].get());
1345 #define ASPECT_REGISTER_MATERIAL_MODEL(classname,name,description) \ 1346 template class classname<2>; \ 1347 template class classname<3>; \ 1348 namespace ASPECT_REGISTER_MATERIAL_MODEL_ ## classname \ 1350 aspect::internal::Plugins::RegisterHelper<aspect::MaterialModel::Interface<2>,classname<2> > \ 1351 dummy_ ## classname ## _2d (&aspect::MaterialModel::register_material_model<2>, \ 1352 name, description); \ 1353 aspect::internal::Plugins::RegisterHelper<aspect::MaterialModel::Interface<3>,classname<3> > \ 1354 dummy_ ## classname ## _3d (&aspect::MaterialModel::register_material_model<3>, \ 1355 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
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
MaterialModel::MaterialModelOutputs< dim > MaterialModelOutputs
#define AssertThrow(cond, exc)
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 AveragingOperation operation, const typename DoFHandler< dim >::active_cell_iterator &cell, const Quadrature< dim > &quadrature_formula, const Mapping< dim > &mapping, MaterialModelOutputs< dim > &values_out)
UpdateFlags operator|(const UpdateFlags f1, const UpdateFlags f2)
const std::vector< std::string > names
std::vector< double > rhs_p
std::vector< std::vector< double > > reaction_terms
MaterialModel::MaterialModelInputs< dim > MaterialModelInputs
AveragingOperation parse_averaging_operation_name(const std::string &s)
virtual void average(const MaterialAveraging::AveragingOperation, const FullMatrix< double > &, const FullMatrix< double > &)
Dependence compressibility
AdditionalMaterialOutputsStokesRHS(const unsigned int n_points)
std::string get_averaging_operation_names()
std::vector< double > viscosities
virtual ~AdditionalMaterialOutputsStokesRHS()
Interface< dim > * create_material_model(const std::string &model_name)
std::vector< Tensor< 2, dim > > elastic_force
std::vector< double > entropy_derivative_pressure
UpdateFlags & operator|=(UpdateFlags &f1, const UpdateFlags f2)
std::vector< double > compressibilities
std::vector< double > thermal_conductivities
std::vector< double > prescribed_temperature_outputs
virtual void average(const MaterialAveraging::AveragingOperation, const FullMatrix< double > &, const FullMatrix< double > &)
std::vector< double > entropy_derivative_temperature
NonlinearDependence::ModelDependence model_dependence
Dependence thermal_conductivity
std::string get_valid_model_names_pattern()
std::vector< double > densities
static ::ExceptionBase & ExcNotImplemented()
void register_material_model(const std::string &name, const std::string &description, void(*declare_parameters_function)(ParameterHandler &), Interface< dim > *(*factory_function)())
virtual void average(const MaterialAveraging::AveragingOperation operation, const FullMatrix< double > &, const FullMatrix< double > &)
std::vector< double > specific_heat
virtual ~ElasticOutputs()
std::vector< std::unique_ptr< AdditionalMaterialOutputs< dim > > > additional_outputs