Adding printing of material types, i.e. builtin, user-defined, debye etc...

这个提交包含在:
Craig Warren
2016-08-08 18:00:29 +01:00
父节点 c5573a2027
当前提交 4d50f22c37
共有 6 个文件被更改,包括 29 次插入18 次删除

查看文件

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