An open API service indexing awesome lists of open source software.

https://github.com/mikeswang/fftw-age

FFTW wisdom generation
https://github.com/mikeswang/fftw-age

cpp fftw

Last synced: 3 months ago
JSON representation

FFTW wisdom generation

Awesome Lists containing this project

README

          

# ``FFTW-Age``: FFTW Wisdom Generation

[![Release](https://img.shields.io/github/v/release/MikeSWang/FFTW-Age?display_name=tag&sort=semver&logo=Git)](https://github.com/MikeSWang/FFTW-Age/releases/latest)
[![CI](https://img.shields.io/github/actions/workflow/status/MikeSWang/FFTW-Age/ci.yml?label=ci&logo=GitHubActions)](https://github.com/MikeSWang/FFTW-Age/actions/workflows/ci.yml)
[![pre-commit.ci-Status](https://results.pre-commit.ci/badge/github/MikeSWang/FFTW-Age/main.svg)](https://results.pre-commit.ci/latest/github/MikeSWang/FFTW-Age/main)
[![Codacy-Badge](https://app.codacy.com/project/badge/Grade/6e18472a2f9c447aaf35a66cbcf2f633)](https://app.codacy.com/gh/MikeSWang/FFTW-Age/dashboard?utm_source=gh&utm_campaign=Badge_grade)

> "_With age comes wisdom, but sometimes age comes alone._"
>  — Oscar Wilde

``FFTW-Age`` is a lightweight C++ utility for generating FFTW wisdom files
for OpenMP-multithreaded 3‑d FFT transforms as a replacement for
[`fftw-wisdom`]( https://www.fftw.org/fftw-wisdom.1.html).

For background information, please refer to
[FFTW Wisdom](https://www.fftw.org/fftw3_doc/Wisdom.html).

## Installation

The C++ program can built with `make`, provided that dependency
requirements (FFTW3 and OpenMP libraries) are satisfied.

> [!IMPORTANT]
> Ensure the C++ compiler used supports OpenMP and the FFTW3 library is
> installed/configured accordingly. The default [``Makefile``](Makefile)
> (located at the repository directory root) assumes the GCC compiler and
> OpenMP library.

First `git clone` the desired branch/release from the GitHub repository
and change into the repository directory path:

```sh
git clone git@github.com:MikeSWang/FFTW-Age.git --branch
cd FFTW-Age
```

Then, execute in shell:

```sh
make clean
make install
```

## Usage

Once installed, the FFTW-Age utility can be called from the command line:

```sh
fftw-age [--rigour=] [--outdir=] -xx
```

where

- `fftw-age` is assumed to be executable (include the path if it is not
in the current working directory);
- ```` is the transform direction,
either ``"f"`` for ``FFTW_FORWARD`` and ``"b"`` for ``FFTW_BACKWARD``;
- ````, ```` and ```` are the dimensions of the 3-d transform;
- ```` corresponds to the FFTW planner flag/rigour level,
with ``"m"`` (measured; default) for ``FFTW_MEASURE``
and ``"p"`` (patient) for ``FFTW_PATIENT``;
- ```` is the output wisdom file directory
(absolute or relative to the current working directory).

The output wisdom file will have the filename
``fftw_omp__xx_.wisdom``.

> [!NOTE]
> Only complex-to-complex, in-place transforms are currently supported. Hence
> ```` is fixed to ``"c"`` (complex-to-complex) and
> ```` is fixed to ``"i"`` (in-place) for now.

See also the help message generated by ``fftw-age --help``.

For more information about FFTW planner flags, please refer to
[FFTW Planner Flags](https://www.fftw.org/fftw3_doc/Planner-Flags.html).

## Attribution

To acknowledge the use of ``FFTW-Age`` in your published research, please
cite this repository; you can refer to the file [``CITATION.cff``](CITATION.cff)
for the relevant information.

## Acknowledgement

This C++ utility makes use of the [``argparse``](
https://github.com/p-ranav/argparse) library.

## Contributing/Development

![C++-Standard](https://img.shields.io/badge/std-c%2B%2B17-informational?logo=cplusplus)

[![Release-Date](https://img.shields.io/github/release-date-pre/MikeSWang/FFTW-Age)](https://github.com/MikeSWang/FFTW-Age/releases/latest)
![Commits-Since](https://img.shields.io/github/commits-since/MikeSWang/FFTW-Age/latest/main)

[![Build-Issues](https://img.shields.io/github/issues/MikeSWang/FFTW-Age/build)](https://github.com/MikeSWang/FFTW-Age/issues?q=is%3Aopen+is%3Aissue+label%3Abuild)
[![Bug-Issues](https://img.shields.io/github/issues/MikeSWang/FFTW-Age/bug)](https://github.com/MikeSWang/FFTW-Age/issues?q=is%3Aopen+is%3Aissue+label%3Abug)
[![Feature-Issues](https://img.shields.io/github/issues/MikeSWang/FFTW-Age/feature)](https://github.com/MikeSWang/FFTW-Age/issues?q=is%3Aopen+is%3Aissue+label%3Afeature)
[![Pull-Requests](https://img.shields.io/github/issues-pr/MikeSWang/FFTW-Age)](https://github.com/MikeSWang/FFTW-Age/pulls)

[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://github.com/pre-commit/pre-commit)

[![Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MikeSWang/FFTW-Age?hide_repo_select=true&ref=main)

User feedback and contributions are very welcome. Please refer to the
[contribution guidelines](.github/CONTRIBUTING.md).

## Discussions & Wiki

[![Discussions](https://img.shields.io/github/discussions/MikeSWang/FFTW-Age)](https://github.com/MikeSWang/FFTW-Age/discussions)

A [community forum](https://github.com/MikeSWang/FFTW-Age/discussions)
for users and developers exists, where you can receive
announcements, post questions, share ideas and get updates.

A [wiki site](https://github.com/MikeSWang/FFTW-Age/wiki) collects wisdoms
for specific use cases and user environments.

## Releases

Release notes are included in the [change log](CHANGELOG.md).

## Licence

[![Licence](https://img.shields.io/github/license/MikeSWang/FFTW-Age?label=licence&style=flat-square&color=informational)](https://github.com/MikeSWang/FFTW-Age/blob/main/LICENCE)

``FFTW-Age`` is made freely available under the [GPL-3.0 licence](
https://www.gnu.org/licenses/gpl-3.0.en.html) (or any later version).
Please see [``LICENCE``](./LICENCE) (located at the repository directory root)
for full terms and conditions.

© 2024 Mike S Wang