![]() |
NFFT
3.3.1
|
00001 /* 00002 * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts 00003 * 00004 * This program is free software; you can redistribute it and/or modify it under 00005 * the terms of the GNU General Public License as published by the Free Software 00006 * Foundation; either version 2 of the License, or (at your option) any later 00007 * version. 00008 * 00009 * This program is distributed in the hope that it will be useful, but WITHOUT 00010 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 00011 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 00012 * details. 00013 * 00014 * You should have received a copy of the GNU General Public License along with 00015 * this program; if not, write to the Free Software Foundation, Inc., 51 00016 * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00017 */ 00018 00019 #ifndef __NFFT3MP_H__ 00020 #define __NFFT3MP_H__ 00021 00022 #include "nfft3.h" 00023 00024 #ifdef __cplusplus 00025 extern "C" 00026 { 00027 #endif /* __cplusplus */ 00028 00029 #if defined(NFFT_PRECISION_SINGLE) 00030 typedef float NFFT_R; 00031 typedef float _Complex NFFT_C; 00032 #define NFFT_K(x) ((NFFT_R) x) 00033 #define NFFT_M(name) NFFT_CONCAT(name,f) 00034 #define FFTW(name) NFFT_CONCAT(fftwf_,name) 00035 #define NFFT(name) NFFT_CONCAT(nfftf_,name) 00036 #define NFCT(name) NFFT_CONCAT(nfctf_,name) 00037 #define NFST(name) NFFT_CONCAT(nfstf_,name) 00038 #define NFSFT(name) NFFT_CONCAT(nfsftf_,name) 00039 #define SOLVER(name) NFFT_CONCAT(solverf_,name) 00040 #elif defined(NFFT_PRECISION_LONG_DOUBLE) 00041 typedef long double NFFT_R; 00042 typedef long double _Complex NFFT_C; 00043 #define NFFT_K(x) ((NFFT_R) x##L) 00044 #define NFFT_M(name) NFFT_CONCAT(name,l) 00045 #define FFTW(name) NFFT_CONCAT(fftwl_,name) 00046 #define NFFT(name) NFFT_CONCAT(nfftl_,name) 00047 #define NFCT(name) NFFT_CONCAT(nfctl_,name) 00048 #define NFST(name) NFFT_CONCAT(nfstl_,name) 00049 #define NFSFT(name) NFFT_CONCAT(nfsftl_,name) 00050 #define SOLVER(name) NFFT_CONCAT(solverl_,name) 00051 #elif defined(NFFT_PRECISION_DOUBLE) 00052 typedef double NFFT_R; 00053 typedef double _Complex NFFT_C; 00054 #define NFFT_K(x) ((NFFT_R) x) 00055 #define NFFT_M(name) name 00056 #define FFTW(name) NFFT_CONCAT(fftw_,name) 00057 #define NFFT(name) NFFT_CONCAT(nfft_,name) 00058 #define NFCT(name) NFFT_CONCAT(nfct_,name) 00059 #define NFST(name) NFFT_CONCAT(nfst_,name) 00060 #define NFSFT(name) NFFT_CONCAT(nfsft_,name) 00061 #define SOLVER(name) NFFT_CONCAT(solver_,name) 00062 #else 00063 #error Either define macro NFFT_PRECISION_SINGLE, NFFT_PRECISION_DOUBLE or NFFT_PRECISION_LONG_DOUBLE for single, double or long double precision 00064 #endif 00065 00066 /* format strings */ 00067 #if defined(NFFT_PRECISION_LONG_DOUBLE) 00068 # define NFFT__FGS__ "Lg" 00069 # define NFFT__FES__ "LE" 00070 # define NFFT__FE__ "% 36.32LE" 00071 # define NFFT__FI__ "%Lf" 00072 # define NFFT__FIS__ "Lf" 00073 # define NFFT__FR__ "%Le" 00074 #elif defined(NFFT_PRECISION_SINGLE) 00075 # define NFFT__FGS__ "g" 00076 # define NFFT__FES__ "E" 00077 # define NFFT__FE__ "% 12.8E" 00078 # define NFFT__FI__ "%f" 00079 # define NFFT__FIS__ "f" 00080 # define NFFT__FR__ "%e" 00081 #elif defined(NFFT_PRECISION_DOUBLE) 00082 # define NFFT__FGS__ "lg" 00083 # define NFFT__FES__ "lE" 00084 # define NFFT__FE__ "% 20.16lE" 00085 # define NFFT__FI__ "%lf" 00086 # define NFFT__FIS__ "lf" 00087 # define NFFT__FR__ "%le" 00088 #else 00089 #error Either define macro NFFT_PRECISION_SINGLE, NFFT_PRECISION_DOUBLE or NFFT_PRECISION_LONG_DOUBLE for single, double or long double precision 00090 #endif 00091 00092 #ifdef __cplusplus 00093 } /* extern "C" */ 00094 #endif /* __cplusplus */ 00095 00097 #define NFFT_CSWAP(x,y) {NFFT_C* NFFT_SWAP_temp__; \ 00098 NFFT_SWAP_temp__=(x); (x)=(y); (y)=NFFT_SWAP_temp__;} 00099 00100 #define NFFT_KPI NFFT_K(3.1415926535897932384626433832795028841971693993751) 00101 00102 #if defined(_WIN32) || defined(_WIN64) 00103 # define NFFT__D__ "%Id" 00104 #else 00105 # define NFFT__D__ "%td" 00106 #endif 00107 00108 #endif /* defined(__NFFT3MP_H__) */