11 #include "InputParameters.h"
12 #include "FEProblem.h"
14 #if defined(LIBMESH_HAVE_PETSC) && !PETSC_VERSION_LESS_THAN(3, 3, 0)
21 InputParameters params = validParams<Split>();
22 params.addParam<std::vector<std::string>>(
"contact_master",
23 "Master surface list for included contacts");
24 params.addParam<std::vector<std::string>>(
"contact_slave",
25 "Slave surface list for included contacts");
26 params.addParam<std::vector<int>>(
28 "List of indicators whether displaced mesh is used to define included contact");
29 params.addParam<std::vector<std::string>>(
"uncontact_master",
30 "Master surface list for excluded contacts");
31 params.addParam<std::vector<std::string>>(
"uncontact_slave",
32 "Slave surface list for excluded contacts");
33 params.addParam<std::vector<int>>(
34 "uncontact_displaced",
35 "List of indicators whether displaced mesh is used to define excluded contact");
38 params.addRequiredParam<
bool>(
"include_all_contact_nodes",
39 "Whether to include all nodes on the contact surfaces");
45 _contact_master(getParam<std::vector<std::string>>(
"contact_master")),
46 _contact_slave(getParam<std::vector<std::string>>(
"contact_slave")),
47 _contact_displaced(getParam<std::vector<int>>(
"contact_displaced")),
48 _uncontact_master(getParam<std::vector<std::string>>(
"uncontact_master")),
49 _uncontact_slave(getParam<std::vector<std::string>>(
"uncontact_slave")),
50 _uncontact_displaced(getParam<std::vector<int>>(
"uncontact_displaced")),
51 _include_all_contact_nodes(getParam<bool>(
"include_all_contact_nodes"))
55 std::ostringstream err;
56 err <<
"Master and slave contact lists must have matching sizes: " <<
_contact_master.size()
58 mooseError(err.str());
62 std::ostringstream err;
63 err <<
"Master and displaced contact lists must have matching sizes: " <<
_contact_master.size()
65 mooseError(err.str());
72 std::ostringstream err;
73 err <<
"Master and slave uncontact lists must have matching sizes: " <<
_uncontact_master.size()
75 mooseError(err.str());
79 std::ostringstream err;
80 err <<
"Master and displaced uncontact lists must have matching sizes: "
82 mooseError(err.str());
92 Moose::PetscSupport::PetscOptions & po = _fe_problem.getPetscOptions();
94 std::string dmprefix = prefix +
"dm_moose_", opt, val;
99 opt = dmprefix +
"ncontacts";
101 std::ostringstream oval;
107 po.flags.push_back(opt);
110 po.inames.push_back(opt);
111 po.values.push_back(val);
115 std::ostringstream oopt;
116 oopt << dmprefix <<
"contact_" << j;
121 po.flags.push_back(opt);
124 po.inames.push_back(opt);
125 po.values.push_back(val);
129 opt = opt +
"_displaced";
133 po.flags.push_back(opt);
136 po.inames.push_back(opt);
137 po.values.push_back(val);
145 opt = dmprefix +
"nuncontacts";
147 std::ostringstream oval;
153 po.flags.push_back(opt);
156 po.inames.push_back(opt);
157 po.values.push_back(val);
161 std::ostringstream oopt;
162 oopt << dmprefix <<
"uncontact_" << j;
167 po.flags.push_back(opt);
170 po.inames.push_back(opt);
171 po.values.push_back(val);
175 opt = opt +
"_displaced";
179 po.flags.push_back(opt);
182 po.inames.push_back(opt);
183 po.values.push_back(val);
191 opt = dmprefix +
"includeAllContactNodes";
196 po.inames.push_back(opt);
197 po.values.push_back(val);
198 Split::setup(prefix);