Montag, 14. Februar 2011

Python 052

Last year I already make a programm for calculating magnetic fields of wires and coils. This one here is a slightly better version. :)




# Calculation of a magnetic field of a wire

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
from pylab import *
from visual import *

# constant
I = 1
mu0 = 1e-7
constant = mu0/(4*np.pi)

# coil
parts = 238
coord2 =[]
ball = []
size = 25
factor = 6.0
steigung = 0.3
for i in range(parts):
coord2.append((size*(sin(i/factor)),size*(cos(i/factor)),steigung*i))
ball.append(sphere(pos=(coord2[i][0],coord2[i][1],coord2[i][2])))

# calculate the b-field
def bfield(x,y,z):
b = 0
for i in range(parts-1):
dlx = coord2[i+1][0]-coord2[i][0]
dly = coord2[i+1][1]-coord2[i][1]
dlz = coord2[i+1][2]-coord2[i][2]
dl = np.array([dlx,dly,dlz])
rspace_minus_rwire_x = x - (coord2[i][0]+dlx)
rspace_minus_rwire_y = y - (coord2[i][1]+dly)
rspace_minus_rwire_z = z - (coord2[i][2]+dlz)
rspace_minus_rwire = np.array([rspace_minus_rwire_x, rspace_minus_rwire_y, rspace_minus_rwire_z])
absr = (rspace_minus_rwire_x**2 + rspace_minus_rwire_y**2 + rspace_minus_rwire_z**2)**0.5
a = constant * I * np.cross(dl, rspace_minus_rwire) / absr**3
#b += (a[0]**2 + a[1]**2 + a[2]**2)**0.5
b += a
return b

# visualisation
for x in range(-42,42,3):
for z in range(-60,40,6):
y = 0
a = bfield(x,y,z)
a = 800000000 * a
#print a
limit = 10 # largest arrow size
if abs(a[0]) > limit or abs(a[1]) > limit or abs(a[2]) > limit:
a = (0,0,0)
arrow(pos=(x,y,z),axis=(a), color=color.green)

Here is the code with indentation:
http://paste.pocoo.org/show/338355/

Keine Kommentare:

 
eXTReMe Tracker