9#ifndef Tempus_TimeEventListIndex_impl_hpp
10#define Tempus_TimeEventListIndex_impl_hpp
19 this->
setName(
"TimeEventListIndex");
25 std::vector<int> indexList, std::string name)
28 if (name ==
"" && !indexList.empty()) {
29 std::ostringstream oss;
30 oss <<
"TimeEventListIndex (" <<
indexList_.front() <<
", ... ,"
61 std::vector<int>::iterator it;
96 std::vector<int>::const_iterator it =
103template<
class Scalar>
106 if (index1 > index2) {
120 if (indexEvent1 != indexEvent2)
return true;
123 if (index1 < indexEvent1 && indexEvent1 <= index2)
return true;
129template<
class Scalar>
131 const Teuchos::EVerbosityLevel verbLevel)
const
133 auto l_out = Teuchos::fancyOStream( out.getOStream() );
134 Teuchos::OSTab ostab(*l_out, 2,
"TimeEventListIndex");
135 l_out->setOutputToRootOnly(0);
137 *l_out <<
"TimeEventListIndex:" <<
"\n"
138 <<
" name = " << this->
getName() <<
"\n"
139 <<
" Type = " << this->
getType() <<
"\n"
143 *l_out << *it <<
", ";
146 *l_out <<
"<empty>" << std::endl;
151template<
class Scalar>
152Teuchos::RCP<const Teuchos::ParameterList>
155 Teuchos::RCP<Teuchos::ParameterList> pl =
156 Teuchos::parameterList(
"Time Event List Index");
159 pl->set(
"Name", this->
getName());
160 pl->set(
"Type", this->
getType());
162 std::ostringstream list;
164 for (std::size_t i = 0; i <
indexList_.size()-1; ++i)
168 pl->set<std::string>(
"Index List", list.str(),
169 "Comma deliminated list of indices");
178template<
class Scalar>
180 Teuchos::RCP<Teuchos::ParameterList> pl)
183 if (pl == Teuchos::null)
return teli;
185 TEUCHOS_TEST_FOR_EXCEPTION(
186 pl->get<std::string>(
"Type",
"List Index") !=
"List Index",
188 "Error - Time Event Type != 'List Index'. (='"
189 + pl->get<std::string>(
"Type")+
"')\n");
191 pl->validateParametersAndSetDefaults(*teli->getValidParameters());
193 teli->setName (pl->get(
"Name",
"From createTimeEventListIndex"));
195 std::vector<int> indexList;
197 std::string str = pl->get<std::string>(
"Index List");
198 std::string delimiters(
",");
199 std::string::size_type lastPos = str.find_first_not_of(delimiters, 0);
200 std::string::size_type pos = str.find_first_of(delimiters, lastPos);
201 while ((pos != std::string::npos) || (lastPos != std::string::npos)) {
202 std::string token = str.substr(lastPos,pos-lastPos);
203 indexList.push_back(
int(std::stoi(token)));
204 if(pos==std::string::npos)
break;
206 lastPos = str.find_first_not_of(delimiters, pos);
207 pos = str.find_first_of(delimiters, lastPos);
209 teli->setIndexList(indexList);
virtual void setType(std::string s)
virtual std::string getName() const
Return the name of the TimeEvent.
virtual std::string getType() const
Return the type of TimeEvent.
virtual void setName(std::string name)
Set the name of the TimeEvent.
virtual int getDefaultIndex() const
Return the default index used by TimeEvents.
TimeEventListIndex specifies a list of index events.
TimeEventListIndex()
Default constructor.
virtual bool eventInRangeIndex(int index1, int index2) const
Test if an event occurs within the index range.
std::vector< int > indexList_
virtual void setIndexList(std::vector< int > indexList, bool sort=true)
Set the vector of event indices.
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Describe member data.
virtual void addIndex(int index)
Add the index to event vector.
virtual bool isIndex(int index) const
Test if index is a time event.
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Return a valid ParameterList with current settings.
virtual int indexToNextEvent(int index) const
How many indices until the next event.
virtual int indexOfNextEvent(int index) const
Return the index of the next event following the input index.
Teuchos::RCP< TimeEventListIndex< Scalar > > createTimeEventListIndex(Teuchos::RCP< Teuchos::ParameterList > pList)
Nonmember Constructor via ParameterList.