![]() |
kspaceFirstOrder3D-OMP
1.2
The C++ implementation of the k-wave toolbox for the time-domain simulation of acoustic wave fields in 3D
|
Class implementing 3D and 1D Real-To-Complex and Complex-To-Real transforms using FFTW interface. More...
#include <FftwComplexMatrix.h>


Public Member Functions | |
| FftwComplexMatrix ()=delete | |
| Default constructor not allowed for public. | |
| FftwComplexMatrix (const DimensionSizes &dimensionSizes) | |
| Constructor, inherited from ComplexMatrix. More... | |
| FftwComplexMatrix (const FftwComplexMatrix &src)=delete | |
| Copy constructor not allowed for public. | |
| virtual | ~FftwComplexMatrix () |
| Destructor. More... | |
| FftwComplexMatrix & | operator= (const FftwComplexMatrix &src) |
| Operator = not allowed for public. | |
| void | createR2CFftPlan3D (RealMatrix &inMatrix) |
| Create FFTW plan for 3D Real-to-Complex. More... | |
| void | createC2RFftPlan3D (RealMatrix &outMatrix) |
| Create FFTW plan for 3D Complex-to-Real. More... | |
| void | createR2CFftPlan1DX (RealMatrix &inMatrix) |
| Create an FFTW plan for 1D Real-to-Complex in the x dimension. More... | |
| void | createR2CFftPlan1DY (RealMatrix &inMatrix) |
| Create an FFTW plan for 1D Real-to-Complex in the y dimension. More... | |
| void | createR2CFftPlan1DZ (RealMatrix &inMatrix) |
| Create an FFTW plan for 1D Real-to-Complex in the z dimension. More... | |
| void | createC2RFftPlan1DX (RealMatrix &outMatrix) |
| Create FFTW plan for Complex-to-Real in the x dimension. More... | |
| void | createC2RFftPlan1DY (RealMatrix &outMatrix) |
| Create FFTW plan for Complex-to-Real in the y dimension. More... | |
| void | createC2RFftPlan1DZ (RealMatrix &outMatrix) |
| Create FFTW plan for Complex-to-Real in the z dimension. More... | |
| void | computeR2CFft3D (RealMatrix &inMatrix) |
| Compute forward out-of-place 3D Real-to-Complex FFT. More... | |
| void | computeC2RFft3D (RealMatrix &outMatrix) |
| Compute forward out-of-place 3D Complex-to-Real FFT. More... | |
| void | computeR2CFft1DX (RealMatrix &inMatrix) |
| Compute 1D out-of-place Real-to-Complex FFT in the x dimension. More... | |
| void | computeR2CFft1DY (RealMatrix &inMatrix) |
| Compute 1D out-of-place Real-to-Complex FFT in the y dimension. More... | |
| void | computeR2CFft1DZ (RealMatrix &inMatrix) |
| Compute 1D out-of-place Real-to-Complex FFT in the z dimension. More... | |
| void | computeC2RFft1DX (RealMatrix &outMatrix) |
| Compute 1D out-of-place Complex-to-Real FFT in the x dimension. More... | |
| void | computeC2RFft1DY (RealMatrix &outMatrix) |
| Compute 1D out-of-place Complex-to-Real FFT in the y dimension. More... | |
| void | computeC2RFft1DZ (RealMatrix &outMatrix) |
| Compute 1D out-of-place Complex-to-Real FFT in the z dimension. More... | |
Public Member Functions inherited from ComplexMatrix | |
| ComplexMatrix ()=delete | |
| Default constructor not allowed. | |
| ComplexMatrix (const DimensionSizes &dimensionSizes) | |
| Constructor. More... | |
| ComplexMatrix (const ComplexMatrix &)=delete | |
| Copy constructor not allowed. | |
| virtual | ~ComplexMatrix () |
| Destructor. More... | |
| ComplexMatrix & | operator= (const ComplexMatrix &) |
| Operator= is not allowed. | |
| virtual void | readData (Hdf5File &file, MatrixName &matrixName) |
| Read matrix from HDF5 file. More... | |
| virtual void | writeData (Hdf5File &file, MatrixName &matrixName, const size_t compressionLevel) |
| Write data into HDF5 file. More... | |
| virtual FloatComplex * | getComplexData () |
| Get raw complex data out of the class (for direct kernel access). More... | |
| virtual const FloatComplex * | getComplexData () const |
| Get raw complex data out of the class (for direct kernel access). More... | |
| FloatComplex & | operator[] (const size_t &index) |
| Operator []. More... | |
| const FloatComplex & | operator[] (const size_t &index) const |
| Operator [], constant version. More... | |
| FloatComplex & | GetElementFrom3D (const size_t x, const size_t y, const size_t z) |
| Get element from 3D matrix. More... | |
| const FloatComplex & | GetElementFrom3D (const size_t x, const size_t y, const size_t z) const |
| Get element from 3D matrix, constant version. More... | |
Public Member Functions inherited from BaseFloatMatrix | |
| BaseFloatMatrix () | |
| Default constructor. More... | |
| BaseFloatMatrix (const BaseFloatMatrix &)=delete | |
| Copy constructor is not allowed. | |
| virtual | ~BaseFloatMatrix () |
| Destructor. | |
| BaseFloatMatrix & | operator= (const BaseFloatMatrix &)=delete |
| operator= is not allowed. | |
| virtual const DimensionSizes & | getDimensionSizes () const |
| Get dimension sizes of the matrix. More... | |
| virtual size_t | size () const |
| Size of the matrix. More... | |
| virtual size_t | capacity () const |
| The capacity of the matrix (this may differ from size due to padding, etc.). More... | |
| virtual void | copyData (const BaseFloatMatrix &src) |
| Copy data from other matrix with the same size. More... | |
| virtual void | zeroMatrix () |
| Zero all elements of the matrix (NUMA first touch). More... | |
| virtual void | scalarDividedBy (const float scalar) |
| Calculate matrix = scalar / matrix. More... | |
| virtual float * | getData () |
| Get raw data out of the class (for direct kernel access). More... | |
| virtual const float * | getData () const |
| Get raw data out of the class (for direct kernel access), const version. More... | |
Public Member Functions inherited from BaseMatrix | |
| BaseMatrix () | |
| Default constructor. | |
| BaseMatrix (const BaseMatrix &)=delete | |
| Copy constructor is not allowed. | |
| virtual | ~BaseMatrix () |
| Destructor. | |
| BaseMatrix & | operator= (const BaseMatrix &)=delete |
| Operator= is not allowed. | |
Static Public Member Functions | |
| static void | exportWisdom () |
| Export wisdom to the file. More... | |
| static void | importWisdom () |
| Import wisdom from the file. More... | |
| static void | deleteStoredWisdom () |
| Destroy wisdom in the file (delete it). More... | |
Protected Member Functions | |
| virtual void | allocateMemory () |
| Allocate memory for the FFTW matrix. More... | |
| virtual void | freeMemory () |
| Free memory of the FFTW matrix. More... | |
Static Protected Member Functions | |
| static std::string | getWisdomFileName () |
Protected Attributes | |
| fftwf_plan | mR2CFftPlan3D |
| FFTW plan for the 3D Real-to-Complex transform. | |
| fftwf_plan | mC2RFftPlan3D |
| FFTW plan for the 3D Complex-to-Real transform. | |
| fftwf_plan | mR2CFftPlan1DX |
| FFTW plan for the 1D Real-to-Complex transform in the x dimension. | |
| fftwf_plan | mR2CFftPlan1DY |
| FFTW plan for the 3D Real-to-Complex transform in the y dimension. | |
| fftwf_plan | mR2CFftPlan1DZ |
| FFTW plan for the 3D Real-to-Complex transform in the z dimension. | |
| fftwf_plan | mC2RFftPlan1DX |
| FFTW plan for the 3D Complex-to-Real transform in the x dimension. | |
| fftwf_plan | mC2RFftPlan1DY |
| FFTW plan for the 3D Complex-to-Real transform in the y dimension. | |
| fftwf_plan | mC2RFftPlan1DZ |
| FFTW plan for the 3Z Complex-to-Real transform in the z dimension. | |
Protected Attributes inherited from BaseFloatMatrix | |
| size_t | mSize |
| Total number of used elements. | |
| size_t | mCapacity |
| Total number of allocated elements (in terms of floats). | |
| DimensionSizes | mDimensionSizes |
| Dimension sizes. | |
| size_t | mRowSize |
| Size of a 1D row in X dimension. | |
| size_t | mSlabSize |
| Size of a XY slab. | |
| float * | mData |
| Raw matrix data. | |
Static Protected Attributes | |
| static const unsigned | kFftMeasureFlag = FFTW_MEASURE |
| FFTW plan flag. | |
| static const std::string | kFftWisdomFileExtension = "FFTW_Wisdom" |
| The file extension for FFTW wisdom. | |
Class implementing 3D and 1D Real-To-Complex and Complex-To-Real transforms using FFTW interface.
Definition at line 46 of file FftwComplexMatrix.h.
| FftwComplexMatrix::FftwComplexMatrix | ( | const DimensionSizes & | dimensionSizes | ) |
| [in] | dimensionSizes | - Dimension sizes of the matrix. |
Constructor.
Definition at line 54 of file FftwComplexMatrix.cpp.
|
virtual |
Destructor.
Definition at line 66 of file FftwComplexMatrix.cpp.
|
protectedvirtual |
Allocate Memory using fftwf_malloc function to ensure correct alignment.
Reimplemented from BaseFloatMatrix.
Definition at line 785 of file FftwComplexMatrix.cpp.
| void FftwComplexMatrix::computeC2RFft1DX | ( | RealMatrix & | outMatrix | ) |
There are two versions of this routine for GCC+FFTW and ICPC + MKL, otherwise it will not build! The FFTW version processes the whole matrix at one while the MKL slab by slab.
| [out] | outMatrix | - Output matrix |
| std::runtime_error | - If the plan is not valid. |
Compute 1D out-of-place Complex-to-Real FFT in the x dimension.
Definition at line 644 of file FftwComplexMatrix.cpp.
| void FftwComplexMatrix::computeC2RFft1DY | ( | RealMatrix & | outMatrix | ) |
There are two versions of this routine for GCC+FFTW and ICPC + MKL, otherwise it will not build! The FFTW version processes the whole matrix at one while the MKL slab by slab.
| [out] | outMatrix | - Output matrix |
| std::runtime_error | - If the plan is not valid. |
Compute 1D out-of-place Complex-to-Real FFT in the y dimension.
Definition at line 676 of file FftwComplexMatrix.cpp.
| void FftwComplexMatrix::computeC2RFft1DZ | ( | RealMatrix & | outMatrix | ) |
There are two versions of this routine for GCC+FFTW and ICPC + MKL, otherwise it will not build! The FFTW version processes the whole matrix at one while the MKL slab by slab.
| [out] | outMatrix | Output matrix |
| std::runtime_error | - If the plan is not valid. |
Compute 1D out-of-place Complex-to-Real FFT in the Z dimension
Definition at line 708 of file FftwComplexMatrix.cpp.
| void FftwComplexMatrix::computeC2RFft3D | ( | RealMatrix & | outMatrix | ) |
| [out] | outMatrix | - Output of the inverse FFT. |
| std::runtime_error | - If the plan is not valid. |
Compute inverse out-of-place 3D Complex to Real FFT.
Definition at line 532 of file FftwComplexMatrix.cpp.
| void FftwComplexMatrix::computeR2CFft1DX | ( | RealMatrix & | inMatrix | ) |
There are two versions of this routine for GCC+FFTW and ICPC + MKL, otherwise it will not build! The FFTW version processes the whole matrix at one while the MKL slab by slab.
| [in] | inMatrix | - Input matrix |
| std::runtime_error | - If the plan is not valid. |
Compute 1D out-of-place Real-to-Complex FFT in the x dimension.
Definition at line 548 of file FftwComplexMatrix.cpp.
| void FftwComplexMatrix::computeR2CFft1DY | ( | RealMatrix & | inMatrix | ) |
There are two versions of this routine for GCC+FFTW and ICPC + MKL, otherwise it will not build! The FFTW version processes the whole matrix at one while the MKL slab by slab.
| [in] | inMatrix | - Input matrix |
| std::runtime_error | - If the plan is not valid. |
Compute 1D out-of-place Real-to-Complex FFT in the Y dimension.
Definition at line 580 of file FftwComplexMatrix.cpp.
| void FftwComplexMatrix::computeR2CFft1DZ | ( | RealMatrix & | inMatrix | ) |
There are two versions of this routine for GCC+FFTW and ICPC + MKL, otherwise it will not build! The FFTW version processes the whole matrix at one while the MKL slab by slab.
| [in] | inMatrix | - Input matrix |
| std::runtime_error | - If the plan is not valid. |
Compute 1D out-of-place Real-to-Complex FFT in the z dimension.
Definition at line 612 of file FftwComplexMatrix.cpp.
| void FftwComplexMatrix::computeR2CFft3D | ( | RealMatrix & | inMatrix | ) |
| [in] | inMatrix | - Input data for the forward FFT. |
| std::runtime_error | - If the plan is not valid. |
Computer forward out-of place 3D Real-to-Complex FFT.
Definition at line 516 of file FftwComplexMatrix.cpp.
| void FftwComplexMatrix::createC2RFftPlan1DX | ( | RealMatrix & | outMatrix | ) |
There are two versions of this routine for GCC+FFTW and ICPC + MKL, otherwise it will not build!
The FFTW version processes the whole matrix at one while the MKL slab by slab.
| [in,out] | outMatrix | - RealMatrix of which to create the plan. |
| std::runtime_error | - If the plan can't be created. |
Create FFTW plan for Complex-to-Real in the x dimension.
Definition at line 328 of file FftwComplexMatrix.cpp.
| void FftwComplexMatrix::createC2RFftPlan1DY | ( | RealMatrix & | outMatrix | ) |
There are two versions of this routine for GCC+FFTW and ICPC + MKL, otherwise it will not build!
The FFTW version processes the whole matrix at one while the MKL slab by slab.
| [in,out] | outMatrix | - RealMatrix of which to create the plan. |
| std::runtime_error | - If the plan can't be created. |
Create FFTW plan for Complex-to-Real in the y dimension.
Definition at line 391 of file FftwComplexMatrix.cpp.
| void FftwComplexMatrix::createC2RFftPlan1DZ | ( | RealMatrix & | outMatrix | ) |
There are two versions of this routine for GCC+FFTW and ICPC + MKL, otherwise it will not build!
The FFTW version processes the whole matrix at one while the MKL slab by slab.
| [in,out] | outMatrix | - RealMatrix of which to create the plan. |
| std::runtime_error | - If the plan can't be created. |
Create FFTW plan for Complex-to-Real in the z dimension.
Definition at line 454 of file FftwComplexMatrix.cpp.
| void FftwComplexMatrix::createC2RFftPlan3D | ( | RealMatrix & | outMatrix | ) |
| [in] | outMatrix | - Output matrix serving as scratch place for planning. |
| std::runtime_error | - If the plan can't be created. |
Create an FFTW plan for 3D Complex-to-Real.
Definition at line 120 of file FftwComplexMatrix.cpp.
| void FftwComplexMatrix::createR2CFftPlan1DX | ( | RealMatrix & | inMatrix | ) |
There are two versions of this routine for GCC+FFTW and ICPC + MKL, otherwise it will not build!
The FFTW version processes the whole matrix at one while the MKL slab by slab.
| [in,out] | inMatrix | - RealMatrix of which to create the plan. |
| std::runtime_error | - If the plan can't be created. |
Create an FFTW plan for 1D Real-to-Complex in the x dimension.
Definition at line 139 of file FftwComplexMatrix.cpp.
| void FftwComplexMatrix::createR2CFftPlan1DY | ( | RealMatrix & | inMatrix | ) |
There are two versions of this routine for GCC+FFTW and ICPC + MKL, otherwise it will not build!
The FFTW version processes the whole matrix at one while the MKL slab by slab
| [in,out] | inMatrix | - RealMatrix of which to create the plan. |
| std::runtime_error | - If the plan can't be created. |
Create an FFTW plan for 1D Real-to-Complex in the y dimension.
Definition at line 203 of file FftwComplexMatrix.cpp.
| void FftwComplexMatrix::createR2CFftPlan1DZ | ( | RealMatrix & | inMatrix | ) |
There are two versions of this routine for GCC+FFTW and ICPC + MKL, otherwise it will not build!
The FFTW version processes the whole matrix at one while the MKL slab by slab
| [in,out] | inMatrix | - RealMatrix of which to create the plan. |
| std::runtime_error | - If the plan can't be created. |
Create an FFTW plan for 1D Real-to-Complex in the z dimension.
Definition at line 266 of file FftwComplexMatrix.cpp.
| void FftwComplexMatrix::createR2CFftPlan3D | ( | RealMatrix & | inMatrix | ) |
| [in] | inMatrix | - Input matrix serving as scratch place for planning. |
| std::runtime_error | - If the plan can't be created. |
Create an FFTW plan for 3D Real-to-Complex.
Definition at line 101 of file FftwComplexMatrix.cpp.
|
static |
Delete stored wisdom (delete the file).
Definition at line 771 of file FftwComplexMatrix.cpp.
|
static |
Export wisdom to the file.
Definition at line 740 of file FftwComplexMatrix.cpp.
|
protectedvirtual |
Free memory using fftwf_free.
Reimplemented from BaseFloatMatrix.
Definition at line 807 of file FftwComplexMatrix.cpp.
|
staticprotected |
Get Wisdom file name (derive it form the checkpoint filename).
Get Wisdom file name (derive it form the checkpoint filename).
Definition at line 817 of file FftwComplexMatrix.cpp.
|
static |
Import wisdom from the file.
Definition at line 755 of file FftwComplexMatrix.cpp.