import numpy as np
import matplotlib.pyplot as plt

## Parametres du probleme en USI
e=1.6e-19 # charge elementaire
eps0=8.85e-12 # permittivite dielectrique du vide
k=1/(4*np.pi*eps0)
    
## Maillage de l'espace
n = 100 # Nombre de points de discretisation selon chaque direction
# 1/2 longueur selon chaque direction en USI
Lx = 0.1 
Ly = 0.1
# Listes des xi et des yj 
xlist = np.linspace(-Lx,Lx,n)
ylist = np.linspace(-Ly,Ly,n)
# Matrice correspondant au maillage de l'espace 2D
X, Y = np.meshgrid(xlist,ylist)

## Caracteristiques de la charge ponctuelle P source du champ : position selon chaque direction, valeur de la charge
xP = 0
yP = 0
qP = e

## Expression du champ electrostatique cree par une charge ponctuelle P
inv_r=1.0/((X-xP)**2+(Y-yP)**2)**(0.5)  # 1/PM avec P le point où se trouve la charge et M le point où on calcule E
Ex=k*qP*(X-xP)*inv_r**3   # composante suivant (Ox) du champ E(M)
Ey=k*qP*(Y-yP)*inv_r**3   # composante suivant (Oy) du champ E(M)
Norme=(Ex**2+Ey**2)**0.5   # norme de champ E(M)

## Expression du potentiel electrostatique cree par une charge ponctuelle P
V=k*qP*inv_r

## Représentations graphiques
plt.streamplot(X,Y, Ex, Ey, color=np.log(Norme), density=2, cmap='jet') # trace les lignes de champ E(M)
plt.colorbar() # echelle de correspondance couleur-valeur de ln(norme)
CP=plt.contour(X,Y,V,50,cmap='jet') # trace les équipotentielles
plt.axis('equal') # repere norme
plt.grid()
plt.show()