• Vous avez besoin
des
fichiers : rk4.c, rk4.h, que vous placerez (par
exemple) dans votre répertoire "/home/travail"...
- En mode console (sous Linux par exemple...) vous
générerez le fichier objet : rk4.o .
• Frappez
: dominique@pentiumdc:~/travail$ gcc -c rk4.c -o rk4.o
• Un "ls -1"
donne : dominique@pentiumdc:~/travail$ ls
rk4.c
rk4.h
rk4.o
• Vous chargerez dans
le répertoire "/home/travail",
le fichier "gradient_indice_lineaire_RK4.c"
que vous récupérerez sur la page "GILRK4".
- En mode console vous
générerez le fichier objet : gradient_indice_lineaire_RK4.o .
• Frappez
: dominique@pentiumdc:~/travail$ gcc -c
gradient_indice_lineaire_RK4.c -o gradient_indice_lineaire_RK4.o
• Un "ls -1"
donne : dominique@pentiumdc:~/travail$ ls -1
gradient_indice_lineaire_RK4.c
gradient_indice_lineaire_RK4.o
rk4.c
rk4.h
rk4.o
- En mode console vous
générerez le fichier exécutable : gradient_indice_lineaire_RK4 (sans
extension sous Linux, avec
l'extension ".exe" sous Windows).
• Frappez
: dominique@pentiumdc:~/travail$ gcc gradient_indice_lineaire_RK4.o
rk4.o -lm -o gradient_indice_lineaire_RK4
• Un "ls -1l"
donne : dominique@pentiumdc:~/travail$ ls -1l
total 44
-rwxrwxr-x 1 dominique dominique 13432 janv. 12 17:18
gradient_indice_lineaire_RK4
-rw-r--r-- 1 dominique dominique 2538 janv. 12 16:36
gradient_indice_lineaire_RK4.c
-rw-rw-r-- 1 dominique dominique 3368 janv. 12 17:17
gradient_indice_lineaire_RK4.o
-rw-rw-r-- 1 dominique dominique 5130 oct. 9 13:58
rk4.c
-rw-rw-r-- 1 dominique dominique 211 oct. 14 14:40
rk4.h
--rw-rw-r-- 1 dominique dominique 4224 janv. 12 17:10 rk4.o
Remarque : La ligne
"-rwxrwxr-x 1 dominique dominique 13432 janv. 12 17:18 gradient_indice_lineaire_RK4",
montre que l'on a affaire à un fichier exécutable, lors
de l'édition
de liens il ne faut pas oublier de faire référence
à la librairie mathématique "-lm".
• Ce fichier permet de
générer trois fichiers de données (les "tables de
données") de noms respectifs :
- gradient_indice_lineaire_RK4_0.dta
- gradient_indice_lineaire_RK4_1.dta
- gradient_indice_lineaire_RK4_2.dta
• Chaque fichier
contient dix mille lignes donnant les triplets : {`z, u_0(z), u_1(z)`} ;
où `zin[ 0, z_(Max)]` , et où `z` varie au pas `Deltaz`.
- En mode console, on génére chaque
fichier :
• Frappez
: dominique@pentiumdc:~/travail$ ./gradient_indice_lineaire_RK4 >
gradient_indice_lineaire_RK4_0.dta
• Un "ls -1"
donne : dominique@pentiumdc:~/travail$ ls -1
gradient_indice_lineaire_RK4
gradient_indice_lineaire_RK4_0.dta
gradient_indice_lineaire_RK4.c
gradient_indice_lineaire_RK4.o
rk4.c
rk4.h
rk4.o
• Le programme exécutable gradient_indice_lineaire_RK4
génére une "table de données", qu'a priori, il
affiche
directement dans l'écran, ici on la "redirige" (à cause du
symbole >) vers le fichier (de texte) gradient_indice_lineaire_RK4_0.dta .
• Ci-dessous un extrait du fichier gradient_indice_lineaire_RK4_0.dta
:
1 #
Guidage
dans une fibre a gradient d'indice lineaire :
2 #
---------------------------------------------------
3
0
0 0.0524078
4
0.17
0.00890546 0.052351
5
0.34
0.0177993 0.0522828
...
...
10001
1699.66
3.42089 0.000108762
10002
1699.83
3.42091 4.06803e-05
10003
1700
3.42091 -2.74014e-05
• On a bien dix mille lignes de données !
• Dans le code du programme gradient_indice_lineaire_RK4.c
on
observe les lignes suivantes :
/* Choix de l'angle
d'incidence
---------------------------- */
double a = 3.0*pi/180.0;
//double a = 5.0*pi/180;
//double a = acos(1-D);
• Les lignes précédées de "//" ne seront pas
compilées, ce qui veut dire ici que `theta_1=3 °` ; on va
soumettre à la méthode RK4,4 l'étude du
premier
chemin suivi par le rayon lumineux...
• Pour étudier
le second chemin suivi par le rayon lumineux, on doit donner à
`theta_1` la valeur : `theta_1=5 °`.
- On corrige le code source du fichier gradient_indice_lineaire_RK4.c, il
devient pour la partie qui nous intéresse :
//double a =
3.0*pi/180.0;
double a =
5.0*pi/180;
//double a = cos(1-D)
- On compile à nouveau ce programme pour
obtenir une nouvelle version de l'exécutable gradient_indice_lineaire_RK4 .
- On génére la seconde "table de
données" gradient_indice_lineaire_RK4_1.dta
.etc.
Remarque : Je travaille un peu dans l'esprit de Monsieur John
BURKARDT pour obtenir les
"tables de données", bien entendu "on" pourrait sophistiquer
davantage le programme...
• Vous chargerez
dans
votre répertoire "/home/travail",
le fichier "gradient_indice_lineaire_RK4.plt"
que vous récupérerez sur la page "GILRK4".
• Il s'agit d'un
script exploitable sous gnuplot®.
• Le script est
très compréhensible :
- On trace un premier graphe : le profil d'indice
linéaire.
- On trace un deuxième graphe : le chemin
suivit par le rayon lumineux, soit `x=x(z)` pour différents
angles `theta_1`. C'est là que l'on exploite les "tables de
données" gradient_indice_lineaire_RK4_n.dta
où n prend les valeurs
0,1 et 2...
- On trace un troisième graphe : le plan de
phase , il s'agit du tracé de `dotx(z)` en fonction de
`x(z)`, en effet dans le triplet : `z, u_0(z), u_1(z)` ; on a :
`u_0(z)= x(z)` et `u_1(z)=dotx(z)`.
• En rouge : `color(red)(theta_1=3°)`,
en vert : `color(green)(theta_1=5°)`
, en bleu : `color(blue)(theta_1=8°06'34'')`
.
Remarque : Ici les échelles sur l'axe des abscisses et l'axe des cotes sont différentes ! C'est pourquoi, à l'origine 0, l'angle entre l'axe des cotes et le chemin suivi par le rayon lumineux semble erroné…
Remarque : Il est évident ici que les chemins suivis par la lumière sont bien périodiques dans l'espace, mais ils ne sont certainement pas sinusoïdaux !
• Ces réalisations ont été faites (ici sous Linux) avec la version 5.0 "patch level 3" de gnuplot®.