libMesh
solid_system.C
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2019 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
3 
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either
7 // version 2.1 of the License, or (at your option) any later version.
8 
9 // This library is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 // Lesser General Public License for more details.
13 
14 // You should have received a copy of the GNU Lesser General Public
15 // License along with this library; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 
18 
19 
20 // \author Robert Weidlich
21 // \date Copyright 2012
22 
23 #include "libmesh/boundary_info.h"
24 #include "libmesh/diff_solver.h"
25 #include "libmesh/dof_map.h"
26 #include "libmesh/equation_systems.h"
27 #include "libmesh/fe_base.h"
28 #include "libmesh/fem_context.h"
29 #include "libmesh/getpot.h"
30 #include "libmesh/mesh.h"
31 #include "libmesh/newton_solver.h"
32 #include "libmesh/numeric_vector.h"
33 #include "libmesh/quadrature.h"
34 #include "libmesh/sparse_matrix.h"
35 #include "libmesh/steady_solver.h"
36 #include "libmesh/transient_system.h"
37 #include "libmesh/node.h"
38 #include "libmesh/elem.h"
39 #include "libmesh/auto_ptr.h" // libmesh_make_unique
40 
41 #include "nonlinear_neohooke_cc.h"
42 #include "solid_system.h"
43 
44 // Solaris Studio has no NAN
45 #ifdef __SUNPRO_CC
46 #define NAN (1.0/0.0)
47 #endif
48 
49 // Bring in everything from the libMesh namespace
50 using namespace libMesh;
51 
53  const std::string & name_in,
54  const unsigned int number_in) :
55  FEMSystem(es, name_in, number_in)
56 {
57 
58  // Add a time solver. We are just looking at a steady state problem here.
59  this->time_solver = libmesh_make_unique<SteadySolver>(*this);
60 }
61 
63 {
64  System & aux_sys = this->get_equation_systems().get_system("auxiliary");
65 
66  const unsigned int dim = this->get_mesh().mesh_dimension();
67 
68  // Loop over all nodes and copy the location from the current system to
69  // the auxiliary system.
70  for (const auto & node : this->get_mesh().local_node_ptr_range())
71  for (unsigned int d = 0; d < dim; ++d)
72  {
73  unsigned int source_dof = node->dof_number(this->number(), var[d], 0);
74  unsigned int dest_dof = node->dof_number(aux_sys.number(), undefo_var[d], 0);
75  Number value = this->current_local_solution->el(source_dof);
76  aux_sys.current_local_solution->set(dest_dof, value);
77  }
78 }
79 
81 {
82  const unsigned int dim = this->get_mesh().mesh_dimension();
83 
84  // Get the default order of the used elements. Assumption:
85  // Just one type of elements in the mesh.
86  Order order = (*(this->get_mesh().elements_begin()))->default_order();
87 
88  // Add the node positions as primary variables.
89  var[0] = this->add_variable("x", order);
90  var[1] = this->add_variable("y", order);
91  if (dim == 3)
92  var[2] = this->add_variable("z", order);
93  else
94  var[2] = var[1];
95 
96  // Add variables for storing the initial mesh to an auxiliary system.
97  System & aux_sys = this->get_equation_systems().get_system("auxiliary");
98  undefo_var[0] = aux_sys.add_variable("undefo_x", order);
99  undefo_var[1] = aux_sys.add_variable("undefo_y", order);
100  undefo_var[2] = aux_sys.add_variable("undefo_z", order);
101 
102  // Set the time stepping options
103  this->deltat = args("schedule/dt", 0.2);
104 
105  // Do the parent's initialization after variables are defined
106  FEMSystem::init_data();
107 
110  //this->time_evolving(var[0]);
111  //this->time_evolving(var[1]);
112  //if (dim == 3)
113  //this->time_evolving(var[2]);
114 
115  // Tell the system which variables are containing the node positions
116  set_mesh_system(this);
117 
118  this->set_mesh_x_var(var[0]);
119  this->set_mesh_y_var(var[1]);
120  if (dim == 3)
121  this->set_mesh_z_var(var[2]);
122 
123  // Fill the variables with the position of the nodes
124  this->mesh_position_get();
125 
126  System::reinit();
127 
128  // Set some options for the DiffSolver
129  DiffSolver & solver = *(this->time_solver->diff_solver().get());
130  solver.quiet = args("solver/quiet", false);
131  solver.max_nonlinear_iterations = args("solver/nonlinear/max_nonlinear_iterations", 100);
132  solver.relative_step_tolerance = args("solver/nonlinear/relative_step_tolerance", 1.e-3);
133  solver.relative_residual_tolerance = args("solver/nonlinear/relative_residual_tolerance", 1.e-8);
134  solver.absolute_residual_tolerance = args("solver/nonlinear/absolute_residual_tolerance", 1.e-8);
135  solver.verbose = !args("solver/quiet", false);
136 
137  ((NewtonSolver &) solver).require_residual_reduction = args("solver/nonlinear/require_reduction", false);
138 
139  // And the linear solver options
140  solver.max_linear_iterations = args("max_linear_iterations", 50000);
141  solver.initial_linear_tolerance = args("initial_linear_tolerance", 1.e-3);
142 }
143 
145 {
146  System::update();
147  this->mesh_position_set();
148 }
149 
151 {
152  FEMContext & c = cast_ref<FEMContext &>(context);
153 
154  // Pre-request all the data needed
155  FEBase * elem_fe = nullptr;
156  c.get_element_fe(0, elem_fe);
157 
158  elem_fe->get_JxW();
159  elem_fe->get_phi();
160  elem_fe->get_dphi();
161  elem_fe->get_xyz();
162 
163  FEBase * side_fe = nullptr;
164  c.get_side_fe(0, side_fe);
165 
166  side_fe->get_JxW();
167  side_fe->get_phi();
168  side_fe->get_xyz();
169 }
170 
175 bool SolidSystem::element_time_derivative(bool request_jacobian,
176  DiffContext & context)
177 {
178  FEMContext & c = cast_ref<FEMContext &>(context);
179 
180  // First we get some references to cell-specific data that
181  // will be used to assemble the linear system.
182  FEBase * elem_fe = nullptr;
183  c.get_element_fe(0, elem_fe);
184 
185  // Element Jacobian * quadrature weights for interior integration
186  const std::vector<Real> & JxW = elem_fe->get_JxW();
187 
188  // Element basis functions
189  const std::vector<std::vector<RealGradient>> & dphi = elem_fe->get_dphi();
190 
191  // Dimension of the mesh
192  const unsigned int dim = this->get_mesh().mesh_dimension();
193 
194  // The number of local degrees of freedom in each variable
195  const unsigned int n_u_dofs = c.n_dof_indices(var[0]);
196  libmesh_assert(n_u_dofs == c.n_dof_indices(var[1]));
197  if (dim == 3)
198  libmesh_assert(n_u_dofs == c.n_dof_indices(var[2]));
199 
200  unsigned int n_qpoints = c.get_element_qrule().n_points();
201 
202  // Some matrices and vectors for storing the results of the constitutive
203  // law
204  DenseMatrix<Real> stiff;
205  DenseVector<Real> res;
206  VectorValue<Gradient> grad_u;
207 
208  // Instantiate the constitutive law
209  // Just calculate jacobian contribution when we need to
210  NonlinearNeoHookeCurrentConfig material(dphi, args, request_jacobian);
211 
212  // Get a reference to the auxiliary system
214  TransientExplicitSystem>("auxiliary");
215  std::vector<dof_id_type> undefo_index;
216 
217  // Assume symmetry of local stiffness matrices
218  bool use_symmetry = args("assembly/use_symmetry", false);
219 
220  // Now we will build the element Jacobian and residual.
221  // This must be calculated at each quadrature point by
222  // summing the solution degree-of-freedom values by
223  // the appropriate weight functions.
224  // This class just takes care of the assembly. The matrix of
225  // the jacobian and the residual vector are provided by the
226  // constitutive formulation.
227 
228  for (unsigned int qp = 0; qp != n_qpoints; qp++)
229  {
230  // Compute the displacement gradient
231  grad_u(0) = grad_u(1) = grad_u(2) = 0;
232  for (unsigned int d = 0; d < dim; ++d)
233  {
234  std::vector<Number> u_undefo;
235  aux_system.get_dof_map().dof_indices(&c.get_elem(), undefo_index, undefo_var[d]);
236  aux_system.current_local_solution->get(undefo_index, u_undefo);
237  for (unsigned int l = 0; l != n_u_dofs; l++)
238  grad_u(d).add_scaled(dphi[l][qp], u_undefo[l]); // u_current(l)); // -
239  }
240 
241  // initialize the constitutive formulation with the current displacement
242  // gradient
243  material.init_for_qp(grad_u, qp);
244 
245  // Acquire, scale and assemble residual and stiffness
246  for (unsigned int i = 0; i < n_u_dofs; i++)
247  {
248  res.resize(dim);
249  material.get_residual(res, i);
250  res.scale(JxW[qp]);
251  for (unsigned int ii = 0; ii < dim; ++ii)
252  (c.get_elem_residual(ii))(i) += res(ii);
253 
254  if (request_jacobian && c.elem_solution_derivative)
255  {
257  for (unsigned int j = (use_symmetry ? i : 0); j < n_u_dofs; j++)
258  {
259  material.get_linearized_stiffness(stiff, i, j);
260  stiff.scale(JxW[qp]);
261  for (unsigned int ii = 0; ii < dim; ++ii)
262  {
263  for (unsigned int jj = 0; jj < dim; ++jj)
264  {
265  (c.get_elem_jacobian(ii,jj))(i, j) += stiff(ii, jj);
266  if (use_symmetry && i != j)
267  (c.get_elem_jacobian(ii,jj))(j, i) += stiff(jj, ii);
268  }
269  }
270  }
271  }
272  }
273  } // end of the quadrature point qp-loop
274 
275  return request_jacobian;
276 }
277 
278 bool SolidSystem::side_time_derivative(bool request_jacobian,
279  DiffContext & context)
280 {
281  FEMContext & c = cast_ref<FEMContext &>(context);
282 
283  // Apply displacement boundary conditions with penalty method
284 
285  // Get the current load step
286  Real ratio = this->get_equation_systems().parameters.get<Real>("progress") + 0.001;
287 
288  // The BC are stored in the simulation parameters as array containing sequences of
289  // four numbers: Id of the side for the displacements and three values describing the
290  // displacement. E.g.: bc/displacement = '5 nan nan -1.0'. This will move all nodes of
291  // side 5 about 1.0 units down the z-axis while leaving all other directions unrestricted
292 
293  // Get number of BCs to enforce
294  boundary_id_type num_bc =
295  cast_int<boundary_id_type>(args.vector_variable_size("bc/displacement"));
296  if (num_bc % 4 != 0)
297  libmesh_error_msg("ERROR, Odd number of values in displacement boundary condition.");
298  num_bc /= 4;
299 
300  // Loop over all BCs
301  for (boundary_id_type nbc = 0; nbc < num_bc; nbc++)
302  {
303  // Get IDs of the side for this BC
304  boundary_id_type positive_boundary_id =
305  cast_int<boundary_id_type>(args("bc/displacement", 1, nbc * 4));
306 
307  // The current side may not be on the boundary to be restricted
308  if (!this->get_mesh().get_boundary_info().has_boundary_id
309  (&c.get_elem(),c.get_side(),positive_boundary_id))
310  continue;
311 
312  // Read values from configuration file
313  Point diff_value;
314  for (unsigned int d = 0; d < c.get_dim(); ++d)
315  diff_value(d) = args("bc/displacement", NAN, nbc * 4 + 1 + d);
316 
317  // Scale according to current load step
318  diff_value *= ratio;
319 
320  Real penalty_number = args("bc/displacement_penalty", 1e7);
321 
322  FEBase * fe = nullptr;
323  c.get_side_fe(0, fe);
324 
325  const std::vector<std::vector<Real>> & phi = fe->get_phi();
326  const std::vector<Real> & JxW = fe->get_JxW();
327  const std::vector<Point> & coords = fe->get_xyz();
328 
329  const unsigned int n_x_dofs = c.n_dof_indices(this->var[0]);
330 
331  // get mappings for dofs for auxiliary system for original mesh positions
332  const System & auxsys = this->get_equation_systems().get_system("auxiliary");
333  const DofMap & auxmap = auxsys.get_dof_map();
334  std::vector<dof_id_type> undefo_dofs[3];
335  for (unsigned int d = 0; d < c.get_dim(); ++d)
336  auxmap.dof_indices(&c.get_elem(), undefo_dofs[d], undefo_var[d]);
337 
338  for (unsigned int qp = 0; qp < c.get_side_qrule().n_points(); ++qp)
339  {
340  // calculate coordinates of qp on undeformed mesh
341  Point orig_point;
342  for (unsigned int i = 0; i < n_x_dofs; ++i)
343  {
344  for (unsigned int d = 0; d < c.get_dim(); ++d)
345  {
346  Number orig_val = auxsys.current_solution(undefo_dofs[d][i]);
347 
348 #if LIBMESH_USE_COMPLEX_NUMBERS
349  orig_point(d) += phi[i][qp] * orig_val.real();
350 #else
351  orig_point(d) += phi[i][qp] * orig_val;
352 #endif
353  }
354  }
355 
356  // Calculate displacement to be enforced.
357  Point diff = coords[qp] - orig_point - diff_value;
358 
359  // Assemble
360  for (unsigned int i = 0; i < n_x_dofs; ++i)
361  {
362  for (unsigned int d1 = 0; d1 < c.get_dim(); ++d1)
363  {
364  if (libmesh_isnan(diff(d1)))
365  continue;
366  Real val = JxW[qp] * phi[i][qp] * diff(d1) * penalty_number;
367  (c.get_elem_residual(var[d1]))(i) += val;
368  }
369  if (request_jacobian)
370  {
371  for (unsigned int j = 0; j < n_x_dofs; ++j)
372  {
373  for (unsigned int d1 = 0; d1 < c.get_dim(); ++d1)
374  {
375  if (libmesh_isnan(diff(d1)))
376  continue;
377  Real val = JxW[qp] * phi[i][qp] * phi[j][qp] * penalty_number;
378  (c.get_elem_jacobian(var[d1],var[d1]))(i, j) += val;
379  }
380  }
381  }
382  }
383  }
384  }
385 
386  return request_jacobian;
387 }
libMesh::System
Manages consistently variables, degrees of freedom, and coefficient vectors.
Definition: system.h:100
libMesh::DifferentiableSystem::deltat
Real deltat
For time-dependent problems, this is the amount delta t to advance the solution in time.
Definition: diff_system.h:260
libMesh::Number
Real Number
Definition: libmesh_common.h:195
libMesh::DiffContext::get_elem_residual
const DenseVector< Number > & get_elem_residual() const
Const accessor for element residual.
Definition: diff_context.h:249
libMesh::FEMContext::get_element_qrule
const QBase & get_element_qrule() const
Accessor for element interior quadrature rule for the dimension of the current _elem.
Definition: fem_context.h:790
libMesh::System::get_equation_systems
const EquationSystems & get_equation_systems() const
Definition: system.h:720
SolidSystem::side_time_derivative
virtual bool side_time_derivative(bool request_jacobian, DiffContext &context)
Adds the time derivative contribution on side of elem to elem_residual.
Definition: solid_system.C:278
libMesh::FEAbstract::get_xyz
const std::vector< Point > & get_xyz() const
Definition: fe_abstract.h:237
solid_system.h
libMesh::DifferentiablePhysics::set_mesh_system
virtual void set_mesh_system(System *sys)
Tells the DifferentiablePhysics that system sys contains the isoparametric Lagrangian variables which...
Definition: diff_physics.h:581
libMesh::TransientSystem
Manages storage and variables for transient systems.
Definition: transient_system.h:57
libMesh::DofMap::dof_indices
void dof_indices(const Elem *const elem, std::vector< dof_id_type > &di) const
Fills the vector di with the global degree of freedom indices for the element.
Definition: dof_map.C:1967
libMesh::DifferentiablePhysics::set_mesh_z_var
virtual void set_mesh_z_var(unsigned int var)
Tells the DifferentiablePhysics that variable var from the mesh system should be used to update the z...
Definition: diff_physics.h:617
nonlinear_neohooke_cc.h
SolidSystem::element_time_derivative
virtual bool element_time_derivative(bool request_jacobian, DiffContext &context)
Compute contribution from internal forces in elem_residual and contribution from linearized internal ...
Definition: solid_system.C:175
libMesh::QBase::n_points
unsigned int n_points() const
Definition: quadrature.h:126
libMesh
The libMesh namespace provides an interface to certain functionality in the library.
Definition: factoryfunction.C:55
SolidSystem::var
unsigned int var[3]
Definition: solid_system.h:73
libMesh::FEMContext::get_side
unsigned char get_side() const
Accessor for current side of Elem object.
Definition: fem_context.h:910
libMesh::FEGenericBase
This class forms the foundation from which generic finite elements may be derived.
Definition: exact_error_estimator.h:39
libMesh::EquationSystems::get_system
const T_sys & get_system(const std::string &name) const
Definition: equation_systems.h:757
libMesh::Order
Order
Definition: enum_order.h:40
libMesh::FEAbstract::get_JxW
const std::vector< Real > & get_JxW() const
Definition: fe_abstract.h:244
libMesh::FEMContext::get_elem
const Elem & get_elem() const
Accessor for current Elem object.
Definition: fem_context.h:896
libMesh::DenseMatrix< Real >
libMesh::DiffSolver
This is a generic class that defines a solver to handle ImplicitSystem classes, including NonlinearIm...
Definition: diff_solver.h:70
libMesh::System::number
unsigned int number() const
Definition: system.h:2075
libMesh::DifferentiablePhysics::set_mesh_x_var
virtual void set_mesh_x_var(unsigned int var)
Tells the DifferentiablePhysics that variable var from the mesh system should be used to update the x...
Definition: diff_physics.h:601
libMesh::MeshBase::mesh_dimension
unsigned int mesh_dimension() const
Definition: mesh_base.C:135
SolidSystem::init_context
virtual void init_context(DiffContext &context)
Definition: solid_system.C:150
libMesh::FEGenericBase::get_dphi
const std::vector< std::vector< OutputGradient > > & get_dphi() const
Definition: fe_base.h:214
libMesh::boundary_id_type
int8_t boundary_id_type
Definition: id_types.h:51
libMesh::MeshBase::elements_begin
virtual element_iterator elements_begin()=0
Iterate over all the elements in the Mesh.
libMesh::DifferentiablePhysics::set_mesh_y_var
virtual void set_mesh_y_var(unsigned int var)
Tells the DifferentiablePhysics that variable var from the mesh system should be used to update the y...
Definition: diff_physics.h:609
dim
unsigned int dim
Definition: adaptivity_ex3.C:113
libMesh::FEMSystem
This class provides a specific system class.
Definition: fem_system.h:53
libMesh::VectorValue
This class defines a vector in LIBMESH_DIM dimensional Real or Complex space.
Definition: exact_solution.h:54
libMesh::DifferentiableSystem::time_solver
std::unique_ptr< TimeSolver > time_solver
A pointer to the solver object we're going to use.
Definition: diff_system.h:233
libMesh::System::current_solution
Number current_solution(const dof_id_type global_dof_number) const
Definition: system.C:194
NonlinearNeoHookeCurrentConfig::get_residual
void get_residual(DenseVector< Real > &residuum, unsigned int &i)
Return the residual vector for the current state.
Definition: nonlinear_neohooke_cc.C:93
libMesh::libmesh_assert
libmesh_assert(ctx)
SolidSystem::init_data
virtual void init_data()
Initializes the member data fields associated with the system, so that, e.g., assemble() may be used.
Definition: solid_system.C:80
libMesh::DiffSolver::relative_step_tolerance
Real relative_step_tolerance
Definition: diff_solver.h:204
libMesh::DiffSolver::verbose
bool verbose
The DiffSolver may print a lot more to libMesh::out if verbose is set to true; default is false.
Definition: diff_solver.h:168
SolidSystem::args
GetPot args
Definition: solid_system.h:58
libMesh::libmesh_isnan
bool libmesh_isnan(T x)
Definition: libmesh_common.h:177
libMesh::FEMSystem::mesh_position_get
void mesh_position_get()
Tells the FEMSystem to set the degree of freedom coefficients which should correspond to mesh nodal c...
Definition: fem_system.C:1385
libMesh::System::get_mesh
const MeshBase & get_mesh() const
Definition: system.h:2083
libMesh::System::add_variable
unsigned int add_variable(const std::string &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.
Definition: system.C:1069
libMesh::System::current_local_solution
std::unique_ptr< NumericVector< Number > > current_local_solution
All the values I need to compute my contribution to the simulation at hand.
Definition: system.h:1551
libMesh::Point
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition: point.h:38
libMesh::TypeVector::add_scaled
void add_scaled(const TypeVector< T2 > &, const T &)
Add a scaled value to this vector without creating a temporary.
Definition: type_vector.h:665
SolidSystem::update
virtual void update()
Update the local values to reflect the solution on neighboring processors.
Definition: solid_system.C:144
libMesh::DiffContext::n_dof_indices
unsigned int n_dof_indices() const
Total number of dof indices on the element.
Definition: diff_context.h:399
libMesh::NewtonSolver
This class defines a solver which uses the default libMesh linear solver in a quasiNewton method to h...
Definition: newton_solver.h:46
libMesh::DiffContext
This class provides all data required for a physics package (e.g.
Definition: diff_context.h:55
libMesh::EquationSystems
This is the EquationSystems class.
Definition: equation_systems.h:74
SolidSystem::SolidSystem
SolidSystem(EquationSystems &es, const std::string &name, const unsigned int number)
Definition: solid_system.C:52
libMesh::DiffContext::elem_solution_derivative
Real elem_solution_derivative
The derivative of elem_solution with respect to the current nonlinear solution.
Definition: diff_context.h:500
libMesh::DiffSolver::quiet
bool quiet
The DiffSolver should not print anything to libMesh::out unless quiet is set to false; default is tru...
Definition: diff_solver.h:162
NonlinearNeoHookeCurrentConfig::init_for_qp
void init_for_qp(VectorValue< Gradient > &grad_u, unsigned int qp)
Initialize the class for the given displacement gradient at the specified quadrature point.
Definition: nonlinear_neohooke_cc.C:25
libMesh::FEMSystem::mesh_position_set
void mesh_position_set()
Tells the FEMSystem to set the mesh nodal coordinates which should correspond to degree of freedom co...
Definition: fem_system.C:1057
libMesh::DenseVector::resize
void resize(const unsigned int n)
Resize the vector.
Definition: dense_vector.h:355
libMesh::DiffSolver::relative_residual_tolerance
Real relative_residual_tolerance
Definition: diff_solver.h:192
libMesh::FEMContext::get_element_fe
void get_element_fe(unsigned int var, FEGenericBase< OutputShape > *&fe) const
Accessor for interior finite element object for variable var for the largest dimension in the mesh.
Definition: fem_context.h:275
SolidSystem::undefo_var
unsigned int undefo_var[3]
Definition: solid_system.h:77
libMesh::DenseVector::scale
void scale(const T factor)
Multiplies every element in the vector by factor.
Definition: dense_vector.h:412
libMesh::DiffSolver::absolute_residual_tolerance
Real absolute_residual_tolerance
The DiffSolver should exit after the residual is reduced to either less than absolute_residual_tolera...
Definition: diff_solver.h:191
value
static const bool value
Definition: xdr_io.C:56
libMesh::DofMap
This class handles the numbering of degrees of freedom on a mesh.
Definition: dof_map.h:176
libMesh::DiffContext::get_elem_jacobian
const DenseMatrix< Number > & get_elem_jacobian() const
Const accessor for element Jacobian.
Definition: diff_context.h:283
libMesh::DiffSolver::max_linear_iterations
unsigned int max_linear_iterations
Each linear solver step should exit after max_linear_iterations is exceeded.
Definition: diff_solver.h:148
libMesh::FEMContext::get_side_qrule
const QBase & get_side_qrule() const
Accessor for element side quadrature rule for the dimension of the current _elem.
Definition: fem_context.h:797
libMesh::FEMContext::get_dim
unsigned char get_dim() const
Accessor for cached mesh dimension.
Definition: fem_context.h:924
libMesh::FEMContext::get_side_fe
void get_side_fe(unsigned int var, FEGenericBase< OutputShape > *&fe) const
Accessor for edge/face (2D/3D) finite element object for variable var for the largest dimension in th...
Definition: fem_context.h:312
SolidSystem::save_initial_mesh
void save_initial_mesh()
Definition: solid_system.C:62
libMesh::System::get_dof_map
const DofMap & get_dof_map() const
Definition: system.h:2099
NonlinearNeoHookeCurrentConfig
This class implements a constitutive formulation for an Neo-Hookean elastic solid in terms of the cur...
Definition: nonlinear_neohooke_cc.h:40
NonlinearNeoHookeCurrentConfig::get_linearized_stiffness
void get_linearized_stiffness(DenseMatrix< Real > &stiffness, unsigned int &i, unsigned int &j)
Return the stiffness matrix for the current state.
Definition: nonlinear_neohooke_cc.C:118
libMesh::FEGenericBase::get_phi
const std::vector< std::vector< OutputShape > > & get_phi() const
Definition: fe_base.h:206
libMesh::Real
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Definition: libmesh_common.h:121
libMesh::DiffSolver::max_nonlinear_iterations
unsigned int max_nonlinear_iterations
The DiffSolver should exit in failure if max_nonlinear_iterations is exceeded and continue_after_max_...
Definition: diff_solver.h:156
libMesh::Parameters::get
const T & get(const std::string &) const
Definition: parameters.h:421
libMesh::DenseMatrix::scale
void scale(const T factor)
Multiplies every element in the matrix by factor.
Definition: dense_matrix.h:913
libMesh::DenseVector
Defines a dense vector for use in Finite Element-type computations.
Definition: meshless_interpolation_function.h:39
libMesh::DiffSolver::initial_linear_tolerance
double initial_linear_tolerance
Any required linear solves will at first be done with this tolerance; the DiffSolver may tighten the ...
Definition: diff_solver.h:210
libMesh::FEMContext
This class provides all data required for a physics package (e.g.
Definition: fem_context.h:62
libMesh::EquationSystems::parameters
Parameters parameters
Data structure holding arbitrary parameters.
Definition: equation_systems.h:557