Updated GSSI 400MHz to 2022 version

这个提交包含在:
Craig Warren
2023-08-29 17:11:27 +01:00
父节点 15d5491b35
当前提交 d60015d285
共有 5 个文件被更改,包括 40110 次插入39 次删除

查看文件

@@ -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
================