1#ifndef CLASSIC_TransportMap_CC
2#define CLASSIC_TransportMap_CC
37template <
class T,
int N>
41template <
class T,
int N>
43 for(
int i = 0; i < N; ++i) data[i][i+1] = 1.0;
47template <
class T,
int N>
49 for(
int i = 0; i < N; ++i) {
51 for(
int j = 0; j < size; ++j) data[i][j] = rhs[i][j];
56template <
class T,
int N>
58 for(
int i = 0; i < N; ++i) {
59 for(
int j = 0; j < N; j++) data[i][j+1] = x[i][j];
64template <
class T,
int N>
66 for(
int i = 0; i < N; i++) data[i][0] = x[i];
70template <
class T,
int N>
73 throw CLRangeError(
"TransportMap::getComponent()",
"Index out of range.");
80template <
class T,
int N>
83 throw CLRangeError(
"TransportMap::setComponent()",
"Index out of range.");
90template <
class T,
int N>
inline
95template <
class T,
int N>
inline
101template <
class T,
int N>
107template <
class T,
int N>
110 for(
int i = 0; i < N; i++) z[i] = - data[i];
115template <
class T,
int N>
117 for(
int i = 0; i < N; i++) data[i] *= rhs;
122template <
class T,
int N>
125 for(
int i = 0; i < N; i++) data[i] *= t;
130template <
class T,
int N>
132 for(
int i = 0; i < N; i++) data[i] *= rhs;
137template <
class T,
int N>
139 for(
int i = 0; i < N; i++) data[i] /= rhs;
144template <
class T,
int N>
146 for(
int i = 0; i < N; i++) data[i] += rhs[i];
151template <
class T,
int N>
153 for(
int i = 0; i < N; i++) data[i] -= rhs[i];
158template <
class T,
int N>
160 for(
int i = 0; i < N; i++) data[i] += rhs[i];
165template <
class T,
int N>
167 for(
int i = 0; i < N; i++) data[i] -= rhs[i];
172template <
class T,
int N>
182 for(
int i = 0; i < N; ++i) {
185 for(
int j = 0; j < N; ++j) {
188 for(
int j = N + 1; j <
SIZE; ++j) {
208template <
class T,
int N>
210 for(
int i = 0; i < N; ++i) data[i] = TransportFun<T, N>::makeVariable(i);
214template <
class T,
int N>
218 for(
int i = 0; i < N; ++i) {
219 z[i] = data[i].evaluate(rhs);
226template <
class T,
int N>
230 for(
int i = 0; i < N; i++) {
238template <
class T,
int N>
242 for(
int i = 0; i < N; i++) {
243 for(
int j = 0; j < N; j++) {
244 z(i, j) = data[i][j+1];
252template <
class T,
int N>
257 for(
int n = 0;
n < N; ++
n) {
263 for(
int i = 0; i < N; ++i) {
265 for(
int n = 0;
n < N; ++
n) {
266 z[
n] += data[
n][i+1] * x;
272 for(
int i = 0; i < N; ++i) {
273 for(
int j = i; j < N; ++j) {
276 for(
int n = 0;
n < N; ++
n) {
277 z[
n] += data[
n][k] * x;
286template <
class T,
int N>
293template <
class T,
int N>
298 for(
int i = 0; i < N; ++i) {
299 for(
int j = 0; j < N; ++j) {
300 z[i] += lhs[i][j] * data[j];
311template <
class T,
int N>
315 for(
int i = 0; i < N; ++i) z[i] = lhs[i] * rhs;
320template <
class T,
int N>
324 for(
int i = 0; i < N; ++i) z[i] = lhs * rhs[i];
329template <
class T,
int N>
333 for(
int i = 0; i < N; ++i) z[i] = lhs[i] * rhs;
338template <
class T,
int N>
341 for(
int i = 0; i < N; ++i) z[i] = lhs * rhs[i];
345template <
class T,
int N>
351template <
class T,
int N>
355 for(
int i = 0; i < N; ++i) z[i] = lhs[i] / rhs;
360template <
class T,
int N>
364 for(
int i = 0; i < N; ++i) z[i] = lhs[i] / rhs;
369template <
class T,
int N>
373 for(
int i = 0; i < N; ++i) z[i] = lhs[i] + rhs[i];
378template <
class T,
int N>
382 for(
int i = 0; i < N; ++i) z[i] = lhs[i] - rhs[i];
387template <
class T,
int N>
391 for(
int i = 0; i < N; ++i) z[i] = lhs[i] + rhs[i];
396template <
class T,
int N>
400 for(
int i = 0; i < N; ++i) z[i] = lhs[i] - rhs[i];
405template <
class T,
int N>
409 for(
int i = 0; i < N; ++i) z[i] = lhs[i] + rhs[i];
414template <
class T,
int N>
418 for(
int i = 0; i < N; ++i) z[i] = lhs[i] - rhs[i];
TransportMap< T, N > operator-(const TransportMap< T, N > &lhs, const TransportMap< T, N > &rhs)
Subtract.
TransportMap< T, N > operator*(const TransportMap< T, N > &lhs, const TransportFun< T, N > &rhs)
Multiply.
TransportMap< T, N > operator/(const TransportMap< T, N > &lhs, const TransportFun< T, N > &rhs)
Divide.
TransportMap< T, N > operator+(const TransportMap< T, N > &lhs, const TransportMap< T, N > &rhs)
Add.
T::PETE_Expr_t::PETE_Return_t min(const PETE_Expr< T > &expr, NDIndex< D > &loc)
Vector truncated power series in n variables.
A templated representation of a LU-decomposition.
FMatrix< T, N, N > inverse() const
Get inverse.
A templated representation for vectors.
Transport map with values of type [b]T[/b] in [b]N[/b] variables.
TransportMap & operator*=(const TransportFun< T, N > &rhs)
Multiply and assign.
TransportMap & operator-=(const TransportMap &rhs)
Subtract.
TransportMap & operator+=(const TransportMap &rhs)
Add.
TransportFun< T, N > & operator[](int)
Get component.
void identity()
Set to identity.
TransportMap inverse() const
Inverse.
TransportMap operator-() const
Unary minus.
const TransportFun< T, N > & getComponent(int n) const
Get component.
FMatrix< T, N, N > linearTerms() const
Extract Transport terms at origin.
FVector< T, N > constantTerm() const
TransportMap & operator/=(const TransportFun< T, N > &rhs)
Divide and assign.
void setComponent(int, const TransportFun< T, N > &)
Set component.
TransportMap()
Default constructor.
TransportMap operator+() const
Unary plus.
TransportMap substitute(const FMatrix< T, N, N > &rhs) const
Substitute matrix into map.
TransportMap substituteInto(const FMatrix< T, N, N > &lhs) const
Substitute map into matrix.
TransportFun< T, N > data[N]
Transport function in N variables of type T.
TransportFun inverse() const
Approximate reciprocal value 1/(*this).