71 #ifndef LIBMESH_HAVE_EXODUS_API    72   libmesh_example_requires(
false, 
"--enable-exodus");
    76   libmesh_example_requires(LIBMESH_DIM > 2, 
"--disable-1D-only --disable-2D-only");
    79 #ifndef LIBMESH_ENABLE_DIRICHLET    80   libmesh_example_requires(
false, 
"--enable-dirichlet");
    86   GetPot infile(
"systems_of_equations_ex8.in");
    87   infile.parse_command_line(argc,argv);
    89   const std::string approx_order = infile(
"approx_order", 
"FIRST");
    90   const std::string fe_family = infile(
"fe_family", 
"LAGRANGE");
    92   const Real young_modulus = infile(
"Young_modulus", 1.0);
    93   const Real poisson_ratio = infile(
"poisson_ratio", 0.3);
    95   const Real nonlinear_abs_tol = infile(
"nonlinear_abs_tol", 1.e-8);
    96   const Real nonlinear_rel_tol = infile(
"nonlinear_rel_tol", 1.e-8);
    97   const unsigned int nonlinear_max_its = infile(
"nonlinear_max_its", 50);
    98   const Real contact_penalty = infile(
"contact_penalty", 1.e2);
    99   const Real gap_function_tol = infile(
"gap_function_tol", 1.e-8);
   103   mesh.
read(
"systems_of_equations_ex8.exo");
   105   const unsigned int n_refinements = infile(
"n_refinements", 0);
   107 #ifndef LIBMESH_ENABLE_AMR   108   libmesh_example_requires(n_refinements==0, 
"--enable-amr");
   111   mesh_refinement.uniformly_refine(n_refinements);
   125                         Utility::string_to_enum<Order>   (approx_order),
   126                         Utility::string_to_enum<FEFamily>(fe_family));
   130                         Utility::string_to_enum<Order>   (approx_order),
   131                         Utility::string_to_enum<FEFamily>(fe_family));
   135                         Utility::string_to_enum<Order>   (approx_order),
   136                         Utility::string_to_enum<FEFamily>(fe_family));
   150   equation_systems.parameters.set<
Real> (
"nonlinear solver absolute residual tolerance") = nonlinear_abs_tol;
   151   equation_systems.parameters.set<
Real> (
"nonlinear solver relative residual tolerance") = nonlinear_rel_tol;
   152   equation_systems.parameters.set<
unsigned int> (
"nonlinear solver maximum iterations") = nonlinear_max_its;
   156   equation_systems.parameters.set<
Real>(
"young_modulus") = young_modulus;
   157   equation_systems.parameters.set<
Real>(
"poisson_ratio") = poisson_ratio;
   159 #ifdef LIBMESH_ENABLE_DIRICHLET   178 #endif // LIBMESH_ENABLE_DIRICHLET   181   le.initialize_contact_load_paths();
   183   libMesh::out << 
"Mesh before adding edge connectors" << std::endl;
   185   le.add_contact_edge_elements();
   187   libMesh::out << 
"Mesh after adding edge connectors" << std::endl;
   190   equation_systems.init();
   191   equation_systems.print_info();
   193   libMesh::out << 
"Contact penalty: " << contact_penalty  << std::endl << std::endl;
   195   Real current_max_gap_function = std::numeric_limits<Real>::max();
   197   const unsigned int max_outer_iterations = 10;
   198   for (
unsigned int outer_iteration = 0;
   199        outer_iteration != max_outer_iterations; ++outer_iteration)
   201       if (current_max_gap_function <= gap_function_tol)
   207       libMesh::out << 
"Starting outer iteration " << outer_iteration << std::endl;
   216       std::pair<Real, Real> least_and_max_gap_function = le.get_least_and_max_gap_function();
   217       Real least_gap_fn = least_and_max_gap_function.first;
   218       Real max_gap_fn = least_and_max_gap_function.second;
   220       libMesh::out << 
"Finished outer iteration, least gap function: "   222                    << 
", max gap function: "   227       current_max_gap_function = std::max(std::abs(least_gap_fn), std::abs(max_gap_fn));
   236   le.compute_stresses();
   238   std::stringstream filename;
   239   filename << 
"solution.exo";
 This is the EquationSystems class. 
virtual void read(const std::string &name, void *mesh_data=nullptr, bool skip_renumber_nodes_and_elements=false, bool skip_find_neighbors=false)=0
Interfaces for reading/writing a mesh to/from a file. 
The ReplicatedMesh class is derived from the MeshBase class, and is used to store identical copies of...
std::unique_ptr< NonlinearSolver< Number > > nonlinear_solver
The NonlinearSolver defines the default interface used to solve the nonlinear_implicit system...
ConstFunction that simply returns 0. 
The ExodusII_IO class implements reading meshes in the ExodusII file format from Sandia National Labs...
This class allows one to associate Dirichlet boundary values with a given set of mesh boundary ids an...
The LibMeshInit class, when constructed, initializes the dependent libraries (e.g. 
SolverPackage default_solver_package()
void libmesh_ignore(const Args &...)
Implements (adaptive) mesh refinement algorithms for a MeshBase. 
virtual void write_equation_systems(const std::string &fname, const EquationSystems &es, const std::set< std::string > *system_names=nullptr) override
Writes out the solution for no specific time or timestep. 
void print_info(std::ostream &os=libMesh::out, const unsigned int verbosity=0, const bool global=true) const
Prints relevant information about the mesh. 
void init(triangulateio &t)
Initializes the fields of t to nullptr/0 as necessary. 
Manages consistently variables, degrees of freedom, coefficient vectors, matrices and non-linear solv...
unsigned int add_variable(std::string_view var, const FEType &type, const std::set< subdomain_id_type > *const active_subdomains=nullptr)
Adds the variable var to the list of variables for this system. 
virtual void solve() override
Assembles & solves the nonlinear system R(x) = 0. 
virtual void update()
Update the local values to reflect the solution on neighboring processors. 
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Function that returns a single value that never changes. 
void add_dirichlet_boundary(const DirichletBoundary &dirichlet_boundary)
Adds a copy of the specified Dirichlet boundary to the system. 
const DofMap & get_dof_map() const
Manages consistently variables, degrees of freedom, and coefficient vectors for explicit systems...
void enforce_constraints_exactly(const System &system, NumericVector< Number > *v=nullptr, bool homogeneous=false) const
Constrains the numeric vector v, which represents a solution defined on the mesh. ...