Program Listing for File elasticity_problem_parameters.h¶
↰ Return to documentation for file (include/elasticity_problem_parameters.h)
// ---------------------------------------------------------------------
//
// Copyright (C) 2024 by Luca Heltai
//
// This file is part of the ImmersX application, based on
// the deal.II library.
//
// The ImmersX application is free software; you can use
// it, redistribute it, and/or modify it under the terms of the Apache-2.0
// License WITH LLVM-exception as published by the Free Software Foundation;
// either version 3.0 of the License, or (at your option) any later version.
// The full text of the license can be found in the file LICENSE.md at the top
// level of the ImmersX distribution.
//
// ---------------------------------------------------------------------
#ifndef dealii_distributed_lagrange_multiplier_elasticity_problem_parameters_h
#define dealii_distributed_lagrange_multiplier_elasticity_problem_parameters_h
#include <deal.II/base/parameter_acceptor.h>
#include <deal.II/base/parsed_convergence_table.h>
#include <deal.II/base/parsed_function.h>
#include <deal.II/base/patterns.h>
#include <deal.II/base/types.h>
#include <deal.II/lac/solver_control.h>
#include <map>
#include <memory>
#include <set>
#include <string>
#include "material_properties.h"
#include "modulated_parsed_function.h"
enum class TimeMode
{
Static,
QuasiStatic,
Dynamic
};
enum class ElasticityModel
{
LinearElasticity,
KelvinVoigt
};
template <int dim, int spacedim = dim>
class ElasticityProblemParameters : public ParameterAcceptor
{
public:
ElasticityProblemParameters();
const MaterialProperties &
get_material_properties(const types::material_id material_id) const;
const ModulatedParsedFunction<spacedim> &
get_dirichlet_bc(const types::boundary_id boundary_id) const;
const ModulatedParsedFunction<spacedim> &
get_neumann_bc(const types::boundary_id boundary_id) const;
const ModulatedParsedFunction<spacedim> &
get_rhs(const types::material_id material_id) const;
void
set_rhs_times(const double time) const;
void
set_boundary_condition_times(const double time) const;
void
check_model_consistency();
TimeMode time_mode = TimeMode::Static;
ElasticityModel elasticity_model = ElasticityModel::LinearElasticity;
std::string output_directory = ".";
std::string output_name = "solution";
unsigned int fe_degree = 1;
unsigned int initial_refinement = 5;
std::set<types::boundary_id> dirichlet_ids{0};
std::set<types::boundary_id> weak_dirichlet_ids{};
std::set<types::boundary_id> neumann_ids{};
std::set<types::boundary_id> normal_flux_ids{};
MaterialProperties default_material_properties{
"default"};
std::map<types::material_id, std::string>
material_tags_by_material_id;
std::map<types::material_id, std::unique_ptr<MaterialProperties>>
material_properties_by_id;
std::set<types::material_id> rhs_material_ids{};
std::string domain_type = "generate";
std::string triangulation_type = "distributed";
std::string name_of_grid = "hyper_cube";
std::string arguments_for_grid =
"-1: 1: false";
double grid_scale = 1.0;
std::string refinement_strategy = "fixed_fraction";
double coarsening_fraction = 0.0;
double refinement_fraction = 0.3;
unsigned int n_refinement_cycles = 1;
unsigned int max_cells = 20000;
bool output_pressure = false;
double penalty_term = 1.0e4;
bool pressure_coupling = false;
mutable ModulatedParsedFunction<spacedim> rhs;
std::map<types::material_id,
std::shared_ptr<ModulatedParsedFunction<spacedim>>>
rhs_by_material_id;
mutable ParameterAcceptorProxy<Functions::ParsedFunction<spacedim>>
exact_solution;
mutable ParameterAcceptorProxy<Functions::ParsedFunction<spacedim>>
initial_displacement;
mutable ParameterAcceptorProxy<Functions::ParsedFunction<spacedim>>
initial_velocity;
mutable ModulatedParsedFunction<spacedim> bc;
std::map<types::boundary_id,
std::shared_ptr<ModulatedParsedFunction<spacedim>>>
dirichlet_bc_by_id;
mutable ModulatedParsedFunction<spacedim>
Neumann_bc;
std::map<types::boundary_id,
std::shared_ptr<ModulatedParsedFunction<spacedim>>>
neumann_bc_by_id;
std::string weight_expression = "1.";
mutable ParameterAcceptorProxy<ReductionControl> displacement_solver_control;
mutable ParameterAcceptorProxy<ReductionControl>
reduced_mass_solver_control;
mutable ParameterAcceptorProxy<ReductionControl>
augmented_lagrange_solver_control;
mutable ParameterAcceptorProxy<ReductionControl>
schur_complement_solver_control;
bool output_results_before_solving = false;
mutable ParsedConvergenceTable convergence_table;
double initial_time = 0.0;
double final_time = 0.0;
mutable double dt = 5e-3;
bool refine_time_step = false;
double beta = 0.25;
double gamma = 0.5;
};
#endif