#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Jul 29 07:55:58 2022

@author: adomps
"""

import numpy as np
import matplotlib.pyplot as plt


###############################################################################
###   II. Paquets d'onde rudimentaires 
###############################################################################


###############################################################################
###   Fonctions fournies par le professeur 
###############################################################################

# Paramètres numériques pour Klein-Gordon (ondes dans un plasma)
c = 1
omega_p = 1

# Paramètre numérique pour la dispersion quadratique (ondes de  de Broglie)
beta = 1



def dispersion_KG(k) :
    ''' Renvoie omega(k) dans le cas Klein Gordon'''    
    return np.sqrt(c**2 * k**2 + omega_p**2)


def dispersion_de_Broglie(k) : 
    ''' Renvoie omega(k) pour la dispersion quadratique'''
    return nu + 0.5 * beta * k**2 


def v_phi_KG(k) :
    return dispersion_KG(k)/k


def v_phi_quadratique(k):
    return dispersion_de_Broglie(k)/k


def v_g_KG(k) :
    return c**2 / v_phi_KG(k)


def v_g_quadratique(k) :
    return  beta * k


##############################################################################
###               À vous de coder la partie II
##############################################################################






###############################################################################
#                Aide pour la partie V                                      
# Vous devez décommenter ce qui convient et compléter. 
###############################################################################    


######### 1)
# def onde_init_gaussienne(A, x, sigma_0, k0) :
#     return ....


# def onde_init_tronquee(A, x, sigma_0, k0):
#     # Parcourir le tableau x avec une boucle pour exécuter le test IF.
#     .....



######## 2) Calcul et représentation de l'onde initiale
# N = 10000
# x = np.linspace(-100, 1000, N)
# A = 1.
# k0 = 2 * np.pi / 5
# sigma_0 = 10
# print('demi largeur initiale à mi hauteur : ', sigma_0 * np.sqrt(2 * np.log(2)))
# onde_init = ........


# plt.figure(2)
# plt.clf()
# plt.plot(x, np.real(onde_init), color = 'black')
# plt.xlim(-5*sigma_0, 5*sigma_0)
# plt.xticks([0],['0'])
# plt.text(18, 0.75, 'Onde à $t=0$')
# plt.text(50, - 1.2, 'x')
# plt.ylabel('condition initiale $u(x)$')
# plt.yticks([0],[0])


# ####### 3) Calcul et représentation  du spectre spatial
# Delta_x = x[1]  - x[0]
# ##### attention : les fréquences négatives sont à droite du tableau !
# k = 2 * np.pi * np.fft.fftfreq(N, Delta_x) # Heureusement, elles sont aussi à droite dans le tableau du spectre.
# spectre_init = .......   # on appelle la fonction qui calcule la FFT



# plt.figure(3)
# plt.title("Spectre de l'onde")
# plt.plot(k[:],  .... , '-', color = 'black')
# #plt.xlabel('k')
# plt.text(2, -10, '$k$')
# plt.ylabel('spectre de $u$, égal à |A(k)|')
# plt.xlim(0, 2*k0)
# plt.yticks([0],['0'])
# plt.xticks([0, k0], ['0', '$k_0$'])
# ax = plt.gca()
# ax.spines['bottom'].set_position(('data', 0))


######### 4) et suite :  à vous de tout faire !






