Improved access to memory views.

这个提交包含在:
Craig Warren
2016-02-25 17:58:15 +00:00
父节点 11bf373b11
当前提交 8cc0e747a9
共有 3 个文件被更改,包括 47 次插入74 次删除

查看文件

@@ -22,15 +22,17 @@ from gprMax.materials import Material
from gprMax.yee_cell_setget_rigid cimport get_rigid_Ex, get_rigid_Ey, get_rigid_Ez, get_rigid_Hx, get_rigid_Hy, get_rigid_Hz
cpdef build_ex_component(np.uint32_t[:, :, :] solid, np.int8_t[:, :, :, :] rigidE, np.uint32_t[:, :, :, :] ID, G):
"""This function builds the Ex components in the ID array.
cpdef void build_electric_components(np.uint32_t[:, :, ::1] solid, np.int8_t[:, :, :, ::1] rigidE, np.uint32_t[:, :, :, ::1] ID, G):
"""This function builds the electric field components in the ID array.
Args:
solid, rigid, ID (memoryviews): Access to solid, rigid and ID arrays
"""
cdef int i, j, k, numID1, numID2, numID3, numID4
cdef Py_ssize_t i, j, k
cdef int numID1, numID2, numID3, numID4
# Ex component
for i in range(0, G.nx):
for j in range(1, G.ny):
for k in range(1, G.nz):
@@ -75,15 +77,7 @@ cpdef build_ex_component(np.uint32_t[:, :, :] solid, np.int8_t[:, :, :, :] rigid
G.materials.append(m)
ID[0, i, j, k] = newNumID
cpdef build_ey_component(np.uint32_t[:, :, :] solid, np.int8_t[:, :, :, :] rigidE, np.uint32_t[:, :, :, :] ID, G):
"""This function builds the Ey components in the ID array.
Args:
solid, rigid, ID (memoryviews): Access to solid, rigid and ID arrays
"""
cdef int i, j, k, numID1, numID2, numID3, numID4
# Ey component
for i in range(1, G.nx):
for j in range(0, G.ny):
for k in range(1, G.nz):
@@ -128,15 +122,7 @@ cpdef build_ey_component(np.uint32_t[:, :, :] solid, np.int8_t[:, :, :, :] rigid
G.materials.append(m)
ID[1, i, j, k] = newNumID
cpdef build_ez_component(np.uint32_t[:, :, :] solid, np.int8_t[:, :, :, :] rigidE, np.uint32_t[:, :, :, :] ID, G):
"""This function builds the Ez components in the ID array.
Args:
solid, rigid, ID (memoryviews): Access to solid, rigid and ID arrays
"""
cdef int i, j, k, numID1, numID2, numID3, numID4
# Ez component
for i in range(1, G.nx):
for j in range(1, G.ny):
for k in range(0, G.nz):
@@ -181,15 +167,18 @@ cpdef build_ez_component(np.uint32_t[:, :, :] solid, np.int8_t[:, :, :, :] rigid
G.materials.append(m)
ID[2, i, j, k] = newNumID
cpdef build_hx_component(np.uint32_t[:, :, :] solid, np.int8_t[:, :, :, :] rigidH, np.uint32_t[:, :, :, :] ID, G):
"""This function builds the Hx components in the ID array.
cpdef void build_magnetic_components(np.uint32_t[:, :, ::1] solid, np.int8_t[:, :, :, ::1] rigidH, np.uint32_t[:, :, :, ::1] ID, G):
"""This function builds the magnetic field components in the ID array.
Args:
solid, rigid, ID (memoryviews): Access to solid, rigid and ID arrays
"""
cdef int i, j, k, numID1, numID2
cdef Py_ssize_t i, j, k
cdef int numID1, numID2
# Hx component
for i in range(1, G.nx):
for j in range(0, G.ny):
for k in range(0, G.nz):
@@ -231,15 +220,7 @@ cpdef build_hx_component(np.uint32_t[:, :, :] solid, np.int8_t[:, :, :, :] rigid
G.materials.append(m)
ID[3, i, j, k] = newNumID
cpdef build_hy_component(np.uint32_t[:, :, :] solid, np.int8_t[:, :, :, :] rigidH, np.uint32_t[:, :, :, :] ID, G):
"""This function builds the Hy components in the ID array.
Args:
solid, rigid, ID (memoryviews): Access to solid, rigid and ID arrays
"""
cdef int i, j, k, numID1, numID2
# Hy component
for i in range(0, G.nx):
for j in range(1, G.ny):
for k in range(0, G.nz):
@@ -281,15 +262,7 @@ cpdef build_hy_component(np.uint32_t[:, :, :] solid, np.int8_t[:, :, :, :] rigid
G.materials.append(m)
ID[4, i, j, k] = newNumID
cpdef build_hz_component(np.uint32_t[:, :, :] solid, np.int8_t[:, :, :, :] rigidH, np.uint32_t[:, :, :, :] ID, G):
"""This function builds the Hz components in the ID array.
Args:
solid, rigid, ID (memoryviews): Access to solid, rigid and ID arrays
"""
cdef int i, j, k, numID1, numID2
# Hz component
for i in range(0, G.nx):
for j in range(0, G.ny):
for k in range(1, G.nz):

查看文件

@@ -21,24 +21,24 @@ cimport numpy as np
# Get and set functions for the rigid electric component array. The rigid array is 4D with the 1st dimension holding
# the 12 electric edge components of a cell - Ex1, Ex2, Ex3, Ex4, Ey1, Ey2, Ey3, Ey4, Ez1, Ez2, Ez3, Ez4
cdef bint get_rigid_Ex(int i, int j, int k, np.int8_t[:, :, :, :] rigidE)
cdef bint get_rigid_Ey(int i, int j, int k, np.int8_t[:, :, :, :] rigidE)
cdef bint get_rigid_Ez(int i, int j, int k, np.int8_t[:, :, :, :] rigidE)
cdef void set_rigid_Ex(int i, int j, int k, np.int8_t[:, :, :, :] rigidE)
cdef void set_rigid_Ey(int i, int j, int k, np.int8_t[:, :, :, :] rigidE)
cdef void set_rigid_Ez(int i, int j, int k, np.int8_t[:, :, :, :] rigidE)
cdef void set_rigid_E(int i, int j, int k, np.int8_t[:, :, :, :] rigidE)
cdef void unset_rigid_E(int i, int j, int k, np.int8_t[:, :, :, :] rigidE)
cdef bint get_rigid_Ex(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidE)
cdef bint get_rigid_Ey(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidE)
cdef bint get_rigid_Ez(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidE)
cdef void set_rigid_Ex(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidE)
cdef void set_rigid_Ey(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidE)
cdef void set_rigid_Ez(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidE)
cdef void set_rigid_E(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidE)
cdef void unset_rigid_E(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidE)
# Get and set functions for the rigid magnetic component array. The rigid array is 4D with the 1st dimension holding
# the 6 magnetic edge components - Hx1, Hx2, Hy1, Hy2, Hz1, Hz2
cdef bint get_rigid_Hx(int i, int j, int k, np.int8_t[:, :, :, :] rigidH)
cdef bint get_rigid_Hy(int i, int j, int k, np.int8_t[:, :, :, :] rigidH)
cdef bint get_rigid_Hz(int i, int j, int k, np.int8_t[:, :, :, :] rigidH)
cdef void set_rigid_Hx(int i, int j, int k, np.int8_t[:, :, :, :] rigidH)
cdef void set_rigid_Hy(int i, int j, int k, np.int8_t[:, :, :, :] rigidH)
cdef void set_rigid_Hz(int i, int j, int k, np.int8_t[:, :, :, :] rigidH)
cdef void set_rigid_H(int i, int j, int k, np.int8_t[:, :, :, :] rigidH)
cdef void unset_rigid_H(int i, int j, int k, np.int8_t[:, :, :, :] rigidH)
cdef bint get_rigid_Hx(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidH)
cdef bint get_rigid_Hy(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidH)
cdef bint get_rigid_Hz(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidH)
cdef void set_rigid_Hx(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidH)
cdef void set_rigid_Hy(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidH)
cdef void set_rigid_Hz(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidH)
cdef void set_rigid_H(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidH)
cdef void unset_rigid_H(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidH)

查看文件

@@ -21,7 +21,7 @@ cimport numpy as np
# Get and set functions for the rigid electric component array. The rigid array is 4D with the 1st dimension holding
# the 12 electric edge components of a cell - Ex1, Ex2, Ex3, Ex4, Ey1, Ey2, Ey3, Ey4, Ez1, Ez2, Ez3, Ez4
cdef bint get_rigid_Ex(int i, int j, int k, np.int8_t[:, :, :, :] rigidE):
cdef bint get_rigid_Ex(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidE):
cdef bint result
result = False
if rigidE[0, i, j, k]:
@@ -37,7 +37,7 @@ cdef bint get_rigid_Ex(int i, int j, int k, np.int8_t[:, :, :, :] rigidE):
result = True
return result
cdef bint get_rigid_Ey(int i, int j, int k, np.int8_t[:, :, :, :] rigidE):
cdef bint get_rigid_Ey(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidE):
cdef bint result
result = False
if rigidE[4, i, j, k]:
@@ -53,7 +53,7 @@ cdef bint get_rigid_Ey(int i, int j, int k, np.int8_t[:, :, :, :] rigidE):
result = True
return result
cdef bint get_rigid_Ez(int i, int j, int k, np.int8_t[:, :, :, :] rigidE):
cdef bint get_rigid_Ez(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidE):
cdef bint result
result = False
if rigidE[8, i, j, k]:
@@ -69,7 +69,7 @@ cdef bint get_rigid_Ez(int i, int j, int k, np.int8_t[:, :, :, :] rigidE):
result = True
return result
cdef void set_rigid_Ex(int i, int j, int k, np.int8_t[:, :, :, :] rigidE):
cdef void set_rigid_Ex(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidE):
rigidE[0, i, j, k] = True
if j != 0:
rigidE[1, i, j - 1, k] = True
@@ -78,7 +78,7 @@ cdef void set_rigid_Ex(int i, int j, int k, np.int8_t[:, :, :, :] rigidE):
if j != 0 and k != 0:
rigidE[2, i, j - 1, k - 1] = True
cdef void set_rigid_Ey(int i, int j, int k, np.int8_t[:, :, :, :] rigidE):
cdef void set_rigid_Ey(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidE):
rigidE[4, i, j, k] = True
if i != 0:
rigidE[7, i - 1, j, k] = True
@@ -87,7 +87,7 @@ cdef void set_rigid_Ey(int i, int j, int k, np.int8_t[:, :, :, :] rigidE):
if i != 0 and k != 0:
rigidE[6, i - 1, j, k - 1] = True
cdef void set_rigid_Ez(int i, int j, int k, np.int8_t[:, :, :, :] rigidE):
cdef void set_rigid_Ez(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidE):
rigidE[8, i, j, k] = True
if i != 0:
rigidE[9, i - 1, j, k] = True
@@ -96,15 +96,15 @@ cdef void set_rigid_Ez(int i, int j, int k, np.int8_t[:, :, :, :] rigidE):
if i != 0 and j != 0:
rigidE[10, i - 1, j - 1, k] = True
cdef void set_rigid_E(int i, int j, int k, np.int8_t[:, :, :, :] rigidE):
cdef void set_rigid_E(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidE):
rigidE[:, i, j, k] = True
cdef void unset_rigid_E(int i, int j, int k, np.int8_t[:, :, :, :] rigidE):
cdef void unset_rigid_E(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidE):
rigidE[:, i, j, k] = False
# Get and set functions for the rigid magnetic component array. The rigid array is 4D with the 1st dimension holding
# the 6 magnetic edge components - Hx1, Hx2, Hy1, Hy2, Hz1, Hz2
cdef bint get_rigid_Hx(int i, int j, int k, np.int8_t[:, :, :, :] rigidH):
cdef bint get_rigid_Hx(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidH):
cdef bint result
result = False
if rigidH[0, i, j, k]:
@@ -114,7 +114,7 @@ cdef bint get_rigid_Hx(int i, int j, int k, np.int8_t[:, :, :, :] rigidH):
result = True
return result
cdef bint get_rigid_Hy(int i, int j, int k, np.int8_t[:, :, :, :] rigidH):
cdef bint get_rigid_Hy(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidH):
cdef bint result
result = False
if rigidH[2, i, j, k]:
@@ -124,7 +124,7 @@ cdef bint get_rigid_Hy(int i, int j, int k, np.int8_t[:, :, :, :] rigidH):
result = True
return result
cdef bint get_rigid_Hz(int i, int j, int k, np.int8_t[:, :, :, :] rigidH):
cdef bint get_rigid_Hz(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidH):
cdef bint result
result = False
if rigidH[4, i, j, k]:
@@ -134,24 +134,24 @@ cdef bint get_rigid_Hz(int i, int j, int k, np.int8_t[:, :, :, :] rigidH):
result = True
return result
cdef void set_rigid_Hx(int i, int j, int k, np.int8_t[:, :, :, :] rigidH):
cdef void set_rigid_Hx(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidH):
rigidH[0, i, j, k] = True
if i != 0:
rigidH[1, i - 1, j, k] = True
cdef void set_rigid_Hy(int i, int j, int k, np.int8_t[:, :, :, :] rigidH):
cdef void set_rigid_Hy(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidH):
rigidH[2, i, j, k] = True
if j != 0:
rigidH[3, i, j - 1, k] = True
cdef void set_rigid_Hz(int i, int j, int k, np.int8_t[:, :, :, :] rigidH):
cdef void set_rigid_Hz(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidH):
rigidH[4, i, j, k] = True
if k != 0:
rigidH[5, i, j, k - 1] = True
cdef void set_rigid_H(int i, int j, int k, np.int8_t[:, :, :, :] rigidH):
cdef void set_rigid_H(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidH):
rigidH[:, i, j, k] = True
cdef void unset_rigid_H(int i, int j, int k, np.int8_t[:, :, :, :] rigidH):
cdef void unset_rigid_H(int i, int j, int k, np.int8_t[:, :, :, ::1] rigidH):
rigidH[:, i, j, k] = False