Home

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.

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.

Basic Notation

The code solves partial differential equations of the general form:

\[\partial_t u = \mathcal{L}u + \mathcal{N}(u)\ .\]

We decompose the right hand side of the above in a linear part ($\mathcal{L}u$) and a nonlinear part ($\mathcal{N}(u)$). The time steppers treat the linear and nonlinear parts differently.

The coefficients for the linear operator $\mathcal{L}$ are stored in array LC. The term $\mathcal{N}(u)$ is computed for by calling the function calcN!.

Source code organization

The code is divided along conceptual lines into problem-agnostic and problem-specific components. Files that contain problem-agnostic parts of the code are stored in /src. Files in /src define the domain, 'AbstractTypes' that supertype problem-specific types, and time-stepper types and routines. Problem-specific modules are stores in /src/physics.

Here's an overview of the code structure:

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.

Examples

Tutorials

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.

DocStrings

Index