diff --git a/gprMax/yee_cell_build.pyx b/gprMax/yee_cell_build.pyx index feae884e..82e2dfcd 100644 --- a/gprMax/yee_cell_build.pyx +++ b/gprMax/yee_cell_build.pyx @@ -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): diff --git a/gprMax/yee_cell_setget_rigid.pxd b/gprMax/yee_cell_setget_rigid.pxd index 049f166b..b1935736 100644 --- a/gprMax/yee_cell_setget_rigid.pxd +++ b/gprMax/yee_cell_setget_rigid.pxd @@ -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) diff --git a/gprMax/yee_cell_setget_rigid.pyx b/gprMax/yee_cell_setget_rigid.pyx index 7287ac67..f71e3192 100644 --- a/gprMax/yee_cell_setget_rigid.pyx +++ b/gprMax/yee_cell_setget_rigid.pyx @@ -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