code: def simulate(self):
          
          # Main simulation loop
          for i in range(self.iterations):
              for a in self.particles:
                  if a.fixed:
                      continue
                  ftot = vector(0, 0, 0)  # total force acting on particle a
                  for b in self.particles:
                      if a.negligible and b.negligible or a == b:
                          continue
                      ab = a.pos - b.pos
                      ftot += ((K_COULOMB * a.charge * b.charge) / mag2(ab)) * versor(ab)
                  a.vel += ftot / a.mass * self.dt  # update velocity and position of a
                  a.pos += a.vel * self.dt
                  a.vtk_actor.pos(a.pos)
              if vp:
                  vp.show(zoom=1.2)
                  vp.camera.Azimuth(0.1)
docs: Runs the particle simulation. Simulates one time step, dt, of the particle motion.
              Calculates the force between each pair of particles and updates particles' motion accordingly