All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Pages
time_dependent_function.h
1 /* Copyright (C) 2004-2009 MBSim Development Team
2  *
3  * This library is free software; you can redistribute it and/or
4  * modify it under the terms of the GNU Lesser General Public
5  * License as published by the Free Software Foundation; either
6  * version 2.1 of the License, or (at your option) any later version.
7  *
8  * This library is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11  * Lesser General Public License for more details.
12  *
13  * You should have received a copy of the GNU Lesser General Public
14  * License along with this library; if not, write to the Free Software
15  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16  *
17  * Contact: martin.o.foerg@googlemail.com
18  */
19 
20 #ifndef TIME_DEPENDENT_FUNCTION_H_
21 #define TIME_DEPENDENT_FUNCTION_H_
22 
23 #include "mbsim/functions/function.h"
24 
25 namespace MBSim {
26 
27  template <class Ret>
28  class TimeDependentFunction : public Function<Ret(fmatvec::VecV,double)> {
30  private:
32  int n;
33  public:
34  TimeDependentFunction(Function<Ret(double)> *f_=NULL) : f(f_), n(0) {
35  if(f)
36  f->setParent(this);
37  }
38  ~TimeDependentFunction() { delete f; }
39  int getArg1Size() const { return 0;}
40  int getArg2Size() const { return 1; }
41  Ret operator()(const fmatvec::VecV &arg1, const double &arg2) {return (*f)(arg2); }
42  typename B::DRetDArg1 parDer1(const fmatvec::VecV &arg1, const double &arg2) { return typename B::DRetDArg1(n,getArg1Size()); }
43  typename B::DRetDArg2 parDer2(const fmatvec::VecV &arg1, const double &arg2) {return f->parDer(arg2); }
44  typename B::DDRetDDArg2 parDer2ParDer2(const fmatvec::VecV &arg1, const double &arg2) { return f->parDerParDer(arg2); }
45  typename B::DRetDArg2 parDer2DirDer1(const fmatvec::VecV &arg1Dir, const fmatvec::VecV &arg1, const double &arg2) { return typename B::DRetDArg2(n); }
46  typename B::DDRetDArg1DArg2 parDer1ParDer2(const fmatvec::VecV &arg1, const double &arg2) { return typename B::DDRetDArg1DArg2(n,getArg1Size()); }
47  typename B::DRetDArg1 parDer1DirDer1(const fmatvec::VecV &arg1Dir, const fmatvec::VecV &arg1, const double &arg2) { return typename B::DRetDArg1(n,getArg1Size()); }
48  bool constParDer1() const { return true; }
49  bool constParDer2() const { return f->constParDer(); }
50  void init(Element::InitStage stage) {
52  f->init(stage);
53  if(stage == Element::preInit)
54  n = (*f)(0).rows();
55  }
56  };
57 
58 }
59 
60 #endif
void init(Element::InitStage stage)
plots time series header
Definition: time_dependent_function.h:50
Definition: time_dependent_function.h:28
InitStage
The stages of the initialization.
Definition: element.h:97
Definition: planar_contour.h:31
Definition: element.h:100
virtual void init(InitStage stage)
plots time series header
Definition: element.cc:70

Impressum / Disclaimer / Datenschutz Generated by doxygen 1.8.5 Valid HTML