🖥️ Traitement antireflet

Notebook Capytale de cet exercice : 9df6-11678468

On réalise un traitement antireflet sur un verre d’indice de réfraction 𝑛=1.5 en déposant une couche d’indice optique 𝑛𝑐∈]1,𝑛[ et d’épaisseur 𝑒 de l’ordre de la centaine de nm. Le but de ce traitement est d’annuler la réflexion dans l’air pour la longueur d’onde 𝜆=550 nm (longueur d’onde pour laquelle l’œil est le plus sensible en vision diurne).

Les 4 ondes sont des OPPH de même fréquence :

{𝐸⃗𝑖=𝐸𝑖,0𝑒𝑖(𝜔𝑡−𝑘𝑖𝑥)𝐸⃗𝑐=𝐸𝑐,0𝑒𝑖(𝜔𝑡−𝑘𝑐𝑥)𝐸⃗𝑐′=𝐸𝑐,0′𝑒𝑖(𝜔𝑡+𝑘𝑐𝑥)𝐸⃗𝑡=𝐸𝑡,0𝑒𝑖(𝜔𝑡−𝑘𝑡𝑥)

Les champs électrique et magnétique sont continus à chacune des deux interfaces.

L’objectif de cet exercice est de déterminer l’épaisseur 𝑒 et l’indice optique 𝑛𝑐 de la couche anti-reflet.

1/ Donner l’expression de l’indice optique en fonction de la vitesse de phase et de la célérité de la lumière dans le vide. En déduire les expressions de 𝑘𝑖, 𝑘𝑐 et 𝑘𝑡 en fonction de 𝑛, 𝑛𝑐, 𝜔 et de la célérité de la lumière dans le vide.

Corrigé
𝑛=𝑐𝑣𝜑

On en déduit

{𝑘𝑖=𝑛air𝜔𝑐=𝜔𝑐𝑘𝑐=𝑛𝑐𝜔𝑐𝑘𝑡=𝑛𝜔𝑐

2/ Déterminer les champs magnétiques associés à chacune des ondes.

Corrigé

On utilise la relation de structure 𝐵⃗=𝑘⃗∧𝐸⃗𝜔

{𝐵⃗𝑖=𝐸𝑖,0𝑐𝑒𝑖(𝜔𝑡−𝑘𝑖𝑥)𝐵⃗𝑐=𝑛𝑐𝐸𝑐,0𝑐𝑒𝑖(𝜔𝑡−𝑘𝑐𝑥)𝐵⃗𝑐′=−𝑛𝑐𝐸𝑐,0′𝑐𝑒𝑖(𝜔𝑡+𝑘𝑐𝑥)𝐵⃗𝑡=𝑛𝐸𝑡,0𝑐𝑒𝑖(𝜔𝑡−𝑘𝑡𝑥)

3/ En utilisant la continuité des champs, établir un système de 4 équations reliant les amplitudes 𝐸𝑖,0, 𝐸𝑐,0, 𝐸𝑐,0′ et 𝐸𝑡,0. Mettre ce système sous la forme 𝑀(𝐸𝑖,0𝐸𝑐,0𝐸𝑐,0′𝐸𝑡,0)=(0000) où 𝑀 est une matrice 4×4 à déterminer.

Corrigé
{𝐸𝑖,0=𝐸𝑐,0+𝐸𝑐,0′𝐸𝑖,0=𝑛𝑐𝐸𝑐,0−𝑛𝑐𝐸𝑐,0′𝐸𝑐,0𝑒−𝑖𝑘𝑐𝑒+𝐸𝑐,0′𝑒𝑖𝑘𝑐𝑒=𝐸𝑡,0𝑒−𝑖𝑘𝑡𝑒𝑛𝑐𝐸𝑐,0𝑒−𝑖𝑘𝑐𝑒−𝑛𝑐𝐸𝑐,0′𝑒𝑖𝑘𝑐𝑒=𝑛𝐸𝑡,0𝑒−𝑖𝑘𝑡𝑒{𝐸𝑖,0−𝐸𝑐,0−𝐸𝑐,0′+0𝐸𝑡,0=0𝐸𝑖,0−𝑛𝑐𝐸𝑐,0+𝑛𝑐𝐸𝑐,0′+0𝐸𝑡,0=00𝐸𝑖,0+𝑒−𝑖𝑘𝑐𝑒𝐸𝑐,0+𝑒𝑖𝑘𝑐𝑒𝐸𝑐,0′−𝑒−𝑖𝑘𝑡𝑒𝐸𝑡,0=00𝐸𝑖,0+𝑛𝑐𝑒−𝑖𝑘𝑐𝑒𝐸𝑐,0−𝑛𝑐𝑒𝑖𝑘𝑐𝑒𝐸𝑐,0′−𝑛𝑒−𝑖𝑘𝑡𝑒𝐸𝑡,0=0

On en déduit

𝑀=(1−1−101−𝑛𝑐𝑛𝑐00𝑒−𝑖𝑘𝑐𝑒𝑒𝑖𝑘𝑐𝑒−𝑒−𝑖𝑘𝑡𝑒0𝑛𝑐𝑒−𝑖𝑘𝑐𝑒−𝑛𝑐𝑒𝑖𝑘𝑐𝑒−𝑛𝑒−𝑖𝑘𝑡𝑒)

4/ Donner une solution de l’équation 𝑀(𝐸𝑖,0𝐸𝑐,0𝐸𝑐,0′𝐸𝑡,0)=(0000). En déduire que pour que le traitement antireflet fonctionne, il faut que det(𝑀)=0.

Corrigé

(𝐸𝑖,0𝐸𝑐,0𝐸𝑐,0′𝐸𝑡,0)=(0000) est une solution de l’équation. C’est une solution triviale, avec des ondes identiquement nulles dans les trois milieux. Cette solution est unique si 𝑀 est inversible, c’est-à-dire si det(𝑀)≠0.

Pour que le traitement antireflet fonctionne, il faut qu’il existe une solution non triviale, c’est-à-dire que 𝑀 ne soit pas inversible, c’est-à-dire que det(𝑀)=0.

5/ La fonction np.linalg.det de la bibliothèque numpy permet de calculer le déterminant d’une matrice. Écrire une fonction D(e,nc) qui renvoie le déterminant de la matrice 𝑀 en fonction de 𝑒 et 𝑛𝑐.

Corrigé
import numpy as np
n = 1.5
lam = 550e-9
c = 3e8
omega = 2 * np.pi * c / lam
def D(e,nc):
    kt = n * omega / c
    kc = nc * omega / c
    M = np.array([
        [1, -1,                  -1,                  0],
        [1, -nc,                 nc,                  0],
        [0, np.exp(-1j*kc*e),    np.exp(1j*kc*e),     -np.exp(-1j*kt*e)],
        [0, nc*np.exp(-1j*kc*e), -nc*np.exp(1j*kc*e), -n*np.exp(-1j*kt*e)]
    ])
    return np.linalg.det(M)

Pour résoudre numériquement l’équation 𝐷(𝑒,𝑛𝑐)=0, on peut utiliser la fonction root de la bibliothèque scipy.optimize qui permet de trouver les racines d’une fonction.

La fonction dont root doit trouver les racines doit prendre en argument un tableau numpy de réels et renvoyer un tableau numpy de réels.

On définit la fonction

def f(X):
    e, nc = X
    d = D(e, nc)
    return [d.real, d.imag]

6/ Expliquer pourquoi la fonction f est adaptée pour être utilisée avec la fonction root de scipy.optimize.

Corrigé

La fonction f prend bien en argument un tableau numpy de réels (le tableau X qui contient les valeurs de e et nc) et renvoie un tableau numpy de réels (le tableau [d.real, d.imag]).

Trouver les 0 de la fonction f est bien ce qu’on veut car le complexe 𝑑 est nul si et seulement si sa partie réelle et sa partie imaginaire sont nulles, c’est-à-dire si et seulement si f(X) == [0, 0].

On trouve une solution avec les instructions suivantes :

from scipy.optimize import root
solution = root(f, [1e-7, 1.3] ) # on fournit une estimation initiale pour e et nc
print(solution.x)