你已经派生过 gprMax
镜像自地址
https://gitee.com/sunhf/gprMax.git
已同步 2025-08-07 04:56:51 +08:00
Adding printing of material types, i.e. builtin, user-defined, debye etc...
这个提交包含在:
@@ -317,9 +317,11 @@ def run_model(args, modelrun, numbermodelruns, inputfile, usernamespace):
|
||||
# Create built-in materials
|
||||
m = Material(0, 'pec')
|
||||
m.se = float('inf')
|
||||
m.type = 'builtin'
|
||||
m.average = False
|
||||
G.materials.append(m)
|
||||
m = Material(1, 'free_space')
|
||||
m.type = 'builtin'
|
||||
G.materials.append(m)
|
||||
|
||||
# Process parameters for commands that can only occur once in the model
|
||||
@@ -437,7 +439,7 @@ def run_model(args, modelrun, numbermodelruns, inputfile, usernamespace):
|
||||
# Absolute time
|
||||
abstime = 0
|
||||
|
||||
for timestep in tqdm(range(G.iterations), desc='Running model ' + str(modelrun) + ' of ' + str(numbermodelruns), ncols=get_terminal_size()[0] - 1):
|
||||
for timestep in tqdm(range(G.iterations), desc='Calculating model ' + str(modelrun) + ' of ' + str(numbermodelruns), ncols=get_terminal_size()[0] - 1):
|
||||
# Store field component values for every receiver and transmission line
|
||||
store_outputs(timestep, G.Ex, G.Ey, G.Ez, G.Hx, G.Hy, G.Hz, G)
|
||||
|
||||
|
@@ -351,7 +351,8 @@ def process_geometrycmds(geometry, G):
|
||||
else:
|
||||
numID = len(G.materials)
|
||||
m = Material(numID, requiredID)
|
||||
# Create averaged constituents for material
|
||||
m.type = 'dielectric-smoothed'
|
||||
# Create dielectric-smoothed constituents for material
|
||||
m.er = np.mean((materials[0].er, materials[1].er, materials[2].er), axis=0)
|
||||
m.se = np.mean((materials[0].se, materials[1].se, materials[2].se), axis=0)
|
||||
m.mr = np.mean((materials[0].mr, materials[1].mr, materials[2].mr), axis=0)
|
||||
@@ -458,7 +459,8 @@ def process_geometrycmds(geometry, G):
|
||||
else:
|
||||
numID = len(G.materials)
|
||||
m = Material(numID, requiredID)
|
||||
# Create averaged constituents for material
|
||||
m.type = 'dielectric-smoothed'
|
||||
# Create dielectric-smoothed constituents for material
|
||||
m.er = np.mean((materials[0].er, materials[1].er, materials[2].er), axis=0)
|
||||
m.se = np.mean((materials[0].se, materials[1].se, materials[2].se), axis=0)
|
||||
m.mr = np.mean((materials[0].mr, materials[1].mr, materials[2].mr), axis=0)
|
||||
@@ -538,7 +540,8 @@ def process_geometrycmds(geometry, G):
|
||||
else:
|
||||
numID = len(G.materials)
|
||||
m = Material(numID, requiredID)
|
||||
# Create averaged constituents for material
|
||||
m.type = 'dielectric-smoothed'
|
||||
# Create dielectric-smoothed constituents for material
|
||||
m.er = np.mean((materials[0].er, materials[1].er, materials[2].er), axis=0)
|
||||
m.se = np.mean((materials[0].se, materials[1].se, materials[2].se), axis=0)
|
||||
m.mr = np.mean((materials[0].mr, materials[1].mr, materials[2].mr), axis=0)
|
||||
@@ -627,7 +630,8 @@ def process_geometrycmds(geometry, G):
|
||||
else:
|
||||
numID = len(G.materials)
|
||||
m = Material(numID, requiredID)
|
||||
# Create averaged constituents for material
|
||||
m.type = 'dielectric-smoothed'
|
||||
# Create dielectric-smoothed constituents for material
|
||||
m.er = np.mean((materials[0].er, materials[1].er, materials[2].er), axis=0)
|
||||
m.se = np.mean((materials[0].se, materials[1].se, materials[2].se), axis=0)
|
||||
m.mr = np.mean((materials[0].mr, materials[1].mr, materials[2].mr), axis=0)
|
||||
@@ -736,7 +740,8 @@ def process_geometrycmds(geometry, G):
|
||||
else:
|
||||
numID = len(G.materials)
|
||||
m = Material(numID, requiredID)
|
||||
# Create averaged constituents for material
|
||||
m.type = 'dielectric-smoothed'
|
||||
# Create dielectric-smoothed constituents for material
|
||||
m.er = np.mean((materials[0].er, materials[1].er, materials[2].er), axis=0)
|
||||
m.se = np.mean((materials[0].se, materials[1].se, materials[2].se), axis=0)
|
||||
m.mr = np.mean((materials[0].mr, materials[1].mr, materials[2].mr), axis=0)
|
||||
@@ -1029,6 +1034,7 @@ def process_geometrycmds(geometry, G):
|
||||
if not any(x.ID == 'water' for x in G.materials):
|
||||
m = Material(len(G.materials), 'water')
|
||||
m.average = False
|
||||
m.type = 'builtin, debye'
|
||||
m.er = Material.watereri
|
||||
m.deltaer.append(Material.waterdeltaer)
|
||||
m.tau.append(Material.watertau)
|
||||
@@ -1176,6 +1182,7 @@ def process_geometrycmds(geometry, G):
|
||||
if not any(x.ID == 'grass' for x in G.materials):
|
||||
m = Material(len(G.materials), 'grass')
|
||||
m.average = False
|
||||
m.type = 'builtin, debye'
|
||||
m.er = Material.grasseri
|
||||
m.deltaer.append(Material.grassdeltaer)
|
||||
m.tau.append(Material.grasstau)
|
||||
|
@@ -526,7 +526,7 @@ def process_multicmds(multicmds, G):
|
||||
raise CmdInputError("'" + cmdname + ': ' + ' '.join(tmp) + "'" + ' material(s) {} do not exist'.format(notfound))
|
||||
|
||||
for material in materials:
|
||||
material.type = 'debye'
|
||||
material.type = 'user-defined, debye'
|
||||
material.poles = poles
|
||||
material.average = False
|
||||
for pole in range(1, 2 * poles, 2):
|
||||
@@ -561,7 +561,7 @@ def process_multicmds(multicmds, G):
|
||||
raise CmdInputError("'" + cmdname + ': ' + ' '.join(tmp) + "'" + ' material(s) {} do not exist'.format(notfound))
|
||||
|
||||
for material in materials:
|
||||
material.type = 'lorentz'
|
||||
material.type = 'user-defined, lorentz'
|
||||
material.poles = poles
|
||||
material.average = False
|
||||
for pole in range(1, 3 * poles, 3):
|
||||
@@ -597,7 +597,7 @@ def process_multicmds(multicmds, G):
|
||||
raise CmdInputError("'" + cmdname + ': ' + ' '.join(tmp) + "'" + ' material(s) {} do not exist'.format(notfound))
|
||||
|
||||
for material in materials:
|
||||
material.type = 'drude'
|
||||
material.type = 'user-defined, drude'
|
||||
material.poles = poles
|
||||
material.average = False
|
||||
for pole in range(1, 2 * poles, 2):
|
||||
|
@@ -27,9 +27,6 @@ class Material(object):
|
||||
# Maximum number of dispersive material poles in a model
|
||||
maxpoles = 0
|
||||
|
||||
# Types of material
|
||||
types = ['standard', 'debye', 'lorentz', 'drude']
|
||||
|
||||
# Properties of water from: http://dx.doi.org/10.1109/TGRS.2006.873208
|
||||
waterer = 80.1
|
||||
watereri = 4.9
|
||||
@@ -51,7 +48,7 @@ class Material(object):
|
||||
|
||||
self.numID = numID
|
||||
self.ID = ID
|
||||
self.type = 'standard'
|
||||
self.type = 'user-defined'
|
||||
# Default material averaging
|
||||
self.average = True
|
||||
|
||||
@@ -99,16 +96,16 @@ class Material(object):
|
||||
self.eqt2 = np.zeros(self.maxpoles, dtype=complextype)
|
||||
|
||||
for x in range(self.poles):
|
||||
if self.type == 'debye':
|
||||
if 'debye' in self.type:
|
||||
self.w[x] = self.deltaer[x] / self.tau[x]
|
||||
self.q[x] = -1 / self.tau[x]
|
||||
elif self.type == 'lorentz':
|
||||
elif 'lorentz' in self.type:
|
||||
# tau for Lorentz materials are pole frequencies
|
||||
# alpha for Lorentz materials are the damping coefficients
|
||||
wp2 = (2 * np.pi * self.tau[x])**2
|
||||
self.w[x] = -1j * ((wp2 * self.deltaer[x]) / np.sqrt(wp2 - self.alpha[x]**2))
|
||||
self.q[x] = -self.alpha[x] + (1j * np.sqrt(wp2 - self.alpha[x]**2))
|
||||
elif self.type == 'drude':
|
||||
elif 'drude' in self.type:
|
||||
# tau for Drude materials are pole frequencies
|
||||
# alpha for Drude materials are the inverse of relaxation times
|
||||
wp2 = (2 * np.pi * self.tau[x])**2
|
||||
@@ -155,9 +152,9 @@ def process_materials(G):
|
||||
if G.messages:
|
||||
print('\nMaterials:')
|
||||
if Material.maxpoles == 0:
|
||||
materialsdata = [['\nID', '\nName', '\neps_r', 'sigma\n[S/m]', '\nmu_r', 'sigma*\n[S/m]', 'Dielectric\nsmoothing']]
|
||||
materialsdata = [['\nID', '\nName', '\neps_r', 'sigma\n[S/m]', '\nmu_r', 'sigma*\n[S/m]', 'Dielectric\nsmoothable', '\nType']]
|
||||
else:
|
||||
materialsdata = [['\nID', '\nName', '\neps_r', 'sigma\n[S/m]', '\nDelta eps_r', 'tau\n[s]', '\nmu_r', 'sigma*\n[S/m]', 'Dielectric\nsmoothing']]
|
||||
materialsdata = [['\nID', '\nName', '\neps_r', 'sigma\n[S/m]', '\nDelta eps_r', 'tau\n[s]', '\nmu_r', 'sigma*\n[S/m]', 'Dielectric\nsmoothable', '\nType']]
|
||||
|
||||
for material in G.materials:
|
||||
# Calculate update coefficients for material
|
||||
@@ -192,6 +189,7 @@ def process_materials(G):
|
||||
materialtext.append('{:g}'.format(material.mr))
|
||||
materialtext.append('{:g}'.format(material.sm))
|
||||
materialtext.append(material.average)
|
||||
materialtext.append(material.type)
|
||||
materialsdata.append(materialtext)
|
||||
|
||||
if G.messages:
|
||||
@@ -273,6 +271,7 @@ class PeplinskiSoil(object):
|
||||
self.startmaterialnum = len(G.materials)
|
||||
if not material:
|
||||
m = Material(len(G.materials), requiredID)
|
||||
m.type = 'debye'
|
||||
m.average = False
|
||||
m.er = eri
|
||||
m.se = sig
|
||||
|
@@ -108,6 +108,7 @@ class VoltageSource(Source):
|
||||
newmaterial.ID = material.ID + '+VoltageSource_' + str(self.resistance)
|
||||
newmaterial.numID = len(G.materials)
|
||||
newmaterial.average = False
|
||||
newmaterial.type = 'dielectric-smoothed, voltage source'
|
||||
|
||||
# Add conductivity of voltage source to underlying conductivity
|
||||
if self.polarisation == 'x':
|
||||
|
@@ -50,6 +50,7 @@ cpdef void create_electric_average(int i, int j, int k, int numID1, int numID2,
|
||||
# Create new material
|
||||
newNumID = len(G.materials)
|
||||
m = Material(newNumID, requiredID)
|
||||
m.type = 'dielectric-smoothed'
|
||||
# Create averaged constituents for material
|
||||
m.er = np.mean((G.materials[numID1].er, G.materials[numID2].er, G.materials[numID3].er, G.materials[numID4].er), axis=0)
|
||||
m.se = np.mean((G.materials[numID1].se, G.materials[numID2].se, G.materials[numID3].se, G.materials[numID4].se), axis=0)
|
||||
@@ -88,6 +89,7 @@ cpdef void create_magnetic_average(int i, int j, int k, int numID1, int numID2,
|
||||
# Create new material
|
||||
newNumID = len(G.materials)
|
||||
m = Material(newNumID, requiredID)
|
||||
m.type = 'dielectric-smoothed'
|
||||
# Create averaged constituents for material
|
||||
m.er = np.mean((G.materials[numID1].er, G.materials[numID2].er), axis=0)
|
||||
m.se = np.mean((G.materials[numID1].se, G.materials[numID2].se), axis=0)
|
||||
|
在新工单中引用
屏蔽一个用户