你已经派生过 gprMax
镜像自地址
https://gitee.com/sunhf/gprMax.git
已同步 2025-08-06 12:36:51 +08:00
79 行
2.7 KiB
Python
79 行
2.7 KiB
Python
from pathlib import Path
|
|
|
|
import numpy as np
|
|
|
|
import gprMax
|
|
from toolboxes.GPRAntennaModels.GSSI import antenna_like_GSSI_1500
|
|
|
|
# File path for output
|
|
fn = Path(__file__)
|
|
|
|
# Discretisation
|
|
dl = 0.001
|
|
|
|
scene = gprMax.Scene()
|
|
|
|
title = gprMax.Title(name=fn.with_suffix("").name)
|
|
dxdydz = gprMax.Discretisation(p1=(dl, dl, dl))
|
|
pml = gprMax.PMLProps(thickness=14)
|
|
scene.add(title)
|
|
scene.add(dxdydz)
|
|
scene.add(pml)
|
|
|
|
timewindow = 4.5e-9 # For 0.3m max
|
|
radii = np.linspace(0.1, 0.3, 20)
|
|
theta = np.linspace(3, 357, 60)
|
|
|
|
fs = np.array([0.040, 0.040, 0.040])
|
|
domain_size = np.array([2 * fs[0] + 0.170, 2 * fs[1] + 2 * radii[-1], 2 * fs[2] + 2 * radii[-1]])
|
|
domain = gprMax.Domain(p1=(domain_size[0], domain_size[1], domain_size[2]))
|
|
time_window = gprMax.TimeWindow(time=timewindow)
|
|
scene.add(domain)
|
|
scene.add(time_window)
|
|
|
|
antennaposition = np.array([domain_size[0] / 2, fs[1] + radii[-1], fs[2] + radii[-1]])
|
|
gssi_objects = antenna_like_GSSI_1500(antennaposition[0], antennaposition[1], antennaposition[2])
|
|
for obj in gssi_objects:
|
|
scene.add(obj)
|
|
|
|
## Can introduce soil model
|
|
# soil = gprMax.SoilPeplinski(sand_fraction=0.5, clay_fraction=0.5,
|
|
# bulk_density=2.0, sand_density=2.66,
|
|
# water_fraction_lower=0.001,
|
|
# water_fraction_upper=0.25,
|
|
# id='mySoil')
|
|
# scene.add(soil)
|
|
# fbox = gprMax.FractalBox(p1=(0, 0, 0), p2=(domain_size[0], domain_size[1], fs[2] + radii[-1]),
|
|
# frac_dim=1.5, weighting=[1, 1, 1], n_materials=50,
|
|
# mixing_model_id=soil.id, id='mySoilBox')
|
|
# scene.add(fbox)
|
|
|
|
mat = gprMax.Material(er=5, se=0, mr=1, sm=0, id="er5")
|
|
scene.add(mat)
|
|
box = gprMax.Box(p1=(0, 0, 0), p2=(domain_size[0], domain_size[1], fs[2] + radii[-1]), material_id="er5")
|
|
scene.add(box)
|
|
|
|
## Save the position of the antenna to file for use when processing results
|
|
np.savetxt(fn.with_suffix("").name + "_rxsorigin.txt", antennaposition, fmt="%f")
|
|
|
|
## Generate receiver points for pattern
|
|
for radius in range(len(radii)):
|
|
## E-plane circle (yz plane, x=0, phi=pi/2,3pi/2)
|
|
x = radii[radius] * np.sin(theta * np.pi / 180) * np.cos(90 * np.pi / 180)
|
|
y = radii[radius] * np.sin(theta * np.pi / 180) * np.sin(90 * np.pi / 180)
|
|
z = radii[radius] * np.cos(theta * np.pi / 180)
|
|
for rxpt in range(len(theta)):
|
|
rx = gprMax.Rx(p1=(x[rxpt] + antennaposition[0], y[rxpt] + antennaposition[1], z[rxpt] + antennaposition[2]))
|
|
scene.add(rx)
|
|
|
|
gv1 = gprMax.GeometryView(
|
|
p1=(0, 0, 0),
|
|
p2=(domain_size[0], domain_size[1], domain_size[2]),
|
|
dl=(dl, dl, dl),
|
|
filename="antenna_like_GSSI_1500_patterns",
|
|
output_type="n",
|
|
)
|
|
scene.add(gv1)
|
|
|
|
gprMax.run(scenes=[scene], geometry_only=True, outputfile=fn, gpu=None)
|