• Aucun résultat trouvé

Pour expliquer le formalisme des matrices creuses, prenons l’exemple d’une matrice creuse *A+ de dimensions 8x8 composée de 13 valeurs non nulles (N=8 ; NZ= 13) :

Deux notations différentes peuvent être adoptées.

La notation  utilise, en se déplaçant de gauche à droite puis de haut en bas :

Un vecteur ja de dimension NZ construit à partir de l’indice de colonne des valeurs non nulles

contenues dans la matrice [A]

Un vecteur jb de dimension NZ construit à partir de l’indice de ligne des valeurs non nulles

contenues dans la matrice A

Un vecteur a de dimension NZ contenant les NZ valeurs non nulles correspondantes

La notation  (ou notation de Yale89) retient les deux vecteurs et précédents ainsi qu’un nouveau vecteur ligne ia de dimension N+1 construit de la façon suivante. Les composantes

successives du vecteur ia sont constituées par l’indice de position relevée dans le vecteur a de la

première valeur non-nulle dans chacune des lignes de la matrice [A]. Si une ligne ne contient que des 0, il faut prendre l’indice associé à la ligne suivante (bien que cela ne se produise jamais en pratique car [A] ne contient pas de ligne totalement nulle sur des systèmes réelles). Ainsi ia contient N valeurs

auxquelles est ajoutée en dernière position la valeur NZ :

II.1. Modélisation des modes plasmoniques

45

La multiplication de [A] par un vecteur colonne H dépendra de la notation choisie. Prenons l’exemple suivant :

Avec la notation , ce produit matriciel s’écrit simplement:

Dans cette notation, le produit  n’est ajouté à la somme que si est égal à i. Une telle somme est implémentée en Fortran sous forme d’une structure DO WHILE où j est incrémenté à chaque fois que le WHILE est vrai.

Avec la notation , le produit matriciel précédent s’écrit simplement:

Dans le cas où , la somme est invalidée et le résultat est égal à 0. Cette notation  peut être illustrée en pratique à partir de l’exemple suivant :

*A+H est ainsi obtenu en un minimum d’opérations au lieu des NxN produits effectués dans le calcul matriciel classique (64 pour l’exemple précédent), ce qui se traduit par un gain de temps d’exécution considérable lors d’une simulation numérique. La notation de Yale est plus performante en termes de temps d’exécution.

En pratique, la dimension N de la matrice carrée [A] est beaucoup plus élevée et le nombre de valeurs non-nulles NZ est beaucoup plus faible par rapport au nombre de termes NN (=N²) contenus dans *A+. Prenons l’exemple très simple du guide d’onde carré présenté figure 24a avec un pas fixe entre chaque point égal à d. Chaque point de ce motif correspond à une valeur de Hx et une valeur de Hy. La dimension du vecteur colonne H décrivant ce guide d’onde sera donc constitué de N=98 valeurs (= 2 (Hx et Hy) x 7² (nombre de points du motif)). Ainsi, [A] sera une matrice carrée de dimensions 9898 constituée de 9604 valeurs. Le calcul des coefficients de [A] à partir des différents paramètres caractérisant le motif (permittivités et maillage d) aboutit à 490 valeurs non-nulles NZ. Une représentation de [A] est proposée figure 24b où chaque valeur non-nulle est remplacée par un carré noir.

Chapitre II - Simulations numériques 2D et 3D de structures plasmoniques

46

Figure 24 : a) Vue en coupe d’une structure de guide d’onde carré ; b) Matrice carrée [A] de dimension 98 correspondant au guide d’onde

Ainsi, l’utilisation du formalisme des matrices creuses permet de passer d’une matrice *A+ constituée de 9604 valeurs à trois vecteurs a, ja et ia (notation ) de dimension NZ=490 pour a et ja et

de dimension (N+1)=99 pour ia réduisant d’une part l’espace mémoire nécessaire pour stocker les

données, d’autre part le nombre d’opérations à effectuer à chaque itération de l’algorithme (§II.1.i). La diminution du pas de maillage d se traduit par une augmentation du nombre de points N caractérisant la structure et donc par une augmentation très importante de NN (=N²). Les valeurs non-nulles étant majoritairement situées autour de la diagonale de [A] (voir figure 24b), le pourcentage de valeurs non-nulles NZ par rapport au nombre total de valeurs NN contenus dans [A] sera d’autant plus faible que la matrice *A+ grandit, rendant le formalisme des matrices creuses indispensable. 4x4 7x7 31x31 301x301 3001x3001 Maillage N 32 98 1922 1,81.105 1,80.107 NN = N² 1024 9604 3,69.106 3,28.1010 3,24.1014 NZ 170 490 9500 9,06.105 NZ trop grand NZ/N² (%) 16,6 5,10 0,257 0,00276

Tableau 9 : Evolution de la dimension N de H, du nombre de valeurs NN contenues dans la matrice [A], du nombre de valeurs non-nulles NN contenues dans la matrice [A] et pourcentage de valeurs non-nulles NZ par rapport à NN

Néanmoins, pour des structures plasmoniques avec des épaisseurs de couches métalliques de quelques dizaines de nanomètres, le maillage nécessite d’être très fin dans le métal (≈0,5-2nm) ce qui peut accroître considérablement les temps de calculs, même avec l’utilisation des matrices creuses et de la notation de Yale. Dans le cas des SPP se propageant à l’interface Au/Air, le champ se délocalise sur plusieurs µm dans l’air (I.2.B.b) ce qui nécessite d’utiliser des boîtes de plusieurs dizaines de µm de largeur et de hauteur (§II.1.D). Dans ce cas extrême, NZ devenant trop grand à son tour, le formalisme des matrices creuses ne suffit plus (dernière colonne du tableau 9). L’utilisation d’un maillage adaptatif est alors indispensable. L’avantage de la cellule de Bierwirth est la facilité

II.1. Modélisation des modes plasmoniques

47 d’implémentation d’un tel maillage (Figure 23). La viabilité du maillage adaptatif implémenté dans les codes de calcul développés au cours de la thèse a d’abord été testée sur un guide d’onde à semi- conducteur de façon à être comparé avec les résultats obtenus dans la littérature à l’aide d’autres solveurs de modes (voir Annexe IV). Une fois validé, le solveur de mode FVFD avec maillage adaptatif a ensuite été appliqué à des structures de guides d’onde plasmonique : bandes d’or puis guides DLSPP et LRDLSPP.

D. Etude d’un guide plasmonique sous forme d’une bande métallique d’or