/asgard-custom-commented

Base ASGarD, but with my comments.

Primary LanguageC++MIT LicenseMIT

ASGarD - Adaptive Sparse Grid Discretization

To cite the ASGarD code in your work, please use: (TODO)

The ASGarD project has the goal of building an solver specifically targeting high-dimensional PDEs where the "curse-of-dimensionality" has previously precluded useful continuum / Eularian (grid or mesh based as opposed to Monte-Carlo sampling) simulation. Our approach is based on a Discontinuous-Galerkin finite-element solver build atop an adaptive hierarchical sparse-grid (note this is different from the "combination tecnique" when applied to sparse-grids).

The developer documentation contains information about how to contribute to the ASGarD project.

  • (TODO) user docs about building/using the code
  • (TODO) docs about the method

Contact Us

Issues are a great way to discuss all aspects of the ASGarD project, whether it is to ask a general question, request a new feature, or propose a contribution to the code base.

The ASGarD project is led by David Green (greendl1@ornl.gov) at Oak Ridge National Laboratory.

Automated Test Status

Test Status (Develop)
format/clang Build Status
warnings/clang Build Status
unit/g++ Build Status
unit/clang++ Build Status
unit/g++/mpi Build Status
unit/g++/cuda Build Status
unit/g++/io Build Status

Dependencies

  • C++17
  • cmake 3.19
  • blas

Optional depedencies

  • cuda
  • mpi
  • highfive/hdf5
  • MATLAB
  • ScaLAPACK

Quickstart

Download and build

git clone https://github.com/project-asgard/asgard.git
cd asgard
mkdir build && cd build
cmake ../
make
ctest
./asgard

For best performance (especially on accelerators) please pass -DCMAKE_BUILD_TYPE=Release to disable asserts when building the code.

To see a list of available PDEs, run ./asgard --available_pdes. The listed PDEs can be selected using the -p argument to asgard.

To see the list of all runtime options, run ./asgard --help.

For specific platform build instructions, see this wiki page.

MATLAB Interface

Asgard can interface with MATLAB to plot, share data, and run scripts. To enable this, compile with -DASGARD_USE_MATLAB=ON.

If using only for plotting purposes, then Asgard can be run without any additional arguments. However, for sharing data with MATLAB, Asgard will need to connect to a shared session. This can be done in MATLAB by running

matlab.engine.shareEngine

Asgard should automatically connect with this shared session, but the engine name can also be specified directly by giving the result of

matlab.engine.engineName

to Asgard with the --matlab_name option.

Note: do not start MATLAB in the DG-SparseGrid repo when trying to use this for plotting.

ScaLAPACK Integration

The ASGARD_USE_SCALAPACK build option adds the "scalapack" solver option to ASGarD. In the implicit timestep method, this option distributes the matrix solve across multiple processes and nodes and enables larger problems that are too large for a single computer.

This build option is only available when ASGARD_USE_MPI=ON. Unfortunately, setting ASGARD_USE_SCALAPACK alone is not sufficient and doesn't change the ASGARD_USE_MPI setting.