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

Split-based preconditioner for contact problems. More...

#include <ContactSplit.h>

Inheritance diagram for ContactSplit:
[legend]

Public Types

typedef DataFileName DataFileParameterType
 

Public Member Functions

 ContactSplit (const InputParameters &params)
 
virtual void setup (NonlinearSystemBase &nl, const std::string &prefix="-") override
 
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
 
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 Types

enum  SplittingType
 

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

const std::vector< std::pair< BoundaryName, BoundaryName > > _contact_pairs
 
std::vector< int_contact_displaced
 
const std::vector< std::pair< BoundaryName, BoundaryName > > _uncontact_pairs
 
std::vector< int_uncontact_displaced
 
bool _include_all_contact_nodes
 
 SplittingTypeAdditive
 
 SplittingTypeMultiplicative
 
 SplittingTypeSymmetricMultiplicative
 
 SplittingTypeSchur
 
FEProblemBase_fe_problem
 
std::vector< NonlinearVariableName > _vars
 
std::vector< std::string > _splitting
 
const bool & _enabled
 
MooseApp_app
 
const std::string _type
 
const std::string _name
 
const InputParameters_pars
 
Factory_factory
 
ActionFactory_action_factory
 
MooseApp_restartable_app
 
const std::string _restartable_system_name
 
const THREAD_ID _restartable_tid
 
const bool _restartable_read_only
 
std::vector< SubdomainName > _blocks
 
std::vector< BoundaryName > _sides
 
std::vector< BoundaryName > _unsides
 
MooseEnum _splitting_type
 
MooseEnum _schur_type
 
MooseEnum _schur_pre
 
const Parallel::Communicator & _communicator
 

Detailed Description

Split-based preconditioner for contact problems.

Definition at line 18 of file ContactSplit.h.

Constructor & Destructor Documentation

◆ ContactSplit()

ContactSplit::ContactSplit ( const InputParameters params)

Definition at line 45 of file ContactSplit.C.

46  : Split(params),
47  _contact_pairs(getParam<BoundaryName, BoundaryName>("contact_primary", "contact_secondary")),
48  _contact_displaced(getParam<std::vector<int>>("contact_displaced")),
50  getParam<BoundaryName, BoundaryName>("uncontact_primary", "uncontact_secondary")),
51  _uncontact_displaced(getParam<std::vector<int>>("uncontact_displaced")),
52  _include_all_contact_nodes(getParam<bool>("include_all_contact_nodes"))
53 {
54  if (!_contact_displaced.empty() && _contact_pairs.size() != _contact_displaced.size())
55  mooseError("Primary and displaced contact lists must have matching sizes: ",
56  _contact_pairs.size(),
57  " != ",
58  _contact_displaced.size());
59 
60  if (_contact_displaced.empty())
61  _contact_displaced.resize(_contact_pairs.size());
62 
63  if (!_uncontact_displaced.empty() && _uncontact_pairs.size() != _uncontact_displaced.size())
64  mooseError("Primary and displaced uncontact lists must have matching sizes: ",
65  _uncontact_pairs.size(),
66  " != ",
67  _uncontact_displaced.size());
68 
69  if (!_uncontact_displaced.size())
71 }
const std::vector< std::pair< BoundaryName, BoundaryName > > _uncontact_pairs
Definition: ContactSplit.h:29
const std::vector< std::pair< BoundaryName, BoundaryName > > _contact_pairs
Definition: ContactSplit.h:27
const T & getParam(const std::string &name) const
Split(const InputParameters &parameters)
void mooseError(Args &&... args) const
bool _include_all_contact_nodes
Definition: ContactSplit.h:31
std::vector< int > _uncontact_displaced
Definition: ContactSplit.h:30
std::vector< int > _contact_displaced
Definition: ContactSplit.h:28

Member Function Documentation

◆ setup()

void ContactSplit::setup ( NonlinearSystemBase nl,
const std::string &  prefix = "-" 
)
overridevirtual

Reimplemented from Split.

Definition at line 74 of file ContactSplit.C.

75 {
76  // A reference to the PetscOptions
78  // prefix
79  const std::string dmprefix = prefix + "dm_moose_";
80 
81  // contacts options
82  if (!_contact_pairs.empty())
83  {
84  // append PETSc options
85  po.pairs.emplace_back(dmprefix + "ncontacts", Moose::stringify(_contact_pairs.size()));
86 
87  for (std::size_t j = 0; j < _contact_pairs.size(); ++j)
88  {
89  auto opt = dmprefix + "contact_" + Moose::stringify(j);
90  po.pairs.emplace_back(opt, Moose::stringify(_contact_pairs[j], ","));
91 
92  if (_contact_displaced[j])
93  po.pairs.emplace_back(opt + "_displaced", "yes");
94  }
95  }
96 
97  // uncontacts options
98  if (!_uncontact_pairs.empty())
99  {
100  po.pairs.emplace_back(dmprefix + "nuncontacts", Moose::stringify(_uncontact_pairs.size()));
101 
102  for (std::size_t j = 0; j < _uncontact_pairs.size(); ++j)
103  {
104  auto opt = dmprefix + "uncontact_" + Moose::stringify(j);
105  po.pairs.emplace_back(opt, Moose::stringify(_uncontact_pairs[j], ","));
106 
107  if (_uncontact_displaced[j])
108  po.pairs.emplace_back(opt + "_displaced", "yes");
109  }
110  }
111 
112  // Whether to include all nodes on the contact surfaces
113  // into the contact subsolver
114  po.pairs.emplace_back(dmprefix + "includeAllContactNodes",
115  _include_all_contact_nodes ? "yes" : "no");
116  Split::setup(nl, prefix);
117 }
virtual void setup(NonlinearSystemBase &nl, const std::string &prefix="-")
Moose::PetscSupport::PetscOptions & getPetscOptions()
std::string opt
const std::vector< std::pair< BoundaryName, BoundaryName > > _uncontact_pairs
Definition: ContactSplit.h:29
std::vector< std::pair< std::string, std::string > > pairs
FEProblemBase & _fe_problem
const std::vector< std::pair< BoundaryName, BoundaryName > > _contact_pairs
Definition: ContactSplit.h:27
std::string stringify(const T &t)
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
bool _include_all_contact_nodes
Definition: ContactSplit.h:31
std::vector< int > _uncontact_displaced
Definition: ContactSplit.h:30
std::vector< int > _contact_displaced
Definition: ContactSplit.h:28

◆ validParams()

InputParameters ContactSplit::validParams ( )
static

Definition at line 18 of file ContactSplit.C.

19 {
21  params.addParam<std::vector<BoundaryName>>("contact_primary",
22  "Primary surface list for included contacts");
23  params.addParam<std::vector<BoundaryName>>("contact_secondary",
24  "Secondary surface list for included contacts");
25  params.addParam<std::vector<int>>(
26  "contact_displaced",
27  {},
28  "List of indicators whether displaced mesh is used to define included contact");
29  params.addParam<std::vector<BoundaryName>>("uncontact_primary",
30  "Primary surface list for excluded contacts");
31  params.addParam<std::vector<BoundaryName>>("uncontact_secondary",
32  "Secondary surface list for excluded contacts");
33  params.addParam<std::vector<int>>(
34  "uncontact_displaced",
35  {},
36  "List of indicators whether displaced mesh is used to define excluded contact");
37  params.addRequiredParam<bool>("include_all_contact_nodes",
38  "Whether to include all nodes on the contact surfaces");
39  params.addClassDescription("Split-based preconditioner that partitions the domain into DOFs "
40  "directly involved in contact (on contact surfaces) and those "
41  "that are not");
42  return params;
43 }
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addRequiredParam(const std::string &name, const std::string &doc_string)
static InputParameters validParams()
void addClassDescription(const std::string &doc_string)

Member Data Documentation

◆ _contact_displaced

std::vector<int> ContactSplit::_contact_displaced
protected

Definition at line 28 of file ContactSplit.h.

Referenced by ContactSplit(), and setup().

◆ _contact_pairs

const std::vector<std::pair<BoundaryName, BoundaryName> > ContactSplit::_contact_pairs
protected

Definition at line 27 of file ContactSplit.h.

Referenced by ContactSplit(), and setup().

◆ _include_all_contact_nodes

bool ContactSplit::_include_all_contact_nodes
protected

Definition at line 31 of file ContactSplit.h.

Referenced by setup().

◆ _uncontact_displaced

std::vector<int> ContactSplit::_uncontact_displaced
protected

Definition at line 30 of file ContactSplit.h.

Referenced by ContactSplit(), and setup().

◆ _uncontact_pairs

const std::vector<std::pair<BoundaryName, BoundaryName> > ContactSplit::_uncontact_pairs
protected

Definition at line 29 of file ContactSplit.h.

Referenced by ContactSplit(), and setup().


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