你已经派生过 gprMax
镜像自地址
https://gitee.com/sunhf/gprMax.git
已同步 2025-08-07 04:56:51 +08:00
Merge pull request #383 from Sai-Suraj-27/f-strings
Reformatted few files according to latest python standards.
这个提交包含在:
@@ -1031,5 +1031,5 @@ The CFS values (which are internally specified) used for the default standard fi
|
||||
The parameters will be applied to all slabs of the PML that are switched on.
|
||||
|
||||
.. tip::
|
||||
|
||||
|
||||
``forward`` direction implies minimum parameter value at the inner boundary of the PML and maximum parameter value at the edge of computational domain, ``reverse`` is the opposite.
|
||||
|
@@ -44,10 +44,7 @@ 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"
|
||||
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, ant_pos[1] - 0.150, ant_pos[2]),
|
||||
@@ -56,8 +53,8 @@ gv2 = gprMax.GeometryView(
|
||||
filename="antenna_like_GSSI_400_pcb",
|
||||
output_type="f",
|
||||
)
|
||||
#scene.add(gv1)
|
||||
#scene.add(gv2)
|
||||
# scene.add(gv1)
|
||||
# scene.add(gv2)
|
||||
|
||||
# Run model
|
||||
gprMax.run(scenes=[scene], geometry_only=False, outputfile=fn, gpu=None)
|
||||
|
@@ -1263,8 +1263,8 @@ class AddDebyeDispersion(UserObjectMulti):
|
||||
|
||||
logger.info(
|
||||
f"{self.grid_name(grid)}Debye disperion added to {disp_material.ID} "
|
||||
f"with delta_eps_r={', '.join('%4.2f' % deltaer for deltaer in disp_material.deltaer)}, "
|
||||
f"and tau={', '.join('%4.3e' % tau for tau in disp_material.tau)} secs created."
|
||||
f"with delta_eps_r={', '.join(f'{deltaer:4.2f}' for deltaer in disp_material.deltaer)}, "
|
||||
f"and tau={', '.join(f'{tau:4.3e}' for tau in disp_material.tau)} secs created."
|
||||
)
|
||||
|
||||
|
||||
@@ -1342,9 +1342,9 @@ class AddLorentzDispersion(UserObjectMulti):
|
||||
|
||||
logger.info(
|
||||
f"{self.grid_name(grid)}Lorentz disperion added to {disp_material.ID} "
|
||||
f"with delta_eps_r={', '.join('%4.2f' % deltaer for deltaer in disp_material.deltaer)}, "
|
||||
f"omega={', '.join('%4.3e' % omega for omega in disp_material.tau)} secs, "
|
||||
f"and gamma={', '.join('%4.3e' % delta for delta in disp_material.alpha)} created."
|
||||
f"with delta_eps_r={', '.join(f'{deltaer:4.2f}' for deltaer in disp_material.deltaer)}, "
|
||||
f"omega={', '.join(f'{omega:4.3e}' for omega in disp_material.tau)} secs, "
|
||||
f"and gamma={', '.join(f'{delta:4.3e}' for delta in disp_material.alpha)} created."
|
||||
)
|
||||
|
||||
|
||||
@@ -1416,8 +1416,8 @@ class AddDrudeDispersion(UserObjectMulti):
|
||||
|
||||
logger.info(
|
||||
f"{self.grid_name(grid)}Drude disperion added to {disp_material.ID} "
|
||||
f"with omega={', '.join('%4.3e' % omega for omega in disp_material.tau)} secs, "
|
||||
f"and gamma={', '.join('%4.3e' % alpha for alpha in disp_material.alpha)} secs created."
|
||||
f"with omega={', '.join(f'{omega:4.3e}' for omega in disp_material.tau)} secs, "
|
||||
f"and gamma={', '.join(f'{alpha:4.3e}' for alpha in disp_material.alpha)} secs created."
|
||||
)
|
||||
|
||||
|
||||
|
@@ -230,8 +230,8 @@ class SimulationConfig:
|
||||
"c": c, # Speed of light in free space (m/s)
|
||||
"e0": e0, # Permittivity of free space (F/m)
|
||||
"m0": m0, # Permeability of free space (H/m)
|
||||
"z0": np.sqrt(m0 / e0), # Impedance of free space (Ohms)
|
||||
}
|
||||
"z0": np.sqrt(m0 / e0), # Impedance of free space (Ohms)
|
||||
}
|
||||
|
||||
# Store information about host machine
|
||||
self.hostinfo = get_host_info()
|
||||
|
@@ -35,18 +35,18 @@ x_args = {
|
||||
int NZ_PHI2,
|
||||
int NY_R,
|
||||
const unsigned int* __restrict__ ID,
|
||||
const $REAL* __restrict__ Ex,
|
||||
const $REAL* __restrict__ Ex,
|
||||
$REAL *Ey,
|
||||
$REAL *Ez,
|
||||
const $REAL* __restrict__ Hx,
|
||||
const $REAL* __restrict__ Hy,
|
||||
const $REAL* __restrict__ Hz,
|
||||
const $REAL* __restrict__ Hx,
|
||||
const $REAL* __restrict__ Hy,
|
||||
const $REAL* __restrict__ Hz,
|
||||
$REAL *PHI1,
|
||||
$REAL *PHI2,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
$REAL d)
|
||||
"""
|
||||
),
|
||||
@@ -103,15 +103,15 @@ y_args = {
|
||||
$REAL *Ex,
|
||||
const $REAL* __restrict__ Ey,
|
||||
$REAL *Ez,
|
||||
const $REAL* __restrict__ Hx,
|
||||
const $REAL* __restrict__ Hy,
|
||||
const $REAL* __restrict__ Hz,
|
||||
const $REAL* __restrict__ Hx,
|
||||
const $REAL* __restrict__ Hy,
|
||||
const $REAL* __restrict__ Hz,
|
||||
$REAL *PHI1,
|
||||
$REAL *PHI2,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
$REAL d)
|
||||
"""
|
||||
),
|
||||
@@ -169,14 +169,14 @@ z_args = {
|
||||
$REAL *Ey,
|
||||
const $REAL* __restrict__ Ez,
|
||||
const $REAL* __restrict__ Hx,
|
||||
const $REAL* __restrict__ Hy,
|
||||
const $REAL* __restrict__ Hz,
|
||||
const $REAL* __restrict__ Hy,
|
||||
const $REAL* __restrict__ Hz,
|
||||
$REAL *PHI1,
|
||||
$REAL *PHI2,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
$REAL d)
|
||||
"""
|
||||
),
|
||||
|
@@ -35,18 +35,18 @@ x_args = {
|
||||
int NZ_PHI2,
|
||||
int NY_R,
|
||||
const unsigned int* __restrict__ ID,
|
||||
const $REAL* __restrict__ Ex,
|
||||
const $REAL* __restrict__ Ex,
|
||||
$REAL *Ey,
|
||||
$REAL *Ez,
|
||||
const $REAL* __restrict__ Hx,
|
||||
const $REAL* __restrict__ Hy,
|
||||
const $REAL* __restrict__ Hz,
|
||||
const $REAL* __restrict__ Hx,
|
||||
const $REAL* __restrict__ Hy,
|
||||
const $REAL* __restrict__ Hz,
|
||||
$REAL *PHI1,
|
||||
$REAL *PHI2,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
$REAL d)
|
||||
"""
|
||||
),
|
||||
@@ -103,15 +103,15 @@ y_args = {
|
||||
$REAL *Ex,
|
||||
const $REAL* __restrict__ Ey,
|
||||
$REAL *Ez,
|
||||
const $REAL* __restrict__ Hx,
|
||||
const $REAL* __restrict__ Hy,
|
||||
const $REAL* __restrict__ Hz,
|
||||
const $REAL* __restrict__ Hx,
|
||||
const $REAL* __restrict__ Hy,
|
||||
const $REAL* __restrict__ Hz,
|
||||
$REAL *PHI1,
|
||||
$REAL *PHI2,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
$REAL d)
|
||||
"""
|
||||
),
|
||||
@@ -168,15 +168,15 @@ z_args = {
|
||||
$REAL *Ex,
|
||||
$REAL *Ey,
|
||||
const $REAL* __restrict__ Ez,
|
||||
const $REAL* __restrict__ Hx,
|
||||
const $REAL* __restrict__ Hy,
|
||||
const $REAL* __restrict__ Hz,
|
||||
const $REAL* __restrict__ Hx,
|
||||
const $REAL* __restrict__ Hy,
|
||||
const $REAL* __restrict__ Hz,
|
||||
$REAL *PHI1,
|
||||
$REAL *PHI2,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
$REAL d)
|
||||
"""
|
||||
),
|
||||
|
@@ -35,18 +35,18 @@ x_args = {
|
||||
int NZ_PHI2,
|
||||
int NY_R,
|
||||
const unsigned int* __restrict__ ID,
|
||||
const $REAL* __restrict__ Ex,
|
||||
const $REAL* __restrict__ Ey,
|
||||
const $REAL* __restrict__ Ez,
|
||||
const $REAL* __restrict__ Hx,
|
||||
const $REAL* __restrict__ Ex,
|
||||
const $REAL* __restrict__ Ey,
|
||||
const $REAL* __restrict__ Ez,
|
||||
const $REAL* __restrict__ Hx,
|
||||
$REAL *Hy,
|
||||
$REAL *Hz,
|
||||
$REAL *PHI1,
|
||||
$REAL *PHI2,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
$REAL d)
|
||||
"""
|
||||
),
|
||||
@@ -100,18 +100,18 @@ y_args = {
|
||||
int NZ_PHI2,
|
||||
int NY_R,
|
||||
const unsigned int* __restrict__ ID,
|
||||
const $REAL* __restrict__ Ex,
|
||||
const $REAL* __restrict__ Ey,
|
||||
const $REAL* __restrict__ Ex,
|
||||
const $REAL* __restrict__ Ey,
|
||||
const $REAL* __restrict__ Ez,
|
||||
$REAL *Hx,
|
||||
const $REAL* __restrict__ Hy,
|
||||
$REAL *Hz,
|
||||
$REAL *PHI1,
|
||||
$REAL *PHI2,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
$REAL d)
|
||||
"""
|
||||
),
|
||||
@@ -165,18 +165,18 @@ z_args = {
|
||||
int NZ_PHI2,
|
||||
int NY_R,
|
||||
const unsigned int* __restrict__ ID,
|
||||
const $REAL* __restrict__ Ex,
|
||||
const $REAL* __restrict__ Ey,
|
||||
const $REAL* __restrict__ Ex,
|
||||
const $REAL* __restrict__ Ey,
|
||||
const $REAL* __restrict__ Ez,
|
||||
$REAL *Hx,
|
||||
$REAL *Hy,
|
||||
const $REAL* __restrict__ Hz,
|
||||
$REAL *PHI1,
|
||||
$REAL *PHI2,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
$REAL d)
|
||||
"""
|
||||
),
|
||||
|
@@ -35,18 +35,18 @@ x_args = {
|
||||
int NZ_PHI2,
|
||||
int NY_R,
|
||||
const unsigned int* __restrict__ ID,
|
||||
const $REAL* __restrict__ Ex,
|
||||
const $REAL* __restrict__ Ey,
|
||||
const $REAL* __restrict__ Ez,
|
||||
const $REAL* __restrict__ Hx,
|
||||
const $REAL* __restrict__ Ex,
|
||||
const $REAL* __restrict__ Ey,
|
||||
const $REAL* __restrict__ Ez,
|
||||
const $REAL* __restrict__ Hx,
|
||||
$REAL *Hy,
|
||||
$REAL *Hz,
|
||||
$REAL *PHI1,
|
||||
$REAL *PHI2,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
$REAL d)
|
||||
"""
|
||||
),
|
||||
@@ -100,18 +100,18 @@ y_args = {
|
||||
int NZ_PHI2,
|
||||
int NY_R,
|
||||
const unsigned int* __restrict__ ID,
|
||||
const $REAL* __restrict__ Ex,
|
||||
const $REAL* __restrict__ Ey,
|
||||
const $REAL* __restrict__ Ex,
|
||||
const $REAL* __restrict__ Ey,
|
||||
const $REAL* __restrict__ Ez,
|
||||
$REAL *Hx,
|
||||
const $REAL* __restrict__ Hy,
|
||||
$REAL *Hz,
|
||||
$REAL *PHI1,
|
||||
$REAL *PHI2,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
$REAL d)
|
||||
"""
|
||||
),
|
||||
@@ -165,18 +165,18 @@ z_args = {
|
||||
int NZ_PHI2,
|
||||
int NY_R,
|
||||
const unsigned int* __restrict__ ID,
|
||||
const $REAL* __restrict__ Ex,
|
||||
const $REAL* __restrict__ Ey,
|
||||
const $REAL* __restrict__ Ex,
|
||||
const $REAL* __restrict__ Ey,
|
||||
const $REAL* __restrict__ Ez,
|
||||
$REAL *Hx,
|
||||
$REAL *Hy,
|
||||
const $REAL* __restrict__ Hz,
|
||||
$REAL *PHI1,
|
||||
$REAL *PHI2,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
const $REAL* __restrict__ RA,
|
||||
const $REAL* __restrict__ RB,
|
||||
const $REAL* __restrict__ RE,
|
||||
const $REAL* __restrict__ RF,
|
||||
$REAL d)
|
||||
"""
|
||||
),
|
||||
|
@@ -45,38 +45,33 @@ args_defaults = {
|
||||
# Argument help messages (used for CLI argparse)
|
||||
help_msg = {
|
||||
"scenes": "(list, req): Scenes to run the model. Multiple scene objects "
|
||||
"can given in order to run multiple simulation runs. Each scene "
|
||||
"must contain the essential simulation objects",
|
||||
"inputfile": "(str, opt): Input file path. Can also run simulation by "
|
||||
"providing an input file.",
|
||||
"can given in order to run multiple simulation runs. Each scene "
|
||||
"must contain the essential simulation objects",
|
||||
"inputfile": "(str, opt): Input file path. Can also run simulation by " "providing an input file.",
|
||||
"outputfile": "(str, req): File path to the output data file.",
|
||||
"n": "(int, req): Number of required simulation runs.",
|
||||
"i": "(int, opt): Model number to start/restart simulation from. It would "
|
||||
"typically be used to restart a series of models from a specific "
|
||||
"model number, with the n argument, e.g. to restart from A-scan 45 "
|
||||
"when creating a B-scan with 60 traces.",
|
||||
"typically be used to restart a series of models from a specific "
|
||||
"model number, with the n argument, e.g. to restart from A-scan 45 "
|
||||
"when creating a B-scan with 60 traces.",
|
||||
"mpi": "(bool, opt): Flag to use Message Passing Interface (MPI) task farm. "
|
||||
"This option is most usefully combined with n to allow individual "
|
||||
"models to be farmed out using a MPI task farm, e.g. to create a "
|
||||
"B-scan with 60 traces and use MPI to farm out each trace. For "
|
||||
"further details see the performance section of the User Guide.",
|
||||
"gpu": "(list/bool, opt): Flag to use NVIDIA GPU or list of NVIDIA GPU "
|
||||
"device ID(s) for specific GPU card(s).",
|
||||
"opencl": "(list/bool, opt): Flag to use OpenCL or list of OpenCL device "
|
||||
"ID(s) for specific compute device(s).",
|
||||
"This option is most usefully combined with n to allow individual "
|
||||
"models to be farmed out using a MPI task farm, e.g. to create a "
|
||||
"B-scan with 60 traces and use MPI to farm out each trace. For "
|
||||
"further details see the performance section of the User Guide.",
|
||||
"gpu": "(list/bool, opt): Flag to use NVIDIA GPU or list of NVIDIA GPU " "device ID(s) for specific GPU card(s).",
|
||||
"opencl": "(list/bool, opt): Flag to use OpenCL or list of OpenCL device " "ID(s) for specific compute device(s).",
|
||||
"subgrid": "(bool, opt): Flag to use sub-gridding.",
|
||||
"autotranslate": "(bool, opt): For sub-gridding - auto translate objects "
|
||||
"with main grid coordinates to their equivalent local "
|
||||
"grid coordinate within the subgrid. If this option is "
|
||||
"off users must specify sub-grid object point within the "
|
||||
"global subgrid space.",
|
||||
"geometry_only": "(bool, opt): Build a model and produce any geometry "
|
||||
"views but do not run the simulation.",
|
||||
"geometry_fixed": "(bool, opt): Run a series of models where the geometry "
|
||||
"does not change between models.",
|
||||
"with main grid coordinates to their equivalent local "
|
||||
"grid coordinate within the subgrid. If this option is "
|
||||
"off users must specify sub-grid object point within the "
|
||||
"global subgrid space.",
|
||||
"geometry_only": "(bool, opt): Build a model and produce any geometry " "views but do not run the simulation.",
|
||||
"geometry_fixed": "(bool, opt): Run a series of models where the geometry " "does not change between models.",
|
||||
"write_processed": "(bool, opt): Writes another input file after any "
|
||||
"Python code (#python blocks) and in the original input "
|
||||
"file has been processed.",
|
||||
"Python code (#python blocks) and in the original input "
|
||||
"file has been processed.",
|
||||
"log_level": "(int, opt): Level of logging to use.",
|
||||
"log_file": "(bool, opt): Write logging information to file.",
|
||||
}
|
||||
@@ -222,5 +217,5 @@ def run_main(args):
|
||||
context = Context()
|
||||
|
||||
results = context.run()
|
||||
|
||||
|
||||
return results
|
||||
|
@@ -57,9 +57,9 @@ class FDTDGrid:
|
||||
self.pmls["cfs"] = []
|
||||
self.pmls["slabs"] = []
|
||||
# Ordered dictionary required so *updating* the PMLs always follows the
|
||||
# same order (the order for *building* PMLs does not matter). The order
|
||||
# itself does not matter, however, if must be the same from model to
|
||||
# model otherwise the numerical precision from adding the PML
|
||||
# same order (the order for *building* PMLs does not matter). The order
|
||||
# itself does not matter, however, if must be the same from model to
|
||||
# model otherwise the numerical precision from adding the PML
|
||||
# corrections will be different.
|
||||
self.pmls["thickness"] = OrderedDict((key, 10) for key in PML.boundaryIDs)
|
||||
|
||||
@@ -354,7 +354,7 @@ class CUDAGrid(FDTDGrid):
|
||||
self.Hx_dev = gpuarray.to_gpu(self.Hx)
|
||||
self.Hy_dev = gpuarray.to_gpu(self.Hy)
|
||||
self.Hz_dev = gpuarray.to_gpu(self.Hz)
|
||||
|
||||
|
||||
elif config.sim_config.general["solver"] == "opencl":
|
||||
import pyopencl.array as clarray
|
||||
|
||||
|
@@ -19,6 +19,7 @@
|
||||
import logging
|
||||
|
||||
from .cmds_multiuse import (
|
||||
PMLCFS,
|
||||
AddDebyeDispersion,
|
||||
AddDrudeDispersion,
|
||||
AddLorentzDispersion,
|
||||
@@ -30,7 +31,6 @@ from .cmds_multiuse import (
|
||||
Material,
|
||||
MaterialList,
|
||||
MaterialRange,
|
||||
PMLCFS,
|
||||
Rx,
|
||||
RxArray,
|
||||
Snapshot,
|
||||
@@ -403,27 +403,29 @@ def process_multicmds(multicmds):
|
||||
material_list = MaterialList(list_of_materials=lmats, id=tmp[tokens - 1])
|
||||
scene_objects.append(material_list)
|
||||
|
||||
cmdname = '#pml_cfs'
|
||||
if multicmds[cmdname] is not None:
|
||||
cmdname = "#pml_cfs"
|
||||
if multicmds[cmdname] is not None:
|
||||
for cmdinstance in multicmds[cmdname]:
|
||||
tmp = cmdinstance.split()
|
||||
|
||||
|
||||
if len(tmp) != 12:
|
||||
logger.exception("'" + cmdname + ": " + " ".join(tmp) + "'" + " requires exactly twelve parameters")
|
||||
raise ValueError
|
||||
|
||||
pml_cfs = PMLCFS(alphascalingprofile=tmp[0],
|
||||
alphascalingdirection=tmp[1],
|
||||
alphamin=tmp[2],
|
||||
alphamax=tmp[3],
|
||||
kappascalingprofile=tmp[4],
|
||||
kappascalingdirection=tmp[5],
|
||||
kappamin=tmp[6],
|
||||
kappamax=tmp[7],
|
||||
sigmascalingprofile=tmp[8],
|
||||
sigmascalingdirection=tmp[9],
|
||||
sigmamin=tmp[10],
|
||||
sigmamax=tmp[11])
|
||||
pml_cfs = PMLCFS(
|
||||
alphascalingprofile=tmp[0],
|
||||
alphascalingdirection=tmp[1],
|
||||
alphamin=tmp[2],
|
||||
alphamax=tmp[3],
|
||||
kappascalingprofile=tmp[4],
|
||||
kappascalingdirection=tmp[5],
|
||||
kappamin=tmp[6],
|
||||
kappamax=tmp[7],
|
||||
sigmascalingprofile=tmp[8],
|
||||
sigmascalingdirection=tmp[9],
|
||||
sigmamin=tmp[10],
|
||||
sigmamax=tmp[11],
|
||||
)
|
||||
|
||||
scene_objects.append(pml_cfs)
|
||||
|
||||
|
@@ -134,15 +134,19 @@ def process_singlecmds(singlecmds):
|
||||
if len(tmp) not in [1, 6]:
|
||||
logger.exception(f"{cmd} requires either one or six parameter(s)")
|
||||
raise ValueError
|
||||
|
||||
if 'pml_formulation' in locals():
|
||||
|
||||
if "pml_formulation" in locals():
|
||||
if len(tmp) == 1:
|
||||
pml_props = PMLProps(formulation=pml_formulation, thickness=int(tmp[0]))
|
||||
else:
|
||||
pml_props = PMLProps(
|
||||
formulation=pml_formulation,
|
||||
x0=int(tmp[0]), y0=int(tmp[1]), z0=int(tmp[2]),
|
||||
xmax=int(tmp[3]), ymax=int(tmp[4]), zmax=int(tmp[5])
|
||||
formulation=pml_formulation,
|
||||
x0=int(tmp[0]),
|
||||
y0=int(tmp[1]),
|
||||
z0=int(tmp[2]),
|
||||
xmax=int(tmp[3]),
|
||||
ymax=int(tmp[4]),
|
||||
zmax=int(tmp[5]),
|
||||
)
|
||||
else:
|
||||
if len(tmp) == 1:
|
||||
@@ -151,7 +155,7 @@ def process_singlecmds(singlecmds):
|
||||
pml_props = PMLProps(
|
||||
x0=int(tmp[0]), y0=int(tmp[1]), z0=int(tmp[2]), xmax=int(tmp[3]), ymax=int(tmp[4]), zmax=int(tmp[5])
|
||||
)
|
||||
|
||||
|
||||
scene_objects.append(pml_props)
|
||||
|
||||
cmd = "#src_steps"
|
||||
|
@@ -632,20 +632,20 @@ def process_materials(G):
|
||||
]
|
||||
if config.get_model_config().materials["maxpoles"] > 0:
|
||||
if "debye" in material.type:
|
||||
materialtext.append("\n".join("{:g}".format(deltaer) for deltaer in material.deltaer))
|
||||
materialtext.append("\n".join("{:g}".format(tau) for tau in material.tau))
|
||||
materialtext.append("\n".join(f"{deltaer:g}" for deltaer in material.deltaer))
|
||||
materialtext.append("\n".join(f"{tau:g}" for tau in material.tau))
|
||||
materialtext.extend(["", "", ""])
|
||||
elif "lorentz" in material.type:
|
||||
materialtext.append(", ".join("{:g}".format(deltaer) for deltaer in material.deltaer))
|
||||
materialtext.append(", ".join(f"{deltaer:g}" for deltaer in material.deltaer))
|
||||
materialtext.append("")
|
||||
materialtext.append(", ".join("{:g}".format(tau) for tau in material.tau))
|
||||
materialtext.append(", ".join("{:g}".format(alpha) for alpha in material.alpha))
|
||||
materialtext.append(", ".join(f"{tau:g}" for tau in material.tau))
|
||||
materialtext.append(", ".join(f"{alpha:g}" for alpha in material.alpha))
|
||||
materialtext.append("")
|
||||
elif "drude" in material.type:
|
||||
materialtext.extend(["", ""])
|
||||
materialtext.append(", ".join("{:g}".format(tau) for tau in material.tau))
|
||||
materialtext.append(", ".join(f"{tau:g}" for tau in material.tau))
|
||||
materialtext.append("")
|
||||
materialtext.append(", ".join("{:g}".format(alpha) for alpha in material.alpha))
|
||||
materialtext.append(", ".join(f"{alpha:g}" for alpha in material.alpha))
|
||||
else:
|
||||
materialtext.extend(["", "", "", "", ""])
|
||||
|
||||
|
@@ -24,6 +24,7 @@ import numpy as np
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def diff_output_files(filename1, filename2):
|
||||
"""Calculates differences between two output files.
|
||||
|
||||
@@ -56,7 +57,7 @@ def diff_output_files(filename1, filename2):
|
||||
f"Type of floating point number in test model ({file1[path + outputs1[0]].dtype}) "
|
||||
f"does not match type in reference solution ({file2[path + outputs2[0]].dtype})\n"
|
||||
)
|
||||
|
||||
|
||||
# Arrays for storing time
|
||||
time1 = np.zeros((file1.attrs["Iterations"]), dtype=floattype1)
|
||||
time1 = np.linspace(0, (file1.attrs["Iterations"] - 1), num=file1.attrs["Iterations"])
|
||||
|
@@ -50,8 +50,9 @@ fig, ax = plt.subplots(
|
||||
)
|
||||
|
||||
for x, model in enumerate(testmodels):
|
||||
time, datadiffs = diff_output_files(fn.parent.joinpath(basename + "_ref.h5"),
|
||||
fn.parent.joinpath(basename + str(x + 1) + ".h5"))
|
||||
time, datadiffs = diff_output_files(
|
||||
fn.parent.joinpath(basename + "_ref.h5"), fn.parent.joinpath(basename + str(x + 1) + ".h5")
|
||||
)
|
||||
|
||||
# Print maximum error value
|
||||
start = 210
|
||||
|
@@ -56,7 +56,7 @@ for x, PMLID in enumerate(PMLIDs):
|
||||
fig, ax = plt.subplots(figsize=(20, 10), facecolor="w", edgecolor="w")
|
||||
ax.remove()
|
||||
fig.suptitle(f"{PMLID}")
|
||||
|
||||
|
||||
outputs = ["Ex", "Ey", "Ez", "Hx", "Hy", "Hz"]
|
||||
for i, output in enumerate(outputs):
|
||||
if i < 3:
|
||||
@@ -74,9 +74,7 @@ for x, PMLID in enumerate(PMLIDs):
|
||||
ax.set_ylabel(f"{output} error [dB]")
|
||||
|
||||
# Save a PDF/PNG of the figure
|
||||
fig.savefig(basename + "_diffs_" + PMLID + ".pdf", dpi=None, format='pdf', bbox_inches='tight', pad_inches=0.1)
|
||||
fig.savefig(basename + "_diffs_" + PMLID + ".pdf", dpi=None, format="pdf", bbox_inches="tight", pad_inches=0.1)
|
||||
# fig.savefig(basename + "_diffs_" + PMLID + ".png", dpi=150, format='png', bbox_inches='tight', pad_inches=0.1)
|
||||
|
||||
plt.show()
|
||||
|
||||
|
||||
|
@@ -138,7 +138,7 @@ for i, model in enumerate(testmodels):
|
||||
f"({float_or_doubletest}) does not "
|
||||
f"match type in reference solution ({float_or_doubleref})\n"
|
||||
)
|
||||
|
||||
|
||||
# Arrays for storing time
|
||||
timeref = np.zeros((fileref.attrs["Iterations"]), dtype=float_or_doubleref)
|
||||
timeref = (
|
||||
|
@@ -65,10 +65,10 @@ if epsr:
|
||||
wavelength = v1 / f
|
||||
|
||||
# Print some useful information
|
||||
logger.info("Centre frequency: {} GHz".format(f / 1e9))
|
||||
logger.info(f"Centre frequency: {f / 1000000000.0} GHz")
|
||||
if epsr:
|
||||
logger.info("Critical angle for Er {} is {} degrees".format(epsr, thetac))
|
||||
logger.info("Wavelength: {:.3f} m".format(wavelength))
|
||||
logger.info(f"Critical angle for Er {epsr} is {thetac} degrees")
|
||||
logger.info(f"Wavelength: {wavelength:.3f} m")
|
||||
logger.info(
|
||||
"Observation distance(s) from {:.3f} m ({:.1f} wavelengths) to {:.3f} m ({:.1f} wavelengths)".format(
|
||||
radii[0], radii[0] / wavelength, radii[-1], radii[-1] / wavelength
|
||||
@@ -204,4 +204,4 @@ for radius in range(0, len(radii)):
|
||||
|
||||
# Save pattern to numpy file
|
||||
np.save(os.path.splitext(outputfile)[0], patternsave)
|
||||
logger.info("Written Numpy file: {}.npy".format(os.path.splitext(outputfile)[0]))
|
||||
logger.info(f"Written Numpy file: {os.path.splitext(outputfile)[0]}.npy")
|
||||
|
@@ -65,7 +65,7 @@ if epsr:
|
||||
logger.info(f"Centre frequency: {f / 1000000000.0} GHz")
|
||||
if epsr:
|
||||
logger.info(f"Critical angle for Er {epsr} is {thetac} degrees")
|
||||
logger.info("Wavelength: {:.3f} m".format(wavelength))
|
||||
logger.info(f"Wavelength: {wavelength:.3f} m")
|
||||
logger.info(
|
||||
"Observation distance(s) from {:.3f} m ({:.1f} wavelengths) to {:.3f} m ({:.1f} wavelengths)".format(
|
||||
radii[0], radii[0] / wavelength, radii[-1], radii[-1] / wavelength
|
||||
@@ -107,7 +107,7 @@ for patt in range(0, len(radii)):
|
||||
# Replace any NaNs or Infs from zero division
|
||||
power[np.invert(np.isfinite(power))] = 0
|
||||
|
||||
ax.plot(theta, power, label="{:.2f}m".format(radii[patt]), marker=".", ms=6, lw=1.5)
|
||||
ax.plot(theta, power, label=f"{radii[patt]:.2f}m", marker=".", ms=6, lw=1.5)
|
||||
|
||||
# Add Hertzian dipole plot
|
||||
# hertzplot1 = np.append(hertzian[0, :], hertzian[0, 0]) # Append start value to close circle
|
||||
|
@@ -220,14 +220,12 @@ class Relaxation(object):
|
||||
print(f" |{'e_inf':^14s}|{'De':^14s}|{'log(tau_0)':^25s}|")
|
||||
print("_" * 65)
|
||||
for i in range(0, len(tau)):
|
||||
print("Debye {0:}|{1:^14.5f}|{2:^14.5f}|{3:^25.5f}|".format(i + 1, ee / len(tau), weights[i], tau[i]))
|
||||
print(f"Debye {i + 1}|{ee / len(tau):^14.5f}|{weights[i]:^14.5f}|{tau[i]:^25.5f}|")
|
||||
print("_" * 65)
|
||||
|
||||
# Print the Debye expnasion in a gprMax format
|
||||
material_prop = []
|
||||
material_prop.append(
|
||||
"#material: {} {} {} {} {}\n".format(ee, self.sigma, self.mu, self.mu_sigma, self.material_name)
|
||||
)
|
||||
material_prop.append(f"#material: {ee} {self.sigma} {self.mu} {self.mu_sigma} {self.material_name}\n")
|
||||
print(material_prop[0], end="")
|
||||
dispersion_prop = f"#add_dispersion_debye: {len(tau)}"
|
||||
for i in range(len(tau)):
|
||||
|
@@ -422,9 +422,9 @@ def antenna_like_GSSI_1500(x, y, z, resolution=0.001, **kwargs):
|
||||
|
||||
def antenna_like_GSSI_400(x, y, z, resolution=0.002, **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.
|
||||
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 2mm spatial resolution.
|
||||
The external dimensions of the antenna are 300x300x178mm.
|
||||
One output point is defined between the arms of the receiver bowtie.
|
||||
@@ -459,7 +459,7 @@ def antenna_like_GSSI_400(x, y, z, resolution=0.002, **kwargs):
|
||||
metalmiddleplateheight = 0.11
|
||||
|
||||
smooth_dec = "yes" # choose to use dielectric smoothing or not
|
||||
src_type = "GSSI_400MHz_pulse" # (or voltage_source)
|
||||
src_type = "GSSI_400MHz_pulse" # (or voltage_source)
|
||||
pcber = 6.401200848809589
|
||||
hdper = 1.0
|
||||
skidthickness = 0.01
|
||||
|
@@ -39996,4 +39996,4 @@ time my_pulse
|
||||
9.9992499437e-08 0.0000000000e+00
|
||||
9.9994999625e-08 0.0000000000e+00
|
||||
9.9997499812e-08 0.0000000000e+00
|
||||
1.0000000000e-07 0.0000000000e+00
|
||||
1.0000000000e-07 0.0000000000e+00
|
||||
|
在新工单中引用
屏蔽一个用户