Skip to content

Implement POCS with different proximal algorithms (HQS, ADMM, PD)

Notifications You must be signed in to change notification settings

DIG-Kaust/PyPOCS

Repository files navigation

LOGO

Reproducible material for Why POCS works, and how to make it better - Ravasi M., Luiken N. submitted to Geophysics.

Project structure

This repository is organized as follows:

  • 📂 pypocs: python library containing routines for POCS interpolation with various solvers;
  • 📂 data: folder containing sample data;
  • 📂 notebooks: set of jupyter notebooks reproducing the experiments in the paper (see below for more details);
  • 📂 scripts: set of python scripts used to facilitate the run of multiple experiments;

Notebooks

The following notebooks are provided:

  • 📙 POCS_Overthrust-DataCreation.ipynb: notebook creating the input .npz dataset to be used as input for the scripts (see below);
  • 📙 POCS_Overthrust-Irregular3D.ipynb: notebook performing interpolation of a shot gather of the Overthrust dataset from irregularly sampled inlines;
  • 📙 POCS_Overthrust-FullIrregular3D.ipynb: notebook performing interpolation of a shot gather of the Overthrust dataset from an irregularly sampled 2d-grid;
  • 📙 POCS_Overthrust-Summary.ipynb: notebook visualizing the results of the various algorithms used in the two previous notebooks.
  • 📙 POCS_Overthrust-Offthegrid3D_windows.ipynb: notebook performing interpolation of a shot gather of the Overthrust dataset from irregularly sampled inlines with dithering (using disjoint windowed approach);
  • 📙 POCS_Overthrust-Offthegrid3D_sliding.ipynb: notebook performing interpolation of a shot gather of the Overthrust dataset from irregularly sampled inlines with dithering (using global, sliding-window approach).

Scripts

The following script is provided:

  • 📙 InterpOffthegrid.py: script performing interpolation with primal-dual on off-the-grid receivers;

The script requires an input .npz file containing the following fields.

  • 📇 data: 3-dimensional pressure data to interpolate of size nrx x nry x nt
  • 📇 t: time axis of size nt.
  • 📇 RECX: x-locations of all receivers in the input regular grid.
  • 📇 RECY: y-locations of all receivers in the input regular grid.
  • 📇 recz: z-location of receivers (assumed to be here the same for all receivers - use average if they differ).
  • 📇 SRCX: x-location of source.
  • 📇 SRCY: y-location of source.
  • 📇 srcz: z-location of source.

Getting started 👾 🤖

To ensure reproducibility of the results, we suggest using the environment.yml file when creating an environment.

Simply run:

./install_env.sh

It will take some time, if at the end you see the word Done! on your terminal you are ready to go. After that you can simply install your package:

pip install .

or in developer mode:

pip install -e .

Remember to always activate the environment by typing:

conda activate pypocs

Disclaimer: All experiments have been carried on a Intel(R) Xeon(R) CPU @ 2.10GHz equipped with a single NVIDIA GEForce RTX 3090 GPU. Different environment configurations may be required for different combinations of workstation and GPU.

Citing 📰 🏆

If you find this library useful for your work, please cite the following papers

@article{ravasi2022,
	title={Why POCS works, and how to make it better},
	authors={M. Ravasi, N. Luiken},
	journal={ArXiv},
	year={2022}
}

About

Implement POCS with different proximal algorithms (HQS, ADMM, PD)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages