21void MergeParameterList(
const Teuchos::ParameterList &source, Teuchos::ParameterList &dest,
bool overWrite) {
22 for (Teuchos::ParameterList::ConstIterator param = source.begin(); param != source.end(); ++param)
23 if (dest.isParameter(source.name(param)) ==
false || overWrite)
24 dest.setEntry(source.name(param), source.entry(param));
27void CreateSublists(
const Teuchos::ParameterList &List, Teuchos::ParameterList &newList) {
29 using Teuchos::ParameterList;
31 newList.setName(List.name());
37 for (ParameterList::ConstIterator param = List.begin(); param != List.end(); ++param) {
38 const string &pname = List.name(param);
40 if ((pname.find(
" (level", 0) == string::npos || pname.find(
"smoother: list (level", 0) == 0 || pname.find(
"aggregation: list (level", 0) == 0) &&
41 (pname.find(
"coarse: ", 0) == string::npos)) {
42 newList.setEntry(pname, List.entry(param));
47 if (List.isSublist(
"coarse: list")) {
48 const ParameterList &coarseList = List.sublist(
"coarse: list");
49 ParameterList &newCoarseList = newList.sublist(
"coarse: list");
50 for (ParameterList::ConstIterator param = coarseList.begin(); param != coarseList.end(); ++param) {
51 const string &pname = coarseList.name(param);
53 if (pname.find(
"coarse:", 0) == 0) {
55 newCoarseList.setEntry(
"smoother: " + pname.substr(8), coarseList.entry(param));
57 newCoarseList.setEntry(pname, coarseList.entry(param));
63 for (ParameterList::ConstIterator param = List.begin(); param != List.end(); ++param) {
64 const string &pname = List.name(param);
65 if (pname.find(
" (level", 0) != string::npos && pname.find(
"smoother: list (level", 0) != 0 && pname.find(
"aggregation: list (level", 0) != 0) {
72 typedef Teuchos::ArrayRCP<char>::size_type size_type;
73 Teuchos::Array<char> ctype(size_type(pname.size() + 1));
74 Teuchos::Array<char> coption(size_type(pname.size() + 1));
76 int matched = sscanf(pname.c_str(),
"%s %[^(](level %d)", ctype.getRawPtr(), coption.getRawPtr(), &levelID);
77 type = string(ctype.getRawPtr());
78 option = string(coption.getRawPtr());
79 option.resize(option.size() - 1);
81 if (matched != 3 || (type !=
"smoother:" && type !=
"aggregation:")) {
83 <<
"Error in creating level-specific sublists" << std::endl
84 <<
"Offending parameter: " << pname << std::endl);
89 ParameterList &newSubList = newList.sublist(type +
" list (level " + Teuchos::toString(levelID) +
")");
91 newSubList.setEntry(type +
" " + option, List.entry(param));
93 }
else if (pname.find(
"coarse:", 0) == 0 && pname !=
"coarse: list") {
95 ParameterList &newCoarseList = newList.sublist(
"coarse: list");
96 newCoarseList.setEntry(
"smoother: " + pname.substr(8), List.entry(param));
119Teuchos::RCP<Teuchos::ParameterList>
ExtractSetOfParameters(
const Teuchos::ParameterList ¶mList,
const std::string &str) {
120 Teuchos::RCP<Teuchos::ParameterList> subList = rcp(
new Teuchos::ParameterList());
122 for (Teuchos::ParameterList::ConstIterator param = paramList.begin(); param != paramList.end(); ++param) {
123 const Teuchos::ParameterEntry &entry = paramList.entry(param);
124 const std::string &pname = paramList.name(param);
125 if (pname.find(str +
":", 0) == 0 && !entry.isList()) {
126 subList->setEntry(pname, entry);