00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00024 #ifndef __NFFT3_H__
00025 #define __NFFT3_H__
00026
00028 #include <fftw3.h>
00029
00030
00031 #include "nfft3conf.h"
00032
00033 #ifdef __cplusplus
00034 extern "C"
00035 {
00036 #endif
00037
00038
00039 extern void *nfft_malloc(size_t n);
00040 extern void nfft_free(void *p);
00041 extern void nfft_die(const char *s);
00042
00043
00044 typedef void *(*nfft_malloc_type_function) (size_t n);
00045 typedef void (*nfft_free_type_function) (void *p);
00046 typedef void (*nfft_die_type_function) (const char *errString);
00047 extern nfft_malloc_type_function nfft_malloc_hook;
00048 extern nfft_free_type_function nfft_free_hook;
00049 extern nfft_die_type_function nfft_die_hook;
00050
00052 #define MACRO_MV_PLAN(float_type) \
00053 int N_total; \
00055 int M_total; \
00056 \
00057 float_type *f_hat; \
00059 float_type *f; \
00061 void (*mv_trafo)(void*); \
00062 void (*mv_adjoint)(void*); \
00063
00064 typedef struct
00065 {
00066 MACRO_MV_PLAN(fftw_complex)
00067 } mv_plan_complex;
00068
00069 typedef struct
00070 {
00071 MACRO_MV_PLAN(double)
00072 } mv_plan_double;
00073
00074
00075
00076
00077
00125
00126
00137 #define PRE_PHI_HUT (1U<< 0)
00138
00150 #define FG_PSI (1U<< 1)
00151
00167 #define PRE_LIN_PSI (1U<< 2)
00168
00180 #define PRE_FG_PSI (1U<< 3)
00181
00192 #define PRE_PSI (1U<< 4)
00193
00205 #define PRE_FULL_PSI (1U<< 5)
00206
00216 #define MALLOC_X (1U<< 6)
00217
00228 #define MALLOC_F_HAT (1U<< 7)
00229
00239 #define MALLOC_F (1U<< 8)
00240
00250 #define FFT_OUT_OF_PLACE (1U<< 9)
00251
00261 #define FFTW_INIT (1U<< 10)
00262
00276 #define PRE_ONE_PSI (PRE_LIN_PSI| PRE_FG_PSI| PRE_PSI| PRE_FULL_PSI)
00277
00279 typedef struct
00280 {
00281
00282 MACRO_MV_PLAN(fftw_complex)
00283
00284 int d;
00285 int *N;
00286 double *sigma;
00287 int *n;
00290 int n_total;
00291 int m;
00297 double *b;
00299 int K;
00303 unsigned nfft_flags;
00310 unsigned fftw_flags;
00314 double *x;
00317 double MEASURE_TIME_t[3];
00320
00321 fftw_plan my_fftw_plan1;
00322 fftw_plan my_fftw_plan2;
00324 double **c_phi_inv;
00327 double *psi;
00330 int *psi_index_g;
00332 int *psi_index_f;
00335 fftw_complex *g;
00338 fftw_complex *g_hat;
00341 fftw_complex *g1;
00342 fftw_complex *g2;
00344 double *spline_coeffs;
00347 } nfft_plan;
00348
00349
00357 void ndft_trafo(nfft_plan *ths);
00358
00366 void ndft_adjoint(nfft_plan *ths);
00367
00375 void nfft_trafo(nfft_plan *ths);
00376 void nfft_trafo_1d(nfft_plan *ths);
00377 void nfft_trafo_2d(nfft_plan *ths);
00378 void nfft_trafo_3d(nfft_plan *ths);
00379
00387 void nfft_adjoint(nfft_plan *ths);
00388 void nfft_adjoint_1d(nfft_plan *ths);
00389 void nfft_adjoint_2d(nfft_plan *ths);
00390 void nfft_adjoint_3d(nfft_plan *ths);
00391
00401 void nfft_init_1d(nfft_plan *ths, int N1, int M);
00402
00413 void nfft_init_2d(nfft_plan *ths, int N1, int N2, int M);
00414
00426 void nfft_init_3d(nfft_plan *ths, int N1, int N2, int N3, int M);
00427
00438 void nfft_init(nfft_plan *ths, int d, int *N, int M);
00439
00453 void nfft_init_advanced(nfft_plan *ths, int d, int *N, int M,
00454 unsigned nfft_flags_on, unsigned nfft_flags_off);
00455
00470 void nfft_init_guru(nfft_plan *ths, int d, int *N, int M, int *n,
00471 int m, unsigned nfft_flags, unsigned fftw_flags);
00472
00473
00486 void nfft_precompute_one_psi(nfft_plan *ths);
00487
00492 void nfft_precompute_full_psi(nfft_plan *ths);
00493
00498 void nfft_precompute_psi(nfft_plan *ths);
00499
00504 void nfft_precompute_lin_psi(nfft_plan *ths);
00505
00513 void nfft_check(nfft_plan *ths);
00514
00522 void nfft_finalize(nfft_plan *ths);
00523
00527
00528
00529
00530
00537 #ifdef HAVE_NFCT
00538
00540 typedef struct
00541 {
00542
00543 MACRO_MV_PLAN(double)
00544
00545 int d;
00546 int *N;
00547 int *n;
00548 double *sigma;
00549 int m;
00551 double nfct_full_psi_eps;
00552 double *b;
00554 unsigned nfct_flags;
00555 unsigned fftw_flags;
00557 double *x;
00559 double MEASURE_TIME_t[3];
00562 fftw_plan my_fftw_r2r_plan;
00563 fftw_r2r_kind *r2r_kind;
00565 double **c_phi_inv;
00566 double *psi;
00567 int size_psi;
00568 int *psi_index_g;
00569 int *psi_index_f;
00571 double *g;
00572 double *g_hat;
00573 double *g1;
00574 double *g2;
00576 double *spline_coeffs;
00578 } nfct_plan;
00579
00580
00590 void nfct_init_1d( nfct_plan *ths_plan, int N0, int M_total);
00591
00602 void nfct_init_2d( nfct_plan *ths_plan, int N0, int N1, int M_total);
00603
00615 void nfct_init_3d( nfct_plan *ths_plan, int N0, int N1, int N2, int M_total);
00616
00627 void nfct_init( nfct_plan *ths_plan, int d, int *N, int M_total);
00628
00643 void nfct_init_guru( nfct_plan *ths_plan, int d, int *N, int M_total, int *n,
00644 int m, unsigned nfct_flags, unsigned fftw_flags);
00645
00655 void nfct_precompute_psi( nfct_plan *ths_plan);
00656
00657
00666 void nfct_trafo( nfct_plan *ths_plan);
00667
00676 void ndct_trafo( nfct_plan *ths_plan);
00677
00686 void nfct_adjoint( nfct_plan *ths_plan);
00687
00696 void ndct_adjoint( nfct_plan *ths_plan);
00697
00705 void nfct_finalize( nfct_plan *ths_plan);
00706
00716 double nfct_phi_hut( nfct_plan *ths_plan, int k, int d);
00717
00727 double nfct_phi ( nfct_plan *ths_plan, double x, int d);
00728
00736 int nfct_fftw_2N( int n);
00737
00745 int nfct_fftw_2N_rev(int n);
00746
00747 #endif
00748
00749
00750
00751 #ifdef HAVE_NFST
00752
00754 typedef struct
00755 {
00756
00757 MACRO_MV_PLAN(double)
00758
00759 int d;
00760 int *N;
00761 int *n;
00762 double *sigma;
00763 int m;
00765 double nfst_full_psi_eps;
00766 double *b;
00768 unsigned nfst_flags;
00769 unsigned fftw_flags;
00771 double *x;
00773 double MEASURE_TIME_t[3];
00776 fftw_plan my_fftw_r2r_plan;
00777 fftw_r2r_kind *r2r_kind;
00779 double **c_phi_inv;
00780 double *psi;
00781 int size_psi;
00782 int *psi_index_g;
00783 int *psi_index_f;
00786 double *g;
00787 double *g_hat;
00788 double *g1;
00789 double *g2;
00791 double *spline_coeffs;
00793 } nfst_plan;
00794
00795
00805 void nfst_init_1d( nfst_plan *ths_plan, int N0, int M_total);
00806
00817 void nfst_init_2d( nfst_plan *ths_plan, int N0, int N1, int M_total);
00818
00830 void nfst_init_3d( nfst_plan *ths_plan, int N0, int N1, int N2, int M_total);
00831
00842 void nfst_init( nfst_plan *ths_plan, int d, int *N, int M_total);
00843
00856 void nfst_init_m( nfst_plan *ths_plan, int d, int *N, int M_total, int m);
00857
00872 void nfst_init_guru( nfst_plan *ths_plan, int d, int *N, int M_total, int *n,
00873 int m, unsigned nfst_flags, unsigned fftw_flags);
00874
00884 void nfst_precompute_psi( nfst_plan *ths_plan);
00885
00894 void nfst_trafo( nfst_plan *ths_plan);
00895
00904 void ndst_trafo( nfst_plan *ths_plan);
00905
00906
00907
00916 void nfst_adjoint( nfst_plan *ths_plan);
00917
00926 void ndst_adjoint( nfst_plan *ths_plan);
00927
00935 void nfst_finalize( nfst_plan *ths_plan);
00936
00943 void nfst_full_psi( nfst_plan *ths_plan, double eps);
00944
00954 double nfst_phi_hut( nfst_plan *ths_plan, int k, int d);
00955
00965 double nfst_phi ( nfst_plan *ths_plan, double x, int d);
00966
00974 int nfst_fftw_2N( int n);
00975
00983 int nfst_fftw_2N_rev( int n);
00984
00985 #endif
00986
00990
00991
00992
00993
01000 #ifdef HAVE_NNFFT
01001
01010 #define MALLOC_V (1U<< 11)
01011
01013 typedef struct
01014 {
01015
01016 MACRO_MV_PLAN(fftw_complex)
01017
01018 int d;
01019 double *sigma;
01020 double *a;
01021 int *N;
01022 int *N1;
01023 int *aN1;
01024 int m;
01025 double *b;
01026 int K;
01028 int aN1_total;
01030 nfft_plan *direct_plan;
01031 unsigned nnfft_flags;
01032 int *n;
01034 double *x;
01035 double *v;
01037 double *c_phi_inv;
01038 double *psi;
01039 int size_psi;
01040 int *psi_index_g;
01041 int *psi_index_f;
01042 fftw_complex *F;
01043
01044 double *spline_coeffs;
01046 } nnfft_plan;
01047
01048
01060 void nnfft_init(nnfft_plan *ths_plan, int d, int N_total, int M_total, int *N);
01061
01076 void nnfft_init_guru(nnfft_plan *ths_plan, int d, int N_total, int M_total,
01077 int *N, int *N1, int m, unsigned nnfft_flags);
01078
01090 void nndft_trafo(nnfft_plan *ths_plan);
01091
01103 void nndft_adjoint(nnfft_plan *ths_plan);
01104
01116 void nnfft_trafo(nnfft_plan *ths_plan);
01117
01129 void nnfft_adjoint(nnfft_plan *ths_plan);
01130
01142 void nnfft_precompute_lin_psi(nnfft_plan *ths_plan);
01143
01156 void nnfft_precompute_psi(nnfft_plan *ths_plan);
01157
01171 void nnfft_precompute_full_psi(nnfft_plan *ths_plan);
01172
01185 void nnfft_precompute_phi_hut(nnfft_plan *ths_plan);
01186
01194 void nnfft_finalize(nnfft_plan *ths_plan);
01195
01196 #endif
01197
01201
01202
01203
01204
01211 #ifdef HAVE_NSFFT
01212
01221 #define NSDFT (1U<< 12)
01222
01224 typedef struct
01225 {
01226 MACRO_MV_PLAN(fftw_complex)
01227
01228 int d;
01229 int J;
01233 int sigma;
01235 unsigned flags;
01237 int *index_sparse_to_full;
01240 int r_act_nfft_plan;
01241 nfft_plan *act_nfft_plan;
01242 nfft_plan *center_nfft_plan;
01244 fftw_plan* set_fftw_plan1;
01245 fftw_plan* set_fftw_plan2;
01247 nfft_plan *set_nfft_plan_1d;
01248 nfft_plan *set_nfft_plan_2d;
01250 double *x_transposed;
01251 double *x_102,*x_201,*x_120,*x_021;
01253 } nsfft_plan;
01254
01265 void nsdft_trafo(nsfft_plan *ths);
01266
01277 void nsdft_adjoint(nsfft_plan *ths);
01278
01290 void nsfft_trafo(nsfft_plan *ths);
01291
01303 void nsfft_adjoint(nsfft_plan *ths);
01304
01312 void nsfft_cp(nsfft_plan *ths, nfft_plan *ths_nfft);
01313
01321 void nsfft_init_random_nodes_coeffs(nsfft_plan *ths);
01322
01335 void nsfft_init(nsfft_plan *ths, int d, int J, int M, int m, unsigned flags);
01336
01344 void nsfft_finalize(nsfft_plan *ths);
01345
01346 #endif
01347
01351
01352
01353
01354
01359 #ifdef HAVE_MRI
01360
01364 typedef struct
01365 {
01366
01367 MACRO_MV_PLAN(fftw_complex)
01368
01369 nfft_plan plan;
01370
01371 int N3;
01372 double sigma3;
01373 double *t;
01374 double *w;
01375 } mri_inh_2d1d_plan;
01376
01380 typedef struct
01381 {
01382
01383 MACRO_MV_PLAN(fftw_complex)
01384
01385 nfft_plan plan;
01386
01387 int N3;
01388 double sigma3;
01389 double *t;
01390 double *w;
01391 } mri_inh_3d_plan;
01392
01393
01406 void mri_inh_2d1d_trafo(mri_inh_2d1d_plan *ths);
01407
01420 void mri_inh_2d1d_adjoint(mri_inh_2d1d_plan *ths);
01421
01435 void mri_inh_2d1d_init_guru(mri_inh_2d1d_plan *ths, int *N, int M, int *n,
01436 int m, double sigma, unsigned nfft_flags, unsigned fftw_flags);
01437
01445 void mri_inh_2d1d_finalize(mri_inh_2d1d_plan *ths);
01446
01459 void mri_inh_3d_trafo(mri_inh_3d_plan *ths);
01460
01473 void mri_inh_3d_adjoint(mri_inh_3d_plan *ths);
01474
01475 void mri_inh_3d_init_guru(mri_inh_3d_plan *ths, int *N, int M, int *n,
01476 int m, double sigma, unsigned nfft_flags, unsigned fftw_flags);
01477
01485 void mri_inh_3d_finalize(mri_inh_3d_plan *ths);
01486
01487 #endif
01488
01492
01493
01494
01495
01747 #ifdef HAVE_NFSFT
01748
01749
01750
01770 #define NFSFT_NORMALIZED (1U << 0)
01771
01782 #define NFSFT_USE_NDFT (1U << 1)
01783
01795 #define NFSFT_USE_DPT (1U << 2)
01796
01810 #define NFSFT_MALLOC_X (1U << 3)
01811
01825 #define NFSFT_MALLOC_F_HAT (1U << 5)
01826
01840 #define NFSFT_MALLOC_F (1U << 6)
01841
01852 #define NFSFT_PRESERVE_F_HAT (1U << 7)
01853
01865 #define NFSFT_PRESERVE_X (1U << 8)
01866
01877 #define NFSFT_PRESERVE_F (1U << 9)
01878
01888 #define NFSFT_DESTROY_F_HAT (1U << 10)
01889
01900 #define NFSFT_DESTROY_X (1U << 11)
01901
01911 #define NFSFT_DESTROY_F (1U << 12)
01912
01913
01914
01924 #define NFSFT_NO_DIRECT_ALGORITHM (1U << 13)
01925
01935 #define NFSFT_NO_FAST_ALGORITHM (1U << 14)
01936
01944 #define NFSFT_ZERO_F_HAT (1U << 16)
01945
01946
01947
01956 #define NFSFT_INDEX(k,n,plan) ((2*(plan)->N+2)*((plan)->N-n+1)+(plan)->N+k+1)
01957
01962 #define NFSFT_F_HAT_SIZE(N) ((2*N+2)*(2*N+2))
01963
01965 typedef struct
01966 {
01968 MACRO_MV_PLAN(fftw_complex)
01969
01970
01971 int N;
01972 double *x;
01979
01980
01982 int t;
01984 unsigned int flags;
01985 nfft_plan plan_nfft;
01986 fftw_complex *f_hat_intern;
01988 } nfsft_plan;
01989
01999 void nfsft_init(nfsft_plan *plan, int N, int M);
02000
02011 void nfsft_init_advanced(nfsft_plan* plan, int N, int M, unsigned int
02012 nfsft_flags);
02013
02025 void nfsft_init_guru(nfsft_plan *plan, int N, int M, unsigned int nfsft_flags,
02026 unsigned int nfft_flags, int nfft_cutoff);
02027
02041 void nfsft_precompute(int N, double kappa, unsigned int nfsft_flags,
02042 unsigned int fpt_flags);
02043
02049 void nfsft_forget(void);
02050
02062 void ndsft_trafo(nfsft_plan* plan);
02063
02076 void ndsft_adjoint(nfsft_plan* plan);
02077
02089 void nfsft_trafo(nfsft_plan* plan);
02090
02103 void nfsft_adjoint(nfsft_plan* plan);
02104
02112 void nfsft_finalize(nfsft_plan* plan);
02113
02114 void nfsft_precompute_x(nfsft_plan *plan);
02115
02116 #endif
02117
02121
02122
02123
02124
02133 #ifdef HAVE_FPT
02134
02135
02136 #define FPT_NO_FAST_ALGORITHM (1U << 2)
02137 #define FPT_NO_DIRECT_ALGORITHM (1U << 3)
02138 #define FPT_NO_STABILIZATION (1U << 0)
02141 #define FPT_PERSISTENT_DATA (1U << 4)
02143
02144 #define FPT_FUNCTION_VALUES (1U << 5)
02147 #define FPT_AL_SYMMETRY (1U << 6)
02149
02150 typedef struct fpt_set_s_ *fpt_set;
02167 fpt_set fpt_init(const int M, const int t, const unsigned int flags);
02168
02189 void fpt_precompute(fpt_set set, const int m, double *alpha, double *beta,
02190 double *gam, int k_start, const double threshold);
02191
02202 void dpt_trafo(fpt_set set, const int m, const fftw_complex *x, fftw_complex *y,
02203 const int k_end, const unsigned int flags);
02204
02215 void fpt_trafo(fpt_set set, const int m, const fftw_complex *x, fftw_complex *y,
02216 const int k_end, const unsigned int flags);
02217
02228 void dpt_transposed(fpt_set set, const int m, fftw_complex *x,
02229 fftw_complex *y, const int k_end, const unsigned int flags);
02230
02241 void fpt_transposed(fpt_set set, const int m, fftw_complex *x,
02242 fftw_complex *y, const int k_end, const unsigned int flags);
02243
02244 void fpt_finalize(fpt_set set);
02245
02246 #endif
02247
02251
02252
02253
02254
02265 #ifdef HAVE_NFSOFT
02266
02267
02287 #define NFSOFT_NORMALIZED (1U << 0)
02288
02299 #define NFSOFT_USE_NDFT (1U << 1)
02300
02311 #define NFSOFT_USE_DPT (1U << 2)
02312
02326 #define NFSOFT_MALLOC_X (1U << 3)
02327
02335 #define NFSOFT_REPRESENT (1U << 4)
02336
02337
02351 #define NFSOFT_MALLOC_F_HAT (1U << 5)
02352
02366 #define NFSOFT_MALLOC_F (1U << 6)
02367
02378 #define NFSOFT_PRESERVE_F_HAT (1U << 7)
02379
02391 #define NFSOFT_PRESERVE_X (1U << 8)
02392
02403 #define NFSOFT_PRESERVE_F (1U << 9)
02404
02414 #define NFSOFT_DESTROY_F_HAT (1U << 10)
02415
02426 #define NFSOFT_DESTROY_X (1U << 11)
02427
02437 #define NFSOFT_DESTROY_F (1U << 12)
02438
02447 #define NFSOFT_NO_STABILIZATION (1U << 13)
02448
02458 #define NFSOFT_CHOOSE_DPT (1U << 14)
02459
02470 #define NFSOFT_SOFT (1U << 15)
02471
02472
02480 #define NFSOFT_ZERO_F_HAT (1U << 16)
02481
02482
02483
02489 #define NFSOFT_INDEX(m,n,l,B) (((l)+((B)+1))+(2*(B)+2)*(((n)+((B)+1))+(2*(B)+2)*((m)+((B)+1))))
02490 #define NFSOFT_INDEX_TWO(m,n,l,B) ((B+1)*(B+1)+(B+1)*(B+1)*(m+B)-((m-1)*m*(2*m-1)+(B+1)*(B+2)*(2*B+3))/6)+(posN(n,m,B))+(l-MAX(ABS(m),ABS(n)))
02491 int posN(int n,int m, int B);
02492
02497 #define NFSOFT_F_HAT_SIZE(B) (((B)+1)*(4*((B)+1)*((B)+1)-1)/3)
02498
02500 typedef struct nfsoft_plan_
02501 {
02503 MACRO_MV_PLAN(fftw_complex)
02504
02505 double *x;
02507 fftw_complex *wig_coeffs;
02509 fftw_complex *cheby;
02511 fftw_complex *aux;
02515 int t;
02517 unsigned int flags;
02518 nfft_plan p_nfft;
02519 fpt_set fpt_set;
02521 int fpt_kappa;
02523 } nfsoft_plan;
02524
02525
02534 void nfsoft_precompute(nfsoft_plan *plan);
02535
02546 fpt_set SO3_single_fpt_init(int l, int k, int m, unsigned int flags, int kappa);
02547 void SO3_fpt(fftw_complex *coeffs, fpt_set set, int l, int k, int m, unsigned int nfsoft_flags);
02548 void SO3_fpt_transposed(fftw_complex *coeffs,fpt_set set,int l, int k, int m,unsigned int nfsoft_flags);
02549
02550
02560 void nfsoft_init(nfsoft_plan *plan, int N, int M);
02571 void nfsoft_init_advanced(nfsoft_plan *plan, int N, int M,unsigned int nfsoft_flags);
02585 void nfsoft_init_guru(nfsoft_plan *plan, int N, int M,unsigned int nfsoft_flags,unsigned int nfft_flags,int nfft_cutoff,int fpt_kappa);
02586
02598 void nfsoft_trafo(nfsoft_plan *plan_nfsoft);
02611 void nfsoft_adjoint(nfsoft_plan *plan_nfsoft);
02619 void nfsoft_finalize(nfsoft_plan *plan);
02620
02621
02622 #endif
02623
02628
02629
02630
02631
02636
02637
02644 #define LANDWEBER (1U<< 0)
02645
02652 #define STEEPEST_DESCENT (1U<< 1)
02653
02661 #define CGNR (1U<< 2)
02662
02670 #define CGNE (1U<< 3)
02671
02678 #define NORMS_FOR_LANDWEBER (1U<< 4)
02679
02686 #define PRECOMPUTE_WEIGHT (1U<< 5)
02687
02694 #define PRECOMPUTE_DAMP (1U<< 6)
02695
02696
02697 typedef struct
02698 {
02699 mv_plan_complex *mv;
02700 unsigned flags;
02702 double *w;
02703 double *w_hat;
02705 fftw_complex *y;
02707 fftw_complex *f_hat_iter;
02709 fftw_complex *r_iter;
02710 fftw_complex *z_hat_iter;
02712 fftw_complex *p_hat_iter;
02713 fftw_complex *v_iter;
02715 double alpha_iter;
02716 double beta_iter;
02718 double dot_r_iter;
02719 double dot_r_iter_old;
02720 double dot_z_hat_iter;
02722 double dot_z_hat_iter_old;
02723 double dot_p_hat_iter;
02725 double dot_v_iter;
02726 } solver_plan_complex;
02727
02728 void solver_init_advanced_complex(solver_plan_complex* ths, mv_plan_complex *mv, unsigned flags);
02729 void solver_init_complex(solver_plan_complex* ths, mv_plan_complex *mv);
02730 void solver_before_loop_complex(solver_plan_complex* ths);
02731 void solver_loop_one_step_complex(solver_plan_complex *ths);
02732 void solver_finalize_complex(solver_plan_complex *ths);
02733
02734 typedef struct
02735 {
02736 mv_plan_double *mv;
02737 unsigned flags;
02739 double *w;
02740 double *w_hat;
02742 double *y;
02744 double *f_hat_iter;
02746 double *r_iter;
02747 double *z_hat_iter;
02749 double *p_hat_iter;
02750 double *v_iter;
02752 double alpha_iter;
02753 double beta_iter;
02755 double dot_r_iter;
02756 double dot_r_iter_old;
02757 double dot_z_hat_iter;
02759 double dot_z_hat_iter_old;
02760 double dot_p_hat_iter;
02762 double dot_v_iter;
02763 } solver_plan_double;
02764
02765 void solver_init_advanced_double(solver_plan_double* ths, mv_plan_double *mv, unsigned flags);
02766 void solver_init_double(solver_plan_double* ths, mv_plan_double *mv);
02767 void solver_before_loop_double(solver_plan_double* ths);
02768 void solver_loop_one_step_double(solver_plan_double *ths);
02769 void solver_finalize_double(solver_plan_double *ths);
02770
02771 #ifdef __cplusplus
02772 }
02773 #endif
02774
02778 #endif
02779