计算均匀矩形介质中的走时场

[1]:
import pyfmm
import numpy as np
import matplotlib.pyplot as plt
[ ]:
# Uncomment and Run following to remove WARNING.
#
# import logging
# pyfmm.myLogger.setLevel(logging.ERROR)
[3]:
xarr = np.arange(0, 100, 0.08)
yarr = np.arange(0, 50, 0.05)
zarr = np.array([0.0])  # 二维情况

# 慢度场
slw  = np.ones((len(xarr), len(yarr), len(zarr)), dtype='f')

srcloc = [10, 20, 0.0]

# FMM解
FMMTT = pyfmm.travel_time_source(
    srcloc,
    xarr, yarr, zarr, slw)

# FSM解
FSMTT = pyfmm.travel_time_source(
    srcloc,
    xarr, yarr, zarr, slw, useFSM=True)

# 真实解
xx, yy, zz = srcloc
real_TT = np.sqrt(((xarr-xx)**2)[:,None,None] + ((yarr-yy)**2)[None,:,None] + ((zarr-zz)**2)[None,None,:])
[4]:
fig, ax = plt.subplots(1, 1)
cs = ax.contour(xarr, yarr, FMMTT[:, :, 0].T, levels=30, linewidths=0.5)
_  = ax.contour(xarr, yarr, real_TT[:, :, 0].T, levels=30, linewidths=0.5, colors='k', linestyles='--')
ax.clabel(cs)

ax.set_aspect('equal')
../_images/examples_01_uniform_4_0.png
[5]:
fig, ax = plt.subplots(1, 1)
cs = ax.contour(xarr, yarr, FSMTT[:, :, 0].T, levels=30, linewidths=0.5)
_  = ax.contour(xarr, yarr, real_TT[:, :, 0].T, levels=30, linewidths=0.5, colors='k', linestyles='--')
ax.clabel(cs)

ax.set_aspect('equal')
../_images/examples_01_uniform_5_0.png
[6]:
# 误差
FMM_error = np.mean(np.abs(FMMTT - real_TT))
FSM_error = np.mean(np.abs(FSMTT - real_TT))
print("FMM_error = ", FMM_error)
print("FSM_error = ", FSM_error)
FMM_error =  0.009092051242207444
FSM_error =  0.009115207963152972