From f9c81fb313f27c271a9f246f857374b87d755b40 Mon Sep 17 00:00:00 2001 From: Damian Rouson Date: Sun, 10 Mar 2024 17:09:09 -0700 Subject: [PATCH 1/6] doc(README.md): remove broken link --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 1194fb3..13dad02 100644 --- a/README.md +++ b/README.md @@ -68,4 +68,3 @@ meson install -C build - [netlib/dfftpack1.0(fftpack4.0)](http://www.netlib.org/fftpack/) - [Documents of fft routines in GNU/gsl based on `netlib/fftpack`](https://www.gnu.org/software/gsl/doc/html/fft.html#) - [Documents of scipy.fftpack](https://docs.scipy.org/doc/scipy/reference/fftpack.html) -- [NACR/FFTPACK 5.1](https://www2.cisl.ucar.edu/resources/legacy/fft5) From 9960f0a327997e2c83f8da8b38ee49e137f059cc Mon Sep 17 00:00:00 2001 From: Damian Rouson Date: Sun, 10 Mar 2024 18:04:44 -0700 Subject: [PATCH 2/6] doc(README): link to GH Pages, describe references This commit edits the root directory's README.md file to 1. Add a link to the FORD documentation on GitHub Pages and 2. Add descriptions of the possible utility of the documentation of other netlib/fftpack-based libraries. --- README.md | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 13dad02..1afcbde 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,18 @@ meson configure build --prefix=/path/to/install meson install -C build ``` -## Links -- [netlib/dfftpack1.0(fftpack4.0)](http://www.netlib.org/fftpack/) -- [Documents of fft routines in GNU/gsl based on `netlib/fftpack`](https://www.gnu.org/software/gsl/doc/html/fft.html#) -- [Documents of scipy.fftpack](https://docs.scipy.org/doc/scipy/reference/fftpack.html) +## Documentation +See [https://fortran-lang.github.io/fftpack/](https://fortran-lang.github.io/fftpack/) for documentation generated by this repository's [FORD] [project file]. + +## References +- [Recommended reference]: Although this SciPy version is in Python and the procedures have different arguments from [fortran-lang/fftpack], the SciPy fftpack documentation provides a succinct description of the storage sequence for the function results in both scipy.fftpack and [fortran-lang/fftpack], e.g., the storage sequence for the `rfft` function result. +- [Historical reference]: This is the netlib/fftpack library on which [fortran-lang/fftpack] is based but the two are _not_ interface-compatible. +- [Theory reference]: The documentation for the GNU/gsl FFT routines, which is also based on netlib/fftpack, provides some useful definitions of FFT terminology and represenations of the analytical forms of the Discrete Fourier Transform nicely formatted by [LaTeX]. + +[FORD]: https://github.com/Fortran-FOSS-Programmers/ford +[project file]: ./API-doc-FORD-file.md +[fortran-lang/fftpack]: https://github.com/fortran-lang/fftpack +[Recommended reference]: https://docs.scipy.org/doc/scipy/reference/fftpack.html +[Historical reference]: http://www.netlib.org/fftpack/ +[Theory reference]: https://www.gnu.org/software/gsl/doc/html/fft.html# +[LaTeX]: https://www.latex-project.org From 4f0b02b8de9b68c09d0b0c442fce43f7ec7ae2e1 Mon Sep 17 00:00:00 2001 From: Damian Rouson Date: Sun, 10 Mar 2024 18:31:17 -0700 Subject: [PATCH 3/6] doc(README.md): reformat/clarify ref descriptions --- README.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 1afcbde..e9e977d 100644 --- a/README.md +++ b/README.md @@ -65,17 +65,18 @@ meson install -C build ``` ## Documentation -See [https://fortran-lang.github.io/fftpack/](https://fortran-lang.github.io/fftpack/) for documentation generated by this repository's [FORD] [project file]. +See the our [GitHub Pages site] for documentation generated by [FORD] from the fortran-lang/fftpack [project file]. ## References -- [Recommended reference]: Although this SciPy version is in Python and the procedures have different arguments from [fortran-lang/fftpack], the SciPy fftpack documentation provides a succinct description of the storage sequence for the function results in both scipy.fftpack and [fortran-lang/fftpack], e.g., the storage sequence for the `rfft` function result. -- [Historical reference]: This is the netlib/fftpack library on which [fortran-lang/fftpack] is based but the two are _not_ interface-compatible. -- [Theory reference]: The documentation for the GNU/gsl FFT routines, which is also based on netlib/fftpack, provides some useful definitions of FFT terminology and represenations of the analytical forms of the Discrete Fourier Transform nicely formatted by [LaTeX]. +Although fortran-lang is _not_ interface-compatible with any of the following libraries, each contains documentation that might be useful for different reasons: +- **Recommended reference:** The [scipy.fftpack] documentation contains succinct description of the storage sequences for function results that match those in fortran-lang/fftpack, e.g., the location of the real and imaginary parts of the `rfft` function result. +- **Theory reference:** The [documentation for the GNU/gsl FFT routines], which are also based on netlib/fftpack, provides some useful definitions of FFT terminology and represenations of the analytical forms of the Discrete Fourier Transform nicely formatted by [LaTeX]. +- **Historical reference:** The [netlib/fftpack] library on which fortran-lang/fftpack is useful for understanding several fortran-lang/fftpack design choices, e.g., the procedure dependencies. [FORD]: https://github.com/Fortran-FOSS-Programmers/ford [project file]: ./API-doc-FORD-file.md -[fortran-lang/fftpack]: https://github.com/fortran-lang/fftpack -[Recommended reference]: https://docs.scipy.org/doc/scipy/reference/fftpack.html -[Historical reference]: http://www.netlib.org/fftpack/ -[Theory reference]: https://www.gnu.org/software/gsl/doc/html/fft.html# +[scipy.fftpack]: https://docs.scipy.org/doc/scipy/reference/fftpack.html +[documentation for the GNU/gsl FFT routines]: https://www.gnu.org/software/gsl/doc/html/fft.html# +[netlib/fftpack]: http://www.netlib.org/fftpack/ [LaTeX]: https://www.latex-project.org +[GitHub Pages site]: https://fortran-lang.github.io/fftpack/ From 50ce3cbcbf6245a03b78a70c63e3afc86fa2b940 Mon Sep 17 00:00:00 2001 From: Damian Rouson Date: Mon, 11 Mar 2024 09:32:49 -0700 Subject: [PATCH 4/6] feat(fpm.toml): auto-discover example/test/program --- example/bench02_zfft.f90 | 2 +- example/bench03_dfft.f90 | 2 +- example/real-forward-transform.f90 | 41 ++++++++++++++++++++++++++++++ fpm.toml | 6 ++--- 4 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 example/real-forward-transform.f90 diff --git a/example/bench02_zfft.f90 b/example/bench02_zfft.f90 index e33baa7..cb43520 100644 --- a/example/bench02_zfft.f90 +++ b/example/bench02_zfft.f90 @@ -1,4 +1,4 @@ -program main +program bench2 use fftpack, only: zffti, zfftf, zfftb, fft, ifft use fftpack_kind, only: rk diff --git a/example/bench03_dfft.f90 b/example/bench03_dfft.f90 index a442950..e55e417 100644 --- a/example/bench03_dfft.f90 +++ b/example/bench03_dfft.f90 @@ -1,4 +1,4 @@ -program main +program bench3 use fftpack, only: dffti, dfftf, dfftb, rfft, irfft use fftpack_kind, only: rk diff --git a/example/real-forward-transform.f90 b/example/real-forward-transform.f90 new file mode 100644 index 0000000..aa6bb9b --- /dev/null +++ b/example/real-forward-transform.f90 @@ -0,0 +1,41 @@ +program forward_transform_of_real_function + !! This program computes the forward transform of a real function and constructs + !! the complex result (re)organized to match the array subscripting to the common + !! analytical form [1]. Which form one uses in practice requires balancing the + !! need for speed versus clarity. + !! + !! [1] https://docs.scipy.org/doc/scipy/reference/generated/scipy.fftpack.rfft.html#scipy.fftpack.rfft + use fftpack, only: rfft, irfft + implicit none + integer j, k + integer, parameter :: N = 8 + double precision, parameter :: two_pi = 2.D0*acos(-1.D0), tolerance = 1.0D-06, f_avg = 3.D0, zero=0.D0 + double precision, parameter :: f(0:N-1) = f_avg + [(cos(two_pi*dble(j)/dble(N)), j=0,N-1)] + double precision, dimension(0:N-1) :: f_round_trip, rfft_f + integer, parameter :: rk = kind(two_pi) + complex(rk) f_hat(0:N/2) + + call assert(mod(N,2)==0, "the algorithm below requires even N") + + rfft_f(:) = rfft(f)/dble(N) + f_hat(:) = [ cmplx(rfft_f(0),zero), [( cmplx(k,k+1), k=lbound(rfft_f,1)+1,ubound(rfft_f,1)-1,2)], cmplx(zero,rfft_f(N-1)) ] + f_round_trip(:) = dble(irfft(rfft_f)) + !call assert(any(abs(f_round_trip - f) < tolerance), "inverse of forward FFT must yield the original function") + + print *, "f = ", f + print *, "f_hat = ", f_hat + print *, "f_round_trip = ", f_round_trip + + !print '(3(10x,a,10x))',"f", "f_round_trip", "rfft_f" + !do m = 1, size(f) + ! print *, f(m), f_round_trip(m), rfft_f(m) + !end do + !print * + +contains + pure subroutine assert(assertion, description) + logical, intent(in) :: assertion + character(len=*), intent(in) :: description + if (.not. assertion) error stop description + end subroutine +end program diff --git a/fpm.toml b/fpm.toml index e8a572c..dffb12e 100644 --- a/fpm.toml +++ b/fpm.toml @@ -16,9 +16,9 @@ implicit-external=true source-form="default" [build] -auto-executables = false -auto-tests = false -auto-examples = false +auto-executables = true +auto-tests = true +auto-examples = true [dev-dependencies] test-drive = { git = "https://github.com/fortran-lang/test-drive", tag = "v0.4.0" } From 7bc689663e71c2da6b7ca46d3a6ca09a4437eacd Mon Sep 17 00:00:00 2001 From: Damian Rouson Date: Mon, 11 Mar 2024 09:39:17 -0700 Subject: [PATCH 5/6] refac(fpm.toml): rm unnecessary [[build]] block --- fpm.toml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/fpm.toml b/fpm.toml index dffb12e..63b2471 100644 --- a/fpm.toml +++ b/fpm.toml @@ -15,11 +15,6 @@ implicit-typing=true implicit-external=true source-form="default" -[build] -auto-executables = true -auto-tests = true -auto-examples = true - [dev-dependencies] test-drive = { git = "https://github.com/fortran-lang/test-drive", tag = "v0.4.0" } From 3e2a26225aece1f0df638bb44315b36bf3240271 Mon Sep 17 00:00:00 2001 From: Damian Rouson Date: Mon, 11 Mar 2024 09:58:23 -0700 Subject: [PATCH 6/6] build: clarify/isolate public interface This commit 1. Exposes and clarifies fftpack's public interface by isolating it in the src/ subdirectory and moving all other src files to a new fftpack subdirectory. 2. Adjusts the CMake build system accordingly. No adjustment to the fpm manifest is necessary. Both build systems still work. --- src/CMakeLists.txt | 119 ++++++++++++------------ src/{ => fftpack}/Makefile | 0 src/{ => fftpack}/cfftb1.f90 | 0 src/{ => fftpack}/cfftf1.f90 | 0 src/{ => fftpack}/cffti1.f90 | 0 src/{ => fftpack}/cosqb1.f90 | 0 src/{ => fftpack}/cosqf1.f90 | 0 src/{ => fftpack}/dcosqb.f90 | 0 src/{ => fftpack}/dcosqf.f90 | 0 src/{ => fftpack}/dcosqi.f90 | 0 src/{ => fftpack}/dcost.f90 | 0 src/{ => fftpack}/dcosti.f90 | 0 src/{ => fftpack}/dfftb.f90 | 0 src/{ => fftpack}/dfftf.f90 | 0 src/{ => fftpack}/dffti.f90 | 0 src/{ => fftpack}/dsinqb.f90 | 0 src/{ => fftpack}/dsinqf.f90 | 0 src/{ => fftpack}/dsinqi.f90 | 0 src/{ => fftpack}/dsint.f90 | 0 src/{ => fftpack}/dsinti.f90 | 0 src/{ => fftpack}/dzfftb.f90 | 0 src/{ => fftpack}/dzfftf.f90 | 0 src/{ => fftpack}/dzffti.f90 | 0 src/{ => fftpack}/ezfft1.f90 | 0 src/{ => fftpack}/fftpack_dct.f90 | 0 src/{ => fftpack}/fftpack_fft.f90 | 0 src/{ => fftpack}/fftpack_fftshift.f90 | 0 src/{ => fftpack}/fftpack_ifft.f90 | 0 src/{ => fftpack}/fftpack_ifftshift.f90 | 0 src/{ => fftpack}/fftpack_irfft.f90 | 0 src/{ => fftpack}/fftpack_rfft.f90 | 0 src/{ => fftpack}/fftpack_utils.f90 | 0 src/{ => fftpack}/meson.build | 0 src/{ => fftpack}/passb.f90 | 0 src/{ => fftpack}/passb2.f90 | 0 src/{ => fftpack}/passb3.f90 | 0 src/{ => fftpack}/passb4.f90 | 0 src/{ => fftpack}/passb5.f90 | 0 src/{ => fftpack}/passf.f90 | 0 src/{ => fftpack}/passf2.f90 | 0 src/{ => fftpack}/passf3.f90 | 0 src/{ => fftpack}/passf4.f90 | 0 src/{ => fftpack}/passf5.f90 | 0 src/{ => fftpack}/radb2.f90 | 0 src/{ => fftpack}/radb3.f90 | 0 src/{ => fftpack}/radb4.f90 | 0 src/{ => fftpack}/radb5.f90 | 0 src/{ => fftpack}/radbg.f90 | 0 src/{ => fftpack}/radf2.f90 | 0 src/{ => fftpack}/radf3.f90 | 0 src/{ => fftpack}/radf4.f90 | 0 src/{ => fftpack}/radf5.f90 | 0 src/{ => fftpack}/radfg.f90 | 0 src/{ => fftpack}/rfftb1.f90 | 0 src/{ => fftpack}/rfftf1.f90 | 0 src/{ => fftpack}/rffti1.f90 | 0 src/{ => fftpack}/rk.f90 | 0 src/{ => fftpack}/sint1.f90 | 0 src/{ => fftpack}/zfftb.f90 | 0 src/{ => fftpack}/zfftf.f90 | 0 src/{ => fftpack}/zffti.f90 | 0 61 files changed, 60 insertions(+), 59 deletions(-) rename src/{ => fftpack}/Makefile (100%) rename src/{ => fftpack}/cfftb1.f90 (100%) rename src/{ => fftpack}/cfftf1.f90 (100%) rename src/{ => fftpack}/cffti1.f90 (100%) rename src/{ => fftpack}/cosqb1.f90 (100%) rename src/{ => fftpack}/cosqf1.f90 (100%) rename src/{ => fftpack}/dcosqb.f90 (100%) rename src/{ => fftpack}/dcosqf.f90 (100%) rename src/{ => fftpack}/dcosqi.f90 (100%) rename src/{ => fftpack}/dcost.f90 (100%) rename src/{ => fftpack}/dcosti.f90 (100%) rename src/{ => fftpack}/dfftb.f90 (100%) rename src/{ => fftpack}/dfftf.f90 (100%) rename src/{ => fftpack}/dffti.f90 (100%) rename src/{ => fftpack}/dsinqb.f90 (100%) rename src/{ => fftpack}/dsinqf.f90 (100%) rename src/{ => fftpack}/dsinqi.f90 (100%) rename src/{ => fftpack}/dsint.f90 (100%) rename src/{ => fftpack}/dsinti.f90 (100%) rename src/{ => fftpack}/dzfftb.f90 (100%) rename src/{ => fftpack}/dzfftf.f90 (100%) rename src/{ => fftpack}/dzffti.f90 (100%) rename src/{ => fftpack}/ezfft1.f90 (100%) rename src/{ => fftpack}/fftpack_dct.f90 (100%) rename src/{ => fftpack}/fftpack_fft.f90 (100%) rename src/{ => fftpack}/fftpack_fftshift.f90 (100%) rename src/{ => fftpack}/fftpack_ifft.f90 (100%) rename src/{ => fftpack}/fftpack_ifftshift.f90 (100%) rename src/{ => fftpack}/fftpack_irfft.f90 (100%) rename src/{ => fftpack}/fftpack_rfft.f90 (100%) rename src/{ => fftpack}/fftpack_utils.f90 (100%) rename src/{ => fftpack}/meson.build (100%) rename src/{ => fftpack}/passb.f90 (100%) rename src/{ => fftpack}/passb2.f90 (100%) rename src/{ => fftpack}/passb3.f90 (100%) rename src/{ => fftpack}/passb4.f90 (100%) rename src/{ => fftpack}/passb5.f90 (100%) rename src/{ => fftpack}/passf.f90 (100%) rename src/{ => fftpack}/passf2.f90 (100%) rename src/{ => fftpack}/passf3.f90 (100%) rename src/{ => fftpack}/passf4.f90 (100%) rename src/{ => fftpack}/passf5.f90 (100%) rename src/{ => fftpack}/radb2.f90 (100%) rename src/{ => fftpack}/radb3.f90 (100%) rename src/{ => fftpack}/radb4.f90 (100%) rename src/{ => fftpack}/radb5.f90 (100%) rename src/{ => fftpack}/radbg.f90 (100%) rename src/{ => fftpack}/radf2.f90 (100%) rename src/{ => fftpack}/radf3.f90 (100%) rename src/{ => fftpack}/radf4.f90 (100%) rename src/{ => fftpack}/radf5.f90 (100%) rename src/{ => fftpack}/radfg.f90 (100%) rename src/{ => fftpack}/rfftb1.f90 (100%) rename src/{ => fftpack}/rfftf1.f90 (100%) rename src/{ => fftpack}/rffti1.f90 (100%) rename src/{ => fftpack}/rk.f90 (100%) rename src/{ => fftpack}/sint1.f90 (100%) rename src/{ => fftpack}/zfftb.f90 (100%) rename src/{ => fftpack}/zfftf.f90 (100%) rename src/{ => fftpack}/zffti.f90 (100%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a58de7d..67d8837 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,66 +1,67 @@ -# Locate the source directory +# Locate the source directories set(dir ${CMAKE_CURRENT_SOURCE_DIR}) +set(subdir "${dir}/fftpack") # The source files set(FFTPACK_SOURCES - ${dir}/cfftb1.f90 - ${dir}/cfftf1.f90 - ${dir}/cffti1.f90 - ${dir}/cosqb1.f90 - ${dir}/cosqf1.f90 - ${dir}/dcosqb.f90 - ${dir}/dcosqf.f90 - ${dir}/dcosqi.f90 - ${dir}/dcost.f90 - ${dir}/dcosti.f90 - ${dir}/dfftb.f90 - ${dir}/dfftf.f90 - ${dir}/dffti.f90 - ${dir}/dsinqb.f90 - ${dir}/dsinqf.f90 - ${dir}/dsinqi.f90 - ${dir}/dsint.f90 - ${dir}/dsinti.f90 - ${dir}/dzfftb.f90 - ${dir}/dzfftf.f90 - ${dir}/dzffti.f90 - ${dir}/ezfft1.f90 + ${subdir}/cfftb1.f90 + ${subdir}/cfftf1.f90 + ${subdir}/cffti1.f90 + ${subdir}/cosqb1.f90 + ${subdir}/cosqf1.f90 + ${subdir}/dcosqb.f90 + ${subdir}/dcosqf.f90 + ${subdir}/dcosqi.f90 + ${subdir}/dcost.f90 + ${subdir}/dcosti.f90 + ${subdir}/dfftb.f90 + ${subdir}/dfftf.f90 + ${subdir}/dffti.f90 + ${subdir}/dsinqb.f90 + ${subdir}/dsinqf.f90 + ${subdir}/dsinqi.f90 + ${subdir}/dsint.f90 + ${subdir}/dsinti.f90 + ${subdir}/dzfftb.f90 + ${subdir}/dzfftf.f90 + ${subdir}/dzffti.f90 + ${subdir}/ezfft1.f90 ${dir}/fftpack.f90 - ${dir}/fftpack_dct.f90 - ${dir}/fftpack_fft.f90 - ${dir}/fftpack_fftshift.f90 - ${dir}/fftpack_ifft.f90 - ${dir}/fftpack_ifftshift.f90 - ${dir}/fftpack_irfft.f90 - ${dir}/fftpack_rfft.f90 - ${dir}/fftpack_utils.f90 - ${dir}/passb.f90 - ${dir}/passb2.f90 - ${dir}/passb3.f90 - ${dir}/passb4.f90 - ${dir}/passb5.f90 - ${dir}/passf.f90 - ${dir}/passf2.f90 - ${dir}/passf3.f90 - ${dir}/passf4.f90 - ${dir}/passf5.f90 - ${dir}/radb2.f90 - ${dir}/radb3.f90 - ${dir}/radb4.f90 - ${dir}/radb5.f90 - ${dir}/radbg.f90 - ${dir}/radf2.f90 - ${dir}/radf3.f90 - ${dir}/radf4.f90 - ${dir}/radf5.f90 - ${dir}/radfg.f90 - ${dir}/rfftb1.f90 - ${dir}/rfftf1.f90 - ${dir}/rffti1.f90 - ${dir}/rk.f90 - ${dir}/sint1.f90 - ${dir}/zfftb.f90 - ${dir}/zfftf.f90 - ${dir}/zffti.f90 + ${subdir}/fftpack_dct.f90 + ${subdir}/fftpack_fft.f90 + ${subdir}/fftpack_fftshift.f90 + ${subdir}/fftpack_ifft.f90 + ${subdir}/fftpack_ifftshift.f90 + ${subdir}/fftpack_irfft.f90 + ${subdir}/fftpack_rfft.f90 + ${subdir}/fftpack_utils.f90 + ${subdir}/passb.f90 + ${subdir}/passb2.f90 + ${subdir}/passb3.f90 + ${subdir}/passb4.f90 + ${subdir}/passb5.f90 + ${subdir}/passf.f90 + ${subdir}/passf2.f90 + ${subdir}/passf3.f90 + ${subdir}/passf4.f90 + ${subdir}/passf5.f90 + ${subdir}/radb2.f90 + ${subdir}/radb3.f90 + ${subdir}/radb4.f90 + ${subdir}/radb5.f90 + ${subdir}/radbg.f90 + ${subdir}/radf2.f90 + ${subdir}/radf3.f90 + ${subdir}/radf4.f90 + ${subdir}/radf5.f90 + ${subdir}/radfg.f90 + ${subdir}/rfftb1.f90 + ${subdir}/rfftf1.f90 + ${subdir}/rffti1.f90 + ${subdir}/rk.f90 + ${subdir}/sint1.f90 + ${subdir}/zfftb.f90 + ${subdir}/zfftf.f90 + ${subdir}/zffti.f90 ) set(FFTPACK_SOURCES ${FFTPACK_SOURCES} PARENT_SCOPE) diff --git a/src/Makefile b/src/fftpack/Makefile similarity index 100% rename from src/Makefile rename to src/fftpack/Makefile diff --git a/src/cfftb1.f90 b/src/fftpack/cfftb1.f90 similarity index 100% rename from src/cfftb1.f90 rename to src/fftpack/cfftb1.f90 diff --git a/src/cfftf1.f90 b/src/fftpack/cfftf1.f90 similarity index 100% rename from src/cfftf1.f90 rename to src/fftpack/cfftf1.f90 diff --git a/src/cffti1.f90 b/src/fftpack/cffti1.f90 similarity index 100% rename from src/cffti1.f90 rename to src/fftpack/cffti1.f90 diff --git a/src/cosqb1.f90 b/src/fftpack/cosqb1.f90 similarity index 100% rename from src/cosqb1.f90 rename to src/fftpack/cosqb1.f90 diff --git a/src/cosqf1.f90 b/src/fftpack/cosqf1.f90 similarity index 100% rename from src/cosqf1.f90 rename to src/fftpack/cosqf1.f90 diff --git a/src/dcosqb.f90 b/src/fftpack/dcosqb.f90 similarity index 100% rename from src/dcosqb.f90 rename to src/fftpack/dcosqb.f90 diff --git a/src/dcosqf.f90 b/src/fftpack/dcosqf.f90 similarity index 100% rename from src/dcosqf.f90 rename to src/fftpack/dcosqf.f90 diff --git a/src/dcosqi.f90 b/src/fftpack/dcosqi.f90 similarity index 100% rename from src/dcosqi.f90 rename to src/fftpack/dcosqi.f90 diff --git a/src/dcost.f90 b/src/fftpack/dcost.f90 similarity index 100% rename from src/dcost.f90 rename to src/fftpack/dcost.f90 diff --git a/src/dcosti.f90 b/src/fftpack/dcosti.f90 similarity index 100% rename from src/dcosti.f90 rename to src/fftpack/dcosti.f90 diff --git a/src/dfftb.f90 b/src/fftpack/dfftb.f90 similarity index 100% rename from src/dfftb.f90 rename to src/fftpack/dfftb.f90 diff --git a/src/dfftf.f90 b/src/fftpack/dfftf.f90 similarity index 100% rename from src/dfftf.f90 rename to src/fftpack/dfftf.f90 diff --git a/src/dffti.f90 b/src/fftpack/dffti.f90 similarity index 100% rename from src/dffti.f90 rename to src/fftpack/dffti.f90 diff --git a/src/dsinqb.f90 b/src/fftpack/dsinqb.f90 similarity index 100% rename from src/dsinqb.f90 rename to src/fftpack/dsinqb.f90 diff --git a/src/dsinqf.f90 b/src/fftpack/dsinqf.f90 similarity index 100% rename from src/dsinqf.f90 rename to src/fftpack/dsinqf.f90 diff --git a/src/dsinqi.f90 b/src/fftpack/dsinqi.f90 similarity index 100% rename from src/dsinqi.f90 rename to src/fftpack/dsinqi.f90 diff --git a/src/dsint.f90 b/src/fftpack/dsint.f90 similarity index 100% rename from src/dsint.f90 rename to src/fftpack/dsint.f90 diff --git a/src/dsinti.f90 b/src/fftpack/dsinti.f90 similarity index 100% rename from src/dsinti.f90 rename to src/fftpack/dsinti.f90 diff --git a/src/dzfftb.f90 b/src/fftpack/dzfftb.f90 similarity index 100% rename from src/dzfftb.f90 rename to src/fftpack/dzfftb.f90 diff --git a/src/dzfftf.f90 b/src/fftpack/dzfftf.f90 similarity index 100% rename from src/dzfftf.f90 rename to src/fftpack/dzfftf.f90 diff --git a/src/dzffti.f90 b/src/fftpack/dzffti.f90 similarity index 100% rename from src/dzffti.f90 rename to src/fftpack/dzffti.f90 diff --git a/src/ezfft1.f90 b/src/fftpack/ezfft1.f90 similarity index 100% rename from src/ezfft1.f90 rename to src/fftpack/ezfft1.f90 diff --git a/src/fftpack_dct.f90 b/src/fftpack/fftpack_dct.f90 similarity index 100% rename from src/fftpack_dct.f90 rename to src/fftpack/fftpack_dct.f90 diff --git a/src/fftpack_fft.f90 b/src/fftpack/fftpack_fft.f90 similarity index 100% rename from src/fftpack_fft.f90 rename to src/fftpack/fftpack_fft.f90 diff --git a/src/fftpack_fftshift.f90 b/src/fftpack/fftpack_fftshift.f90 similarity index 100% rename from src/fftpack_fftshift.f90 rename to src/fftpack/fftpack_fftshift.f90 diff --git a/src/fftpack_ifft.f90 b/src/fftpack/fftpack_ifft.f90 similarity index 100% rename from src/fftpack_ifft.f90 rename to src/fftpack/fftpack_ifft.f90 diff --git a/src/fftpack_ifftshift.f90 b/src/fftpack/fftpack_ifftshift.f90 similarity index 100% rename from src/fftpack_ifftshift.f90 rename to src/fftpack/fftpack_ifftshift.f90 diff --git a/src/fftpack_irfft.f90 b/src/fftpack/fftpack_irfft.f90 similarity index 100% rename from src/fftpack_irfft.f90 rename to src/fftpack/fftpack_irfft.f90 diff --git a/src/fftpack_rfft.f90 b/src/fftpack/fftpack_rfft.f90 similarity index 100% rename from src/fftpack_rfft.f90 rename to src/fftpack/fftpack_rfft.f90 diff --git a/src/fftpack_utils.f90 b/src/fftpack/fftpack_utils.f90 similarity index 100% rename from src/fftpack_utils.f90 rename to src/fftpack/fftpack_utils.f90 diff --git a/src/meson.build b/src/fftpack/meson.build similarity index 100% rename from src/meson.build rename to src/fftpack/meson.build diff --git a/src/passb.f90 b/src/fftpack/passb.f90 similarity index 100% rename from src/passb.f90 rename to src/fftpack/passb.f90 diff --git a/src/passb2.f90 b/src/fftpack/passb2.f90 similarity index 100% rename from src/passb2.f90 rename to src/fftpack/passb2.f90 diff --git a/src/passb3.f90 b/src/fftpack/passb3.f90 similarity index 100% rename from src/passb3.f90 rename to src/fftpack/passb3.f90 diff --git a/src/passb4.f90 b/src/fftpack/passb4.f90 similarity index 100% rename from src/passb4.f90 rename to src/fftpack/passb4.f90 diff --git a/src/passb5.f90 b/src/fftpack/passb5.f90 similarity index 100% rename from src/passb5.f90 rename to src/fftpack/passb5.f90 diff --git a/src/passf.f90 b/src/fftpack/passf.f90 similarity index 100% rename from src/passf.f90 rename to src/fftpack/passf.f90 diff --git a/src/passf2.f90 b/src/fftpack/passf2.f90 similarity index 100% rename from src/passf2.f90 rename to src/fftpack/passf2.f90 diff --git a/src/passf3.f90 b/src/fftpack/passf3.f90 similarity index 100% rename from src/passf3.f90 rename to src/fftpack/passf3.f90 diff --git a/src/passf4.f90 b/src/fftpack/passf4.f90 similarity index 100% rename from src/passf4.f90 rename to src/fftpack/passf4.f90 diff --git a/src/passf5.f90 b/src/fftpack/passf5.f90 similarity index 100% rename from src/passf5.f90 rename to src/fftpack/passf5.f90 diff --git a/src/radb2.f90 b/src/fftpack/radb2.f90 similarity index 100% rename from src/radb2.f90 rename to src/fftpack/radb2.f90 diff --git a/src/radb3.f90 b/src/fftpack/radb3.f90 similarity index 100% rename from src/radb3.f90 rename to src/fftpack/radb3.f90 diff --git a/src/radb4.f90 b/src/fftpack/radb4.f90 similarity index 100% rename from src/radb4.f90 rename to src/fftpack/radb4.f90 diff --git a/src/radb5.f90 b/src/fftpack/radb5.f90 similarity index 100% rename from src/radb5.f90 rename to src/fftpack/radb5.f90 diff --git a/src/radbg.f90 b/src/fftpack/radbg.f90 similarity index 100% rename from src/radbg.f90 rename to src/fftpack/radbg.f90 diff --git a/src/radf2.f90 b/src/fftpack/radf2.f90 similarity index 100% rename from src/radf2.f90 rename to src/fftpack/radf2.f90 diff --git a/src/radf3.f90 b/src/fftpack/radf3.f90 similarity index 100% rename from src/radf3.f90 rename to src/fftpack/radf3.f90 diff --git a/src/radf4.f90 b/src/fftpack/radf4.f90 similarity index 100% rename from src/radf4.f90 rename to src/fftpack/radf4.f90 diff --git a/src/radf5.f90 b/src/fftpack/radf5.f90 similarity index 100% rename from src/radf5.f90 rename to src/fftpack/radf5.f90 diff --git a/src/radfg.f90 b/src/fftpack/radfg.f90 similarity index 100% rename from src/radfg.f90 rename to src/fftpack/radfg.f90 diff --git a/src/rfftb1.f90 b/src/fftpack/rfftb1.f90 similarity index 100% rename from src/rfftb1.f90 rename to src/fftpack/rfftb1.f90 diff --git a/src/rfftf1.f90 b/src/fftpack/rfftf1.f90 similarity index 100% rename from src/rfftf1.f90 rename to src/fftpack/rfftf1.f90 diff --git a/src/rffti1.f90 b/src/fftpack/rffti1.f90 similarity index 100% rename from src/rffti1.f90 rename to src/fftpack/rffti1.f90 diff --git a/src/rk.f90 b/src/fftpack/rk.f90 similarity index 100% rename from src/rk.f90 rename to src/fftpack/rk.f90 diff --git a/src/sint1.f90 b/src/fftpack/sint1.f90 similarity index 100% rename from src/sint1.f90 rename to src/fftpack/sint1.f90 diff --git a/src/zfftb.f90 b/src/fftpack/zfftb.f90 similarity index 100% rename from src/zfftb.f90 rename to src/fftpack/zfftb.f90 diff --git a/src/zfftf.f90 b/src/fftpack/zfftf.f90 similarity index 100% rename from src/zfftf.f90 rename to src/fftpack/zfftf.f90 diff --git a/src/zffti.f90 b/src/fftpack/zffti.f90 similarity index 100% rename from src/zffti.f90 rename to src/fftpack/zffti.f90