Change variable names and split allocation

fixes-turtlebasket
Mattia Montanari 2020-05-21 15:46:10 +01:00
parent fc79f5e9df
commit 14a62efb9a
1 changed files with 18 additions and 21 deletions

View File

@ -28,7 +28,7 @@ def pygjk(bod1, bod2):
simplex s simplex s
bd bd1 bd bd1
bd bd2 bd bd2
double answer double dist2
# Convert 1D array to 2D, if any # Convert 1D array to 2D, if any
if bod1.ndim < 2: if bod1.ndim < 2:
@ -45,14 +45,22 @@ def pygjk(bod1, bod2):
bd2.numpoints = np.size(bod2,0) bd2.numpoints = np.size(bod2,0)
# Allocate memory for pointer (not working) # Allocate memory for bodies
bd1.coord = <double **> malloc(bd1.numpoints * sizeof(double *)) bd1.coord = <double **> malloc(bd1.numpoints * sizeof(double *))
if not bd1.coord: if not bd1.coord:
raise NameError('Not enough memory for bd1.coord') raise NameError('Not enough memory for bd1.coord')
for i in range(0, bd1.numpoints):
bd1.coord[i] = <double *> malloc(3 * sizeof(double))
if not bd1.coord[i]:
raise NameError('Not enough memory for bd1.coord[]')
bd2.coord = <double **> malloc(bd2.numpoints * sizeof(double *)) bd2.coord = <double **> malloc(bd2.numpoints * sizeof(double *))
if not bd2.coord: if not bd2.coord:
raise NameError('Not enough memory for bd2.coord') raise NameError('Not enough memory for bd2.coord')
for j in range(0, bd2.numpoints):
bd2.coord[j] = <double *> malloc(3 * sizeof(double))
if not bd2.coord[j]:
raise NameError('Not enough memory for bd2.coord[]')
# Create numpy-array MemoryView # Create numpy-array MemoryView
cdef: cdef:
@ -61,25 +69,15 @@ def pygjk(bod1, bod2):
# Assign coordinate values # Assign coordinate values
for i in range(0, bd1.numpoints): for i in range(0, bd1.numpoints):
bd1.coord[i] = <double *> malloc(3 * sizeof(double)) for j in range(0,3):
if not bd1.coord[i]: bd1.coord[i][j] = narr1[i,j]
raise NameError('Not enough memory for bd1.coord[]')
bd1.coord[i][0] = narr1[i,0]
bd1.coord[i][1] = narr1[i,1]
bd1.coord[i][2] = narr1[i,2]
for j in range(0, bd2.numpoints):
bd2.coord[j] = <double *> malloc(3 * sizeof(double))
if not bd2.coord[j]:
raise NameError('Not enough memory for bd2.coord[]')
bd2.coord[j][0] = narr2[j,0]
bd2.coord[j][1] = narr2[j,1]
bd2.coord[j][2] = narr2[j,2]
for i in range(0, bd2.numpoints):
for j in range(0,3):
bd2.coord[i][j] = narr2[i,j]
# Call C function # Call C function
answer = gjk(bd1, bd2, &s) dist2 = gjk(bd1, bd2, &s)
# Free the memory # Free the memory
for ii in range(0, bd1.numpoints): for ii in range(0, bd1.numpoints):
@ -90,6 +88,5 @@ def pygjk(bod1, bod2):
free(bd2.coord[jj]) free(bd2.coord[jj])
free(bd2.coord) free(bd2.coord)
return dist2
return answer