16 #include "libmesh/quadrature.h" 28 "max_increment", 0.1,
"The maximum permissible incremental Jacobian per Newton iteration");
36 _max_jacobian_diff(getParam<
Real>(
"max_increment")),
38 _mesh(_subproblem.
mesh()),
39 _assembly(_subproblem.assembly(_tid, _sys.number())),
40 _qrule(_assembly.qRule()),
41 _ndisp(coupledComponents(
"displacements")),
42 _disp_num(coupledIndices(
"displacements"))
58 Real max_difference = 0.0;
61 for (
const auto & elem :
_mesh.
getMesh().active_local_element_ptr_range())
70 for (
unsigned int qp = 0; qp <
_qrule->n_points(); ++qp)
82 Real diff = std::abs(F_update.
det() -
F.det()) /
F.det();
83 if (diff > max_difference)
84 max_difference = diff;
109 std::vector<dof_id_type> dof_indices;
113 for (
unsigned int qp = 0; qp <
_qrule->n_points(); ++qp)
120 (solution(dof_indices[dof_idx]) + update(dof_indices[dof_idx]));
void computeGradDisp(const Elem *elem, const NumericVector< Number > &solution, const NumericVector< Number > &update)
Fill the displacement gradients.
void dof_indices(const Elem *const elem, std::vector< dof_id_type > &di) const
registerMooseObject("SolidMechanicsApp", ReferenceElementJacobianDamper)
MooseMesh & _mesh
The undisplaced mesh.
static InputParameters validParams()
virtual void checkVariable(const MooseVariableFieldBase &variable) const
const Parallel::Communicator & _communicator
Assembly & _assembly
The undisplaced assembly.
static const std::string F
void reinit(const Elem *elem)
static InputParameters validParams()
void fillColumn(unsigned int c, const libMesh::TypeVector< Real > &v)
virtual Real computeDamping(const NumericVector< Number > &solution, const NumericVector< Number > &update) override
virtual libMesh::DofMap & dofMap()
const Real _max_jacobian_diff
Maximum allowed relative increment in Jacobian.
void addIa(const Real &a)
static InputParameters validParams()
This class implements a damper that limits the change in the Jacobian of elements without relying on ...
std::vector< unsigned int > _disp_num
The displacement variable numbers.
void setCurrentSubdomainID(SubdomainID i)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void max(const T &r, T &o, Request &req) const
MooseVariableFE< T > & getFieldVariable(THREAD_ID tid, const std::string &var_name)
IntRange< T > make_range(T beg, T end)
ReferenceElementJacobianDamper(const InputParameters ¶meters)
std::vector< std::vector< RealVectorValue > > _grad_disp
The current displacement gradients.
std::vector< const VariablePhiGradient * > _grad_phi
shape function gradients
bool hasBlocks(const SubdomainName &name) const
const unsigned int _ndisp
Number of displacement variables.
auto index_range(const T &sizable)
const QBase *const & _qrule
Quadrature rule.
std::vector< std::vector< RealVectorValue > > _grad_disp_update
The displacement gradients after this update.