# coding: utf8

# Sauf mention explicite du contraire par la suite, ce travail a été fait par 
# Jean-Julien Fleck, professeur de physique/IPT en PCSI1 au lycée Kléber. 
# Vous êtes libres de le réutiliser et de le modifier selon vos besoins.


""" 
Version légèrement modifiée à l'usage des PT Benjam ORLEANS'
"""


import numpy as np              # Outils numeriques
import scipy as sp              # Outils scientifiques
import scipy.integrate          # pour l'integration
import matplotlib.pyplot as plt # Outils graphiques

R=1e3                           # Resistance du Pont de Wien
C=100e-9                        # Capacite du Pont de Wien
A=3.1                           # Gain de l'etage d'amplification
tfin=15e-3                      # instant final de la simulation
dt=0.01e-3                      # pas
vsat=13.2                       # tension de saturation de l'ALI

vplus0   = 0.01 # entree initiale de l'etage d'amplitication ; 0.01 simule le bruit initial
dvplusdt0= 5 # derivee de vplus initiale ; la valeur de variation (modifiable) simule le bruit en entree

def f(y,t):
    vplus,dvplusdt = y
    # à completer
    # à completer
    # à completer
    # à completer
    
# Determination de l'entree de l'etage d'amplification
t   =    # à completer
sol = sp.integrate.odeint(   # à completer)
vplus   = sol[:,0]
dvplusdt= sol[:,1]

# Pour la sortie, on utilise np.where pour ecreter là où vplus est trop grand
vs = np.where(   # à completer)

# Traces des courbes
plt.figure(1,figsize=(14,8))
plt.subplot(2,2,1)     # Figure du haut à gauche
plt.plot(t,vs,'r')          # La sortie de l'ALI
plt.title("Démarrage des oscillations")
plt.xlabel("$t$ (s)")
plt.ylabel("$vs$ (V)")
plt.ylim(-15,15)       # Pour bien voir l'ecretage
plt.subplot(2,2,2)     # Figure du haut à droite
plt.plot(vplus,vs,'k')          # La sortie de l'ALI
plt.title("Caractéristique balayée lors des oscillations")
plt.xlabel("$v+$ (V)")
plt.ylabel("$vs$ (V)")
plt.ylim(-15,15)       # Pour bien voir les saturations
plt.axis('equal')
plt.subplot(2,2,3)     # Figure du bas à gauche
plt.plot(t,vplus,'g')          # L'entree
plt.xlabel("$t$ (s)")
plt.ylabel("$v+$ (V)")
plt.subplot(2,2,4) # Figure du bas à droite
plt.plot(vplus,dvplusdt,'b')       # Le portrait de phase
plt.xlabel("$v+$ (V)")
plt.ylabel("d$v+$/d$t$ (V/s)")
plt.title('Portrait de phase')
plt.tight_layout()   # Pour ajuster les espaces autour des sous-figures
# plt.savefig('PNG/PSI_pont_de_wien_odeint.png')



