PrincetonUniversity/SPECFEMPP: v0.5.0
Abstract
SPECFEM++ 0.5.0 π TL;DR New Features Support for non-conforming 2D meshes through a discontinuous Galerkin approach 3D elastic isotropic simulation support Improved Documentation Overhaul of API documentation Improved structure Includes the implemented equations Two new cookbooks Discontinuous Galerkin for fluid-solid wave propagation with bathymetry Wave propagation in the Marmousi model (adapted from SPECFEM2D) CI Nightly benchmarks for homogeneous elastic and fluid-solid simulations are run on both CPU and GPU Review dashboard visualizing the nightly benchmarks and other CI information Visualization VTKHDF β Plotting in 3D is rather difficult since there are too many parameters to play with. Instead, we opted to support the writing of VTKHDF files: a single HDF5 file that stores all timesteps. Both 2D and 3D simulations support this file format. Automatically cropped 4K snapshots Blue-red color scheme for the output wavefields π What's New Support for Non-Conforming Meshes SPECFEM++ now supports non-conforming boundaries using a discontinuous Galerkin approach to the SEM. This work was contributed by Kentaro Hanson (@int-ptr-ptr). The graphs below show results from two simulations of an acoustic-elastic layered domain meshed using: A conforming mesh (top left) A non-conforming mesh (top right) The bottom graph compares traces from both simulations at a receiver within the acoustic domain. For more details, refer to the non-conforming cookbook. Improved Documentation This release simplifies the API documentation by organizing it into distinct sections, with each namespace clearly separated. We have also included technical implementation details wherever possible. For instance, the API documentation for stress computation now clearly explains how each component of the stress tensor is computed. Below is a snippet of the documentation for the stress computation call for an elastic isotropic medium. Support for 3D Elastic Isotropic Simulation In this release, we added support for 3D elastic isotropic simulations. We include the compilation of the Fortran internal mesher, and generate the GLL databases on the fly in SPECFEM++ for an improved data layout compared to loading the Fortran databases. For a tutorial, please refer to our 3D homogeneous elastic isotropic cookbook: 3D Elastic Isotropic Cookbook. Through integration testing, we make sure that the simulation matches SPECFEM3D Cartesian sample-by-sample. To visualize the 3D wavefield in Paraview, we also included the writing of VTKHDF files. Marmousi model simulation We included a cookbook that walks the user through simulating wave propagation in the Marmousi model. SPECFEM2D implemented a high-resolution Marmousi example. The original velocity model for this example was provided by Yann Capdeville, and Hom Nath Gharti created a very high-resolution CUBIT mesh from it. We included the static CUBIT mesh to create a cookbook for wave propagation in the Marmousi model. To run this cookbook, a GPU compilation is strongly recommended, as the mesh is quite fine and the code doesn't yet support MPI. Blue-red color scheme Until now, we only supported magnitude plots for vector fields and absolute value for scalar fields. In particular, for pressure and rotation (Cosserat media), this felt limiting. For any scalar field, the default is now red-blue, while for vector fields, unless a component is specified, we still use magnitude by default. To pick a component, simply update the display section to include the component parameter. display: format: PNG directory: path/to/output_dir/ field: displacement component: x # y, z, or magnitude are other possible values simulation-field: forward time-interval: 5 Nightly Benchmarks We run nightly benchmarks for both serial CPU and GPU simulations. At this time, the CPU simulations are run on Intel Gold 6548Y+ chips and GPU simulations on Nvidia H100s. The benchmarks are published on a static review dashboard that is updated every morning. An example of the CPU runs β a snapshot of all runs up until Jan 14 β is shown below. π Statistics New Contributors @tjhei made their first contribution in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1079 @bangerth made their first contribution in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1081 πͺ΅ Changelog π¨βπ¬ New physics Implements stacey boundaries for Cosserat media by @maxlchien in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1004 Adjacency2d features by @int-ptr-ptr in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1044 Issue 1035 - 3D specialization for specfem/Jacobian by @icui in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1037 Issue 946- assembly kernels and properties by @icui in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1101 Issue 1120 - Added 3d elastic isotropic stress and associated unit-tests by @lsawade in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1143 Issue 1121 - Adds 3D mass matrix computation and associated tests by @lsawade in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1144 Issue 1122 - implements 3D elastic isotropic source by @lsawade in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1157 Mortar Transfer Function by @int-ptr-ptr in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1227 Nonconforming interfaces struct by @int-ptr-ptr in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1241 edge->intersection compute_coupling by @int-ptr-ptr in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1325 π Performance enhancement Reorders Kokkos views by @Rohit-Kakodkar in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1023 Use references for 'const std::string' function arguments. by @bangerth in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1081 gmshlayerbuilder NCI finding to use rtree by @int-ptr-ptr in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1181 Optimize macros. by @icui in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1267 β Enhancement Issue 892 - Adding Intrinsic spin seismograms by @lsawade in https://github.com/PrincetonUniversity/SPECFEMPP/pull/941 Updated fortran mesher to write control nodes by @Rohit-Kakodkar in https://github.com/PrincetonUniversity/SPECFEMPP/pull/994 Issue 987 - Implements full compatibility with unity building. [Already reviewed!] by @lsawade in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1006 Issue 966 - Template jacobian_matrix and element_types with dimension. by @icui in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1007 Add 3D material definitions. by @icui in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1005 946 - Add dim3 value_containers. by @icui in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1002 Add routines to compute 3D shape functions by @Rohit-Kakodkar in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1012 Adds 3D mesh struct to assembly by @Rohit-Kakodkar in https://github.com/PrincetonUniversity/SPECFEMPP/pull/999 3D implementation for Jacobian Matrix by @Rohit-Kakodkar in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1021 Issue 985 - Add tags to 3D mesh by @icui in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1014 Issue 993 - Add 3D specification for element_types by @icui in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1028 Assembly fields implementation for 3D by @Rohit-Kakodkar in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1033 Update Docker with HDF5 by @Rohit-Kakodkar in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1061 Issue 990 Part 7- Implemented 3D force, moment tensor, readers and associated tests by @lsawade in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1041 Issue 1057 - Implements locate_point for 3D by @lsawade in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1098 Issue 981 - Implement 3D receivers by @lsawade in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1139 Interpolate function for 3D by @Rohit-Kakodkar in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1119 gmsh: topography file to external mesh files by @int-ptr-ptr in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1148 Update locate point using adjacency map by @Rohit-Kakodkar in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1137 Adjacency map implementation by @Rohit-Kakodkar in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1116 1092 npy - Add npy support as the first step of supporting npz by @icui in https://github.com/PrincetonUniversity/SPECFEMPP/pull/1125 Edge-based locate point by @int-ptr-ptr in https://github.com/
Fields of Study & Subjects
Seismic Imaging and Inversion Techniques
Seismic Waves and Analysis
Advanced Numerical Methods in Computational Mathematics
Publication details
- Journal / source
- Zenodo (CERN European Organization for Nuclear Research)
- Publication date
- 16 January 2026