27 #include <queso/Defines.h>
28 #include <queso/VectorSet.h>
29 #include <queso/VectorSubset.h>
30 #include <queso/Environment.h>
31 #include <queso/GenericScalarFunction.h>
32 #include <queso/GslVector.h>
33 #include <queso/GslMatrix.h>
38 template<
class V,
class M>
41 double (*valueRoutinePtr)(
const V& domainVector,
const V* domainDirection,
const void* routinesDataPtr, V* gradVector, M* hessianMatrix, V* hessianEffect),
42 const void* routinesDataPtr,
45 m_valueRoutinePtr (valueRoutinePtr),
46 m_routinesDataPtr (routinesDataPtr),
47 m_routineIsForLn (routineIsForLn)
52 template<
class V,
class M>
58 template<
class V,
class M>
60 const V* domainDirection,
63 V* hessianEffect)
const
67 "GenericScalarFunction<V,M>::actualValue()",
68 "m_valueRoutinePtr = NULL");
70 double value = m_valueRoutinePtr(domainVector, domainDirection, m_routinesDataPtr, gradVector, hessianMatrix, hessianEffect);
71 if (m_routineIsForLn) {
72 value = std::exp(value);
74 (gradVector != NULL) ||
75 (hessianMatrix != NULL) ||
76 (hessianEffect != NULL),
78 "GenericScalarFunction<V,M>::gradOfActual()",
85 template<
class V,
class M>
87 const V* domainDirection,
90 V* hessianEffect)
const
94 "GenericScalarFunction<V,M>::lnValue()",
95 "m_valueRoutinePtr = NULL");
97 double value = m_valueRoutinePtr(domainVector, domainDirection, m_routinesDataPtr, gradVector, hessianMatrix, hessianEffect);
98 if (m_routineIsForLn ==
false) {
101 (gradVector != NULL) ||
102 (hessianMatrix != NULL) ||
103 (hessianEffect != NULL),
105 "GenericScalarFunction<V,M>::gradOfLn()",
A templated class for handling sets.
A class for handling generic scalar functions.
double lnValue(const V &domainVector, const V *domainDirection, V *gradVector, M *hessianMatrix, V *hessianEffect) const
Calculates the logarithm of value of this scalar function.
GenericScalarFunction(const char *prefix, const VectorSet< V, M > &domainSet, double(*valueRoutinePtr)(const V &domainVector, const V *domainDirection, const void *routinesDataPtr, V *gradVector, M *hessianMatrix, V *hessianEffect), const void *routinesDataPtr, bool routineIsForLn)
Default constructor.
double actualValue(const V &domainVector, const V *domainDirection, V *gradVector, M *hessianMatrix, V *hessianEffect) const
Calculates the actual value of this scalar function.
A templated (base) class for handling scalar functions.
virtual ~GenericScalarFunction()
Virtual destructor.
#define UQ_FATAL_TEST_MACRO(test, givenRank, where, what)