SPECFEM++ - A modular and portable spectral-element code for seismic wave propagation¶
Community Project
SPECFEM++ is a community project. We welcome contributions from everyone. Please see contribution section for more details.
Under Development
The package is currently under development and is not yet ready for production use. We are working towards making the package more complete. Please report any bugs you find or request features that you would like to see in the package.
Monthly Developer Meetings
We host a monthly developer meeting on the first Wednesday of every month at 12:00 PM Eastern Time. Please join us if you are interested in contributing to the project or would like to learn more about the project. Please see this page for more details.
SPECFEM++ is a complete re-write of SPECFEM suite of packages (SPECFEM2D, SPECFEM3D, SPECFEM3D_GLOBE) using C++. Compared to the earlier version, SPECFEM++ code base provides:
a robust and flexible code structure,
modularity that allows for easy addition of new features,
portability that allows the code to run on a variety of architectures (CPU, NVIDIA GPUs, Intel GPUs, AMD GPUs etc.), and
a user-friendly build infrastructure that allows the code to be easily compiled and run on a variety of platforms.
Download the code
The code is available on GitHub.
Current capabilities¶
Table below shows various features available and tested in this package on various architectures:
Feature |
CPU (serial) |
CPU (OpenMP) |
CUDA |
HIP |
|---|---|---|---|---|
2-D Physics (Forward / Misfit Kernels) |
||||
Acoustic Isotropic |
✔ / ✔ |
✔ / ✔ |
✔ / ✔ |
✔* / ✔* |
Elastic Isotropic P-SV |
✔ / ✔ |
✔ / ✔ |
✔ / ✔ |
✔* / ✔* |
Elastic Isotropic SH |
✔ / ✔* |
✔ / ✔* |
✔ / ✔* |
✔* / ✔* |
Elastic Anisotropic P-SV |
✔ / ✔ |
✔ / ✔ |
✔ / ✔ |
✔* / ✔* |
Elastic Anisotropic SH |
✔ / ✘ |
✔ / ✘ |
✔ / ✘ |
✔* / ✘ |
Poroelastic Isotropic (P-SV only) |
✔ / ✘ |
✔ / ✘ |
✔ / ✘ |
✔* / ✘ |
Elastic Isotropic Cosserat P-SV ** |
✔ / ✘ |
✔ / ✘ |
✔ / ✘ |
✔* / ✘ |
2-D Medium Coupling |
||||
Acoustic-Elastic coupling |
✔ |
✔ |
✔ |
✔* |
Acoustic-Poroelastic coupling |
✘ |
✘ |
✘ |
✘ |
Elastic-Poroelastic coupling |
✘ |
✘ |
✘ |
✘ |
Boundary Conditions (BC) |
||||
Absorbing BC (Stacey) |
✔ |
✔ |
✔ |
✔* |
Free Surface BC |
✔ |
✔ |
✔ |
✔* |
Simulation Setup |
||||
Forward Simulations |
✔ |
✔ |
✔ |
✔* |
Adjoint Simulations |
✔ |
✔ |
✔ |
✔* |
Time Schemes |
||||
Newmark |
✔ |
✔ |
✔ |
✔* |
Seismograms |
||||
Displacement |
✔ |
✔ |
✔ |
✔* |
Velocity |
✔ |
✔ |
✔ |
✔* |
Acceleration |
✔ |
✔ |
✔ |
✔* |
Seismogram Formats |
||||
ASCII |
✔ |
✔ |
✔ |
✔* |
* Not tested. This, in general means that the feature is not tested in continuous integration if the entire column has a star, and if the row has a star, it means that the feature is not tested/does not match the Fortran version of specfem2d. In the former case, see HIP column, and for the latter case, see the Poroelastic Isotropic row.
** Not peer reviewed yet.
Note
While we work towards building this package and making the code/documentation more complete, please refer relevant SPECFEM package documentations for technical details on SPECFEM theory.