Program that Computes Data for Table 7_2

Private Sub cmd2Charges_Click()

Const pi As Double = 3.14159265

Const c As Double = 299792000

Const eps0 As Double = 0.00000000000885

Const steps As Long = 100 'Number of time epochs in one cycle

Const deltatheta As Double = pi / steps 'Step size for angle theta

Const vmax1 As Double = 0.001 * c 'Maximum charge speed (m/sec)

'Const vmax1 As Double = 0.0005 * c

'Const vmax1 As Double = 5000

'Const vmax2 As Double = 0.001 * c

'Const vmax2 As Double = 0.0005 * c

Const vmax2 As Double = 5000

Const freq0 As Double = 1000000# 'Base frequency of oscillation (Hz)

'Const freq0 As Double = 5000000#

'Const freq0 As Double = 800000#

Const n1 As Long = 1 'Integer multiplier of base frequency, chge q1

'Const n1 As Long = 2

'Const n2 As Long = 1

Const n2 As Long = 2

'Const phi1 As Double = 0

Const phi1 As Double = pi

'Const phi1 As Double = pi / 2

Const phi2 As Double = 0

'Const phi2 As Double = pi / 4

'Const phi2 As Double = pi / 6

'Const q1 As Double = 0.001

'Const q1 As Double = 1

Const q1 As Double = 0.1

'Const q2 As Double = 0.001

'Const q2 As Double = 0.5

Const q2 As Double = 1.5

'Derived constants and other constants follow.

Const omega0 As Double = 2 * pi * freq0 'Angular frequency (radians/sec)

Const omega1 As Double = n1 * omega0

Const omega2 As Double = n2 * omega0

Const Amp1 As Double = vmax1 / omega1 'Amplitude of oscillation (meters)

MsgBox ("Amp1 = " & Amp1)

Const Amp2 As Double = vmax2 / omega2

MsgBox ("Amp2 = " & Amp2)

Const period0 As Double = 1 / freq0 'Period of oscillation (sec)

Const deltat As Double = period0 / steps 'Time interval between time epochs (sec)

Const lambda0 As Double = c / freq0 'Wavelength of any emitted radiation (meters)

Const R As Double = lambda0 'Radius of enclosing spherical surface (meters)

Const x01 = -0.3 * lambda0

Const x02 = 0.3 * lambda0

Dim theta(steps) As Double

Dim Ex1, Ey1, Bz1, Ex2, Ey2, Bz2 As Double

Dim Sx, Sy, SNormal As Double 'Poynting vector, S

Dim t(steps), tr, dt As Double 'Current time

Dim ux, uy As Double

Dim Dx, Dy, D As Double

Dim indext, indextheta As Long 'For loop indexes

Dim xr, vrx, vr, arx As Double

Dim dtmin, dtmax As Double 'Trial values of dt

Dim StripArea As Double

Dim Eflux(steps), NetEFlux(steps) As Double 'Energy fluxes

Dim Erad, W As Double 'Energy flux per cycle time through spherical surface

Dim FRadReact1(steps), FRadReact2(steps) As Double

Dim FInteract1(steps), FInteract2(steps) As Double

Dim NetF1(steps), NetF2(steps) As Double

Dim Px, Py As Double

Dim Term As Double

Dim vx1(steps), vx2(steps), daxdt1(steps), daxdt2(steps) As Double

For indext = 0 To steps - 1

t(indext) = indext * deltat

vx1(indext) = omega1 * Amp1 * Cos(omega1 * t(indext) + phi1)

vx2(indext) = omega2 * Amp2 * Cos(omega2 * t(indext) + phi2)

daxdt1(indext) = -omega1 ^ 2 * vx1(indext)

daxdt2(indext) = -omega2 ^ 2 * vx2(indext)

theta(indext) = indext * deltatheta + deltatheta / 2

Next indext

For indext = 0 To steps - 1

Debug.Print indext

For indextheta = 0 To steps - 1

'Fields of q1

Px = R * Cos(theta(indextheta))

Py = R * Sin(theta(indextheta))

StripArea = 2 * pi * Py * R * deltatheta

dtmin = 0

dtmax = 5 * R / c

Do

dt = (dtmin + dtmax) / 2

tr = t(indext) - dt 'Trial retarded time

xr = x01 + Amp1 * Sin(omega1 * tr + phi1) 'Trial retarded x

Dx = Px - xr

Dy = Py

D = Sqr(Dx ^ 2 + Dy ^ 2)

If Abs(c * dt - D) < 2 ^ -30 Then Exit Do 'Test for best retarded time

If (c * dt - D) > 0 Then dtmax = dt

If (c * dt - D) < 0 Then dtmin = dt

Loop

vrx = omega1 * Amp1 * Cos(omega1 * tr + phi1)

vr = vrx

arx = -omega1 ^ 2 * Amp1 * Sin(omega1 * tr + phi1)

ux = c * Dx / D - vrx

uy = c * Dy / D

Term = q1 / (4 * pi * eps0) * D / (Dx * ux + Dy * uy) ^ 3

Ex1 = Term * (ux * (c ^ 2 - vr ^ 2) + Dy * (-uy * arx))

Ey1 = Term * (uy * (c ^ 2 - vr ^ 2) - Dx * (-uy * arx))

Bz1 = 1 / (c * D) * (Dx * Ey1 - Dy * Ex1)

'Fields of q2

dtmin = 0

dtmax = 5 * R / c

Do

dt = (dtmin + dtmax) / 2

tr = t(indext) - dt 'Trial retarded time

xr = x02 + Amp2 * Sin(omega2 * tr + phi2) 'Trial retarded x

Dx = Px - xr

Dy = Py

D = Sqr(Dx ^ 2 + Dy ^ 2)

If Abs(c * dt - D) < 2 ^ -30 Then Exit Do 'Test for best retarded time

If (c * dt - D) > 0 Then dtmax = dt

If (c * dt - D) < 0 Then dtmin = dt

Loop

vrx = omega2 * Amp2 * Cos(omega2 * tr + phi2)

vr = vrx

arx = -omega2 ^ 2 * Amp2 * Sin(omega2 * tr + phi2)

ux = c * Dx / D - vrx

uy = c * Dy / D

Term = q2 / (4 * pi * eps0) * D / (Dx * ux + Dy * uy) ^ 3

Ex2 = Term * (ux * (c ^ 2 - vr ^ 2) + Dy * (-uy * arx))

Ey2 = Term * (uy * (c ^ 2 - vr ^ 2) - Dx * (-uy * arx))

Bz2 = 1 / (c * D) * (Dx * Ey2 - Dy * Ex2)

Sx = eps0 * c ^ 2 * ((Ey1 + Ey2) * (Bz1 + Bz2))

Sy = eps0 * c ^ 2 * (-(Ex1 + Ex2) * (Bz1 + Bz2))

SNormal = Sx * Cos(theta(indextheta)) + Sy * Sin(theta(indextheta))

Eflux(indextheta) = SNormal * StripArea * deltat

Next indextheta

NetEFlux(indext) = 0

For indextheta = 0 To steps - 1

NetEFlux(indext) = NetEFlux(indext) + Eflux(indextheta)

Next indextheta

Next indext

Erad = 0

For indext = 0 To steps - 1

Erad = Erad + NetEFlux(indext)

Next indext

MsgBox ("ERad = " & Erad)

'Now compute the reaction and the Interactive force experienced by each charge, at each time epoch.

'Reaction.

For indext = 0 To steps - 1

FRadReact1(indext) = q1 ^ 2 / (6 * pi * eps0 * c ^ 3) * daxdt1(indext)

FRadReact2(indext) = q2 ^ 2 / (6 * pi * eps0 * c ^ 3) * daxdt2(indext)

Next indext

'Interactive

For indext = 0 To steps - 1

'On q2 first

Px = x02 + Amp2 * Sin(omega2 * t(indext) + phi2)

dtmin = 0

dtmax = 5 * R / c

Do

dt = (dtmin + dtmax) / 2

tr = t(indext) - dt 'Trial retarded time

xr = x01 + Amp1 * Sin(omega1 * tr + phi1) 'Trial retarded x

Dx = Px - xr

D = Sqr(Dx ^ 2)

If Abs(c * dt - D) < 2 ^ -30 Then Exit Do 'Test for best retarded time

If (c * dt - D) > 0 Then dtmax = dt

If (c * dt - D) < 0 Then dtmin = dt

Loop

vrx = omega1 * Amp1 * Cos(omega1 * tr + phi1)

vr = vrx

arx = -omega1 ^ 2 * Amp1 * Sin(omega1 * tr + phi1)

ux = c * Dx / D - vrx

Term = q1 / (4 * pi * eps0) * D / (Dx * ux) ^ 3

Ex1 = Term * (ux * (c ^ 2 - vr ^ 2))

FInteract2(indext) = Ex1 * q2

'Interactive on q1

Px = x01 + Amp1 * Sin(omega1 * t(indext) + phi1)

dtmin = 0

dtmax = 5 * R / c

Do

dt = (dtmin + dtmax) / 2

tr = t(indext) - dt 'Trial retarded time

xr = x02 + Amp2 * Sin(omega2 * tr + phi2) 'Trial retarded x

Dx = Px - xr

D = Sqr(Dx ^ 2)

If Abs(c * dt - D) < 2 ^ -30 Then Exit Do 'Test for best retarded time

If (c * dt - D) > 0 Then dtmax = dt

If (c * dt - D) < 0 Then dtmin = dt

Loop

vrx = omega2 * Amp2 * Cos(omega2 * tr + phi2)

vr = vrx

arx = -omega2 ^ 2 * Amp2 * Sin(omega2 * tr + phi2)

ux = c * Dx / D - vrx

Term = q2 / (4 * pi * eps0) * D / (Dx * ux) ^ 3

Ex2 = Term * (ux * (c ^ 2 - vr ^ 2))

FInteract1(indext) = Ex2 * q1

Next indext

For indext = 0 To steps - 1

NetF1(indext) = -FRadReact1(indext) - FInteract1(indext)

NetF2(indext) = -FRadReact2(indext) - FInteract2(indext)

Next indext

W = 0

For indext = 0 To steps - 1

W = W + NetF1(indext) * vx1(indext) * deltat

W = W + NetF2(indext) * vx2(indext) * deltat

Next indext

MsgBox ("W = " & W)

Stop

End Sub