Adding patterns

这个提交包含在:
craig-warren
2023-03-11 18:23:43 -07:00
父节点 f182989128
当前提交 6985350222
共有 7 个文件被更改,包括 157 次插入21 次删除

查看文件

@@ -0,0 +1,84 @@
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)
timewindows = np.array([4.5e-9]) # For 0.3m max
radii = np.linspace(0.1, 0.3, 20)
theta = np.linspace(3, 357, 60)
selector = 0
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=timewindows[selector])
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)

查看文件

@@ -0,0 +1,48 @@
#title: GSSI 1.5GHz antenna field patterns
#dx_dy_dz: 0.001 0.001 0.001
#pml_cells: 14
#python:
import os
import numpy as np
from gprMax.input_cmd_funcs import *
from user_libs.antennas.GSSI import antenna_like_GSSI_1500
filename = os.path.splitext(os.path.split(inputfile)[1])[0]
timewindows = np.array([4.5e-9]) # For 0.3m max
radii = np.linspace(0.1, 0.3, 20)
theta = np.linspace(3, 357, 60)
materials = ['5 0 1 0 er5'] # Can add more to list and use selector integer to choose
selector = 0
fs = np.array([0.040, 0.040, 0.040])
domain = np.array([2 * fs[0] + 2 * radii[-1], 2 * fs[1] + 0.107, 2 * fs[2] + 2 * radii[-1]])
antennaposition = np.array([fs[0] + radii[-1], domain[1] / 2, fs[2] + radii[-1]])
antenna_like_GSSI_1500(antennaposition[0], antennaposition[1], antennaposition[2])
print('#domain: {:.3f} {:.3f} {:.3f}'.format(domain[0], domain[1], domain[2]))
print('#time_window: {:.3e}'.format(timewindows[selector]))
## Can introduce soil model
#print('#soil_peplinski: 0.5 0.5 2.0 2.66 0.001 0.25 mySoil')
#print('#fractal_box: 0 0 0 {} {} {} 1.5 1 1 1 50 mySoil mySoilBox 1'.format(domain[0], domain[1], fs[2] + radii[-1]))
print('#material: {}'.format(materials[selector]))
print('#box: 0 0 0 {} {} {} {} n'.format(domain[0], domain[1], fs[2] + radii[-1], materials[selector].split()[-1]))
## Save the position of the antenna to file for use when processing results
np.savetxt(os.path.join(os.path.dirname(inputfile), filename + '_rxsorigin.txt'), antennaposition, fmt="%f")
## Generate receiver points for pattern
for radius in range(len(radii)):
## H-plane circle (xz plane, y=0, phi=0,pi)
x = radii[radius] * np.sin(theta * np.pi /180) * np.cos(180 * np.pi / 180)
y = radii[radius] * np.sin(theta * np.pi /180) * np.sin(180 * np.pi / 180)
z = radii[radius] * np.cos(theta * np.pi /180)
for rxpt in range(len(theta)):
print('#rx: {:.3f} {:.3f} {:.3f}'.format(x[rxpt] + antennaposition[0], y[rxpt] + antennaposition[1], z[rxpt] + antennaposition[2]))
geometry_view(0, 0, 0, domain[0], domain[1], domain[2], 0.001, 0.001, 0.001, filename, 'n')
#end_python: