***Program for "Biot-Savart and Ampere’s Law"
Option Explicit
Private Sub cmdJimmy_Click()
'******
'In this program T is short for theta, P is short for phi.
'******
Const c As Double = 300000000# 'speed of light
Const eps0 As Double = 0.00000000000885 'permittivity constant
Const pi As Double = 3.131492654
Const amps As Double = 1 'loop current
Const C1 As Double = amps / (4 * pi * eps0 * c ^ 2) 'saves cpu time
Const nP As Long = 1000 'number of phi values
Const dP As Double = 2 * pi / nP 'phi increment
Const nT As Long = 1000 'number of theta values
Const dT As Double = 2 * pi / nT 'theta increment
Const Radius As Double = 1 'current loop radius
Dim y As Double 'point on contour
Dim z As Double 'point on contour
Dim xLoop, yLoop As Double
Dim P(nP), T As Double 'values of Phi and Theta
Dim dlxLoop, dlyLoop As Double 'dl increments on current loop
Dim dly, dlz As Double 'dl increments on contour
Dim rx, ry, rz, r As Double 'displacement from point on loop to pt on contour
Dim Bx, By, Bz As Double 'fld at point on contour
Dim indexP, indexT As Long 'loop counters for phi and theta
Dim dlxrx, dlxry, dlxrz As Double 'dlLoop x r components
Dim Bdotdl(nP) As Double 'increment of B dot dl
Dim BCirc As Double
For indexP = 0 To nP - 1
Debug.Print indexP
Bdotdl(indexP) = 0
P(indexP) = indexP * dP
y = Radius + Radius / 2 * Sin(P(indexP))
z = -Radius / 2 * Cos(P(indexP))
dly = Radius / 2 * dP * Cos(P(indexP))
dlz = Radius / 2 * dP * Sin(P(indexP))
Bx = 0
By = 0
Bz = 0
For indexT = 0 To nT - 1
T = indexT * dT
xLoop = Radius * Cos(T)
yLoop = Radius * Sin(T)
dlxLoop = -Radius * dT * Sin(T)
dlyLoop = Radius * dT * Cos(T)
rz = z
ry = y - yLoop
rx = -xLoop
r = Sqr(rx ^ 2 + ry ^ 2 + rz ^ 2)
dlxrx = dlyLoop * rz
dlxry = -dlxLoop * rz
dlxrz = dlxLoop * ry - dlyLoop * rx
By = By + C1 * dlxry / r ^ 3
Bz = Bz + C1 * dlxrz / r ^ 3
Next indexT
Bdotdl(indexP) = By * dly + Bz * dlz
Next indexP
BCirc = 0
For indexP = 0 To nP - 1
BCirc = BCirc + Bdotdl(indexP)
Next indexP
MsgBox ("BCirc = " & BCirc & ", Ampere = " & amps / (eps0 * c ^ 2))
Open "C:\WINMCAD\Physics\Jimmy.PRN" For Output As #1
For indexP = 0 To nP - 1
Write #1, P(indexP), Bdotdl(indexP)
Next indexP
Close
MsgBox ("Ready for plotting B")
Stop
End Sub