I'm trying to calculate the gravity effect of a buried object by calculating the effect on each side of the body and then summing up the contributions to get one measurement at one station, and repeating for a number of stations. The code is as follows (the body is a square and the code calculates clockwise around it. That's why it goes from -x back to -x coordinates).
grav = []
x = si.arange(-30.0, 30.0, 0.5)
# -9.79742526 9.78716693 22.32153704 27.07382349 2138.27146193
xcorn = (-9.79742526, 9.78716693, 9.78716693, -9.79742526, -9.79742526)
zcorn = (22.32153704, 22.32153704, 27.07382349, 27.07382349, 22.32153704)
gamma = (6.672*(10**-11)) # 'N m^2 / Kg^2'
rho = 2138.27146193 # 'Kg / m^3'
grav = []
iter_time = []
def procedure():
for i in si.arange(len(x)): # Cycles position
t0 = time.clock()
sum_lines = 0.0
for n in si.arange(len(xcorn)-1): # Cycles corners
x1 = xcorn[n] - x[i]
x2 = xcorn[n+1] - x[i]
z1 = zcorn[n] -0.0 # Just depth to corner since all observations are on the surface.
z2 = zcorn[n+1] -0.0
r1 = ((z1**2) + (x1**2))**0.5
r2 = ((z2**2) + (x2**2))**0.5
O1 = si.arctan2(z1, x1)
O2 = si.arctan2(z2, x2)
denom = z2-z1
if denom == 0.0:
denom = 1.0e-6
alpha = (x2-x1)/denom
beta = ((x1*z2)-(x2*z1))/denom
factor = (beta/(1.0 + (alpha**2)))
term1 = si.log(r2/r1) # Log base 10
term2 = alpha*(O2-O1)
sum_lines = sum_lines + (factor*(term1-term2))
sum_lines = sum_lines*2*gamma*rho
grav.append(sum_lines)
t1 = time.clock()
dt = t1-t0
iter_time.append(dt)
How can I speed this loop up?
si.arange()might suggest that he usesnumpyarrays already.