![]() |
NFFT
3.5.0
|
Implementation file for the FPT module. More...
#include "config.h"
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <math.h>
#include "nfft3.h"
#include "infft.h"
#include "fpt.h"
Go to the source code of this file.
Macros | |
#define | K_START_TILDE(x, y) (MAX(MIN(x,y-2),0)) |
If defined, perform critical computations in three-term recurrence always in long double instead of using adaptive version that starts in double and switches to long double if required. More... | |
#define | K_END_TILDE(x, y) MIN(x,y-1) |
Maximum degree at top of a cascade. | |
#define | FIRST_L(x, y) (LRINT(floor((x)/(double)y))) |
Index of first block of four functions at level. | |
#define | LAST_L(x, y) (LRINT(ceil(((x)+1)/(double)y))-1) |
Index of last block of four functions at level. | |
#define | N_TILDE(y) (y-1) |
#define | IS_SYMMETRIC(x, y, z) (x >= ((y-1.0)/z)) |
#define | FPT_BREAK_EVEN 4 |
#define | ABUVXPWY_SYMMETRIC(NAME, S1, S2) |
#define | ABUVXPWY_SYMMETRIC_1(NAME, S1) |
#define | ABUVXPWY_SYMMETRIC_2(NAME, S1) |
#define | FPT_DO_STEP(NAME, M1_FUNCTION, M2_FUNCTION) |
#define | FPT_DO_STEP_TRANSPOSED(NAME, M1_FUNCTION, M2_FUNCTION) |
Functions | |
static void | abuvxpwy (double a, double b, double _Complex *u, double _Complex *x, double *v, double _Complex *y, double *w, int n) |
static void | abuvxpwy_symmetric1 (double a, double b, double _Complex *u, double _Complex *x, double *v, double _Complex *y, double *w, int n) |
static void | abuvxpwy_symmetric2 (double a, double b, double _Complex *u, double _Complex *x, double *v, double _Complex *y, double *w, int n) |
static void | abuvxpwy_symmetric1_1 (double a, double b, double _Complex *u, double _Complex *x, double *v, double _Complex *y, int n, double *xx) |
static void | abuvxpwy_symmetric1_2 (double a, double b, double _Complex *u, double _Complex *x, double *v, double _Complex *y, int n, double *xx) |
static void | abuvxpwy_symmetric2_1 (double a, double b, double _Complex *u, double _Complex *x, double _Complex *y, double *w, int n, double *xx) |
static void | abuvxpwy_symmetric2_2 (double a, double b, double _Complex *u, double _Complex *x, double _Complex *y, double *w, int n, double *xx) |
static void | auvxpwy (double a, double _Complex *u, double _Complex *x, double *v, double _Complex *y, double *w, int n) |
static void | auvxpwy_symmetric (double a, double _Complex *u, double _Complex *x, double *v, double _Complex *y, double *w, int n) |
static void | auvxpwy_symmetric_1 (double a, double _Complex *u, double _Complex *x, double *v, double _Complex *y, double *w, int n, double *xx) |
static void | auvxpwy_symmetric_2 (double a, double _Complex *u, double _Complex *x, double *v, double _Complex *y, double *w, int n, double *xx) |
static void | fpt_do_step (double _Complex *a, double _Complex *b, double *a11, double *a12, double *a21, double *a22, double g, int tau, fpt_set set) |
static void | fpt_do_step_symmetric (double _Complex *a, double _Complex *b, double *a11, double *a12, double *a21, double *a22, double g, int tau, fpt_set set) |
static void | fpt_do_step_symmetric_u (double _Complex *a, double _Complex *b, double *a11, double *a12, double *a21, double *a22, double *x, double gam, int tau, fpt_set set) |
static void | fpt_do_step_symmetric_l (double _Complex *a, double _Complex *b, double *a11, double *a12, double *a21, double *a22, double *x, double gam, int tau, fpt_set set) |
static void | fpt_do_step_t (double _Complex *a, double _Complex *b, double *a11, double *a12, double *a21, double *a22, double g, int tau, fpt_set set) |
static void | fpt_do_step_t_symmetric (double _Complex *a, double _Complex *b, double *a11, double *a12, double *a21, double *a22, double g, int tau, fpt_set set) |
static void | fpt_do_step_t_symmetric_u (double _Complex *a, double _Complex *b, double *a11, double *a12, double *x, double gam, int tau, fpt_set set) |
static void | fpt_do_step_t_symmetric_l (double _Complex *a, double _Complex *b, double *a21, double *a22, double *x, double gam, int tau, fpt_set set) |
static void | eval_clenshaw (const double *x, double *y, int size, int k, const double *alpha, const double *beta, const double *gam) |
static void | eval_clenshaw2 (const double *x, double *z, double *y, int size1, int size, int k, const double *alpha, const double *beta, const double *gam) |
static int | eval_clenshaw_thresh2 (const double *x, double *z, double *y, int size, int k, const double *alpha, const double *beta, const double *gam, const double threshold) |
static void | eval_sum_clenshaw_fast (const int N, const int M, const double _Complex *a, const double *x, double _Complex *y, const double *alpha, const double *beta, const double *gam, const double lambda) |
static void | eval_sum_clenshaw_transposed (int N, int M, double _Complex *a, double *x, double _Complex *y, double _Complex *temp, double *alpha, double *beta, double *gam, double lambda) |
Clenshaw algorithm. More... | |
static void | eval_sum_clenshaw_transposed_ld (int N, int M, double _Complex *a, double *x, double _Complex *y, double _Complex *temp, double *alpha, double *beta, double *gam, double lambda) |
fpt_set | fpt_init (const int M, const int t, const unsigned int flags) |
void | fpt_precompute_1 (fpt_set set, const int m, int k_start) |
void | fpt_precompute_2 (fpt_set set, const int m, double *alpha, double *beta, double *gam, int k_start, const double threshold) |
void | fpt_precompute (fpt_set set, const int m, double *alpha, double *beta, double *gam, int k_start, const double threshold) |
void | fpt_trafo_direct (fpt_set set, const int m, const double _Complex *x, double _Complex *y, const int k_end, const unsigned int flags) |
void | fpt_trafo (fpt_set set, const int m, const double _Complex *x, double _Complex *y, const int k_end, const unsigned int flags) |
void | fpt_transposed_direct (fpt_set set, const int m, double _Complex *x, double _Complex *y, const int k_end, const unsigned int flags) |
void | fpt_transposed (fpt_set set, const int m, double _Complex *x, double _Complex *y, const int k_end, const unsigned int flags) |
void | fpt_finalize (fpt_set set) |
Implementation file for the FPT module.
Definition in file fpt.c.
#define K_START_TILDE | ( | x, | |
y | |||
) | (MAX(MIN(x,y-2),0)) |
If defined, perform critical computations in three-term recurrence always in long double instead of using adaptive version that starts in double and switches to long double if required.
Minimum degree at top of a cascade
Definition at line 48 of file fpt.c.
Referenced by fpt_init(), fpt_precompute(), and fpt_transposed().
#define ABUVXPWY_SYMMETRIC | ( | NAME, | |
S1, | |||
S2 | |||
) |
#define ABUVXPWY_SYMMETRIC_1 | ( | NAME, | |
S1 | |||
) |
#define ABUVXPWY_SYMMETRIC_2 | ( | NAME, | |
S1 | |||
) |
#define FPT_DO_STEP_TRANSPOSED | ( | NAME, | |
M1_FUNCTION, | |||
M2_FUNCTION | |||
) |
|
static |
Clenshaw algorithm.
Evaluates a sum of real-valued functions
obeying a three-term recurrence relation
with initial conditions ,
for given double _Complex coefficients
at given nodes
,
.
Definition at line 717 of file fpt.c.
Referenced by fpt_precompute().