• 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 -1
rk4.c
rk4.h
rk4.o
• Vous chargerez dans
le répertoire "/home/travail",
le fichier "gradient_indice_parabolique_RK4.c"
que vous récupérerez sur la page "GIPRK4".
- En mode console vous
générerez le fichier objet : gradient_indice_parabolique_RK4.o
• Frappez
: dominique@pentiumdc:~/travail$ gcc -c
gradient_indice_parabolique_RK4.c -o gradient_indice_parabolique_RK4.o
• Un "ls -1"
donne : dominique@pentiumdc:~/travail$ ls -1
gradient_indice_parabolique_RK4.c
gradient_indice_parabolique_RK4.o
rk4.c
rk4.h
rk4.o
- En mode console vous
générerez le fichier exécutable : gradient_indice_parabolique_RK4 (sans extension sous Linux, avec
l'extension ".exe" sous Windows).
• Frappez
: dominique@pentiumdc:~/travail$ gcc gradient_indice_parabolique_RK4.o
rk4.o -lm -o gradient_indice_parabolique_RK4
• Un "ls -1l"
donne : dominique@pentiumdc:~/travail$ ls -1l
total 44
-rwxrwxr-x 1 dominique dominique 13408 janv. 1 21:20
gradient_indice_parabolique_RK4
-rw-r--r-- 1 dominique dominique 2354 janv. 1 17:55
gradient_indice_parabolique_RK4.c
-rw-rw-r-- 1 dominique dominique 3232 janv. 1 21:15
gradient_indice_parabolique_RK4.o
-rw-rw-r-- 1 dominique dominique 5130 oct. 9 13:58
rk4.c
-rw-rw-r-- 1 dominique dominique 210 janv. 1 16:57
rk4.h
-rw-rw-r-- 1 dominique dominique 4224 janv. 1 19:32 rk4.o
Remarque : La ligne
"-rwxrwxr-x 1 dominique dominique 13408 janv. 1 21:20 gradient_indice_parabolique_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_parabolique_RK4_0.dta
- gradient_indice_parabolique_RK4_1.dta
- gradient_indice_parabolique_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_parabolique_RK4 >
gradient_indice_parabolique_RK4_0.dta
• Un "ls -1"
donne : dominique@pentiumdc:~/travail$ ls -1
gradient_indice_parabolique_RK4
gradient_indice_parabolique_RK4_0.dta
gradient_indice_parabolique_RK4.c
gradient_indice_parabolique_RK4.o
rk4.c
rk4.h
rk4.o
• Le programme exécutable gradient_indice_parabolique_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_parabolique_RK4_0.dta
.
• Ci-dessous un extrait du fichier gradient_indice_parabolique_RK4_0.dta
:
1 #
Guidage
dans une fibre a gradient d'indice parabolique :
2 #
------------------------------------------------------
3
0
0 0.0524078
4
0.17
0.00890932 0.0524078
5
0.34
0.0178186 0.0524077
...
...
10001
1699.66
-1.86656 -0.0513301
10002
1699.83
-1.87528 -0.0513199
10003
1700
-1.88401 -0.0513096
• On a bien dix mille lignes de données !
• Dans le code du programme gradient_indice_parabolique_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 = asin(sqrt(2*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_parabolique_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 =
asin(sqrt(2*D));
- On compile à nouveau ce programme pour
obtenir une nouvelle version de l'exécutable gradient_indice_parabolique_RK4.
- On génére la seconde "table de
données" gradient_indice_parabolique_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_parabolique_RK4.plt"
que vous récupérerez sur la page "GIPRK4".
• 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
parabolique.
- 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_parabolique_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°07'48'')`
.
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 : La forme elliptique semble confirmer que l'on a affaire à des fonctions sinusoïdales de la cote `z`...
• Ces réalisations ont été faites (ici sous Linux) avec la version 5.0 "patch level 3" de gnuplot®.