Skip to content

v0.5.0

Latest

Choose a tag to compare

@lsawade lsawade released this 16 Jan 14:39
671558d

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.

image image 1 image 2

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.

image 3

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.

image 4

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.

marmousi

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

fluid-solid-nonconforming

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.

newplot_(1)

📊 Statistics

analysis

New Contributors

🪵  Changelog

👨‍🔬 New physics

🚀 Performance enhancement

✚ Enhancement

📚 Documentation

Fortran Meshfem2D/3D updates

Refactor

  • Issue 925 + 926: rename partial derivatives, ScalarPointViewType, VectorPointViewType by @icui in #934
  • Issue 935 - Move compute to core/specfem/compute by @icui in #939
  • Issue 940 - rename compute namespace to assembly by @icui in #942
  • Adds template specialization for mesh by @Rohit-Kakodkar in #959
  • Implements 2D specialization for fields by @Rohit-Kakodkar in #970
  • Issue 961 - Templating sources and receivers by @lsawade in #964
  • Adds dim2 template specialization for boundaries by @Rohit-Kakodkar in #972
  • Issue 952 - Template assembly::kernels and assembly::properties with dimension by @icui in #962
  • Adds 2D specialization for boundary values - take 2 by @Rohit-Kakodkar in #991
  • Issue 975 Adds template specialization for coupled interfaces. by @lsawade in #977
  • Refactor shape functions by @Rohit-Kakodkar in #1008
  • Implements 2D assembly by @Rohit-Kakodkar in #992
  • Refactor data access class by @Rohit-Kakodkar in #1019
  • Issue 981 - Dimension templates the receiver class and moved it to core by @lsawade in #1010
  • Issue 990 Part 2 - Update the way we compute the source vector and tensor by @lsawade in #1025
  • Issue 990 Part 3 - Moved include,src/source to core/specfem/source by @lsawade in #1026
  • Issue 990 Part 4 - Consolidating vector and tensor forces. by @lsawade in #1029
  • Issue 990 Part 5 - Implementation of simplified tests for the vector and tensor sources by @lsawade in #1032
  • Issue 1027 - rename free_surface to acoustic_free_surface by @icui in #1102
  • Issue - 982 Added newer simpler versions of access functions for fields by @Rohit-Kakodkar in #1034
  • Issue 990 -- Moves compute source array to assembly by @lsawade in #1003
  • Create edge types to sort all edges with tags by @Rohit-Kakodkar in #1179
  • Reimplement coupled interfaces using macros by @Rohit-Kakodkar in #1189
  • Implements new kokkos kernel to compute coupling by @Rohit-Kakodkar in #1194
  • Update compute coupling calls by @Rohit-Kakodkar in #1201
  • Issue 1216 - Part 1 Moving the periodic tasks to core by @lsawade in #1252
  • Issue 1245 - Moves simulation field data access functions by @lsawade in #1284
  • Chunk -> ChunkElement and added ChunkEdge Accessing by @int-ptr-ptr in #1273
  • 1264 Part II - Remove hprime_wgll by @icui in #1293
  • 1264 Part II - Move element::quadrature to quadrature::lagrange_derivative by @icui in #1300
  • Issue 1302 - Implement point weights by @icui in #1305
  • Refactors all macros into single library by @Rohit-Kakodkar in #1357
  • 1178 - Remove assemble_legacy by @icui in #1374
  • 1178 - Construct assembly::coupled_interfaces from adjacency_graph by @icui in #1422
  • Refactor non-conforming interfaces by @Rohit-Kakodkar in #1439
  • specfem::Context struct and ContextGuard for initialization of kokkos, mpi, and handling initialization from python side etc. by @lsawade in #1149
  • 1392 - Documentation Update - Macros by @icui in #1511

🐛 Bug Fixes

Configuration/CMake

  • Issue 861 - Updating the tests to be able to run the executable from the test directory by @lsawade in #956
  • Issue 924 - Updated Jenkins tests to run in parallel and only produce output on failure by @lsawade in #960
  • Feature unity build by @lsawade in #988
  • Specfem prefix by @lsawade in #1085
  • Putting the finding and/or installation of dependencies into a separate folder "cmake" for a cleaner Cmakelists.txt by @lsawade in #1083
  • Fixes cmake issues with boost etc. by @lsawade in #1190

🔧 Maintenance

🧾 New tests

Other Changes

Full Changelog: v0.4.0...v0.5.0