Knot physics, fine structure constant, function verification

This notebook accompanies the paper “Knot physics: deriving the fine structure constant”
Both are available at www.knotphysics.net
author:           Cliff Ellgen
author email:  cellgen@gmail.com

We verify the functions used to estimate the fine structure constant α.  We perform a few tests on the functions used in the calculation: ScaledDivField and ScaledCurlField.  Then we generate rhotest, DivFieldtest, and CurlFieldtest using a sum over discrete point sources.  We then compare those test functions to rho, ScaledDivField, and ScaledCurlField by converting them to the cylindrical coordinate functions rhorz, DivFieldrz, and CurlFieldrz.  We show that the discrete point sums generate the same result as the converted toroidal functions, to within the accuracy of the sum over discrete point sources.

radius=1;    (*the particle radius. for the purpose of function tests r=1 *)

charge=1;      (*the particle charge *)

rco[tau_,sigma_,phi_]:=radius*Sinh[tau]*(Cosh[tau]-Cos[sigma])^(-1)*Cos[phi]; (*the r coordinate  *)

zco[tau_, sigma_, phi_]:=radius*Sin[sigma]*(Cosh[tau]-Cos[sigma])^(-1); (*the z coordinate  *)

d1[r_,z_]:=((r+radius)^2+z^2)^(1/2);  (*  the distance to (-1,0) used to calculate tau and sigma *)

d2[r_,z_]:=((r-radius)^2+z^2)^(1/2);  (* the distance to (1,0) used to calculate tau and sigma  *)

tauc[r_,z_]:=Log[d1[r,z]/d2[r,z]];   (* the tau coordinate *)

sigmac[r_,z_]:=(z/(z^2)^(1/2))*ArcCos[-(4*radius^2-d1[r,z]^2-d2[r,z]^2)*(2*d1[r,z]*d2[r,z])^(-1)];  (*  the sigma coordinate  *)

dtaudr[r_,z_]:=Simplify[Derivative[1,0][tauc][r,z]];  (*  dtau/dr  *)

dtaudz[r_,z_]:=Simplify[Derivative[0,1][tauc][r,z]];    (*  dtau/dz  *)

dsigmadr[r_,z_]:=Simplify[Derivative[1,0][sigmac][r,z]];  (*  dsigma/dr  *)

dsigmadz[r_,z_]:=Simplify[Derivative[0,1][sigmac][r,z]];  (* dsigma/dz  *)

bipolarscale[r_,z_]:=(2/(d1[r,z]*d2[r,z]));  (*  the length scale of coordinate change between toroidal and cylindrical coordinates  *)

bipolarscaletor[tau_,sigma_]:=(Cosh[tau]-Cos[sigma])/radius;   (*  the length scale of coordinate change between toroidal and cylindrical coordinates  *)

dVtor[tau_,sigma_]:=2*Pi*Abs[(radius^3*Sinh[tau])/(Cosh[tau]-Cos[sigma])^3];  (*  the volume element in toroidal coordinates *)

TauArea[tau_,sigma_]:=Abs[(radius^2*Sinh[tau])/(Cosh[tau]-Cos[sigma])^2];  (*  the area element in toroidal coordinates on a surface of constant tau  *)

end coordinate transformations

harmonic[tau_,sigma_]:=(Cosh[tau]-Cos[sigma])^(1/2)*LegendreP[-1/2,0,Cosh[tau]];

rho[tau_,sigma_]:=E^((Pi*2^(-1/2))*harmonic[tau, sigma]);

rhorz[r_,z_]:=rho[tauc[r,z],sigmac[r,z]];   (*  rho in cylindrical coordinates  *)

DivField[tau_,sigma_]:={-(1/radius)*Sinh[tau]*(Cosh[tau]-Cos[sigma])^(1/2)*((1/2)*LegendreP[-1/2,0,Cosh[tau]]+(Cosh[tau]-Cos[sigma])*D[LegendreP[-1/2,0,x],x]/.x->Cosh[tau]),-(1/radius)*(Cosh[tau]-Cos[sigma])^(1/2)*((1/2)*Sin[sigma]*LegendreP[-1/2,0,Cosh[tau]]),0};

ScaledDivField[tau_,sigma_]:=charge*(1/radius)*(4*Pi*2^(1/2))^(-1)*DivField[tau, sigma];

DivFieldrz[r_,z_]:=(1/bipolarscale[r,z])*{ScaledDivField[tauc[r,z],sigmac[r,z]][[1]]*dtaudr[r,z]+ScaledDivField[tauc[r,z],sigmac[r,z]][[2]]*dsigmadr[r,z],ScaledDivField[tauc[r,z],sigmac[r,z]][[1]]*dtaudz[r,z]+ScaledDivField[tauc[r,z],sigmac[r,z]][[2]]*dsigmadz[r,z]};   (*   ScaledDivField in cylindrical coordinates  *)

StokesCurrent[tau_,sigma_]:=I*(Cosh[tau]-Cos[sigma])^(-1/2)*Sinh[tau]*LegendreP[-1/2,1, Cosh[tau]];

CurlField[tau_, sigma_]:={-(Cosh[tau]-Cos[sigma])^2*(radius^2*Sinh[tau])^(-1)*D[StokesCurrent[tau, y],y]/.y->sigma,(Cosh[tau]-Cos[sigma])^2*(radius^2*Sinh[tau])^(-1)*D[StokesCurrent[y, sigma],y]/.y->tau,0};

ScaledCurlField[tau_,sigma_]:=charge*2^(-1/2)*Re[CurlField[tau, sigma]];

CurlFieldrz[r_,z_]:=(1/bipolarscale[r,z])*{ScaledCurlField[tauc[r,z],sigmac[r,z]][[1]]*dtaudr[r,z]+ScaledCurlField[tauc[r,z],sigmac[r,z]][[2]]*dsigmadr[r,z],ScaledCurlField[tauc[r,z],sigmac[r,z]][[1]]*dtaudz[r,z]+ScaledCurlField[tauc[r,z],sigmac[r,z]][[2]]*dsigmadz[r,z]};  (*   ScaledCurlField in cylindrical coordinates  *)

end function definitions

Check Gauss’s Law for ScaledDivField.  Plot of the integral of the outward facing normal of ScaledDivField on surfaces of constant tau for a range of tau values.  Divided by charge so that the value should be 1 for all tau values.

Plot[(1/charge)*NIntegrate[-2*Pi*TauArea[tau,sigma]*ScaledDivField[tau,sigma][[1]],{sigma,-Pi,Pi}],{tau,0.001,4},PlotRange->{0.9,1.1}]

Check Stokes’ Theorem for ScaledCurlField.  Plot of the integral of the tangent vector to the surface of constant tau of ScaledCurlField for a range of tau values.  Divided by charge (charge = current) so the value should be 1 for all tau values.

Plot[NIntegrate[-(1/charge)*bipolarscaletor[tau,sigma]^(-1)*radius*ScaledCurlField[tau,sigma][[2]],{sigma,-Pi,Pi}],{tau,0.001,4},PlotRange->{0.9,1.1}]

We compose the functions DivFieldtest and CurlFieldtest using the sum over discrete point sources distributed on a circle of radius radius.  We then compare the test functions to the toroidal coordinate functions.

n=6    (*  the number of point sources is 2^n  *)

rlimit=4*radius    (*  the r axis limit of the plots below  *)

zlimit=4*radius   (*  the z axis limit of the plots below  *)

(******************)

sourcedistance[sourcetheta_, r_, z_]:=((r-radius*Cos[sourcetheta])^2+z^2+(radius*Sin[sourcetheta])^2)^(1/2);   (*  the distance from location at angle sourcetheta on the circle to the point (r,z)  *)

sourcerpart[sourcetheta_,r_,z_]:=(r-radius*Cos[sourcetheta])/sourcedistance[sourcetheta, r, z];  (*  the r component of the unit vector pointing from the location at angle sourcetheta on the circle to the point (r,z)  *)

sourcezpart[sourcetheta_,r_,z_]:=z/sourcedistance[sourcetheta, r, z];  (* the z component of the unit vector pointing from the location at angle sourcetheta on the circle to the point (r,z)  *)

sourcethetapart[sourcetheta_, r_, z_]:=(-radius*Sin[sourcetheta])/sourcedistance[sourcetheta, r, z];   (*  the theta component of the unit vector pointing from the location at angle sourcetheta on the circle to the point (r,z)  *)

harmonictest[r_,z_]:=
(1/2^n)*(2*Pi*radius*Sum[sourcedistance[(2*j+1)*Pi/(2^n), r,z]^(-1),{j,0,2^(n-1)-1}]);  (*  the harmonic function as a sum of 1/d contributions from source points  *)

rhotest[r_,z_]:=E^(harmonictest[r,z]);    (*  the test rho function  *)

dCurlField[sourcetheta_, r_, z_]:=(2*Pi*radius)*(4*Pi)^(-1)*Cross[{-Sin[sourcetheta], 0, Cos[sourcetheta]}, {r-radius*Cos[sourcetheta], z, -radius*Sin[sourcetheta]}]*(Norm[{r-radius*Cos[sourcetheta], z, -radius*Sin[sourcetheta]}])^(-3);  (* the point contribution to CurlFieldtest from a single source point *)

dDivField[sourcetheta_, r_, z_]:=(2*Pi*radius)*(4*Pi)^(-1)*{sourcerpart[sourcetheta,r,z], sourcezpart[sourcetheta,r,z], sourcethetapart[sourcetheta, r, z]}/(sourcedistance[sourcetheta, r, z]^2);  (*  the point contribution to the DivFieldtest from a single source point *)

(*******     ****)

DivFieldtest[r_, z_]:=
(1/(2*Pi))*charge*(1/2^n)*(2*Sum[{dDivField[(2*j+1)*Pi/(2^n), r,z][[1]],dDivField[(2*j+1)*Pi/(2^n), r,z][[2]],0} ,{j,0,2^(n-1)-1}]);  (*  the sum of the point contributions to the divergence field  *)

CurlFieldtest[r_, z_]:=
charge*(1/2^n)*(2*Sum[{dCurlField[(2*j+1)*Pi/(2^n), r,z][[1]],dCurlField[(2*j+1)*Pi/(2^n), r,z][[2]] ,0},{j,0,2^(n-1)-1}]);  (*  the sum of the point contributions to the curl field   *)

We compare the toroidal functions, converted to cylindrical coordinates, with the test functions.  The first plot is the toroidal function.  The second plot is the test function.  The third plot divides the toroidal function by the test function.  In each case the third plot should be flat, except close to the source at (radius, 0) and (-radius, 0).  Increasing the number of source points by increasing n reduces the error close to the source.  Coordinate transformations may produce apparent discontintuities in the plots on r=0 and z=0 if the plot limits rlimit and zlimit are too large.

Test function compared to toroidal functions for rho.

{Plot3D[rhorz[r,z], {r, -rlimit,rlimit},{z,-zlimit,zlimit}],Plot3D[rhotest[r,z], {r, -rlimit,rlimit},{z,-zlimit,zlimit}],Plot3D[rhorz[r,z]/rhotest[r,z],{r, -rlimit,rlimit},{z,-zlimit,zlimit},PlotRange->{0.99,1.01}]}

Test functions compared to toroidal functions for DivField.  Comparing the norm of the vector field then comparing the first coordinate then comparing the second coordinate.

{Plot3D[Norm[DivFieldrz[r,z]],{r, -rlimit,rlimit},{z,-zlimit,zlimit}],Plot3D[Norm[DivFieldtest[r,z]],{r, -rlimit,rlimit},{z,-zlimit,zlimit}],Plot3D[Norm[DivFieldrz[r,z]]/Norm[DivFieldtest[r,z]],{r, -rlimit,rlimit},{z,-zlimit,zlimit},PlotRange->{0.99,1.01}]}

{Plot3D[DivFieldrz[r,z][[1]],{r, -rlimit,rlimit},{z,-zlimit,zlimit}],Plot3D[DivFieldtest[r,z][[1]],{r, -rlimit,rlimit},{z,-zlimit,zlimit}],Plot3D[DivFieldrz[r,z][[1]]/DivFieldtest[r,z][[1]],{r, -rlimit,rlimit},{z,-zlimit,zlimit},PlotRange->{0.99,1.01}]}

{Plot3D[DivFieldrz[r,z][[2]],{r, -rlimit,rlimit},{z,-zlimit,zlimit}],Plot3D[DivFieldtest[r,z][[2]],{r, -rlimit,rlimit},{z,-zlimit,zlimit}],Plot3D[DivFieldrz[r,z][[2]]/DivFieldtest[r,z][[2]],{r, -rlimit,rlimit},{z,-zlimit,zlimit},PlotRange->{0.99,1.01}]}

Test functions compared to toroidal functions for CurlField.  Comparing the norm of the function then comparing the first coordinate then comparing the second coordinate.  Because of discontinuities of the toroidal coordinate transformations from r < 0 to r > 0, the field changes sign.  However the momentum integral used for the fine structure constant uses only the side r  > 0, so it contains no sign error.  To compare the test functions and the and toroidal functions, we take the norm of all functions, thus ignoring the sign error in these plots.

{Plot3D[Norm[CurlFieldrz[r,z]],{r, -rlimit,rlimit},{z,-zlimit,zlimit}],Plot3D[Norm[CurlFieldtest[r,z]],{r, -rlimit,rlimit},{z,-zlimit,zlimit}],Plot3D[Norm[CurlFieldrz[r,z]]/Norm[CurlFieldtest[r,z]],{r, -rlimit,rlimit},{z,-zlimit,zlimit},PlotRange->{0.99,1.01}]}

{Plot3D[Norm[CurlFieldrz[r,z][[1]]],{r, -rlimit,rlimit},{z,-zlimit,zlimit}],Plot3D[Norm[CurlFieldtest[r,z][[1]]],{r, -rlimit,rlimit},{z,-zlimit,zlimit}],Plot3D[Norm[CurlFieldrz[r,z][[1]]]/Norm[CurlFieldtest[r,z][[1]]],{r, -rlimit,rlimit},{z,-zlimit,zlimit},PlotRange->{0.99,1.01}]}

{Plot3D[Norm[CurlFieldrz[r,z][[2]]],{r, -rlimit,rlimit},{z,-zlimit,zlimit}],Plot3D[Norm[CurlFieldtest[r,z][[2]]],{r, -rlimit,rlimit},{z,-zlimit,zlimit}],Plot3D[Norm[CurlFieldrz[r,z][[2]]]/Norm[CurlFieldtest[r,z][[2]]],{r, -rlimit,rlimit},{z,-zlimit,zlimit},PlotRange->{0.99,1.01}]}