#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Aug  9 09:20:51 2024

@author: masssonr

resolution par la methode VF de l'equation elliptique 1D

- u''(x) = f(x) sur (0,L)
u(0) = uD
-u'(L) = g

"""

import numpy as np
import matplotlib.pyplot as plt

# longueur du domaine 
L=1.0 

# A COMPLETER 

# def u(x):
#     s = 
#     return s

# def up(x): 
#     s = 
#     return s 

# def f(x):
#     s = 
#     return s


# uD = 
# g = 


# calcul de X, Ah, Sh et Uh 

#def VF(f,uD,g,L,N):

# pas du maillage constant h = L/N

# vecteur des centres de maille X 
 
# matrice Ah tridiagonale 

# Second membre Sh 

# solution Uh avec np.linalg.solve

    
#    return X,Uh

########################




# nombre de mailles
#N= 5
#N= 10
#N= 20

#X,Uh = VF(f,uD,g,L,N)


#plot des solutions exactes et VF 
# plt.figure(1)
# plt.clf()
# Xfine = np.linspace(0,L,200)
# plt.plot(Xfine,u(Xfine), label="solution_exacte") 
# plt.plot(X,Uh, label="solution_approchee")
# plt.legend(loc="upper left")
# plt.ylim(0.8, 3.5)
# plt.show()


##########################


# etude de la convergence du schema fct de h = L/N 
Nmesh = 8
sizeh = np.zeros(Nmesh)
erreurl2 = np.zeros(Nmesh)
erreurh10 = np.zeros(Nmesh)

for imesh in range(Nmesh):

    N = 10*2**imesh

    h = L/N    
    sizeh[imesh] = h

#     X,Uh = VF(f,uD,g,L,N)

# # calcul de l'erreur l2 discrete 

#     erreurl2[imesh] = erl2

# # calcul de l'erreur h10 discrete 

#     erreurh10[imesh] = erh10
    
    
# plot des erreurs en echelle log log     
# plt.figure(2)
# plt.ylabel(" erreur l2 et h10 ")
# plt.xlabel(" pas du maillage h ")
# plt.loglog(sizeh,erreurl2,"-xb", label="erreur l2")    
# plt.loglog(sizeh,erreurh10,"-xr", label="erreur h10")    
# plt.legend(loc="upper left")

# calcul des pentes des courbes d'erreur en echelle log 
# droite=np.polyfit(np.log(sizeh),np.log(erreurl2),1)
# print("ordre de convergence l2",droite[0])

# droite=np.polyfit(np.log(sizeh),np.log(erreurh10),1)
# print("ordre de convergence h10",droite[0])








