/Reverse_Time_Migration

An acoustic, isotropic, 2D reverse time migration implemented on OpenMP and DPC++ technologies

Primary LanguageC++GNU Lesser General Public License v3.0LGPL-3.0

Seismic Toolbox

stable

Seismic Toolbox contains all different seismology algorithm (RTM currently). Algorithms are computationally intensive processes which requires propagating wave in 2D model using time domain finite differences wave equation solvers.

During the imaging process a forward-propagated source wave field is combined at regular time steps with a back-propagated receiver wave field. Traditionally, synchronization of both wave fields result in a very large volume of I/O, disrupting the efficiency of typical supercomputers. Moreover, the wave equation solvers are memory bandwidth bound due to low flop-per-byte ratio and non-contiguous memory access, resulting hence in a low utilization of available computing resources.

Alternatively, approaches to reduce the IO bottleneck or remove it completely to fully utilize the processing power are usually explored and utilized such as the use of compression to reduce the I/O volume. Another approach that eliminates the need for I/O would be to add another propagation in reverse-time to the forward propagated source wave field.

Table of Contents

Features

  • An optimized OpenMP version:
    • Support the following boundary conditions:
      • CPML
      • Sponge
      • Random
    • Support the following stencil orders:
      • O(2)
      • O(4)
      • O(8)
      • O(12)
      • O(16)
    • Support 2D modeling and imaging
    • Support the following algorithmic approaches:
      • Two propagation, an I/O intensive approach where you would store all of the calculated wave fields while performing the forward propagation, then read them while performing the backward propagation.
      • We provide the option to use the ZFP compression technique in the two-propagation workflow to reduce the volume of data in the I/O.
      • Three propagation, a computation intensive approach where you would calculate the forward propagation storing only the last two time steps. You would then do a reverse propagation, propagate the wave field stored from the forward backward in time alongside the backward propagation.
    • Support solving the equation system in:
      • Second Order
      • Staggered First Order
    • Support manual cache blocking.
  • An optimized DPC++ version:
    • Support the following boundary conditions:
      • None
      • Random
      • Sponge
      • CPML
    • Support the following stencil orders:
      • O(2)
      • O(4)
      • O(8)
      • O(12)
      • O(16)
    • Support 2D modeling and imaging
    • Support the following algorithmic approaches:
      • Three propagation, a computation intensive approach where you would calculate the forward propagation storing only the last two time steps. You would then do a reverse propagation, propagate the wave field stored from the forward backward in time alongside the backward propagation.
    • Support solving the equation system in:
      • Second order
  • Basic OpenMp Offload version:
    • Support the following boundary conditions:
      • None
    • Support the following stencil orders:
      • O(2)
      • O(4)
      • O(8)
    • Support 2D modeling and imaging
    • Support the following algorithmic approaches:
      • Two propagation, an I/O intensive approach where you would store all of the calculated wave fields while performing the forward propagation, then read them while performing the backward propagation.
      • Three propagation, a computation intensive approach where you would calculate the forward propagation storing only the last two time steps. You would then do a reverse propagation, propagate the wave field stored from the forward backward in time alongside the backward propagation.
    • Support solving the equation system in:
      • Second order

Setup The Environment

  1. Clone the basic project

    git clone https://github.com/brightskiesinc/Reverse_Time_Migration
  2. Change directory to the project base directory

    cd Reverse_Time_Migration/
  3. To install and download everything you can easily run the setup.sh script found in /prerequisites folder

    ./prerequisites/setup.sh

    or refer to the README.md file in /prerequisites folder for more specific installations.

Prerequisites

  • CMake
    CMake version 3.5 or higher.

  • C++
    c++11 standard supported compiler.

  • Catch2
    Already included in the repository in prerequisites/catch

  • OneAPI
    OneAPI for the DPC++ version.

  • ZFP Compression

    • Only needed with OpenMp technology
    • You can download it from a script found in prerequisites/utils/zfp folder
  • OpenCV

    • Optional
    • v4.3 recommended
    • You can download it from a script found in prerequisites/frameworks/opencv folder

Versioning

When installing Seismic Toolbox, require its version. For us, this is what major.minor.patch means:

  • major - MAJOR breaking changes; includes major new features, major changes in how the whole system works, and complete rewrites; it allows us to considerably improve the product, and add features that were previously impossible.
  • minor - MINOR breaking changes; it allows us to add big new features.
  • patch - NO breaking changes; includes bug fixes and non-breaking new features.

Changelog

For previous versions, please see our CHANGELOG file.

License

This project is licensed under the The GNU Lesser General Public License, version 3.0 (LGPL-3.0) Legal License - see the LICENSE file for details