예제 #1
0
    def test3D():
        def E(x, y, z):
            return math.exp(x + y + z)

        E_grid = np.zeros((NX_3D + 1, NY_3D + 1, NZ_3D, 3))

        for i in range(NX_3D + 1):
            for j in range(NY_3D + 1):
                for k in range(NY_3D + 1):
                    E_grid[i][j][k] = E(X0_3D + DX_3D * i, Y0_3D + DY_3D * j,
                                        Z0_3D + DZ_3D * k)

        numPointsToTestBetweenGridPoints_x = 10
        numPointsToTestBetweenGridPoints_y = 10
        numPointsToTestBetweenGridPoints_z = 10

        for i in range(numPointsToTestBetweenGridPoints_x * NX_3D + 1):
            for j in range(numPointsToTestBetweenGridPoints_y * NY_3D + 1):
                for k in range(numPointsToTestBetweenGridPoints_z * NY_3D + 1):
                    Xi = X0_3D + DX_3D * i / numPointsToTestBetweenGridPoints_x
                    Yi = Y0_3D + DY_3D * j / numPointsToTestBetweenGridPoints_y
                    Zi = Z0_3D + DZ_3D * k / numPointsToTestBetweenGridPoints_z

        test(
            esSolve.electricFieldAtPoint(E_grid, [DX_3D, DY_3D, DZ_3D],
                                         [X0_3D, Y0_3D, Z0_3D], [Xi, Yi, Zi]),
            E(Xi, Yi, Zi))
예제 #2
0
  def test1D():
    def E(x):
      return math.exp(x)

    E_grid = np.zeros((NX_1D+1,1))

    for i in range(NX_1D+1):
      E_grid[i] = E(X0_1D+DX_1D*i)

    numPointsToTestBetweenGridPoints = 10

    for i in range(numPointsToTestBetweenGridPoints*NX_1D + 1): 
      Xi = X0_1D + DX_1D*i/numPointsToTestBetweenGridPoints

    test(esSolve.electricFieldAtPoint(E_grid,[DX_1D],[X0_1D],[Xi]),E(Xi))
예제 #3
0
    def test1D():
        def E(x):
            return math.exp(x)

        E_grid = np.zeros((NX_1D + 1, 1))

        for i in range(NX_1D + 1):
            E_grid[i] = E(X0_1D + DX_1D * i)

        numPointsToTestBetweenGridPoints = 10

        for i in range(numPointsToTestBetweenGridPoints * NX_1D + 1):
            Xi = X0_1D + DX_1D * i / numPointsToTestBetweenGridPoints

        test(esSolve.electricFieldAtPoint(E_grid, [DX_1D], [X0_1D], [Xi]),
             E(Xi))
예제 #4
0
  def test2D():
    def E(x,y):
      return math.exp(x+y)

    E_grid = np.zeros((NX_2D+1,NY_2D+1,2))

    for i in range(NX_2D+1):
      for j in range(NY_2D+1):
        E_grid[i][j] = E(X0_2D+DX_2D*i,Y0_2D+DY_2D*j)

    numPointsToTestBetweenGridPoints_x = 10
    numPointsToTestBetweenGridPoints_y = 10

    for i in range(numPointsToTestBetweenGridPoints_x*NX_2D + 1): 
      for j in range(numPointsToTestBetweenGridPoints_y*NY_2D + 1): 
        Xi = X0_2D + DX_2D*i/numPointsToTestBetweenGridPoints_x
        Yi = Y0_2D + DY_2D*j/numPointsToTestBetweenGridPoints_y
 
    test(esSolve.electricFieldAtPoint(E_grid,[DX_2D,DY_2D],[X0_2D,Y0_2D],[Xi,Yi]),E(Xi,Yi))
예제 #5
0
    def test2D():
        def E(x, y):
            return math.exp(x + y)

        E_grid = np.zeros((NX_2D + 1, NY_2D + 1, 2))

        for i in range(NX_2D + 1):
            for j in range(NY_2D + 1):
                E_grid[i][j] = E(X0_2D + DX_2D * i, Y0_2D + DY_2D * j)

        numPointsToTestBetweenGridPoints_x = 10
        numPointsToTestBetweenGridPoints_y = 10

        for i in range(numPointsToTestBetweenGridPoints_x * NX_2D + 1):
            for j in range(numPointsToTestBetweenGridPoints_y * NY_2D + 1):
                Xi = X0_2D + DX_2D * i / numPointsToTestBetweenGridPoints_x
                Yi = Y0_2D + DY_2D * j / numPointsToTestBetweenGridPoints_y

        test(
            esSolve.electricFieldAtPoint(E_grid, [DX_2D, DY_2D],
                                         [X0_2D, Y0_2D], [Xi, Yi]), E(Xi, Yi))
예제 #6
0
  def test3D():
    def E(x,y,z):
      return math.exp(x+y+z)

    E_grid = np.zeros((NX_3D+1,NY_3D+1,NZ_3D,3))

    for i in range(NX_3D+1):
      for j in range(NY_3D+1):
        for k in range(NY_3D+1):
          E_grid[i][j][k] = E(X0_3D+DX_3D*i,Y0_3D+DY_3D*j,Z0_3D+DZ_3D*k)

    numPointsToTestBetweenGridPoints_x = 10
    numPointsToTestBetweenGridPoints_y = 10
    numPointsToTestBetweenGridPoints_z = 10

    for i in range(numPointsToTestBetweenGridPoints_x*NX_3D + 1): 
      for j in range(numPointsToTestBetweenGridPoints_y*NY_3D + 1): 
        for k in range(numPointsToTestBetweenGridPoints_z*NY_3D + 1): 
          Xi = X0_3D + DX_3D*i/numPointsToTestBetweenGridPoints_x
          Yi = Y0_3D + DY_3D*j/numPointsToTestBetweenGridPoints_y
          Zi = Z0_3D + DZ_3D*k/numPointsToTestBetweenGridPoints_z
 
    test(esSolve.electricFieldAtPoint(E_grid,[DX_3D,DY_3D,DZ_3D],[X0_3D,Y0_3D,Z0_3D],[Xi,Yi,Zi]),E(Xi,Yi,Zi))
예제 #7
0
                            useCython=False)

# Compute E = - grad V on grid
electricFieldOnGrid_NR = esSolve.potentialToElectricField(pot1D_NR, [DX])
electricFieldOnGrid_R = esSolve.potentialToElectricField(pot1D_R, [DX])

positions_NR = [electron_NR.position[0]]
velocities_NR = [electron_NR.velocity[0]]
positions_R_Rpush = [electron_R_Rpush.position[0]]
velocities_R_Rpush = [electron_R_Rpush.velocity[0]]
positions_R_NRpush = [electron_R_NRpush.position[0]]
velocities_R_NRpush = [electron_R_NRpush.velocity[0]]

for step in xrange(steps + 1):
    # Compute E at particle position
    electricFieldAtPoint_NR = esSolve.electricFieldAtPoint(
        electricFieldOnGrid_NR, [DX], [X0], electron_NR.position)
    electricFieldAtPoint_R_Rpush = esSolve.electricFieldAtPoint(
        electricFieldOnGrid_R, [DX], [X0], electron_R_Rpush.position)
    electricFieldAtPoint_R_NRpush = esSolve.electricFieldAtPoint(
        electricFieldOnGrid_R, [DX], [X0], electron_R_NRpush.position)

    if step == 0:
        # Back velocity up 1/2 step
        electron_NR.velocity = electron_NR.velocity - 0.5 * DT_NR * (
            charge / mass) * electricFieldAtPoint_NR
        electron_R_NRpush.velocity = electron_R_NRpush.velocity - 0.5 * DT_R * (
            charge / mass) * electricFieldAtPoint_R_NRpush

        momentum_0 = particleUtils.velocityToMomentum(
            electron_R_Rpush.mass, electron_R_Rpush.velocity)
        momentum_minusHalf = momentum_0 - 0.5 * DT_R * electron_R_Rpush.charge * electricFieldAtPoint_R_Rpush
예제 #8
0
pot1D_R  = esSolve.laplace1D(NX,DX,V0,VN_R,"gaussSeidel",relTol=0.0,absTol=1.0e-3*(deltaV_R),useCython=False)

# Compute E = - grad V on grid
electricFieldOnGrid_NR = esSolve.potentialToElectricField(pot1D_NR,[DX])
electricFieldOnGrid_R  = esSolve.potentialToElectricField(pot1D_R,[DX])
 
positions_NR        = [electron_NR.position[0]]
velocities_NR       = [electron_NR.velocity[0]]
positions_R_Rpush   = [electron_R_Rpush.position[0]]
velocities_R_Rpush  = [electron_R_Rpush.velocity[0]]
positions_R_NRpush  = [electron_R_NRpush.position[0]]
velocities_R_NRpush = [electron_R_NRpush.velocity[0]]

for step in xrange(steps+1):
  # Compute E at particle position
  electricFieldAtPoint_NR       = esSolve.electricFieldAtPoint(electricFieldOnGrid_NR,[DX],[X0],electron_NR.position)
  electricFieldAtPoint_R_Rpush  = esSolve.electricFieldAtPoint(electricFieldOnGrid_R,[DX],[X0],electron_R_Rpush.position)
  electricFieldAtPoint_R_NRpush = esSolve.electricFieldAtPoint(electricFieldOnGrid_R,[DX],[X0],electron_R_NRpush.position)

  if step == 0:
    # Back velocity up 1/2 step
    electron_NR.velocity       = electron_NR.velocity       - 0.5*DT_NR*(charge/mass)*electricFieldAtPoint_NR
    electron_R_NRpush.velocity = electron_R_NRpush.velocity - 0.5*DT_R*(charge/mass)*electricFieldAtPoint_R_NRpush
    
    momentum_0                 = particleUtils.velocityToMomentum(electron_R_Rpush.mass,electron_R_Rpush.velocity)
    momentum_minusHalf         = momentum_0 - 0.5*DT_R*electron_R_Rpush.charge*electricFieldAtPoint_R_Rpush
    electron_R_Rpush.velocity  = particleUtils.momentumToVelocity(electron_R_Rpush.mass,momentum_minusHalf)
 
  elif step == steps:
    # Advance velocity by 1/2 step
    electron_NR.velocity       = electron_NR.velocity       + 0.5*DT_NR*(charge/mass)*electricFieldAtPoint_NR