====== MIRAGES : SIMULATIONS DANS L'AIR ====== ===== CODE C++ ===== #include #include #include #include using namespace std; double c =2.99792458e8; //vitesse lumière double lambda = 632.8e-3; //longueur d'onde du laser int Npas; // Discrétisation de l'espace double Tmin, Tmax; int conv(double y, double ymax){ // converti une position vers l'indice de discrétisation de l'espace return int(y*Npas/ymax); } void gradient(int Npas, double grad[]){ //initialisation du tableau de gradient avec une fonction int i; for(i=0;i> Tmin; cout << "Tmax (Celcius) (z=zmax)?" << endl; cin >> Tmax; cout << "Proportion de la cuve : 10x10x60" << endl; Npas=100000; double theta; cout <<"Angle incident (degre) " << endl; cin >> theta; theta *= M_PI/180.; //conversion en rad double dz = zmax/Npas; // Evolution rayon : double grad[Npas]; // n(z) gradient(Npas,grad); double y[4]; y[0]=0; //x y[1]=zmax/2; //z y[2]=cos(theta)*c/n(y[1],zmax,grad); //vx y[3]=sin(theta)*c/n(y[1],zmax,grad); //vz double dt =1e-14; ofstream fichier("Air_1_nograd.res"); //on enregistre les différents paramètres dans un fichier for(double t=0;t<=2.2e-9;t+=dt) { if(y[0]>xmax){break;} if(y[1]>0.1-1.5*dz){y[3]=-y[3];} if(y[1]<1.5*dz){y[3]=-y[3];} fichier << t ; cout << t << endl ; //affiche le temps (juste pour montrer que le programme tourne ! for(int i=0;i<4;i++) fichier << " " << y[i] ; //enregistre chaque paramètres fichier << endl; rk4(grad,zmax,4,t,y,dt,deriv); //évolution des coordonnées } fichier.close(); } ===== GRAPHES ===== {{:wiki:projet:air_1.png?nolink&400|}} {{:wiki:projet:air_-1.png?nolink&400|}}