你已经派生过 gprMax
镜像自地址
https://gitee.com/sunhf/gprMax.git
已同步 2025-08-07 04:56:51 +08:00
PEP8 code cleanups.
这个提交包含在:
@@ -28,9 +28,11 @@ np.seterr(invalid='raise')
|
|||||||
from gprMax.constants import c
|
from gprMax.constants import c
|
||||||
from gprMax.constants import floattype
|
from gprMax.constants import floattype
|
||||||
from gprMax.constants import complextype
|
from gprMax.constants import complextype
|
||||||
|
from gprMax.exceptions import GeneralError
|
||||||
from gprMax.materials import Material
|
from gprMax.materials import Material
|
||||||
from gprMax.pml import PML
|
from gprMax.pml import PML
|
||||||
from gprMax.utilities import fft_power
|
from gprMax.utilities import fft_power
|
||||||
|
from gprMax.utilities import human_size
|
||||||
from gprMax.utilities import round_value
|
from gprMax.utilities import round_value
|
||||||
|
|
||||||
|
|
||||||
@@ -234,8 +236,8 @@ class FDTDGrid(Grid):
|
|||||||
# Check if model can be run on specified GPU if required
|
# Check if model can be run on specified GPU if required
|
||||||
if self.gpu is not None:
|
if self.gpu is not None:
|
||||||
if self.memoryusage > self.gpu.totalmem:
|
if self.memoryusage > self.gpu.totalmem:
|
||||||
if snapmemsize != 0:
|
if snapsmemsize != 0:
|
||||||
G.snapsgpu2cpu = True
|
self.snapsgpu2cpu = True
|
||||||
else:
|
else:
|
||||||
raise GeneralError('Memory (RAM) required ~{} exceeds {} detected on specified {} - {} GPU!\n'.format(human_size(self.memoryusage), human_size(self.gpu.totalmem, a_kilobyte_is_1024_bytes=True), self.gpu.deviceID, self.gpu.name))
|
raise GeneralError('Memory (RAM) required ~{} exceeds {} detected on specified {} - {} GPU!\n'.format(human_size(self.memoryusage), human_size(self.gpu.totalmem, a_kilobyte_is_1024_bytes=True), self.gpu.deviceID, self.gpu.name))
|
||||||
|
|
||||||
|
@@ -282,7 +282,7 @@ class PeplinskiSoil(object):
|
|||||||
erealw = Material.watereri + ((Material.waterdeltaer) / (1 + (w * Material.watertau)**2))
|
erealw = Material.watereri + ((Material.waterdeltaer) / (1 + (w * Material.watertau)**2))
|
||||||
|
|
||||||
a = 0.65 # Experimentally derived constant
|
a = 0.65 # Experimentally derived constant
|
||||||
es = (1.01 + 0.44 * self.rs)**2 - 0.062 # Relative permittivity of sand particles
|
es = (1.01 + 0.44 * self.rs)**2 - 0.062 # Relative permittivity of sand particles
|
||||||
b1 = 1.2748 - 0.519 * self.S - 0.152 * self.C
|
b1 = 1.2748 - 0.519 * self.S - 0.152 * self.C
|
||||||
b2 = 1.33797 - 0.603 * self.S - 0.166 * self.C
|
b2 = 1.33797 - 0.603 * self.S - 0.166 * self.C
|
||||||
|
|
||||||
|
@@ -547,33 +547,33 @@ def solve_gpu(currentmodelrun, modelend, G):
|
|||||||
# Store field component values for every receiver
|
# Store field component values for every receiver
|
||||||
if G.rxs:
|
if G.rxs:
|
||||||
store_outputs_gpu(np.int32(len(G.rxs)), np.int32(iteration),
|
store_outputs_gpu(np.int32(len(G.rxs)), np.int32(iteration),
|
||||||
rxcoords_gpu.gpudata, rxs_gpu.gpudata,
|
rxcoords_gpu.gpudata, rxs_gpu.gpudata,
|
||||||
G.Ex_gpu.gpudata, G.Ey_gpu.gpudata, G.Ez_gpu.gpudata,
|
G.Ex_gpu.gpudata, G.Ey_gpu.gpudata, G.Ez_gpu.gpudata,
|
||||||
G.Hx_gpu.gpudata, G.Hy_gpu.gpudata, G.Hz_gpu.gpudata,
|
G.Hx_gpu.gpudata, G.Hy_gpu.gpudata, G.Hz_gpu.gpudata,
|
||||||
block=(1, 1, 1), grid=(round32(len(G.rxs)), 1, 1))
|
block=(1, 1, 1), grid=(round32(len(G.rxs)), 1, 1))
|
||||||
|
|
||||||
# Store any snapshots
|
# Store any snapshots
|
||||||
for i, snap in enumerate(G.snapshots):
|
for i, snap in enumerate(G.snapshots):
|
||||||
if snap.time == iteration + 1:
|
if snap.time == iteration + 1:
|
||||||
store_snapshot_gpu(np.int32(i), np.int32(snap.xs),
|
store_snapshot_gpu(np.int32(i), np.int32(snap.xs),
|
||||||
np.int32(snap.xf), np.int32(snap.ys),
|
np.int32(snap.xf), np.int32(snap.ys),
|
||||||
np.int32(snap.yf), np.int32(snap.zs),
|
np.int32(snap.yf), np.int32(snap.zs),
|
||||||
np.int32(snap.zf), np.int32(snap.dx),
|
np.int32(snap.zf), np.int32(snap.dx),
|
||||||
np.int32(snap.dy), np.int32(snap.dz),
|
np.int32(snap.dy), np.int32(snap.dz),
|
||||||
G.Ex_gpu.gpudata, G.Ey_gpu.gpudata, G.Ez_gpu.gpudata,
|
G.Ex_gpu.gpudata, G.Ey_gpu.gpudata, G.Ez_gpu.gpudata,
|
||||||
G.Hx_gpu.gpudata, G.Hy_gpu.gpudata, G.Hz_gpu.gpudata,
|
G.Hx_gpu.gpudata, G.Hy_gpu.gpudata, G.Hz_gpu.gpudata,
|
||||||
snapEx_gpu.gpudata, snapEy_gpu.gpudata, snapEz_gpu.gpudata,
|
snapEx_gpu.gpudata, snapEy_gpu.gpudata, snapEz_gpu.gpudata,
|
||||||
snapHx_gpu.gpudata, snapHy_gpu.gpudata, snapHz_gpu.gpudata,
|
snapHx_gpu.gpudata, snapHy_gpu.gpudata, snapHz_gpu.gpudata,
|
||||||
block=Snapshot.tpb, grid=Snapshot.bpg)
|
block=Snapshot.tpb, grid=Snapshot.bpg)
|
||||||
if G.snapsgpu2cpu:
|
if G.snapsgpu2cpu:
|
||||||
gpu_get_snapshot_array(snapEx_gpu.get(), snapEy_gpu.get(), snapEz_gpu.get(),
|
gpu_get_snapshot_array(snapEx_gpu.get(), snapEy_gpu.get(), snapEz_gpu.get(),
|
||||||
snapHx_gpu.get(), snapHy_gpu.get(), snapHz_gpu.get(), i, snap)
|
snapHx_gpu.get(), snapHy_gpu.get(), snapHz_gpu.get(), i, snap)
|
||||||
|
|
||||||
# Update magnetic field components
|
# Update magnetic field components
|
||||||
update_h_gpu(np.int32(G.nx), np.int32(G.ny), np.int32(G.nz),
|
update_h_gpu(np.int32(G.nx), np.int32(G.ny), np.int32(G.nz),
|
||||||
G.ID_gpu.gpudata, G.Hx_gpu.gpudata, G.Hy_gpu.gpudata,
|
G.ID_gpu.gpudata, G.Hx_gpu.gpudata, G.Hy_gpu.gpudata,
|
||||||
G.Hz_gpu.gpudata, G.Ex_gpu.gpudata, G.Ey_gpu.gpudata,
|
G.Hz_gpu.gpudata, G.Ex_gpu.gpudata, G.Ey_gpu.gpudata,
|
||||||
G.Ez_gpu.gpudata, block=G.tpb, grid=G.bpg)
|
G.Ez_gpu.gpudata, block=G.tpb, grid=G.bpg)
|
||||||
|
|
||||||
# Update magnetic field components with the PML correction
|
# Update magnetic field components with the PML correction
|
||||||
for pml in G.pmls:
|
for pml in G.pmls:
|
||||||
@@ -582,28 +582,28 @@ def solve_gpu(currentmodelrun, modelend, G):
|
|||||||
# Update magnetic field components for magetic dipole sources
|
# Update magnetic field components for magetic dipole sources
|
||||||
if G.magneticdipoles:
|
if G.magneticdipoles:
|
||||||
update_magnetic_dipole_gpu(np.int32(len(G.magneticdipoles)), np.int32(iteration),
|
update_magnetic_dipole_gpu(np.int32(len(G.magneticdipoles)), np.int32(iteration),
|
||||||
floattype(G.dx), floattype(G.dy), floattype(G.dz),
|
floattype(G.dx), floattype(G.dy), floattype(G.dz),
|
||||||
srcinfo1_magnetic_gpu.gpudata, srcinfo2_magnetic_gpu.gpudata,
|
srcinfo1_magnetic_gpu.gpudata, srcinfo2_magnetic_gpu.gpudata,
|
||||||
srcwaves_magnetic_gpu.gpudata, G.ID_gpu.gpudata,
|
srcwaves_magnetic_gpu.gpudata, G.ID_gpu.gpudata,
|
||||||
G.Hx_gpu.gpudata, G.Hy_gpu.gpudata, G.Hz_gpu.gpudata,
|
G.Hx_gpu.gpudata, G.Hy_gpu.gpudata, G.Hz_gpu.gpudata,
|
||||||
block=(1, 1, 1), grid=(round32(len(G.magneticdipoles)), 1, 1))
|
block=(1, 1, 1), grid=(round32(len(G.magneticdipoles)), 1, 1))
|
||||||
|
|
||||||
# Update electric field components
|
# Update electric field components
|
||||||
# If all materials are non-dispersive do standard update
|
# If all materials are non-dispersive do standard update
|
||||||
if Material.maxpoles == 0:
|
if Material.maxpoles == 0:
|
||||||
update_e_gpu(np.int32(G.nx), np.int32(G.ny), np.int32(G.nz), G.ID_gpu.gpudata,
|
update_e_gpu(np.int32(G.nx), np.int32(G.ny), np.int32(G.nz), G.ID_gpu.gpudata,
|
||||||
G.Ex_gpu.gpudata, G.Ey_gpu.gpudata, G.Ez_gpu.gpudata,
|
G.Ex_gpu.gpudata, G.Ey_gpu.gpudata, G.Ez_gpu.gpudata,
|
||||||
G.Hx_gpu.gpudata, G.Hy_gpu.gpudata, G.Hz_gpu.gpudata,
|
G.Hx_gpu.gpudata, G.Hy_gpu.gpudata, G.Hz_gpu.gpudata,
|
||||||
block=G.tpb, grid=G.bpg)
|
block=G.tpb, grid=G.bpg)
|
||||||
# If there are any dispersive materials do 1st part of dispersive update
|
# If there are any dispersive materials do 1st part of dispersive update
|
||||||
# (it is split into two parts as it requires present and updated electric field values).
|
# (it is split into two parts as it requires present and updated electric field values).
|
||||||
else:
|
else:
|
||||||
update_e_dispersive_A_gpu(np.int32(G.nx), np.int32(G.ny), np.int32(G.nz),
|
update_e_dispersive_A_gpu(np.int32(G.nx), np.int32(G.ny), np.int32(G.nz),
|
||||||
np.int32(Material.maxpoles), G.updatecoeffsdispersive_gpu.gpudata,
|
np.int32(Material.maxpoles), G.updatecoeffsdispersive_gpu.gpudata,
|
||||||
G.Tx_gpu.gpudata, G.Ty_gpu.gpudata, G.Tz_gpu.gpudata, G.ID_gpu.gpudata,
|
G.Tx_gpu.gpudata, G.Ty_gpu.gpudata, G.Tz_gpu.gpudata, G.ID_gpu.gpudata,
|
||||||
G.Ex_gpu.gpudata, G.Ey_gpu.gpudata, G.Ez_gpu.gpudata,
|
G.Ex_gpu.gpudata, G.Ey_gpu.gpudata, G.Ez_gpu.gpudata,
|
||||||
G.Hx_gpu.gpudata, G.Hy_gpu.gpudata, G.Hz_gpu.gpudata,
|
G.Hx_gpu.gpudata, G.Hy_gpu.gpudata, G.Hz_gpu.gpudata,
|
||||||
block=G.tpb, grid=G.bpg)
|
block=G.tpb, grid=G.bpg)
|
||||||
|
|
||||||
# Update electric field components with the PML correction
|
# Update electric field components with the PML correction
|
||||||
for pml in G.pmls:
|
for pml in G.pmls:
|
||||||
@@ -612,28 +612,28 @@ def solve_gpu(currentmodelrun, modelend, G):
|
|||||||
# Update electric field components for voltage sources
|
# Update electric field components for voltage sources
|
||||||
if G.voltagesources:
|
if G.voltagesources:
|
||||||
update_voltage_source_gpu(np.int32(len(G.voltagesources)), np.int32(iteration),
|
update_voltage_source_gpu(np.int32(len(G.voltagesources)), np.int32(iteration),
|
||||||
floattype(G.dx), floattype(G.dy), floattype(G.dz),
|
floattype(G.dx), floattype(G.dy), floattype(G.dz),
|
||||||
srcinfo1_voltage_gpu.gpudata, srcinfo2_voltage_gpu.gpudata,
|
srcinfo1_voltage_gpu.gpudata, srcinfo2_voltage_gpu.gpudata,
|
||||||
srcwaves_voltage_gpu.gpudata, G.ID_gpu.gpudata,
|
srcwaves_voltage_gpu.gpudata, G.ID_gpu.gpudata,
|
||||||
G.Ex_gpu.gpudata, G.Ey_gpu.gpudata, G.Ez_gpu.gpudata,
|
G.Ex_gpu.gpudata, G.Ey_gpu.gpudata, G.Ez_gpu.gpudata,
|
||||||
block=(1, 1, 1), grid=(round32(len(G.voltagesources)), 1, 1))
|
block=(1, 1, 1), grid=(round32(len(G.voltagesources)), 1, 1))
|
||||||
|
|
||||||
# Update electric field components for Hertzian dipole sources (update any Hertzian dipole sources last)
|
# Update electric field components for Hertzian dipole sources (update any Hertzian dipole sources last)
|
||||||
if G.hertziandipoles:
|
if G.hertziandipoles:
|
||||||
update_hertzian_dipole_gpu(np.int32(len(G.hertziandipoles)), np.int32(iteration),
|
update_hertzian_dipole_gpu(np.int32(len(G.hertziandipoles)), np.int32(iteration),
|
||||||
floattype(G.dx), floattype(G.dy), floattype(G.dz),
|
floattype(G.dx), floattype(G.dy), floattype(G.dz),
|
||||||
srcinfo1_hertzian_gpu.gpudata, srcinfo2_hertzian_gpu.gpudata,
|
srcinfo1_hertzian_gpu.gpudata, srcinfo2_hertzian_gpu.gpudata,
|
||||||
srcwaves_hertzian_gpu.gpudata, G.ID_gpu.gpudata,
|
srcwaves_hertzian_gpu.gpudata, G.ID_gpu.gpudata,
|
||||||
G.Ex_gpu.gpudata, G.Ey_gpu.gpudata, G.Ez_gpu.gpudata,
|
G.Ex_gpu.gpudata, G.Ey_gpu.gpudata, G.Ez_gpu.gpudata,
|
||||||
block=(1, 1, 1), grid=(round32(len(G.hertziandipoles)), 1, 1))
|
block=(1, 1, 1), grid=(round32(len(G.hertziandipoles)), 1, 1))
|
||||||
|
|
||||||
# If there are any dispersive materials do 2nd part of dispersive update (it is split into two parts as it requires present and updated electric field values). Therefore it can only be completely updated after the electric field has been updated by the PML and source updates.
|
# If there are any dispersive materials do 2nd part of dispersive update (it is split into two parts as it requires present and updated electric field values). Therefore it can only be completely updated after the electric field has been updated by the PML and source updates.
|
||||||
if Material.maxpoles > 0:
|
if Material.maxpoles > 0:
|
||||||
update_e_dispersive_B_gpu(np.int32(G.nx), np.int32(G.ny), np.int32(G.nz),
|
update_e_dispersive_B_gpu(np.int32(G.nx), np.int32(G.ny), np.int32(G.nz),
|
||||||
np.int32(Material.maxpoles), G.updatecoeffsdispersive_gpu.gpudata,
|
np.int32(Material.maxpoles), G.updatecoeffsdispersive_gpu.gpudata,
|
||||||
G.Tx_gpu.gpudata, G.Ty_gpu.gpudata, G.Tz_gpu.gpudata, G.ID_gpu.gpudata,
|
G.Tx_gpu.gpudata, G.Ty_gpu.gpudata, G.Tz_gpu.gpudata, G.ID_gpu.gpudata,
|
||||||
G.Ex_gpu.gpudata, G.Ey_gpu.gpudata, G.Ez_gpu.gpudata,
|
G.Ex_gpu.gpudata, G.Ey_gpu.gpudata, G.Ez_gpu.gpudata,
|
||||||
block=G.tpb, grid=G.bpg)
|
block=G.tpb, grid=G.bpg)
|
||||||
|
|
||||||
# Copy output from receivers array back to correct receiver objects
|
# Copy output from receivers array back to correct receiver objects
|
||||||
if G.rxs:
|
if G.rxs:
|
||||||
@@ -643,7 +643,7 @@ def solve_gpu(currentmodelrun, modelend, G):
|
|||||||
if G.snapshots and not G.snapsgpu2cpu:
|
if G.snapshots and not G.snapsgpu2cpu:
|
||||||
for i, snap in enumerate(G.snapshots):
|
for i, snap in enumerate(G.snapshots):
|
||||||
gpu_get_snapshot_array(snapEx_gpu.get(), snapEy_gpu.get(), snapEz_gpu.get(),
|
gpu_get_snapshot_array(snapEx_gpu.get(), snapEy_gpu.get(), snapEz_gpu.get(),
|
||||||
snapHx_gpu.get(), snapHy_gpu.get(), snapHz_gpu.get(), i, snap)
|
snapHx_gpu.get(), snapHy_gpu.get(), snapHz_gpu.get(), i, snap)
|
||||||
|
|
||||||
iterend.record()
|
iterend.record()
|
||||||
iterend.synchronize()
|
iterend.synchronize()
|
||||||
|
@@ -174,7 +174,7 @@ def gpu_initialise_snapshot_array(G):
|
|||||||
G (class): Grid class instance - holds essential parameters describing the model.
|
G (class): Grid class instance - holds essential parameters describing the model.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
snapE*_gpu, snapH*_gpu (float): numpy arrays of snapshot data on GPU.
|
snapE_gpu, snapH_gpu (float): numpy arrays of snapshot data on GPU.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pycuda.gpuarray as gpuarray
|
import pycuda.gpuarray as gpuarray
|
||||||
@@ -220,8 +220,8 @@ def gpu_get_snapshot_array(snapEx_gpu, snapEy_gpu, snapEz_gpu, snapHx_gpu, snapH
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
snap.electric = np.stack((snapEx_gpu[i, snap.xs:snap.xf, snap.ys:snap.yf, snap.zs:snap.zf],
|
snap.electric = np.stack((snapEx_gpu[i, snap.xs:snap.xf, snap.ys:snap.yf, snap.zs:snap.zf],
|
||||||
snapEy_gpu[i, snap.xs:snap.xf, snap.ys:snap.yf, snap.zs:snap.zf],
|
snapEy_gpu[i, snap.xs:snap.xf, snap.ys:snap.yf, snap.zs:snap.zf],
|
||||||
snapEz_gpu[i, snap.xs:snap.xf, snap.ys:snap.yf, snap.zs:snap.zf])).reshape(-1, order='F')
|
snapEz_gpu[i, snap.xs:snap.xf, snap.ys:snap.yf, snap.zs:snap.zf])).reshape(-1, order='F')
|
||||||
snap.magnetic = np.stack((snapHx_gpu[i, snap.xs:snap.xf, snap.ys:snap.yf, snap.zs:snap.zf],
|
snap.magnetic = np.stack((snapHx_gpu[i, snap.xs:snap.xf, snap.ys:snap.yf, snap.zs:snap.zf],
|
||||||
snapHy_gpu[i, snap.xs:snap.xf, snap.ys:snap.yf, snap.zs:snap.zf],
|
snapHy_gpu[i, snap.xs:snap.xf, snap.ys:snap.yf, snap.zs:snap.zf],
|
||||||
snapHz_gpu[i, snap.xs:snap.xf, snap.ys:snap.yf, snap.zs:snap.zf])).reshape(-1, order='F')
|
snapHz_gpu[i, snap.xs:snap.xf, snap.ys:snap.yf, snap.zs:snap.zf])).reshape(-1, order='F')
|
||||||
|
@@ -392,4 +392,3 @@ def detect_gpus():
|
|||||||
print('GPU(s) detected: {}'.format(' | '.join(gputext)))
|
print('GPU(s) detected: {}'.format(' | '.join(gputext)))
|
||||||
|
|
||||||
return gpus
|
return gpus
|
||||||
|
|
||||||
|
在新工单中引用
屏蔽一个用户