Sacado Package Browser (Single Doxygen Collection)
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
src
parameter
Sacado_ParameterFamilyBaseImp.hpp
Go to the documentation of this file.
1
// @HEADER
2
// ***********************************************************************
3
//
4
// Sacado Package
5
// Copyright (2006) Sandia Corporation
6
//
7
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
8
// the U.S. Government retains certain rights in this software.
9
//
10
// This library is free software; you can redistribute it and/or modify
11
// it under the terms of the GNU Lesser General Public License as
12
// published by the Free Software Foundation; either version 2.1 of the
13
// License, or (at your option) any later version.
14
//
15
// This library is distributed in the hope that it will be useful, but
16
// WITHOUT ANY WARRANTY; without even the implied warranty of
17
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18
// Lesser General Public License for more details.
19
//
20
// You should have received a copy of the GNU Lesser General Public
21
// License along with this library; if not, write to the Free Software
22
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
23
// USA
24
// Questions? Contact David M. Gay (dmgay@sandia.gov) or Eric T. Phipps
25
// (etphipp@sandia.gov).
26
//
27
// ***********************************************************************
28
// @HEADER
29
30
#include "Teuchos_Assert.hpp"
31
32
template
<
typename
EntryBase,
typename
EntryType>
33
Sacado::ParameterFamilyBase<EntryBase,EntryType>::
34
ParameterFamilyBase
(
const
std::string& name_,
35
bool
supports_ad_,
36
bool
supports_analytic_) :
37
family
(),
38
name
(name_),
39
supports_ad
(supports_ad_),
40
supports_analytic
(supports_analytic_)
41
{
42
}
43
44
template
<
typename
EntryBase,
typename
EntryType>
45
Sacado::ParameterFamilyBase<EntryBase,EntryType>::
46
~ParameterFamilyBase
()
47
{
48
}
49
50
template
<
typename
EntryBase,
typename
EntryType>
51
std::string
52
Sacado::ParameterFamilyBase<EntryBase,EntryType>::
53
getName
()
const
54
{
55
return
name
;
56
}
57
58
template
<
typename
EntryBase,
typename
EntryType>
59
bool
60
Sacado::ParameterFamilyBase<EntryBase,EntryType>::
61
supportsAD
()
const
62
{
63
return
supports_ad
;
64
}
65
66
template
<
typename
EntryBase,
typename
EntryType>
67
bool
68
Sacado::ParameterFamilyBase<EntryBase,EntryType>::
69
supportsAnalytic
()
const
70
{
71
return
supports_analytic
;
72
}
73
74
template
<
typename
EntryBase,
typename
EntryType>
75
template
<
class
EvalType>
76
bool
77
Sacado::ParameterFamilyBase<EntryBase,EntryType>::
78
hasType
()
const
79
{
80
81
// Convert typename EvalType to string
82
std::string evalTypeString =
getTypeName<EvalType>
();
83
84
// Find entry corresponding to this EvalType
85
const_iterator
it =
family
.find(evalTypeString);
86
if
(it ==
family
.end())
87
return
false
;
88
89
return
true
;
90
}
91
92
template
<
typename
EntryBase,
typename
EntryType>
93
template
<
class
EvalType>
94
bool
95
Sacado::ParameterFamilyBase<EntryBase,EntryType>::
96
addEntry
(
const
Teuchos::RCP<
typename
Sacado::mpl::apply<EntryType,EvalType>::type
>& entry,
97
const
bool
allow_overwrite)
98
{
99
// Get string representation of EvalType
100
std::string evalTypeString =
getTypeName<EvalType>
();
101
102
// Determine if entry already exists for parameter and type
103
iterator
it =
family
.find(evalTypeString);
104
105
// If it does not, add it
106
if
(it ==
family
.end()) {
107
family
.insert(std::pair<std::string,
108
Teuchos::RCP<EntryBase> >(evalTypeString, entry));
109
}
110
else
if
(allow_overwrite) {
111
(*it).second = entry;
112
}
113
else
{
114
return
false
;
115
}
116
117
return
true
;
118
}
119
120
template
<
typename
EntryBase,
typename
EntryType>
121
template
<
class
EvalType>
122
Teuchos::RCP< typename Sacado::mpl::apply<EntryType,EvalType>::type >
123
Sacado::ParameterFamilyBase<EntryBase,EntryType>::
124
getEntry
() {
125
126
// Convert typename EvalType to string
127
std::string evalTypeString =
getTypeName<EvalType>
();
128
129
// Find entry corresponding to this EvalType
130
iterator
it =
family
.find(evalTypeString);
131
TEUCHOS_TEST_FOR_EXCEPTION(it ==
family
.end(),
132
std::logic_error,
133
std::string(
"Sacado::ParameterFamilyBase::getEntry(): "
)
134
+
"Parameter entry "
+
name
135
+
" does not have a parameter of type"
136
+ evalTypeString);
137
138
// Cast entry to LOCA::Parameter::Entry<EvalType>
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,
141
std::logic_error,
142
std::string(
"Sacado::ParameterFamilyBase::getEntry(): "
)
143
+
"Parameter entry "
+
name
144
+
" of type"
+ evalTypeString
145
+
" has incorrect entry type"
);
146
147
return
entry;
148
}
149
150
template
<
typename
EntryBase,
typename
EntryType>
151
template
<
class
EvalType>
152
Teuchos::RCP< const typename Sacado::mpl::apply<EntryType,EvalType>::type >
153
Sacado::ParameterFamilyBase<EntryBase,EntryType>::
154
getEntry
()
const
{
155
156
// Convert typename EvalType to string
157
std::string evalTypeString =
getTypeName<EvalType>
();
158
159
// Find entry corresponding to this EvalType
160
const_iterator
it =
family
.find(evalTypeString);
161
TEUCHOS_TEST_FOR_EXCEPTION(it ==
family
.end(),
162
std::logic_error,
163
std::string(
"Sacado::ParameterFamilyBase::getEntry(): "
)
164
+
"Parameter entry "
+
name
165
+
" does not have a parameter of type"
166
+ evalTypeString);
167
168
// Cast entry to LOCA::Parameter::Entry<EvalType>
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,
171
std::logic_error,
172
std::string(
"Sacado::ParameterFamilyBase::getEntry(): "
)
173
+
"Parameter entry "
+
name
174
+
" of type"
+ evalTypeString
175
+
" has incorrect entry type"
);
176
177
return
entry;
178
}
179
180
template
<
typename
EntryBase,
typename
EntryType>
181
void
182
Sacado::ParameterFamilyBase<EntryBase,EntryType>::
183
print
(std::ostream& os,
bool
print_values)
const
184
{
185
os <<
"\t"
<<
name
<<
": Supports AD = "
<<
supports_ad
186
<<
", Supports_Analytic = "
<<
supports_analytic
<< std::endl;
187
if
(print_values) {
188
for
(
const_iterator
it =
family
.begin(); it !=
family
.end(); it++) {
189
os <<
"\t\t"
<< (*it).first <<
" = "
;
190
(*it).second->print(os);
191
os << std::endl;
192
}
193
}
194
195
}
196
197
template
<
typename
EntryBase,
typename
EntryType>
198
template
<
class
EvalType>
199
std::string
200
Sacado::ParameterFamilyBase<EntryBase,EntryType>::
201
getTypeName
()
const
{
202
return
typeid
(EvalType).
name
();
203
}
Sacado::ParameterFamilyBase< AbstractScalarParameterEntry, ScalarParameterEntry< _, DefaultEvalTypeTraits > >::getTypeName
std::string getTypeName() const
Definition
Sacado_ParameterFamilyBaseImp.hpp:201
Sacado::ParameterFamilyBase::getEntry
Teuchos::RCP< typename Sacado::mpl::apply< EntryType, EvalType >::type > getEntry()
Gets the entry corresponding to type EvalType.
Definition
Sacado_ParameterFamilyBaseImp.hpp:124
Sacado::ParameterFamilyBase::hasType
bool hasType() const
Determine if family has an entry for the given type EvalType.
Definition
Sacado_ParameterFamilyBaseImp.hpp:78
Sacado::ParameterFamilyBase::supportsAD
bool supportsAD() const
Indicates whether parameter supports AD derivatives.
Definition
Sacado_ParameterFamilyBaseImp.hpp:61
Sacado::ParameterFamilyBase::supports_ad
bool supports_ad
Family supports AD.
Definition
Sacado_ParameterFamilyBase.hpp:131
Sacado::ParameterFamilyBase::getName
std::string getName() const
Get the name of the family.
Definition
Sacado_ParameterFamilyBaseImp.hpp:53
Sacado::ParameterFamilyBase::ParameterFamilyBase
ParameterFamilyBase(const std::string &name, bool supports_ad, bool supports_analytic)
Constructor.
Definition
Sacado_ParameterFamilyBaseImp.hpp:34
Sacado::ParameterFamilyBase::print
void print(std::ostream &os, bool print_values=false) const
Print the family.
Definition
Sacado_ParameterFamilyBaseImp.hpp:183
Sacado::ParameterFamilyBase::addEntry
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.
Definition
Sacado_ParameterFamilyBaseImp.hpp:96
Sacado::ParameterFamilyBase::family
EvalMap family
Family of parameter entries.
Definition
Sacado_ParameterFamilyBase.hpp:125
Sacado::ParameterFamilyBase< AbstractScalarParameterEntry, ScalarParameterEntry< _, DefaultEvalTypeTraits > >::const_iterator
EvalMap::const_iterator const_iterator
Definition
Sacado_ParameterFamilyBase.hpp:106
Sacado::ParameterFamilyBase::supportsAnalytic
bool supportsAnalytic() const
Indicates whether parameter supports analytic derivatives.
Definition
Sacado_ParameterFamilyBaseImp.hpp:69
Sacado::ParameterFamilyBase::name
const std::string name
Family name.
Definition
Sacado_ParameterFamilyBase.hpp:128
Sacado::ParameterFamilyBase::~ParameterFamilyBase
virtual ~ParameterFamilyBase()
Destructor.
Definition
Sacado_ParameterFamilyBaseImp.hpp:46
Sacado::ParameterFamilyBase::supports_analytic
bool supports_analytic
Family supports analytic derivatives.
Definition
Sacado_ParameterFamilyBase.hpp:134
Sacado::ParameterFamilyBase< AbstractScalarParameterEntry, ScalarParameterEntry< _, DefaultEvalTypeTraits > >::iterator
EvalMap::iterator iterator
Definition
Sacado_ParameterFamilyBase.hpp:109
Sacado::mpl::apply_wrap5< F, mpl::none, mpl::none, mpl::none, mpl::none, mpl::none >::type
F::template apply< mpl::none, mpl::none, mpl::none, mpl::none, mpl::none >::type type
Definition
Sacado_mpl_apply_wrap.hpp:84
Generated by
1.17.0