https://mooseframework.inl.gov
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes | List of all members
ElementJacobianDamper Class Reference

This class implements a damper that limits the change in the Jacobian of elements. More...

#include <ElementJacobianDamper.h>

Inheritance diagram for ElementJacobianDamper:
[legend]

Public Types

typedef DataFileName DataFileParameterType
 

Public Member Functions

 ElementJacobianDamper (const InputParameters &parameters)
 
virtual void initialSetup () override
 
virtual Real computeDamping (const NumericVector< Number > &, const NumericVector< Number > &update) override
 Computes this Damper's damping. More...
 
void checkMinDamping (const Real cur_damping) const
 
virtual bool enabled () const
 
std::shared_ptr< MooseObjectgetSharedPtr ()
 
std::shared_ptr< const MooseObjectgetSharedPtr () const
 
MooseAppgetMooseApp () const
 
const std::string & type () const
 
virtual const std::string & name () const
 
std::string typeAndName () const
 
std::string errorPrefix (const std::string &error_type) const
 
void callMooseError (std::string msg, const bool with_prefix) const
 
MooseObjectParameterName uniqueParameterName (const std::string &parameter_name) const
 
const InputParametersparameters () const
 
MooseObjectName uniqueName () const
 
const T & getParam (const std::string &name) const
 
std::vector< std::pair< T1, T2 > > getParam (const std::string &param1, const std::string &param2) const
 
const T * queryParam (const std::string &name) const
 
const T & getRenamedParam (const std::string &old_name, const std::string &new_name) const
 
getCheckedPointerParam (const std::string &name, const std::string &error_string="") const
 
bool isParamValid (const std::string &name) const
 
bool isParamSetByUser (const std::string &nm) const
 
void paramError (const std::string &param, Args... args) const
 
void paramWarning (const std::string &param, Args... args) const
 
void paramInfo (const std::string &param, Args... args) const
 
void connectControllableParams (const std::string &parameter, const std::string &object_type, const std::string &object_name, const std::string &object_parameter) const
 
void mooseError (Args &&... args) const
 
void mooseErrorNonPrefixed (Args &&... args) const
 
void mooseDocumentedError (const std::string &repo_name, const unsigned int issue_num, Args &&... args) const
 
void mooseWarning (Args &&... args) const
 
void mooseWarningNonPrefixed (Args &&... args) const
 
void mooseDeprecated (Args &&... args) const
 
void mooseInfo (Args &&... args) const
 
std::string getDataFileName (const std::string &param) const
 
std::string getDataFileNameByName (const std::string &relative_path) const
 
std::string getDataFilePath (const std::string &relative_path) const
 
virtual void timestepSetup ()
 
virtual void jacobianSetup ()
 
virtual void residualSetup ()
 
virtual void subdomainSetup ()
 
virtual void customSetup (const ExecFlagType &)
 
const ExecFlagEnumgetExecuteOnEnum () const
 
virtual void meshChanged ()
 
const Parallel::Communicator & comm () const
 
processor_id_type n_processors () const
 
processor_id_type processor_id () const
 

Static Public Member Functions

static InputParameters validParams ()
 

Public Attributes

const ConsoleStream _console
 

Protected Member Functions

T & declareRestartableData (const std::string &data_name, Args &&... args)
 
ManagedValue< T > declareManagedRestartableDataWithContext (const std::string &data_name, void *context, Args &&... args)
 
const T & getRestartableData (const std::string &data_name) const
 
T & declareRestartableDataWithContext (const std::string &data_name, void *context, Args &&... args)
 
T & declareRecoverableData (const std::string &data_name, Args &&... args)
 
T & declareRestartableDataWithObjectName (const std::string &data_name, const std::string &object_name, Args &&... args)
 
T & declareRestartableDataWithObjectNameWithContext (const std::string &data_name, const std::string &object_name, void *context, Args &&... args)
 
std::string restartableName (const std::string &data_name) const
 

Protected Attributes

THREAD_ID _tid
 Thread ID. More...
 
Assembly_assembly
 
const QBase *const & _qrule
 Quadrature rule. More...
 
const MooseArray< Real > & _JxW
 Transformed Jacobian weights. More...
 
FEProblemBase_fe_problem
 The FE problem. More...
 
MooseSharedPointer< DisplacedProblem_displaced_problem
 The displaced problem. More...
 
MooseMesh_mesh
 The displaced mesh. More...
 
std::vector< MooseVariable * > _disp_var
 The displacement variables. More...
 
unsigned int _ndisp
 The number of displacement variables. More...
 
std::vector< VariableValue_disp_incr
 The current Newton increment in the displacement variables. More...
 
const Real _max_jacobian_diff
 Maximum allowed relative increment in Jacobian. More...
 
SubProblem_subproblem
 
SystemBase_sys
 
const Real_min_damping
 
const bool & _enabled
 
MooseApp_app
 
const std::string _type
 
const std::string _name
 
const InputParameters_pars
 
Factory_factory
 
ActionFactory_action_factory
 
const ExecFlagEnum_execute_enum
 
const ExecFlagType_current_execute_flag
 
MooseApp_restartable_app
 
const std::string _restartable_system_name
 
const THREAD_ID _restartable_tid
 
const bool _restartable_read_only
 
FEProblemBase_mci_feproblem
 
const Parallel::Communicator & _communicator
 

Detailed Description

This class implements a damper that limits the change in the Jacobian of elements.

Definition at line 24 of file ElementJacobianDamper.h.

Constructor & Destructor Documentation

◆ ElementJacobianDamper()

ElementJacobianDamper::ElementJacobianDamper ( const InputParameters parameters)

Definition at line 35 of file ElementJacobianDamper.C.

37  _tid(parameters.get<THREAD_ID>("_tid")),
40  _JxW(_assembly.JxW()),
43  _max_jacobian_diff(parameters.get<Real>("max_increment"))
44 {
45  if (_displaced_problem == NULL)
46  mooseError("ElementJacobianDamper: Must use displaced problem");
47 
48  _mesh = &_displaced_problem->mesh();
49 
50  const std::vector<VariableName> & nl_vnames(getParam<std::vector<VariableName>>("displacements"));
51  _ndisp = nl_vnames.size();
52 
53  for (unsigned int i = 0; i < _ndisp; ++i)
54  {
55  _disp_var.push_back(&_sys.getFieldVariable<Real>(_tid, nl_vnames[i]));
56  _disp_incr.push_back(_disp_var.back()->increment());
57  }
58 }
const QBase *const & _qrule
Quadrature rule.
unsigned int _ndisp
The number of displacement variables.
std::vector< std::pair< R1, R2 > > get(const std::string &param1, const std::string &param2) const
T getCheckedPointerParam(const std::string &name, const std::string &error_string="") const
MooseSharedPointer< DisplacedProblem > _displaced_problem
The displaced problem.
std::vector< VariableValue > _disp_incr
The current Newton increment in the displacement variables.
MooseMesh * _mesh
The displaced mesh.
const Real _max_jacobian_diff
Maximum allowed relative increment in Jacobian.
const MooseArray< Real > & _JxW
Transformed Jacobian weights.
FEProblemBase & _fe_problem
The FE problem.
const T & getParam(const std::string &name) const
std::vector< MooseVariable * > _disp_var
The displacement variables.
unsigned int number() const
THREAD_ID _tid
Thread ID.
const MooseArray< Real > & JxW() const
virtual std::shared_ptr< const DisplacedProblem > getDisplacedProblem() const
MooseVariableFE< T > & getFieldVariable(THREAD_ID tid, const std::string &var_name)
virtual Assembly & assembly(const THREAD_ID tid, const unsigned int sys_num)=0
void mooseError(Args &&... args) const
const libMesh::QBase *const & qRule() const
const InputParameters & parameters() const
SubProblem & _subproblem
SystemBase & _sys
GeneralDamper(const InputParameters &parameters)
unsigned int THREAD_ID

Member Function Documentation

◆ computeDamping()

Real ElementJacobianDamper::computeDamping ( const NumericVector< Number > &  ,
const NumericVector< Number > &  update 
)
overridevirtual

Computes this Damper's damping.

Implements GeneralDamper.

Definition at line 66 of file ElementJacobianDamper.C.

68 {
69  // Maximum difference in the Jacobian for this Newton iteration
70  Real max_difference = 0.0;
71  MooseArray<Real> JxW_displaced;
72 
73  // Vector for storing the original node coordinates
74  std::vector<Point> point_copies;
75 
76  // Loop over elements in the mesh
77  for (auto & current_elem : _mesh->getMesh().active_local_element_ptr_range())
78  {
79  point_copies.clear();
80  point_copies.reserve(current_elem->n_nodes());
81 
82  // Displace nodes with current Newton increment
83  for (unsigned int i = 0; i < current_elem->n_nodes(); ++i)
84  {
85  Node & displaced_node = current_elem->node_ref(i);
86 
87  point_copies.push_back(displaced_node);
88 
89  for (unsigned int j = 0; j < _ndisp; ++j)
90  {
91  dof_id_type disp_dof_num =
92  displaced_node.dof_number(_sys.number(), _disp_var[j]->number(), 0);
93  displaced_node(j) += update(disp_dof_num);
94  }
95  }
96 
97  // Reinit element to compute Jacobian of displaced element
98  _assembly.reinit(current_elem);
99  JxW_displaced = _JxW;
100 
101  // Un-displace nodes
102  for (unsigned int i = 0; i < current_elem->n_nodes(); ++i)
103  {
104  Node & displaced_node = current_elem->node_ref(i);
105 
106  for (unsigned int j = 0; j < _ndisp; ++j)
107  displaced_node(j) = point_copies[i](j);
108  }
109 
110  // Reinit element to compute Jacobian before displacement
111  _assembly.reinit(current_elem);
112 
113  for (unsigned int qp = 0; qp < _qrule->n_points(); ++qp)
114  {
115  Real diff = std::abs(JxW_displaced[qp] - _JxW[qp]) / _JxW[qp];
116  if (diff > max_difference)
117  max_difference = diff;
118  }
119 
120  JxW_displaced.release();
121  }
122 
123  _communicator.max(max_difference);
124 
125  if (max_difference > _max_jacobian_diff)
126  return _max_jacobian_diff / max_difference;
127 
128  return 1.0;
129 }
const QBase *const & _qrule
Quadrature rule.
unsigned int _ndisp
The number of displacement variables.
const Parallel::Communicator & _communicator
MooseMesh * _mesh
The displaced mesh.
void reinit(const Elem *elem)
const Real _max_jacobian_diff
Maximum allowed relative increment in Jacobian.
const MooseArray< Real > & _JxW
Transformed Jacobian weights.
MeshBase & getMesh()
std::vector< MooseVariable * > _disp_var
The displacement variables.
unsigned int number() const
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void max(const T &r, T &o, Request &req) const
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
SystemBase & _sys
uint8_t dof_id_type

◆ initialSetup()

void ElementJacobianDamper::initialSetup ( )
overridevirtual

Reimplemented from GeneralDamper.

Definition at line 61 of file ElementJacobianDamper.C.

62 {
63 }

◆ validParams()

InputParameters ElementJacobianDamper::validParams ( )
static

Definition at line 21 of file ElementJacobianDamper.C.

22 {
24  params.addClassDescription("Damper that limits the change in element Jacobians");
25  params.addParam<std::vector<VariableName>>(
26  "displacements", {}, "The nonlinear displacement variables");
27  params.addParam<Real>(
28  "max_increment",
29  0.1,
30  "The maximum permissible relative increment in the Jacobian per Newton iteration");
31  params.set<bool>("use_displaced_mesh") = true;
32  return params;
33 }
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
T & set(const std::string &name, bool quiet_mode=false)
static InputParameters validParams()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void addClassDescription(const std::string &doc_string)

Member Data Documentation

◆ _assembly

Assembly& ElementJacobianDamper::_assembly
protected

Definition at line 42 of file ElementJacobianDamper.h.

Referenced by computeDamping().

◆ _disp_incr

std::vector<VariableValue> ElementJacobianDamper::_disp_incr
protected

The current Newton increment in the displacement variables.

Definition at line 66 of file ElementJacobianDamper.h.

Referenced by ElementJacobianDamper().

◆ _disp_var

std::vector<MooseVariable *> ElementJacobianDamper::_disp_var
protected

The displacement variables.

Definition at line 60 of file ElementJacobianDamper.h.

Referenced by computeDamping(), and ElementJacobianDamper().

◆ _displaced_problem

MooseSharedPointer<DisplacedProblem> ElementJacobianDamper::_displaced_problem
protected

The displaced problem.

Definition at line 54 of file ElementJacobianDamper.h.

Referenced by ElementJacobianDamper().

◆ _fe_problem

FEProblemBase& ElementJacobianDamper::_fe_problem
protected

The FE problem.

Definition at line 51 of file ElementJacobianDamper.h.

◆ _JxW

const MooseArray<Real>& ElementJacobianDamper::_JxW
protected

Transformed Jacobian weights.

Definition at line 48 of file ElementJacobianDamper.h.

Referenced by computeDamping().

◆ _max_jacobian_diff

const Real ElementJacobianDamper::_max_jacobian_diff
protected

Maximum allowed relative increment in Jacobian.

Definition at line 69 of file ElementJacobianDamper.h.

Referenced by computeDamping().

◆ _mesh

MooseMesh* ElementJacobianDamper::_mesh
protected

The displaced mesh.

Definition at line 57 of file ElementJacobianDamper.h.

Referenced by computeDamping(), and ElementJacobianDamper().

◆ _ndisp

unsigned int ElementJacobianDamper::_ndisp
protected

The number of displacement variables.

Definition at line 63 of file ElementJacobianDamper.h.

Referenced by computeDamping(), and ElementJacobianDamper().

◆ _qrule

const QBase* const& ElementJacobianDamper::_qrule
protected

Quadrature rule.

Definition at line 45 of file ElementJacobianDamper.h.

Referenced by computeDamping().

◆ _tid

THREAD_ID ElementJacobianDamper::_tid
protected

Thread ID.

Definition at line 41 of file ElementJacobianDamper.h.

Referenced by ElementJacobianDamper().


The documentation for this class was generated from the following files: