20 #ifndef _NESTED_FUNCTION_H_
21 #define _NESTED_FUNCTION_H_
23 #include "mbsim/functions/function.h"
30 template<
typename Ret,
typename Argo>
44 int getArgSize()
const {
45 return fi->getArgSize();
47 Ret operator()(
const double &arg) {
48 return (*fo)((*fi)(arg));
50 typename B::DRetDArg parDer(
const double &arg) {
51 return fo->parDer((*fi)(arg))*fi->parDer(arg);
53 typename B::DRetDArg parDerDirDer(
const double &argDir,
const double &arg) {
54 return fo->parDerDirDer(fi->parDer(arg)*argDir,(*fi)(arg))*fi->parDer(arg) + fo->parDer((*fi)(arg))*fi->parDerDirDer(argDir,arg);
56 typename B::DDRetDDArg parDerParDer(
const double &arg) {
57 return fo->parDerDirDer(fi->parDer(arg),(*fi)(arg))*fi->parDer(arg) + fo->parDer((*fi)(arg))*fi->parDerParDer(arg);
59 void setOuterFunction(
Function<Ret(Argo)> *fo_) {
64 void setInnerFunction(
Function<Argo(
double)> *fi_) {
69 void initializeUsingXML(xercesc::DOMElement *element) {
70 xercesc::DOMElement *e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIM%
"outerFunction");
72 e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIM%
"innerFunction");
86 template<
typename Ret,
typename Argo,
typename Argi>
100 int getArgSize()
const {
101 return fi->getArgSize();
103 Ret operator()(
const Argi &arg) {
104 return (*fo)((*fi)(arg));
106 typename B::DRetDArg parDer(
const Argi &arg) {
107 return fo->parDer((*fi)(arg))*fi->parDer(arg);
109 typename B::DRetDArg parDerDirDer(
const Argi &argDir,
const Argi &arg) {
110 return fo->parDerDirDer(fi->parDer(arg)*argDir,(*fi)(arg))*fi->parDer(arg) + fo->parDer((*fi)(arg))*fi->parDerDirDer(argDir,arg);
112 void setOuterFunction(
Function<Ret(Argo)> *fo_) {
115 fo->setName(
"Outer");
117 void setInnerFunction(
Function<Argo(Argi)> *fi_) {
120 fi->setName(
"Inner");
122 void initializeUsingXML(xercesc::DOMElement *element) {
123 xercesc::DOMElement *e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIM%
"outerFunction");
125 e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIM%
"innerFunction");
void init(Element::InitStage stage)
plots time series header
Definition: composite_function.h:75
Definition: composite_function.h:27
InitStage
The stages of the initialization.
Definition: element.h:97
Definition: planar_contour.h:31
virtual void init(InitStage stage)
plots time series header
Definition: element.cc:70
void init(Element::InitStage stage)
plots time series header
Definition: composite_function.h:128
static ContainerType * createAndInit(const xercesc::DOMElement *element)
Definition: objectfactory.h:87