你已经派生过 gprMax
镜像自地址
https://gitee.com/sunhf/gprMax.git
已同步 2025-08-07 04:56:51 +08:00
Updated GSSI 400MHz to 2022 version
这个提交包含在:
@@ -0,0 +1,60 @@
|
||||
"""An antenna model similar to a GSSI 400MHz antenna in free space
|
||||
|
||||
This example model demonstrates how to use one of the built-in antenna models.
|
||||
|
||||
The geometry is 3D and the domain filled with freespace (the default). The
|
||||
antenna model method is imported from its toolbox and the objects that build the
|
||||
antenna are iteratively added to the scene. The antenna can be rotated if
|
||||
desired, by rotating the objects that it is built from before they are added to
|
||||
the scene.
|
||||
"""
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
import gprMax
|
||||
from toolboxes.GPRAntennaModels.GSSI import antenna_like_GSSI_400
|
||||
|
||||
# File path for output
|
||||
fn = Path(__file__)
|
||||
|
||||
# Discretisation
|
||||
dl = 0.002
|
||||
|
||||
# Domain
|
||||
x = 0.340
|
||||
y = 0.340
|
||||
z = 0.318
|
||||
|
||||
scene = gprMax.Scene()
|
||||
|
||||
title = gprMax.Title(name=fn.with_suffix("").name)
|
||||
domain = gprMax.Domain(p1=(x, y, z))
|
||||
dxdydz = gprMax.Discretisation(p1=(dl, dl, dl))
|
||||
time_window = gprMax.TimeWindow(time=6e-9)
|
||||
|
||||
scene.add(title)
|
||||
scene.add(domain)
|
||||
scene.add(dxdydz)
|
||||
scene.add(time_window)
|
||||
|
||||
# Import antenna model and add to model
|
||||
ant_pos = (0.170, 0.170, 0.100)
|
||||
gssi_objects = antenna_like_GSSI_400(ant_pos[0], ant_pos[1], ant_pos[2], resolution=dl)
|
||||
for obj in gssi_objects:
|
||||
scene.add(obj)
|
||||
|
||||
gv1 = gprMax.GeometryView(
|
||||
p1=(0, 0, 0), p2=(x, y, z), dl=(dl, dl, dl), filename="antenna_like_GSSI_400", output_type="n"
|
||||
)
|
||||
gv2 = gprMax.GeometryView(
|
||||
p1=(ant_pos[0] - 0.150 / 2, ant_pos[1] - 0.150 / 2, ant_pos[2] - 0.050),
|
||||
p2=(ant_pos[0] + 0.150 / 2, ant_pos[1] + 0.150 / 2, ant_pos[2] + 0.010),
|
||||
dl=(dl, dl, dl),
|
||||
filename="antenna_like_GSSI_400_pcb",
|
||||
output_type="f",
|
||||
)
|
||||
scene.add(gv1)
|
||||
scene.add(gv2)
|
||||
|
||||
# Run model
|
||||
gprMax.run(scenes=[scene], geometry_only=False, outputfile=fn, gpu=None)
|
@@ -391,10 +391,10 @@ def antenna_like_GSSI_1500(x, y, z, resolution=0.001, **kwargs):
|
||||
elif optstate == "GiannakisPaper":
|
||||
# Optimised custom pulse
|
||||
exc1 = gprMax.ExcitationFile(
|
||||
filepath="user_libs/GPRAntennaModels/GSSI1p5optpulse.txt", kind="linear", fill_value="extrapolate"
|
||||
filepath="toolboxes/GPRAntennaModels/GSSI_1500MHz_pulse.txt", kind="linear", fill_value="extrapolate"
|
||||
)
|
||||
vs1 = gprMax.VoltageSource(
|
||||
polarisation="y", p1=(tx[0], tx[1], tx[2]), resistance=sourceresistance, waveform_id="GSSI1p5optpulse"
|
||||
polarisation="y", p1=(tx[0], tx[1], tx[2]), resistance=sourceresistance, waveform_id="my_pulse"
|
||||
)
|
||||
scene_objects.extend((exc1, vs1))
|
||||
|
||||
@@ -422,6 +422,9 @@ def antenna_like_GSSI_1500(x, y, z, resolution=0.001, **kwargs):
|
||||
|
||||
def antenna_like_GSSI_400(x, y, z, resolution=0.001, **kwargs):
|
||||
"""Inserts a description of an antenna similar to the GSSI 400MHz antenna.
|
||||
This model represents an update to the previous model of the GSSI 400MHz
|
||||
antenna and was created and optimised by Stadler et al. (2022)
|
||||
in: https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=9686638.
|
||||
Can be used with 0.5mm, 1mm (default) or 2mm spatial resolution.
|
||||
The external dimensions of the antenna are 300x300x178mm.
|
||||
One output point is defined between the arms of the receiver bowtie.
|
||||
@@ -457,9 +460,9 @@ def antenna_like_GSSI_400(x, y, z, resolution=0.001, **kwargs):
|
||||
metalmiddleplateheight = 0.11
|
||||
|
||||
smooth_dec = "yes" # choose to use dielectric smoothing or not
|
||||
src_type = "voltage_source" # source type. "voltage_source" or "transmission_line"
|
||||
pcber = 2.35
|
||||
hdper = 2.35
|
||||
src_type = "GSSI_400MHz_pulse" # (or voltage_source)
|
||||
pcber = 6.401200848809589
|
||||
hdper = 1.0
|
||||
skidthickness = 0.01
|
||||
|
||||
# If using parameters from an optimisation
|
||||
@@ -473,11 +476,11 @@ def antenna_like_GSSI_400(x, y, z, resolution=0.001, **kwargs):
|
||||
|
||||
# Otherwise choose pre-set optimised parameters
|
||||
except:
|
||||
excitationfreq = 0.39239891e9 # GHz
|
||||
sourceresistance = 111.59927 # Ohms
|
||||
receiverresistance = sourceresistance # Ohms
|
||||
absorberEr = 1.1
|
||||
absorbersig = 0.062034689 # S/m
|
||||
excitationfreq = 3.5e8 # Hz, only used with voltage_source
|
||||
sourceresistance = 257.97407389585214 # Ohms
|
||||
receiverresistance = 288.92728542970417 # Ohms
|
||||
absorberEr = 2.42966922703319
|
||||
absorbersig = 0.03839822151712033 # S/m
|
||||
|
||||
x = x - (casesize[0] / 2)
|
||||
y = y - (casesize[1] / 2)
|
||||
@@ -500,7 +503,7 @@ def antenna_like_GSSI_400(x, y, z, resolution=0.001, **kwargs):
|
||||
dz = 0.002
|
||||
foamsurroundthickness = 0.002
|
||||
metalboxheight = 0.088
|
||||
tx = x + 0.01 + 0.004 + 0.056, y + casethickness + 0.005 + 0.143 - 0.002, z + skidthickness
|
||||
tx = x + 0.01 + 0.004 + 0.056, y + casethickness + 0.005 + 0.143 - 0.002, z + skidthickness - 0.002
|
||||
else:
|
||||
logger.exception("This antenna module can only be used with a spatial discretisation of 0.5mm, 1mm, 2mm")
|
||||
raise ValueError
|
||||
@@ -606,20 +609,20 @@ def antenna_like_GSSI_400(x, y, z, resolution=0.001, **kwargs):
|
||||
|
||||
elif resolution == 0.002:
|
||||
b6 = gprMax.Box(
|
||||
p1=(x + 0.01 + 0.005 + 0.017, y + casethickness + 0.005 + 0.021, z + skidthickness),
|
||||
p1=(x + 0.01 + 0.005 + 0.017, y + casethickness + 0.005 + 0.021, z + skidthickness - 0.002),
|
||||
p2=(
|
||||
x + 0.01 + 0.005 + 0.033 + bowtiebase,
|
||||
y + casethickness + 0.006 + 0.202 + patchheight,
|
||||
z + skidthickness + pcbthickness,
|
||||
z + skidthickness + pcbthickness - 0.002,
|
||||
),
|
||||
material_id="pcb",
|
||||
)
|
||||
b7 = gprMax.Box(
|
||||
p1=(x + 0.01 + 0.005 + 0.179, y + casethickness + 0.005 + 0.021, z + skidthickness),
|
||||
p1=(x + 0.01 + 0.005 + 0.179, y + casethickness + 0.005 + 0.021, z + skidthickness - 0.002),
|
||||
p2=(
|
||||
x + 0.01 + 0.005 + 0.195 + bowtiebase,
|
||||
y + casethickness + 0.006 + 0.202 + patchheight,
|
||||
z + skidthickness + pcbthickness,
|
||||
z + skidthickness + pcbthickness - 0.002,
|
||||
),
|
||||
material_id="pcb",
|
||||
)
|
||||
@@ -727,11 +730,11 @@ def antenna_like_GSSI_400(x, y, z, resolution=0.001, **kwargs):
|
||||
|
||||
elif resolution == 0.002:
|
||||
b13 = gprMax.Box(
|
||||
p1=(x + 0.01 + 0.005 + 0.017, y + casethickness + 0.005 + 0.021, z + skidthickness),
|
||||
p1=(x + 0.01 + 0.005 + 0.017, y + casethickness + 0.005 + 0.021, z + skidthickness - 0.002),
|
||||
p2=(
|
||||
x + 0.01 + 0.005 + 0.033 + bowtiebase,
|
||||
y + casethickness + 0.006 + 0.202 + patchheight,
|
||||
z + skidthickness + pcbthickness,
|
||||
z + skidthickness + pcbthickness - 0.002,
|
||||
),
|
||||
material_id="pcb",
|
||||
averaging="n",
|
||||
@@ -948,84 +951,84 @@ def antenna_like_GSSI_400(x, y, z, resolution=0.001, **kwargs):
|
||||
# "left" side
|
||||
# extension plates
|
||||
p1 = gprMax.Plate(
|
||||
p1=(x + 0.01 + 0.005 + 0.025, y + casethickness + 0.005 + 0.021, z + skidthickness),
|
||||
p1=(x + 0.01 + 0.005 + 0.025, y + casethickness + 0.005 + 0.021, z + skidthickness - 0.002),
|
||||
p2=(
|
||||
x + 0.01 + 0.005 + 0.025 + bowtiebase,
|
||||
y + casethickness + 0.005 + 0.021 + patchheight,
|
||||
z + skidthickness,
|
||||
z + skidthickness - 0.002,
|
||||
),
|
||||
material_id="pec",
|
||||
)
|
||||
p2 = gprMax.Plate(
|
||||
p1=(x + 0.01 + 0.005 + 0.025, y + casethickness + 0.005 + 0.203, z + skidthickness),
|
||||
p1=(x + 0.01 + 0.005 + 0.025, y + casethickness + 0.005 + 0.203, z + skidthickness - 0.002),
|
||||
p2=(
|
||||
x + 0.01 + 0.005 + 0.025 + bowtiebase,
|
||||
y + casethickness + 0.005 + 0.203 + patchheight,
|
||||
z + skidthickness,
|
||||
z + skidthickness - 0.002,
|
||||
),
|
||||
material_id="pec",
|
||||
)
|
||||
# triangles
|
||||
t1 = gprMax.Triangle(
|
||||
p1=(x + 0.01 + 0.005 + 0.025, y + casethickness + 0.005 + 0.081, z + skidthickness),
|
||||
p2=(x + 0.01 + 0.005 + 0.025 + bowtiebase, y + casethickness + 0.005 + 0.081, z + skidthickness),
|
||||
p1=(x + 0.01 + 0.005 + 0.025, y + casethickness + 0.005 + 0.081, z + skidthickness - 0.002),
|
||||
p2=(x + 0.01 + 0.005 + 0.025 + bowtiebase, y + casethickness + 0.005 + 0.081, z + skidthickness - 0.002),
|
||||
p3=(
|
||||
x + 0.01 + 0.005 + 0.025 + (bowtiebase / 2),
|
||||
y + casethickness + 0.005 + 0.081 + bowtieheight,
|
||||
z + skidthickness,
|
||||
z + skidthickness - 0.002,
|
||||
),
|
||||
thickness=0,
|
||||
material_id="pec",
|
||||
)
|
||||
t2 = gprMax.Triangle(
|
||||
p1=(x + 0.01 + 0.005 + 0.025, y + casethickness + 0.005 + 0.203, z + skidthickness),
|
||||
p2=(x + 0.01 + 0.005 + 0.025 + bowtiebase, y + casethickness + 0.005 + 0.203, z + skidthickness),
|
||||
p1=(x + 0.01 + 0.005 + 0.025, y + casethickness + 0.005 + 0.203, z + skidthickness - 0.002),
|
||||
p2=(x + 0.01 + 0.005 + 0.025 + bowtiebase, y + casethickness + 0.005 + 0.203, z + skidthickness - 0.002),
|
||||
p3=(
|
||||
x + 0.01 + 0.005 + 0.025 + (bowtiebase / 2),
|
||||
y + casethickness + 0.005 + 0.203 - bowtieheight,
|
||||
z + skidthickness,
|
||||
z + skidthickness - 0.002,
|
||||
),
|
||||
thickness=0,
|
||||
material_id="pec",
|
||||
)
|
||||
# "right" side
|
||||
p3 = gprMax.Plate(
|
||||
p1=(x + 0.01 + 0.005 + 0.187, y + casethickness + 0.005 + 0.021, z + skidthickness),
|
||||
p1=(x + 0.01 + 0.005 + 0.187, y + casethickness + 0.005 + 0.021, z + skidthickness - 0.002),
|
||||
p2=(
|
||||
x + 0.01 + 0.005 + 0.187 + bowtiebase,
|
||||
y + casethickness + 0.005 + 0.021 + patchheight,
|
||||
z + skidthickness,
|
||||
z + skidthickness - 0.002,
|
||||
),
|
||||
material_id="pec",
|
||||
)
|
||||
p4 = gprMax.Plate(
|
||||
p1=(x + 0.01 + 0.005 + 0.187, y + casethickness + 0.005 + 0.203, z + skidthickness),
|
||||
p1=(x + 0.01 + 0.005 + 0.187, y + casethickness + 0.005 + 0.203, z + skidthickness - 0.002),
|
||||
p2=(
|
||||
x + 0.01 + 0.005 + 0.187 + bowtiebase,
|
||||
y + casethickness + 0.005 + 0.203 + patchheight,
|
||||
z + skidthickness,
|
||||
z + skidthickness - 0.002,
|
||||
),
|
||||
material_id="pec",
|
||||
)
|
||||
# triangles
|
||||
t3 = gprMax.Triangle(
|
||||
p1=(x + 0.01 + 0.005 + 0.187, y + casethickness + 0.005 + 0.081, z + skidthickness),
|
||||
p2=(x + 0.01 + 0.005 + 0.187 + bowtiebase, y + casethickness + 0.005 + 0.081, z + skidthickness),
|
||||
p1=(x + 0.01 + 0.005 + 0.187, y + casethickness + 0.005 + 0.081, z + skidthickness - 0.002),
|
||||
p2=(x + 0.01 + 0.005 + 0.187 + bowtiebase, y + casethickness + 0.005 + 0.081, z + skidthickness - 0.002),
|
||||
p3=(
|
||||
x + 0.01 + 0.005 + 0.187 + (bowtiebase / 2),
|
||||
y + casethickness + 0.005 + 0.081 + bowtieheight,
|
||||
z + skidthickness,
|
||||
z + skidthickness - 0.002,
|
||||
),
|
||||
thickness=0,
|
||||
material_id="pec",
|
||||
)
|
||||
t4 = gprMax.Triangle(
|
||||
p1=(x + 0.01 + 0.005 + 0.187, y + casethickness + 0.005 + 0.203, z + skidthickness),
|
||||
p2=(x + 0.01 + 0.005 + 0.187 + bowtiebase, y + casethickness + 0.005 + 0.203, z + skidthickness),
|
||||
p1=(x + 0.01 + 0.005 + 0.187, y + casethickness + 0.005 + 0.203, z + skidthickness - 0.002),
|
||||
p2=(x + 0.01 + 0.005 + 0.187 + bowtiebase, y + casethickness + 0.005 + 0.203, z + skidthickness - 0.002),
|
||||
p3=(
|
||||
x + 0.01 + 0.005 + 0.187 + (bowtiebase / 2),
|
||||
y + casethickness + 0.005 + 0.203 - bowtieheight,
|
||||
z + skidthickness,
|
||||
z + skidthickness - 0.002,
|
||||
),
|
||||
thickness=0,
|
||||
material_id="pec",
|
||||
@@ -1080,6 +1083,15 @@ def antenna_like_GSSI_400(x, y, z, resolution=0.001, **kwargs):
|
||||
polarisation="y", p1=(tx[0], tx[1], tx[2]), resistance=sourceresistance, waveform_id="my_gaussian"
|
||||
)
|
||||
scene_objects.append(tl1)
|
||||
else:
|
||||
# Optimised custom pulse
|
||||
exc1 = gprMax.ExcitationFile(
|
||||
filepath="toolboxes/GPRAntennaModels/GSSI_400MHz_pulse.txt", kind="linear", fill_value="extrapolate"
|
||||
)
|
||||
vs1 = gprMax.VoltageSource(
|
||||
polarisation="y", p1=(tx[0], tx[1], tx[2]), resistance=sourceresistance, waveform_id="my_pulse"
|
||||
)
|
||||
scene_objects.extend((exc1, vs1))
|
||||
|
||||
# Receiver
|
||||
# Zero waveform to use with transmission line at receiver output
|
||||
|
@@ -1,4 +1,4 @@
|
||||
GSSI1p5GHzoptpulse
|
||||
my_pulse
|
||||
7.8514850e-06
|
||||
9.7512211e-06
|
||||
1.1482613e-05
|
文件差异内容过多而无法显示
加载差异
@@ -23,7 +23,7 @@ GSSI 400MHz 300x300x170mm 0.5, 1, 2mm Sam Stadler (Sam.Stadler@li
|
||||
|
||||
1. Warren, C., Giannopoulos, A. (2011). Creating finite-difference time-domain models of commercial ground-penetrating radar antennas using Taguchi's optimization method. *Geophysics*, 76(2), G37-G47. (http://dx.doi.org/10.1190/1.3548506)
|
||||
2. Giannakis, I., Giannopoulos, A., & Warren, C. (2019). Realistic FDTD GPR antenna models optimised using a novel linear/non-linear Full Waveform Inversion. *IEEE Transactions on Geoscience and Remote Sensing*, 57(3), 1768-1778. (https://doi.org/10.1109/TGRS.2018.2869027)
|
||||
3. Stadler. S., Igel J. (2018). A Numerical Study on Using Guided GPR Waves Along Metallic Cylinders in Boreholes for Permittivity Sounding. 17th International Conference on GPR. (https://tinyurl.com/y6vdab22)
|
||||
3. Stadler, S., & Igel, J. (2022). Developing realistic FDTD GPR antenna surrogates by means of particle swarm optimization. *IEEE Transactions on Antennas and Propagation*, 70(6), 4259-4272. (https://doi.org/10.1109/TAP.2022.3142335)
|
||||
|
||||
Package contents
|
||||
================
|
||||
|
在新工单中引用
屏蔽一个用户