30#include "Teuchos_Assert.hpp"
32template <
typename EntryBase,
typename EntryType>
36 bool supports_analytic_) :
44template <
typename EntryBase,
typename EntryType>
50template <
typename EntryBase,
typename EntryType>
58template <
typename EntryBase,
typename EntryType>
66template <
typename EntryBase,
typename EntryType>
74template <
typename EntryBase,
typename EntryType>
75template <
class EvalType>
92template <
typename EntryBase,
typename EntryType>
93template <
class EvalType>
97 const bool allow_overwrite)
107 family.insert(std::pair<std::string,
108 Teuchos::RCP<EntryBase> >(evalTypeString, entry));
110 else if (allow_overwrite) {
111 (*it).second = entry;
120template <
typename EntryBase,
typename EntryType>
121template <
class EvalType>
122Teuchos::RCP< typename Sacado::mpl::apply<EntryType,EvalType>::type >
131 TEUCHOS_TEST_FOR_EXCEPTION(it ==
family.end(),
133 std::string(
"Sacado::ParameterFamilyBase::getEntry(): ")
134 +
"Parameter entry " +
name
135 +
" does not have a parameter of type"
139 Teuchos::RCP< typename Sacado::mpl::apply<EntryType,EvalType>::type > entry = Teuchos::rcp_dynamic_cast< typename Sacado::mpl::apply<EntryType,EvalType>::type >((*it).second);
140 TEUCHOS_TEST_FOR_EXCEPTION(entry == Teuchos::null,
142 std::string(
"Sacado::ParameterFamilyBase::getEntry(): ")
143 +
"Parameter entry " +
name
144 +
" of type" + evalTypeString
145 +
" has incorrect entry type");
150template <
typename EntryBase,
typename EntryType>
151template <
class EvalType>
152Teuchos::RCP< const typename Sacado::mpl::apply<EntryType,EvalType>::type >
161 TEUCHOS_TEST_FOR_EXCEPTION(it ==
family.end(),
163 std::string(
"Sacado::ParameterFamilyBase::getEntry(): ")
164 +
"Parameter entry " +
name
165 +
" does not have a parameter of type"
169 Teuchos::RCP< const typename Sacado::mpl::apply<EntryType,EvalType>::type > entry = Teuchos::rcp_dynamic_cast< const typename Sacado::mpl::apply<EntryType,EvalType>::type >((*it).second);
170 TEUCHOS_TEST_FOR_EXCEPTION(entry == Teuchos::null,
172 std::string(
"Sacado::ParameterFamilyBase::getEntry(): ")
173 +
"Parameter entry " +
name
174 +
" of type" + evalTypeString
175 +
" has incorrect entry type");
180template <
typename EntryBase,
typename EntryType>
183print(std::ostream& os,
bool print_values)
const
189 os <<
"\t\t" << (*it).first <<
" = ";
190 (*it).second->print(os);
197template <
typename EntryBase,
typename EntryType>
198template <
class EvalType>
202 return typeid(EvalType).
name();
std::string getTypeName() const
Teuchos::RCP< typename Sacado::mpl::apply< EntryType, EvalType >::type > getEntry()
Gets the entry corresponding to type EvalType.
bool hasType() const
Determine if family has an entry for the given type EvalType.
bool supportsAD() const
Indicates whether parameter supports AD derivatives.
bool supports_ad
Family supports AD.
std::string getName() const
Get the name of the family.
ParameterFamilyBase(const std::string &name, bool supports_ad, bool supports_analytic)
Constructor.
void print(std::ostream &os, bool print_values=false) const
Print the family.
bool addEntry(const Teuchos::RCP< typename Sacado::mpl::apply< EntryType, EvalType >::type > &entry, const bool allow_overwrite=false)
Add a new parameter using custom entry.
EvalMap family
Family of parameter entries.
EvalMap::const_iterator const_iterator
bool supportsAnalytic() const
Indicates whether parameter supports analytic derivatives.
const std::string name
Family name.
virtual ~ParameterFamilyBase()
Destructor.
bool supports_analytic
Family supports analytic derivatives.
EvalMap::iterator iterator
F::template apply< mpl::none, mpl::none, mpl::none, mpl::none, mpl::none >::type type