# -*- coding: utf-8 -*-
"""PIC.ipynb

Automatically generated by Colab.

Original file is located at
    https://colab.research.google.com/drive/1-_8QOqkc9N6wqBWOGYsnYc0XWhvIWVmL
"""

import math
import time
from pathlib import Path

L = 0.02 # размер трубы в м
num_cell = 100 # число ячеек

dx = # расстояние между узлами сетки

n_2 = 4e11 # сколько реальных частиц моделирует одна одномерная частица [1/м^2]
N_part = num_cell * 50 # количество частиц в ячейке


dt =  # шаг по времени
T =  # время расчета

eps0 = 8.85e-12

denom = dx * dx * eps0 # коэффициент для метода прогонки

E = [0 for _ in range(num_cell + 1)]
fi = [0 for _ in range(num_cell + 1)]

p = [0 for _ in range(num_cell - 1)]
q = [0 for _ in range(num_cell - 1)]

# функция, по объемной плотности зарядов находящая величину электрического поля
def solve_field(rho):
  fi[0] = 0
  fi[-1] = 0

  p[1] = 0.5
  q[1] = (dx * dx * rho[1] - fi[0]) / (-2)

  for i in range(2, len(fi) - 2, 1):
    p[i] = -1 / (p[i - 1] - 2)
    q[i] = (dx * dx * rho[i] - q[i-1]) / (p[i-1] - 2)
  fi[-2] = (dx * dx * rho[-2] - fi[-1] - q[-3]) / (p[-3] - 2)

  for i in range(len(fi) - 3, 0, -1):
    fi[i] = p[i] * fi[i + 1] + q[i]

  E[0] = (fi[0] - fi[1]) / dx
  for i in range(1, num_cell - 1):
    E[i] = (fi[i-1] - fi[i+1]) / (2 * dx)
  E[-1] = (fi[-2] - fi[-1]) / dx

# класс частиц
 class Particles:
  def __init__(self, k=4, ioe="+", T_ev = 10, num_cell=num_cell):
    self.q =
    self.m =

    self.v = [0 for _ in range(N_part)]
    self.rho = [0 for _ in range(num_cell + 1)]

    self.x = [i / N_part * L for i in range(N_part)]

    if ioe == '-':
      for i in range(N_part):

        self.x[i] += 0.0005 * L * math.sin(self.x[i] / L * 2 * math.pi * k)

  #функция, моделирующая движение частиц
  def move(self, E):
    #реализовать

  #функция, реализующая метод прогонки
  def CIC(self):
    for i in range(len(self.rho)):
      self.rho[i] = 0

    for i in range(len(self.x)):

      nc = int(self.x[i] // dx)
      #print(nc)
      x_loc = self.x[i] % dx

      self.rho[nc] += self.q * (dx - x_loc) * (-n_2) / denom
      self.rho[nc + 1] += self.q * x_loc * (-n_2) / denom

start = time.time()


for j in range(1, int(T // dt) + 1):
  #реализовать цикл


end = time.time()

print(f"Время выполнения: {end - start} секунд")

#вывести график потенциала от времени