|
@@ -59,7 +59,7 @@ def angle_between(v1, v2):
|
|
|
return np.pi
|
|
|
return angle
|
|
|
###############################################################################
|
|
|
-def GetFlow3D(x0, y0, z0, max_length, max_angle, x, m):
|
|
|
+def GetFlow3D(x0, y0, z0, max_length, max_angle, x, m, pl):
|
|
|
# Initial position
|
|
|
flow_x = [x0]
|
|
|
flow_y = [y0]
|
|
@@ -71,7 +71,7 @@ def GetFlow3D(x0, y0, z0, max_length, max_angle, x, m):
|
|
|
if max_step < min_step:
|
|
|
max_step = min_step
|
|
|
coord = np.vstack(([flow_x[-1]], [flow_y[-1]], [flow_z[-1]])).transpose()
|
|
|
- terms, E, H = fieldnlay(np.array([x]), np.array([m]), coord)
|
|
|
+ terms, E, H = fieldnlay(np.array([x]), np.array([m]), coord,pl=pl)
|
|
|
Ec, Hc = E[0, 0, :], H[0, 0, :]
|
|
|
S = np.cross(Ec, Hc.conjugate()).real
|
|
|
Snorm_prev = S/np.linalg.norm(S)
|
|
@@ -94,7 +94,7 @@ def GetFlow3D(x0, y0, z0, max_length, max_angle, x, m):
|
|
|
dz = dpos*Snorm_prev[2];
|
|
|
#Test the next position not to turn\chang size for more than max_angle
|
|
|
coord = np.vstack(([flow_x[-1]+dx], [flow_y[-1]+dy], [flow_z[-1]+dz])).transpose()
|
|
|
- terms, E, H = fieldnlay(np.array([x]), np.array([m]), coord)
|
|
|
+ terms, E, H = fieldnlay(np.array([x]), np.array([m]), coord,pl=pl)
|
|
|
Ec, Hc = E[0, 0, :], H[0, 0, :]
|
|
|
Eth = max(np.absolute(Ec))/1e10
|
|
|
Hth = max(np.absolute(Hc))/1e10
|
|
@@ -104,6 +104,8 @@ def GetFlow3D(x0, y0, z0, max_length, max_angle, x, m):
|
|
|
if abs(Hc[i]) < Hth:
|
|
|
Hc[i] = 0+0j
|
|
|
S = np.cross(Ec, Hc.conjugate()).real
|
|
|
+ if not np.isfinite(S).all():
|
|
|
+ break
|
|
|
Snorm = S/np.linalg.norm(S)
|
|
|
diff = (S-Sprev)/max(np.linalg.norm(S), np.linalg.norm(Sprev))
|
|
|
if np.linalg.norm(diff)<max_angle:
|
|
@@ -125,7 +127,7 @@ def GetFlow3D(x0, y0, z0, max_length, max_angle, x, m):
|
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
-def GetField(crossplane, npts, factor, x, m):
|
|
|
+def GetField(crossplane, npts, factor, x, m, pl):
|
|
|
"""
|
|
|
crossplane: XZ, YZ, XY
|
|
|
npts: number of point in each direction
|
|
@@ -159,7 +161,7 @@ def GetField(crossplane, npts, factor, x, m):
|
|
|
coordPlot2 = coordX
|
|
|
|
|
|
coord = np.vstack((coordX, coordY, coordZ)).transpose()
|
|
|
- terms, E, H = fieldnlay(np.array([x]), np.array([m]), coord)
|
|
|
+ terms, E, H = fieldnlay(np.array([x]), np.array([m]), coord, pl=pl)
|
|
|
Ec = E[0, :, :]
|
|
|
Hc = H[0, :, :]
|
|
|
P=[]
|
|
@@ -169,8 +171,8 @@ def GetField(crossplane, npts, factor, x, m):
|
|
|
# P.append(np.linalg.norm( np.cross(Ec[n], np.conjugate(Hc[n]) ).real/2 ))
|
|
|
return Ec, Hc, P, coordPlot1, coordPlot2
|
|
|
###############################################################################
|
|
|
-def fieldplot(x,m, WL, comment='', WL_units=' ', crossplane='XZ', field_to_plot='Pabs',npts=101, factor=2.1, flow_total=11, is_flow_extend=True):
|
|
|
- Ec, Hc, P, coordX, coordZ = GetField(crossplane, npts, factor, x, m)
|
|
|
+def fieldplot(x,m, WL, comment='', WL_units=' ', crossplane='XZ', field_to_plot='Pabs',npts=101, factor=2.1, flow_total=11, is_flow_extend=True, pl=-1, outline_width=1):
|
|
|
+ Ec, Hc, P, coordX, coordZ = GetField(crossplane, npts, factor, x, m, pl)
|
|
|
Er = np.absolute(Ec)
|
|
|
Hr = np.absolute(Hc)
|
|
|
try:
|
|
@@ -239,7 +241,7 @@ def fieldplot(x,m, WL, comment='', WL_units=' ', crossplane='XZ', field_to_plot=
|
|
|
for xx in x:
|
|
|
r= xx*WL/2.0/np.pi
|
|
|
s1 = patches.Arc((0, 0), 2.0*r, 2.0*r, angle=0.0, zorder=1.8,
|
|
|
- theta1=0.0, theta2=360.0, linewidth=1, color='black')
|
|
|
+ theta1=0.0, theta2=360.0, linewidth=outline_width, color='black')
|
|
|
ax.add_patch(s1)
|
|
|
#
|
|
|
# for flow in range(0,flow_total):
|
|
@@ -284,7 +286,7 @@ def fieldplot(x,m, WL, comment='', WL_units=' ', crossplane='XZ', field_to_plot=
|
|
|
y0 = min_SP + flow*step_SP
|
|
|
z0 = min_SP
|
|
|
#x0 = x[-1]/20
|
|
|
- flow_xSP, flow_ySP, flow_zSP = GetFlow3D(x0, y0, z0, max_length, max_angle, x, m)
|
|
|
+ flow_xSP, flow_ySP, flow_zSP = GetFlow3D(x0, y0, z0, max_length, max_angle, x, m,pl)
|
|
|
if crossplane=='XZ':
|
|
|
flow_z_plot = flow_zSP*WL/2.0/np.pi
|
|
|
flow_f_plot = flow_xSP*WL/2.0/np.pi
|