***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