1 #ifndef CLASSIC_FTpsData_H
2 #define CLASSIC_FTpsData_H
28 #define DEBUG_FTpsData_H
49 static inline int getOrder(
int index);
52 static inline int getSize(
int order);
59 static inline int orderStart(
int order,
int nv);
62 static inline int orderEnd(
int order);
65 static inline int orderEnd(
int order,
int nv);
71 static inline int orderLength(
int orderL,
int orderH);
84 static void setup(
int order);
93 void build(
int order);
158 template <
int N>
inline
161 return theBook->expon[index];
171 for(
int var = N; var-- > 0;) {
173 index += theBook->binom[order][var];
180 template <
int N>
inline
183 return theBook->expon[index].getOrder();
187 template <
int N>
inline
190 return theBook->bin[order+1];
194 template <
int N>
inline
197 return theBook->bin[order];
201 template <
int N>
inline
204 return theBook->binom[order][N-nv];
208 template <
int N>
inline
211 return theBook->bin[order+1];
215 template <
int N>
inline
218 return theBook->binom[order+1][N-nv];
222 template <
int N>
inline
226 return theBook->binom[order+1][1];
230 template <
int N>
inline
233 return theBook->bin[orderH+1] - theBook->bin[orderL];
237 template <
int N>
inline
240 return theBook->prod[index];
244 template <
int N>
inline
247 return theBook->vrblList[index];
268 template <
int N>
inline
271 return theBook->subTable;
278 theBook->build(order);
306 if(topOrder < order) {
314 for(
int var = N + 1; var-- > 0;) binom[0][var] = 0;
315 for(
int ord = 1; ord <= topOrder + 1; ord++) {
318 for(
int var = N; var-- > 0;)
319 binom[ord][var] = binom[ord-1][var] + binom[ord][var+1];
324 for(
int i = 0; i < topOrder + 2; i++) bin[i] = binom[i][0];
329 topSize = bin[topOrder+1];
334 for(
int index = 1; index < topSize; index++) expon[index][0] = index;
336 for(
int index = 1; index < topSize; index++) {
337 int carry = power[N-1];
340 while(power[lastnz] == 0 && lastnz-- > 0) {}
342 if(lastnz == -1) power[0] = 1 + carry;
345 power[lastnz+1] += 1 + carry;
348 expon[index] = power;
356 for(
int xord = 0; xord <= topOrder; xord++) {
357 int yord = topOrder - xord;
358 int ysize = bin[yord+1];
359 for(
int i = bin[xord]; i < bin[xord+1]; i++) {
362 for(
int j = 0; j <
std::min(i, ysize); j++) {
366 for(
int j = i; j < ysize; j++) {
367 power = expon[i] * expon[j];
370 for(
int vv = N; vv-- > 0;) {
372 ind += binom[ord][vv];
385 int *vars =
new int[topOrder];
387 int j = 1, N1 = N - 1;
389 for(
int ord = 1; ord <= topOrder; ord++) {
392 std::fill(vars, vars + ord,
int(0));
394 int last_j = bin[ord+1];
395 int *vlast = vars + ord;
397 while(++j < last_j) {
400 while(*--vi == N1) {};
402 std::fill(vi, vlast, k);
405 std::copy(vars, vars + ord, vrblList[j].begin());
416 fillSubst(0, 1, power, next);
425 for(
int v = var; v < N; v++) {
430 for(
int vv = N; vv-- > 0;) {
432 ind += binom[ord][vv];
438 if(order < topOrder) fillSubst(v, order + 1, power, next);
444 #endif // CLASSIC_FTpsData_H
static const Array1D< int > & getProductArray(int index)
static int orderLength(int order)
static const Array1D< TpsSubstitution > & getSubTable()
Representation of the exponents for a monomial with fixed dimension.
static int orderStart(int order)
static void setup(int order)
Array1D< FMonomial< N > > expon
static const Array1D< int > & getVariableList(int index)
void fillSubst(int var, int order, FMonomial< N > &pow, int &next)
Array1D< Array1D< int > > vrblList
static int orderEnd(int order)
static int getSize(int order)
static FTpsData< N > * theBook
Internal utility class for FTps<T,N> class.
Array1D< TpsSubstitution > subTable
static int getOrder(int index)
Tps< T > pow(const Tps< T > &x, int y)
Integer power.
static int getIndex(const FMonomial< N > &)
void operator=(const FTpsData &)
static const FMonomial< N > & getExponents(int index)
Substitution for Tps<T>.
Array1D< int > Giorgilli2ExponIndex
T::PETE_Expr_t::PETE_Return_t prod(const PETE_Expr< T > &expr)
Array1D< Array1D< int > > prod
T::PETE_Expr_t::PETE_Return_t min(const PETE_Expr< T > &expr, NDIndex< D > &loc)
Array1D< FArray1D< int, N+1 > > binom