1 #ifndef CLASSIC_FTpsData_H
2 #define CLASSIC_FTpsData_H
47 static inline int getOrder(
int index);
50 static inline int getSize(
int order);
57 static inline int orderStart(
int order,
int nv);
60 static inline int orderEnd(
int order);
63 static inline int orderEnd(
int order,
int nv);
69 static inline int orderLength(
int orderL,
int orderH);
82 static void setup(
int order);
91 void build(
int order);
156 template <
int N>
inline
159 return theBook->expon[index];
169 for(
int var = N; var-- > 0;) {
171 index += theBook->binom[order][var];
178 template <
int N>
inline
181 return theBook->expon[index].getOrder();
185 template <
int N>
inline
188 return theBook->bin[order+1];
192 template <
int N>
inline
195 return theBook->bin[order];
199 template <
int N>
inline
202 return theBook->binom[order][N-nv];
206 template <
int N>
inline
209 return theBook->bin[order+1];
213 template <
int N>
inline
216 return theBook->binom[order+1][N-nv];
220 template <
int N>
inline
224 return theBook->binom[order+1][1];
228 template <
int N>
inline
231 return theBook->bin[orderH+1] - theBook->bin[orderL];
235 template <
int N>
inline
238 return theBook->prod[index];
242 template <
int N>
inline
245 return theBook->vrblList[index];
266 template <
int N>
inline
269 return theBook->subTable;
276 theBook->build(order);
304 if(topOrder < order) {
311 for(
int var = N + 1; var-- > 0;) binom[0][var] = 0;
312 for(
int ord = 1; ord <= topOrder + 1; ord++) {
315 for(
int var = N; var-- > 0;)
316 binom[ord][var] = binom[ord-1][var] + binom[ord][var+1];
321 for(
int i = 0; i < topOrder + 2; i++) bin[i] = binom[i][0];
326 topSize = bin[topOrder+1];
331 for(
int index = 1; index < topSize; index++) expon[index][0] = index;
333 for(
int index = 1; index < topSize; index++) {
334 int carry = power[N-1];
337 while(power[lastnz] == 0 && lastnz-- > 0) {}
339 if(lastnz == -1) power[0] = 1 + carry;
342 power[lastnz+1] += 1 + carry;
345 expon[index] = power;
353 for(
int xord = 0; xord <= topOrder; xord++) {
354 int yord = topOrder - xord;
355 int ysize = bin[yord+1];
356 for(
int i = bin[xord]; i < bin[xord+1]; i++) {
359 for(
int j = 0; j <
std::min(i, ysize); j++) {
362 for(
int j = i; j < ysize; j++) {
363 power = expon[i] * expon[j];
366 for(
int vv = N; vv-- > 0;) {
368 ind += binom[ord][vv];
380 int *vars =
new int[topOrder];
382 int j = 1, N1 = N - 1;
384 for(
int ord = 1; ord <= topOrder; ord++) {
387 std::fill(vars, vars + ord,
int(0));
389 int last_j = bin[ord+1];
390 int *vlast = vars + ord;
392 while(++j < last_j) {
395 while(*--vi == N1) {};
397 std::fill(vi, vlast, k);
411 fillSubst(0, 1, power, next);
420 for(
int v = var; v < N; v++) {
425 for(
int vv = N; vv-- > 0;) {
427 ind += binom[ord][vv];
433 if(order < topOrder) fillSubst(v, order + 1, power, next);
439 #endif // CLASSIC_FTpsData_H
static const FMonomial< N > & getExponents(int index)
Substitution for Tps<T>.
static int orderEnd(int order)
and give any other recipients of the Program a copy of this License along with the Program You may charge a fee for the physical act of transferring a copy
void operator=(const FTpsData &)
static int orderLength(int order)
static int getOrder(int index)
static int orderStart(int order)
static int getIndex(const FMonomial< N > &)
clearpage the user may choose between constant or variable radius This model includes fringe fields begin
T::PETE_Expr_t::PETE_Return_t min(const PETE_Expr< T > &expr, NDIndex< D > &loc)
static int getSize(int order)
T::PETE_Expr_t::PETE_Return_t prod(const PETE_Expr< T > &expr)
Array1D< FMonomial< N > > expon
Array1D< int > Giorgilli2ExponIndex
Array1D< Array1D< int > > prod
static const Array1D< TpsSubstitution > & getSubTable()
static const Array1D< int > & getVariableList(int index)
static FTpsData< N > * theBook
Internal utility class for FTps<T,N> class.
void fillSubst(int var, int order, FMonomial< N > &pow, int &next)
Array1D< Array1D< int > > vrblList
Tps< T > pow(const Tps< T > &x, int y)
Integer power.
Array1D< TpsSubstitution > subTable
static const Array1D< int > & getProductArray(int index)
Representation of the exponents for a monomial with fixed dimension.
Array1D< FArray1D< int, N+1 > > binom
static void setup(int order)