58 void MergeParameterList(
const Teuchos::ParameterList &source, Teuchos::ParameterList &dest,
bool overWrite){
59 for(Teuchos::ParameterList::ConstIterator param=source.begin(); param!=source.end(); ++param)
60 if (dest.isParameter(source.name(param)) ==
false || overWrite)
61 dest.setEntry(source.name(param),source.entry(param));
64 void CreateSublists(
const Teuchos::ParameterList &List, Teuchos::ParameterList &newList)
66 using Teuchos::ParameterList;
69 newList.setName(List.name());
75 for (ParameterList::ConstIterator param=List.begin(); param!=List.end(); ++param)
77 const string & pname=List.name(param);
79 if ((pname.find(
" (level",0) == string::npos || pname.find(
"smoother: list (level",0) == 0 || pname.find(
"aggregation: list (level",0) == 0) &&
80 (pname.find(
"coarse: ",0) == string::npos))
82 newList.setEntry(pname,List.entry(param));
87 if (List.isSublist(
"coarse: list")) {
88 const ParameterList &coarseList = List.sublist(
"coarse: list");
89 ParameterList &newCoarseList = newList.sublist(
"coarse: list");
90 for (ParameterList::ConstIterator param=coarseList.begin(); param!=coarseList.end() ; ++param) {
91 const string & pname=coarseList.name(param);
93 if (pname.find(
"coarse:",0) == 0) {
95 newCoarseList.setEntry(
"smoother: "+pname.substr(8),coarseList.entry(param));
97 newCoarseList.setEntry(pname,coarseList.entry(param));
103 for (ParameterList::ConstIterator param=List.begin(); param!=List.end(); ++param)
105 const string & pname=List.name(param);
106 if (pname.find(
" (level",0) != string::npos && pname.find(
"smoother: list (level",0) != 0 && pname.find(
"aggregation: list (level",0) != 0)
114 typedef Teuchos::ArrayRCP<char>::size_type size_type;
115 Teuchos::Array<char> ctype (size_type(pname.size()+1));
116 Teuchos::Array<char> coption(size_type(pname.size()+1));
118 int matched = sscanf(pname.c_str(),
"%s %[^(](level %d)", ctype.getRawPtr(), coption.getRawPtr(), &levelID);
119 type = string(ctype.getRawPtr());
120 option = string(coption.getRawPtr()); option.resize(option.size () - 1);
122 if (matched != 3 || (type !=
"smoother:" && type !=
"aggregation:")) {
124 <<
"Error in creating level-specific sublists" << std::endl
125 <<
"Offending parameter: " << pname << std::endl);
130 ParameterList &newSubList = newList.sublist(type +
" list (level " + Teuchos::toString(levelID) +
")");
132 newSubList.setEntry(type +
" " + option,List.entry(param));
134 }
else if (pname.find(
"coarse:",0) == 0 && pname !=
"coarse: list") {
136 ParameterList &newCoarseList = newList.sublist(
"coarse: list");
137 newCoarseList.setEntry(
"smoother: "+pname.substr(8),List.entry(param));
160 Teuchos::RCP<Teuchos::ParameterList>
ExtractSetOfParameters(
const Teuchos::ParameterList & paramList,
const std::string & str) {
161 Teuchos::RCP<Teuchos::ParameterList> subList = rcp(
new Teuchos::ParameterList());
163 for (Teuchos::ParameterList::ConstIterator param = paramList.begin(); param != paramList.end(); ++param) {
164 const Teuchos::ParameterEntry & entry = paramList.entry(param);
165 const std::string & pname = paramList.name(param);
166 if (pname.find(str+
":",0) == 0 && !entry.isList()) {
167 subList->setEntry(pname,entry);