from pyscript import document, display
import js
from scipy.special import ellipk, ellipe
from numpy import abs, pi, sqrt, sin, cos, arctan2
small_dist = 1.00e-6
def ba_wirecir(r, z, i, ra): # Smythe
cn = i*1.0e-7
if r < small_dist: # on axis
at = 0.0
br = 0.0
bz = 2.0*cn*pi*ra**2 / (z**2 + ra**2)**1.5
else:
if r==ra:
r= ra - small_dist
a2 = (ra + r)**2 + z**2
a1 = sqrt(a2)
b2 = (ra - r)**2 + z**2
k2 = 4.0*r*ra/a2
k1 = sqrt(k2)
km = float(ellipk(k2)) # K(m): Complete elliptic integral 1st
em = float(ellipe(k2)) # E(m): Complete elliptic integral 2nd
at = 4.0*cn/k1*sqrt(ra/r)*((1 - k2*0.50)*km - em)
br = 2.0*cn*z/(r*a1)*(-km + (ra**2 + r**2 + z**2)/b2*em)
bz = 2.0*cn/a1*(km + (ra**2 - r**2 - z**2)/b2*em)
return br, bz, at
def bacalc(event):
ia = float(js.document.getElementById("current").value)*1.0e6
ra= float(js.document.getElementById("radius").value)
r = float(js.document.getElementById("radial").value)
z = float(js.document.getElementById("axial").value)
br, bz, at = ba_wirecir(r, z, ia, ra)
js.document.getElementById("msg1").innerHTML = "Br (T): "+ str(br)
js.document.getElementById("msg2").innerHTML = "Bz (T): "+ str(bz)
js.document.getElementById("msg3").innerHTML = "At (Tm): "+ str(at)
以下にPython Codeを示す。
# BA Wire Circle
# 2025-4-25 Kiyoshi Yoshida
from scipy.special import ellipk, ellipe
from numpy import abs, pi, sqrt, sin, cos, arctan2
small_dist = 1.00e-6
def main():
print("Magnetic Field and Vector Potential from Circular Wire Ring")
ra=0.5; ia0=1.0; rp=0.01; zp=0.01
while True:
ia0 = inpfuncf("Current (MA), stop<0", ia0)
if ia0 <0: break
ra = inpfuncf("Radius (m)", ra)
rp = inpfuncf("rp (m)", rp)
zp = inpfuncf("zp (m)", zp)
ia= ia0*1.0e6
br, bz, at = ba_wirecir(rp, zp, ia, ra)
print("Br (T): {:.6f}".format(br))
print("Bz (T): {:.6f}".format(bz))
print("At (Tm): {:6f}".format(at))
def ba_wirecir(r, z, i, ra): # Smythe
cn = i*1.0e-7
if r < small_dist: # on axis
at = 0.0
br = 0.0
bz = 2.0*cn*pi*ra**2 / (z**2 + ra**2)**1.5
else:
if r==ra:
r= ra - small_dist
a2 = (ra + r)**2 + z**2
a1 = sqrt(a2)
b2 = (ra - r)**2 + z**2
k2 = 4.0*r*ra/a2
k1 = sqrt(k2)
km = float(ellipk(k2)) # K(m): Complete elliptic integral 1st
em = float(ellipe(k2)) # E(m): Complete elliptic integral 2nd
at = 4.0*cn/k1*sqrt(ra/r)*((1 - k2*0.50)*km - em)
br = 2.0*cn*z/(r*a1)*(-km + (ra**2 + r**2 + z**2)/b2*em)
bz = 2.0*cn/a1*(km + (ra**2 - r**2 - z**2)/b2*em)
return br, bz, at
# keyboard input float
def inpfuncf(msg,x):
s=input(msg+" : "+str(x)+" : ")
if s=='':
y=x
else:
y=float(s)
return y
if __name__ == "__main__":
main()