22 #ifndef _aspect_melt_h
23 #define _aspect_melt_h
33 namespace MaterialModel
86 const unsigned int n_comp);
172 template <
typename ModelType>
181 template <
typename ModelType>
190 template <
typename ModelType>
201 template <
typename ModelType>
206 Assert (is_melt_fraction_model(model_object) ==
true,
207 ExcMessage (
"This function can only be called for model objects "
208 "whose types are derived from MeltFractionModel."));
248 const bool consider_is_melt_cell)
const;
void execute(internal::Assembly::Scratch::ScratchBase< dim > &scratch_base, internal::Assembly::CopyData::CopyDataBase< dim > &data_base) const override
std::vector< double > compute_residual(internal::Assembly::Scratch::ScratchBase< dim > &scratch_base) const override
void execute(internal::Assembly::Scratch::ScratchBase< dim > &scratch_base, internal::Assembly::CopyData::CopyDataBase< dim > &data_base) const override
void create_additional_material_model_outputs(MaterialModel::MaterialModelOutputs< dim > &outputs) const override
void execute(internal::Assembly::Scratch::ScratchBase< dim > &scratch_base, internal::Assembly::CopyData::CopyDataBase< dim > &data_base) const override
void execute(internal::Assembly::Scratch::ScratchBase< dim > &scratch_base, internal::Assembly::CopyData::CopyDataBase< dim > &data_base) const override
void execute(internal::Assembly::Scratch::ScratchBase< dim > &scratch_base, internal::Assembly::CopyData::CopyDataBase< dim > &data_base) const override
void execute(internal::Assembly::Scratch::ScratchBase< dim > &scratch_base, internal::Assembly::CopyData::CopyDataBase< dim > &data_base) const override
virtual void melt_fractions(const MaterialModel::MaterialModelInputs< dim > &in, std::vector< double > &melt_fractions, const MaterialModel::MaterialModelOutputs< dim > *out=nullptr) const =0
static bool is_melt_fraction_model(const ModelType &model_object)
virtual ~MeltFractionModel()=default
static const MeltFractionModel< dim > & as_melt_fraction_model(const ModelType &model_object)
virtual double reference_darcy_coefficient() const =0
double p_c_scale(const MaterialModel::MaterialModelInputs< dim > &inputs, const MaterialModel::MaterialModelOutputs< dim > &outputs, const MeltHandler< dim > &melt_handler, const bool consider_is_melt_cell) const
std::vector< double > permeabilities
std::vector< double > compaction_viscosities
void average(const MaterialAveraging::AveragingOperation operation, const FullMatrix< double > &projection_matrix, const FullMatrix< double > &expansion_matrix) override
std::vector< double > fluid_densities
std::vector< Tensor< 1, dim > > fluid_density_gradients
std::vector< double > fluid_viscosities
MeltOutputs(const unsigned int n_points, const unsigned int n_comp)
std::vector< bool > is_melt_cell_vector
void add_current_constraints(AffineConstraints< double > &constraints)
static void create_material_model_outputs(MaterialModel::MaterialModelOutputs< dim > &output)
AffineConstraints< double > current_constraints
MeltHandler(ParameterHandler &prm)
void compute_melt_variables(LinearAlgebra::BlockSparseMatrix &system_matrix, LinearAlgebra::BlockVector &solution, LinearAlgebra::BlockVector &system_rhs) const
bool is_melt_cell(const typename DoFHandler< dim >::active_cell_iterator &cell) const
void set_assemblers(Assemblers::Manager< dim > &assemblers) const
const BoundaryFluidPressure::Interface< dim > & get_boundary_fluid_pressure() const
double limited_darcy_coefficient(const double K_D, const bool is_melt_cell) const
bool is_porosity(const AdvectionField &advection_field) const
void apply_free_surface_stabilization_with_melt(const double free_surface_theta, const typename DoFHandler< dim >::active_cell_iterator &cell, internal::Assembly::Scratch::StokesSystem< dim > &scratch, internal::Assembly::CopyData::StokesSystem< dim > &data) const
void edit_finite_element_variables(const Parameters< dim > ¶meters, std::vector< VariableDeclaration< dim >> &variables)
void initialize_simulator(const Simulator< dim > &simulator_object) override
Melt::Parameters< dim > melt_parameters
const std::unique_ptr< aspect::BoundaryFluidPressure::Interface< dim > > boundary_fluid_pressure
#define Assert(cond, exc)
static ::ExceptionBase & ExcMessage(std::string arg1)
void parse_parameters(ParameterHandler &prm)
bool heat_advection_by_melt
double melt_scaling_factor_threshold
static void declare_parameters(ParameterHandler &prm)
bool average_melt_velocity
bool use_discontinuous_p_c