GeoModel - GeoModelCore
AbsFunction.cpp
1 //==========================================================================//
2 // Imported from the QAT library (qat.pitt.edu) by the copyright holder //
3 // Joe Boudreau. Software licensed under the terms and conditions of the //
4 // GNU Lesser Public License v3. //
5 //==========================================================================//
6 
7 #include "GeoGenericFunctions/AbsFunction.h"
8 #include "GeoGenericFunctions/ConstTimesFunction.h"
9 #include "GeoGenericFunctions/ConstOverFunction.h"
10 #include "GeoGenericFunctions/ConstPlusFunction.h"
11 #include "GeoGenericFunctions/ConstMinusFunction.h"
12 #include "GeoGenericFunctions/FunctionSum.h"
13 #include "GeoGenericFunctions/FunctionDifference.h"
14 #include "GeoGenericFunctions/FunctionProduct.h"
15 #include "GeoGenericFunctions/FunctionQuotient.h"
16 #include "GeoGenericFunctions/FunctionNegation.h"
17 #include "GeoGenericFunctions/FunctionDirectProduct.h"
18 #include "GeoGenericFunctions/FixedConstant.h"
19 #include "GeoGenericFunctions/FunctionNumDeriv.h"
20 #include "GeoGenericFunctions/Variable.h"
21 #include "GeoGenericFunctions/FunctionNoop.h"
22 #include "GeoGenericFunctions/ParameterComposition.h"
23 #include <stdexcept>
24 namespace GeoGenfun {
25 AbsFunction::AbsFunction() {
26 }
27 
28 AbsFunction::~AbsFunction() {
29 }
30 
31 AbsFunction::AbsFunction(const AbsFunction &) {
32 }
33 
34 FunctionComposition AbsFunction::operator () (const AbsFunction &function) const {
35  return FunctionComposition(this, &function);
36 }
37 
38 ParameterComposition AbsFunction::operator() (const AbsParameter &p) const {
39  return ParameterComposition(this, &p);
40 }
41 
42 Derivative AbsFunction::partial(unsigned int index) const {
43  FunctionNumDeriv fPrime(this,index);
44  return Derivative(&fPrime);
45 }
46 
47 
48 Derivative AbsFunction::partial(const Variable &v) const {
49  return partial(v.index());
50 }
51 
52 Derivative AbsFunction::prime() const {
53  if (dimensionality()!=1) throw std::runtime_error("AbsFunction::prime() called for a function of more than one variable");
54  return partial(0);
55 }
56 
57 FunctionSum operator + (const AbsFunction & a, const AbsFunction & b) {
58  return FunctionSum(&a,&b);
59 }
60 
61 FunctionDifference operator - (const AbsFunction & a, const AbsFunction & b) {
62  return FunctionDifference(&a,&b);
63 }
64 
65 FunctionProduct operator * (const AbsFunction & a, const AbsFunction & b) {
66  return FunctionProduct(&a,&b);
67 }
68 
69 FunctionQuotient operator / (const AbsFunction & a, const AbsFunction & b) {
70  return FunctionQuotient(&a,&b);
71 }
72 
73 
74 FunctionNegation operator - (const AbsFunction & a) {
75  return FunctionNegation(&a);
76 }
77 
78 unsigned int AbsFunction::dimensionality() const {
79  return 1;
80 }
81 
82 FunctionDirectProduct operator % (const AbsFunction & a, const AbsFunction & b) {
83  return FunctionDirectProduct(&a,&b);
84 }
85 
86 ConstTimesFunction operator * (const AbsFunction &op2, double c) {
87  return ConstTimesFunction(c, &op2);
88 }
89 
90 ConstPlusFunction operator + (const AbsFunction &op2, double c) {
91  return ConstPlusFunction(c,&op2);
92 }
93 
94 ConstPlusFunction operator - (const AbsFunction &op2, double c) {
95  return ConstPlusFunction(-c, &op2);
96 }
97 
98 ConstTimesFunction operator / (const AbsFunction &op2, double c) {
99  return ConstTimesFunction(1/c,&op2);
100 }
101 
102 
103 ConstTimesFunction operator * (double c, const AbsFunction &op2) {
104  return ConstTimesFunction(c,&op2);
105 }
106 
107 ConstPlusFunction operator + (double c, const AbsFunction &op2) {
108  return ConstPlusFunction(c,&op2);
109 }
110 
111 ConstMinusFunction operator - (double c, const AbsFunction &op2) {
112  return ConstMinusFunction(c,&op2);
113 }
114 
115 ConstOverFunction operator / (double c, const AbsFunction &op2) {
116  return ConstOverFunction(c,&op2);
117 }
118 
119 
120 FunctionTimesParameter operator * (const AbsFunction &f, const AbsParameter & p) {
121  return FunctionTimesParameter(&p, &f);
122 }
123 
124 FunctionPlusParameter operator + (const AbsFunction &f, const AbsParameter & p) {
125  return FunctionPlusParameter(&p, &f);
126 }
127 
128 FunctionPlusParameter operator - (const AbsFunction &f, const AbsParameter & p) {
129  GENPARAMETER MinusP = -p;
130  return FunctionPlusParameter(&MinusP, &f);
131 
132 }
133 
134 FunctionTimesParameter operator / (const AbsFunction &f, const AbsParameter & p) {
135  GENPARAMETER oneOverP = 1.0/p;
136  return FunctionTimesParameter(&oneOverP, &f);
137 }
138 
139 FunctionTimesParameter operator * (const AbsParameter & p, const AbsFunction &f) {
140  return FunctionTimesParameter(&p, &f);
141 }
142 
143 FunctionPlusParameter operator + (const AbsParameter & p, const AbsFunction &f) {
144  return FunctionPlusParameter(&p, &f);
145 }
146 
147 FunctionPlusParameter operator - (const AbsParameter & p, const AbsFunction &f) {
148  GENFUNCTION MinusF = -f;
149  return FunctionPlusParameter(&p, &MinusF);
150 }
151 
152 FunctionTimesParameter operator / (const AbsParameter & p, const AbsFunction &f) {
153  GENFUNCTION oneOverF = 1.0/f;
154  return FunctionTimesParameter(&p, &oneOverF);
155 }
156 } // namespace GeoGenfun
Definition: Abs.h:15