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