FourierFlows.jl Documentation
Overview
FourierFlows provides solvers for partial differential equations on doubly-periodic domains using Fourier-based pseudospectral methods. A central intent of the software's design is also to provide a framework for writing new, fast solvers for new physical problems. The code is written in Julia.
Usage
The code solves partial differential equations of the general form:
We decompose the right hand side of the above in a linear part ($\mathcal{L}u$) and a nonlinear part ($\mathcal{N}(u)$). The nonlinear part may include external forcing, e.g., $\mathcal{N}(u) = -u\partial_x u + f$.
Installation
FourierFlows is a registered package and so can be installed via Pkg.add
.
Pkg.add("FourierFlows")
For now, this package supports Julia 0.6
. Support for version 0.7
is on its way.
Writing fast solvers
The performance-intensive part of the code involves just two functions: the time-stepping scheme stepforward!
, and the function calcN!
that calculates the nonlinear part of the given equation's right-hand side. Optimization of these two functions for a given problem will produce the fastest possible code.
Future work
The code is in the chaotic stage of development. A main goal for the future is to permit the use of shared memory parallelism in the compute-intensive routines (shared-memory parallelism provided already by FFTW/MKLFFT, but is not yet native to Julia for things like element-wise matrix multiplication, addition, and assignment). This feature may possibly be enabled by Intel Lab's ParallelAccelerator package.
Developers
FourierFlows is currently being developed by Gregory L. Wagner and Navid C. Constantinou.
Cite
The code is citable via zenodo. Please cite as:
Gregory L. Wagner & Navid C. Constantinou. (2018). FourierFlows/FourierFlows.jl: FourierFlows v0.1.1 (Version v0.1.1). Zenodo. http://doi.org/10.5281/zenodo.1302136