ions[i] = Particle(X0_i[i, :], V0_i[i, :], e, mi, dt_i) field = Field(Nx, Ny, Nz, Lx, Ly, Lz) field.initE(E) field.initB(B) trace_i = numpy.zeros((Ne, 3, 100)) trace_e = numpy.zeros((Ni, 3, 100)) for i in range(100): field.updateTho(electrons, ions) field.solveE(eps0) field.updateParticleProps(electrons) field.updateParticleProps(ions) for particle in electrons: particle.updateVX() for particle in ions: particle.updateVX() for k in range(Ne): trace_e[k, :, i] = electrons[k].X.copy() if numpy.any((trace_e[k, :, i] - numpy.array([-Lx / 2.0, -Ly / 2.0, -Lz / 2.0])) <= 0) or numpy.any( (trace_e[k, :, i] - numpy.array([Lx / 2.0, Ly / 2.0, Lz / 2.0])) >= 0 ): trace_e[k, 0, i + 1 :] = trace_e[k, 0, i] trace_e[k, 1, i + 1 :] = trace_e[k, 1, i]
ions[0] = Particle(X0, V0, e, mi, dt_i) field = Field(Nx, Ny, Nz, Lx, Ly, Lz) field.initE(E) field.initB(B) trace = numpy.zeros((3, 500)) for i in range(500): field.updateTho(electrons, ions) field.solveE(eps0) field.updateParticleProps(ions) for particle in ions: particle.updateVX() print(i, ions[0].X) trace[:, i] = ions[0].X.copy() trace[:, i] += 0.5 import matplotlib from mpl_toolkits.mplot3d import Axes3D from matplotlib import pyplot fig = pyplot.figure(figsize=(12, 9), dpi=75) ax = fig.gca(projection="3d")