Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

M. B. Widess, (1973), "HOW THIN IS A THIN BED?," GEOPHYSICS 38: 1176-1180. #62

Draft
wants to merge 4 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions widess-1973/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# How Thin is a Thin Bed?

This paper has been reproduced by [Altay Sansal](https://github.com/tasansal).

### How to Run

1. Create `conda` environment from `environment.yaml` file.
2. Install Jupyter or Jupyer Lab; or register environment kernel with global Jupyter Lab.
3. Run.

### Reference

M. B. Widess, (1973), "HOW THIN IS A THIN BED?," GEOPHYSICS 38: 1176-1180.

<div style="text-align: left; margin: 0 auto;">

| | |
|-------------|-----------------------------------|
| Publication | GEOPHYSICS |
| Published | December 1973 |
| Authors | M. B. Widess |
| DOI | https://doi.org/10.1190/1.1440403 |

</div>


### Abstract

Based on reflective properties, a thin bed may be conveniently defined as one whose thickness is less than about 𝜆𝑏/8 where 𝜆𝑏 is the (predominant) wavelength computed using the velocity of the bed. The amplitude of a reflection from a thin bed is to the first order of approximation equal to 4𝜋Ab/𝜆𝑏, where b is the thickness of the bed and A is the amplitude of the reflection if the bed were to be very thick. The equation shows that a bed as thin as 10 ft has, for typical frequency and velocity, considerably more reflective power than is usually attributed to it.
110 changes: 110 additions & 0 deletions widess-1973/environment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
name: repro-zoo
channels:
- conda-forge
dependencies:
- appnope=0.1.3=pyhd8ed1ab_0
- asttokens=2.2.1=pyhd8ed1ab_0
- backcall=0.2.0=pyh9f0ad1d_0
- backports=1.0=pyhd8ed1ab_3
- backports.functools_lru_cache=1.6.5=pyhd8ed1ab_0
- brotli=1.1.0=hb547adb_0
- brotli-bin=1.1.0=hb547adb_0
- brotli-python=1.1.0=py311ha891d26_0
- bzip2=1.0.8=h3422bc3_4
- ca-certificates=2023.7.22=hf0a4a13_0
- certifi=2023.7.22=pyhd8ed1ab_0
- charset-normalizer=3.2.0=pyhd8ed1ab_0
- comm=0.1.4=pyhd8ed1ab_0
- contourpy=1.1.0=py311he4fd1f5_0
- cycler=0.11.0=pyhd8ed1ab_0
- debugpy=1.6.8=py311ha891d26_0
- decorator=5.1.1=pyhd8ed1ab_0
- exceptiongroup=1.1.3=pyhd8ed1ab_0
- executing=1.2.0=pyhd8ed1ab_0
- fonttools=4.42.1=py311heffc1b2_0
- freetype=2.12.1=hd633e50_1
- idna=3.4=pyhd8ed1ab_0
- importlib-metadata=6.8.0=pyha770c72_0
- importlib_metadata=6.8.0=hd8ed1ab_0
- ipykernel=6.25.1=pyh5fb750a_0
- ipython=8.15.0=pyh31c8845_0
- jedi=0.19.0=pyhd8ed1ab_0
- jupyter_client=8.3.1=pyhd8ed1ab_0
- jupyter_core=5.3.1=py311h267d04e_0
- kiwisolver=1.4.5=py311he4fd1f5_0
- lcms2=2.15=hd835a16_1
- lerc=4.0.0=h9a09cb3_0
- libblas=3.9.0=17_osxarm64_openblas
- libbrotlicommon=1.1.0=hb547adb_0
- libbrotlidec=1.1.0=hb547adb_0
- libbrotlienc=1.1.0=hb547adb_0
- libcblas=3.9.0=17_osxarm64_openblas
- libcxx=16.0.6=h4653b0c_0
- libdeflate=1.18=h1a8c8d9_0
- libexpat=2.5.0=hb7217d7_1
- libffi=3.4.2=h3422bc3_5
- libgfortran=5.0.0=12_3_0_hd922786_1
- libgfortran5=12.3.0=ha3a6a3e_1
- libjpeg-turbo=2.1.5.1=h1a8c8d9_0
- liblapack=3.9.0=17_osxarm64_openblas
- libopenblas=0.3.23=openmp_hc731615_0
- libpng=1.6.39=h76d750c_0
- libsodium=1.0.18=h27ca646_1
- libsqlite=3.43.0=hb31c410_0
- libtiff=4.5.1=h23a1a89_1
- libwebp-base=1.3.1=hb547adb_0
- libxcb=1.15=hf346824_0
- libzlib=1.2.13=h53f4e23_5
- llvm-openmp=16.0.6=h1c12783_0
- matplotlib=3.7.2=py311ha1ab1f8_0
- matplotlib-base=3.7.2=py311h3bc9839_0
- matplotlib-inline=0.1.6=pyhd8ed1ab_0
- munkres=1.1.4=pyh9f0ad1d_0
- ncurses=6.4=h7ea286d_0
- nest-asyncio=1.5.6=pyhd8ed1ab_0
- numpy=1.25.2=py311hb8f3215_0
- openjpeg=2.5.0=hbc2ba62_2
- openssl=3.1.2=h53f4e23_0
- packaging=23.1=pyhd8ed1ab_0
- parso=0.8.3=pyhd8ed1ab_0
- pexpect=4.8.0=pyh1a96a4e_2
- pickleshare=0.7.5=py_1003
- pillow=10.0.0=py311h095fde6_0
- pip=23.2.1=pyhd8ed1ab_0
- platformdirs=3.10.0=pyhd8ed1ab_0
- pooch=1.7.0=pyha770c72_3
- prompt-toolkit=3.0.39=pyha770c72_0
- prompt_toolkit=3.0.39=hd8ed1ab_0
- psutil=5.9.5=py311he2be06e_0
- pthread-stubs=0.4=h27ca646_1001
- ptyprocess=0.7.0=pyhd3deb0d_0
- pure_eval=0.2.2=pyhd8ed1ab_0
- pygments=2.16.1=pyhd8ed1ab_0
- pyparsing=3.0.9=pyhd8ed1ab_0
- pysocks=1.7.1=pyha2e5f31_6
- python=3.11.5=h47c9636_0_cpython
- python-dateutil=2.8.2=pyhd8ed1ab_0
- python_abi=3.11=3_cp311
- pyzmq=25.1.1=py311hb1af645_0
- readline=8.2=h92ec313_1
- requests=2.31.0=pyhd8ed1ab_0
- scipy=1.11.2=py311h93d07a4_0
- setuptools=68.1.2=pyhd8ed1ab_0
- six=1.16.0=pyh6c4a22f_0
- stack_data=0.6.2=pyhd8ed1ab_0
- tk=8.6.12=he1e0b03_0
- tornado=6.3.3=py311heffc1b2_0
- traitlets=5.9.0=pyhd8ed1ab_0
- typing-extensions=4.7.1=hd8ed1ab_0
- typing_extensions=4.7.1=pyha770c72_0
- tzdata=2023c=h71feb2d_0
- urllib3=2.0.4=pyhd8ed1ab_0
- wcwidth=0.2.6=pyhd8ed1ab_0
- wheel=0.41.2=pyhd8ed1ab_0
- xorg-libxau=1.0.11=hb547adb_0
- xorg-libxdmcp=1.1.3=h27ca646_0
- xz=5.2.6=h57fd34a_0
- zeromq=4.3.4=hbdafb3b_1
- zipp=3.16.2=pyhd8ed1ab_0
- zstd=1.5.5=h4f39d0f_0
prefix: /Users/Altay.Sansal/mambaforge/envs/repro-zoo
130 changes: 130 additions & 0 deletions widess-1973/figures.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
import matplotlib.pyplot as plt
import numpy as np
from numpy.typing import NDArray


def figure1(
times: NDArray,
amplitude_r1: NDArray,
amplitude_r2: NDArray,
amplitude_rd: NDArray,
shift: float,
dpi: int,
) -> None:
"""Generate Figure 1 of Widess, 1973."""
fig, (fig_1a, fig_1b, fig_1c) = plt.subplots(3, 1, dpi=dpi)
arrow_props = dict(facecolor="black", width=0.001, headwidth=5, headlength=5)

# Panel a.
fig_1a.plot(times, amplitude_r1, "black")
fig_1a.plot(times, amplitude_r2, "black")
fig_1a.fill_between(
times,
amplitude_r1,
amplitude_r2,
facecolor="none",
edgecolor="black",
hatch="|||||",
)
fig_1a.grid(True, "major", axis="x")
fig_1a.set_xticks(np.arange(shift / 2, 1, 0.165) - 0.5)
fig_1a.annotate(
text="$R_1$",
xy=(times[25], amplitude_r1[25]),
xytext=(-0.35, 0.5),
arrowprops=arrow_props,
)
fig_1a.annotate(
text="$-R_2$",
xy=(times[25], amplitude_r2[25]),
xytext=(-0.15, -0.5),
arrowprops=arrow_props,
)
# Panel b.
fig_1b.plot(times, amplitude_rd, "black")
fig_1b.grid(True, "major")
fig_1b.set_xticks(np.arange(shift / 2, 1, 0.165) - 0.5)
fig_1b.set_yticks([0])
fig_1b.annotate(
text="$R_d$",
xy=(times[40], amplitude_rd[40]),
xytext=(-0.25, -0.5),
arrowprops=arrow_props,
)

# Panel c (left side)
fig_1c.plot([-0.25, -0.25], [-0.5, 0.5], "black")
fig_1c.plot(
[-0.2, -0.2, -0.15, -0.15, -0.2, -0.2],
[-0.5, -0.25, -0.25, 0.25, 0.25, 0.5],
"black",
)
fig_1c.annotate(
text="VELOCITY",
xy=(-0.1, 1),
xytext=(-0.35, 1),
arrowprops=arrow_props,
verticalalignment="center",
)
fig_1c.annotate(
text="DEPTH",
xy=(-0.3, -0.5),
xytext=(-0.3, -0.1),
arrowprops=arrow_props,
horizontalalignment="center",
rotation=90,
)

fig_1c.text(x=-0.21, y=0.6, s="$V_1$")
fig_1c.text(x=-0.15, y=0.3, s="$V_2=V_b$")
fig_1c.text(x=-0.21, y=-0.75, s="$V_3=V_1$")

fig_1c.text(
x=-0.225,
y=-1,
s="VELOCITY GRAPH",
horizontalalignment="center",
verticalalignment="center",
)

# Panel c (right side)
fig_1c.fill_between(
[0.1, 0.4],
[0.25, 0.25],
[-0.25, -0.25],
facecolor="none",
edgecolor="black",
hatch="//////",
)
fig_1c.text(x=0.4, y=0.45, s="$V_1$", verticalalignment="center")
fig_1c.text(
x=0.37,
y=0.0,
s="$V_2=V_b$",
verticalalignment="center",
bbox=dict(facecolor="white", edgecolor="none", pad=0),
)
fig_1c.text(x=0.4, y=-0.45, s="$V_3=V_1$", verticalalignment="center")

fig_1c.arrow(0.2, 0.45, 0.05, -0.9, head_width=0.01, head_length=0.1, fc="black")
fig_1c.arrow(0.21, 0.25, 0.02, 0.4, head_width=0.01, head_length=0.1, fc="black")
fig_1c.arrow(0.24, -0.25, 0.044, 0.88, head_width=0.01, head_length=0.1, fc="black")

fig_1c.text(
x=0.25,
y=-1,
s="REFLECTION RAY DIAGRAM",
horizontalalignment="center",
verticalalignment="center",
)

# Common plot formatting
for ax in [fig_1a, fig_1b, fig_1c]:
ax.set_xlim(-0.5, 0.5)
ax.set_ylim(-1, 1)
ax.set_xticklabels([])
ax.set_yticklabels([])
ax.tick_params(axis="both", which="both", length=0)

for spine in ["left", "right", "top", "bottom"]:
ax.spines[spine].set_visible(False)
119 changes: 119 additions & 0 deletions widess-1973/how-thin-is-a-thin-bed-1973.ipynb

Large diffs are not rendered by default.