PHY 572 : Lasers et applications Notions théoriques François Hache, Manuel Joffre Simulations numériques 4 séances M. J. Travaux expérimentaux Antonello De Martino Delphine Débarre, Johanne Treuffet 5 séances http://www.enseignement.polytechnique.fr/profs/physique/Manuel.Joffre/ea/ [email protected] PHY 572 : Lasers et applications 4 séances ü Cours théorique et introduction à la simulation numérique en optique Séance 1 : Propagation d’un faisceau lumineux en régime linéaire - Notions théoriques de propagation linéaire - Introduction à Scilab - Simulation numérique de la propagation d’un faisceau Séance 2 : - Présentation des travaux expérimentaux - Optique non-linéaire Séance 3 : Pratique ! - Simulation numérique de propagation en régime non-linéaire Séance 4 : Lasers femtosecondes et applications 5 séances 1) 2) 3) 4) ü Travaux expérimentaux en binômes Etude approfondie d’un laser Hélium-Néon Faisceaux gaussiens Cohérences spatiale et temporelle d’un laser (continu ou impulsionnel) Etude approfondie d’une diode laser Propagation d’un faisceau lumineux en régime linéaire 1) 2) 3) Notions théoriques sur la propagation d’un faisceau lumineux Introduction à Scilab • Manipulation de matrices • Représentations graphiques • Transformation de Fourier Simulation numérique de la propagation d’un faisceau lumineux Deuxième Partie Introduction à Scilab Scilab est un logiciel de calcul scientifique gratuit développé par l’INRIA. www.scilab.org Manipulation de matrices Fichier cours1_1.sce // ****** Scilab a = [1 1] norm(a) a = a/norm(a) a' a*a' a'*a sum(a’*a) spec(a'*a) 1:10 zeros(3,2) ones(3,2) ones(a) permet de manipuler des matrices sans boucles // Création d'un vecteur ligne <a| // Calcul de la norme // Normalisation du vecteur // Transposition matricielle --> Vecteur colonne |a> // Carré de la norme <a|a> // Matrice du projecteur |a> <a| // Somme de tous les éléments de la matrice // Valeurs propres d'une matrice // Rampe linéaire de 1 à 10 // Matrice initialisée à 0 // Matrice initialisée à 1 // Matrice initialisée à 1 de même dimension que a ü Possibilité d’effectuer de nombreuses opérations sans boucles De la lenteur des boucles Méthode avec boucle a = 1:1000000; total = 0; for i=1:length(a) do total = total+a(i); end; Méthode sans boucle sum(a) ü N’utiliser les boucles qu’en dernier recours ! Représentation graphique Fichier cours1_2.sce // ********************** Représentation graphique ********************** x = -3:3 // Création d'une rampe linéaire de -3 à 3 // Calcul du carré. z = x*x serait illégal car multiplication MATRICIELLE y = x.*x // .* signifie la multiplication terme à terme plot(x,y) // Représentation graphique x = -3:.1:3; // Création d'une rampe linéaire de pas 0.1 y = x.*x; plot(x,y); clf(); // Effacement du graphe y = exp(-x.*x); plot(x,y); 1.0 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0.0 -3 -2 -1 0 1 2 3 Représentation graphique à deux dimensions Fichier cours1_2.sce // ************ Représentation graphique à deux dimensions ************** x = -3:3 ones(x) // Matrice remplie de 1 et de même dimension que x X = x'*ones(x) Y = ones(x)'*x Z = exp(-X.*X-Y.*Y) // Gaussienne à 2D clf(); grayplot(x,x,Z); // Représentation en fausses couleurs x=-3:.1:3; X = x'*ones(x); Y=ones(x)'*x; Z=exp(-X.*X-Y.*Y); clf(); grayplot(x,x,Z); xset('colormap',jetcolormap(64)); // Choix de l'échelle de couleurs clf(); Sgrayplot(x,x,Z); // Lissage de l'image 3 2 1 0 -1 -2 -3 -3 -2 -1 0 1 2 3 Fonctions Fichier eaLasers.sci // Prend le carré d'une grandeur function result = sqr(x) result = x .* x; endfunction; Utilisation : exec('eaLasers.sci'); sqr(2) sqr(1:4) Illustration de la FFT Fichier cours1_3.sce // ****** Illustration de la FFT **************************** x = 0:255; // Sinusoïde de période 32 pixel y = cos(2*%pi*x/32); scf(0); clf; plot(y); scf(1); clf; plot(abs(fft(y))); // Représentation FFT // Gaussienne y = exp(-sqr((x-128)/8)); scf(0);clf; plot(y); scf(1);clf; plot(real(fft(y))); // L'instruction fftshift clf; plot(real(fftshift(fft(y)))); clf; plot(real(fftshift(fft(fftshift(y))))); // La fonction ft incorpore fftshift clf; plot(real(ft(y))); // Calibration [nu, t] = ftAxis(256,200); // 256 pixels, fréquence max 200 Hz y = (rand(t)-.5)+.1*cos(2*%pi*t/.020); scf(0);clf;plot(t,y); scf(1);clf;plot(nu,abs(ft(y))); Fonctions utiles pour la FFT Fichier eaLasers.sci // Transformée de Fourier avec rotation pour centrer la fréquence nulle function result = ft(data) result = fftshift(fft(fftshift(data))); endfunction; // Transformée de Fourier inverse avec rotation pour centrer la fréquence nulle function result = ift(data) result = fftshift(ifft(fftshift(data))); endfunction; // // // // // ftAxis crée deux tableaux (fréquence et temps) calibrés nPoints : Nombre de points (en général une puissance de 2) nuMax : Valeur maximale de la fréquence nu : Axe des fréquences. Le point d'indice nPoints/2 vaut toujours 0 t : Axe des temps. Le point d'indice nPoints/2 vaut toujours 0 function [nu, t] = ftAxis(nPoints, nuMax) deltaNu = 2*nuMax/nPoints; deltaT = 1/(2*nuMax); nu = -nuMax:2*nuMax/nPoints:nuMax-(2*nuMax/nPoints); t = -nPoints/2*deltaT:deltaT:(nPoints/2-1)*deltaT; endfunction; Troisième partie Simulation de propagation d’un faisceau lumineux Définition des paramètres initiaux du faisceau Fichier cours1_4.sce lambda = 0.8; k0 = 2*%pi/lambda; w0 = 2; nPoints = 64; // // // // Longueur d'onde en microns Vecteur d'onde Diamètre du faisceau (en microns) Nombre de points transverses [x,nu_x] = ftAxis(nPoints, w0*25); // nu_x est la fréquence spatiale k = 2*%pi*nu_x; // k est le vecteur d'onde transverse [r_x,r_y] = make2DGrid(x,x); [k_x,k_y] = make2DGrid(k,k); // Champ dans l'espace direct field_r = exp(-(sqr(r_x)+sqr(r_y))/sqr(w0)); scf(1); clf; image(x,x,abs(field_r)); xselect(); // Champ dans l'espace de Fourier en z=0 field_k = ft(field_r); // Représentation graphique dans l'espace de Fourier scf(0); clf(); image(k,k,abs(field_k)); xselect(); xtitle("Profil dans l''espace de Fourier","k_x","k_y"); Calcul de l’écart quadratique moyen Fichier eaLasers.sci // Calcul de l'écart quadratique d'une grandeur x pondérée par // l'amplitude de probabilité field function result = ecartQuad(x,field) n2 = sum(sqr(abs(field))); xMoy = sum(x.*sqr(abs(field)))/n2; x2Moy = sum(x.*x.*sqr(abs(field)))/n2; result = sqrt(x2Moy-sqr(xMoy)); endfunction; Fichier cours1_4.sce // Calcul des écarts quadratique moyens deltaX = ecartQuad(r_x,field_r); deltaK = ecartQuad(k_x,field_k); disp("DeltaX DeltaK = "+string(deltaX*deltaK)); Simulation de la propagation Fichier cours1_5.sce … nSteps = 64; // Nombre de pas d'intégration dans la direction z zMax = 300; // Distance maximale de propagation z = 0:zMax/nSteps:zMax; // Axe longitudinal hf1 = scf(1); // hf1 est un 'handle' pour la figure 1 hf1.pixmap = 'on'; // Ordres graphiques ultérieurs en mémoire // Boucle de propagation for j=1:length(z) do // Calcul dans l'espace de Fourier du profil au point z field_k = field_k_0.*exp(-%i*(sqr(k_x)+sqr(k_y))/2/k0*z(j)); // Passage dans l'espace réel xy field_r = ift(field_k); // Calcul d'une coupe en y=0 field_xz(:,j)=field_r(:,nPoints/2); // Représentation graphique clf(); image(x,x,abs(field_r)); xtitle("Profil en z = "+string(int(z(j)))+ " µm","x [µm]","y [µm]"); show_pixmap(); // Transfert l'image de la mémoire vers l'écran end; Calcul du diamètre du faisceau Fichier cours1_5.sce … // Déclaration des tableaux pour stocker le diamètre du faisceau deltaXThe = zeros(z); // Diamètre théorique deltaXMes = zeros(z); // Diamètre calculé numériquement … // Boucle de propagation for j=1:length(z) do // Calcul dans l'espace de Fourier du profil au point z … // Calcul de l'écart quadratique deltaXMes(j) = ecartQuad(r_x,field_r); deltaXThe(j) = sqrt(sqr(deltaX)+sqr(deltaK*z(j)/k0)); … end; … // Représentation du diamètre du faisceau scf(3); clf; plot(z,deltaXMes,'O'); plot(z,deltaXThe); xtitle("","z [µm]","DeltaX [µm]"); xselect(); Franges d’Young Deux faisceaux mutuellement cohérents DeltaX [µm] 20 18 16 14 12 10 8 6 4 2 0 0 50 100 150 200 250 z [µm] 300 Perspectives Séance 2 : - Présentation des travaux expérimentaux - Cours d’optique non-linéaire Séance 3 : Pratique ! Prise en compte d’un terme source dans l’équation paraxiale provenant : - soit d’une inhomogénéité de l’indice de réfraction - soit d’un processus non-linéaire ou encore Équation similaire à l’équation de Schrödinger dans un potentiel non nul Méthode de résolution dite « split-step operator » ou pas fractionné.