Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
wiki:projet:simu_air [2017/03/09 13:30] http_fablab.sorbonne-universites.fr_wiki_doku.php_id_wiki_projet_laser créée |
wiki:projet:simu_air [2017/03/31 12:31] (Version actuelle) http_fablab.sorbonne-universites.fr_wiki_doku.php_id_wiki_projet_laser |
||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
===== CODE C++ ===== | ===== CODE C++ ===== | ||
+ | < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
- | ===== GRAPHES ===== | + | using namespace std; |
- | {{ :wiki:projet:air_1.png? | + | double c =2.99792458e8; |
+ | double lambda = 632.8e-3; | ||
+ | |||
+ | int Npas; // Discrétisation de l' | ||
+ | double Tmin, Tmax; | ||
+ | |||
+ | int conv(double y, double ymax){ // converti une position vers l' | ||
+ | return int(y*Npas/ | ||
+ | } | ||
+ | |||
+ | void gradient(int Npas, double grad[]){ // | ||
+ | int i; | ||
+ | for(i=0; | ||
+ | grad[i]=Tmin+(Tmax-Tmin)*double(i)/ | ||
+ | } | ||
+ | } | ||
+ | |||
+ | double n(double y, double ymax, double grad[]){ | ||
+ | return 1+(1e-6 *(288.02+1.478/ | ||
+ | } | ||
+ | |||
+ | void deriv(double ymax, double dt, double grad[], | ||
+ | dy[0]=y[2]; | ||
+ | dy[1]=y[3]; | ||
+ | dy[2]=0; | ||
+ | dy[3]=pow(y[2], | ||
+ | } | ||
+ | |||
+ | void rk4(double grad[], | ||
+ | // Algorythme de runge kutta d' | ||
+ | int i ; | ||
+ | double ddx ; | ||
+ | double d1[m], d2[m], d3[m], d4[m], yp[m]; | ||
+ | ddx = dx/2.; | ||
+ | deriv(ymax, | ||
+ | for( i = 0; i< m; i++){ yp[i] = y[i] + d1[i]*ddx ; } | ||
+ | yp[2]=sqrt(c*c/ | ||
+ | deriv(ymax, | ||
+ | for( i = 0; i < m; i++){ yp[i] = y[i] + d2[i]*ddx ; } | ||
+ | yp[2]=sqrt(c*c/ | ||
+ | deriv(ymax, | ||
+ | for( i = 0; i< m; i++){ yp[i] = y[i] + d3[i]*dx ;} | ||
+ | yp[2]=sqrt(c*c/ | ||
+ | deriv(ymax, | ||
+ | for( i = 0; i < m ; i++) | ||
+ | { y[i] = y[i] + dx*( d1[i] + 2*d2[i] + 2*d3[i] + d4[i] )/6 ; } | ||
+ | y[2]=sqrt(c*c/ | ||
+ | } | ||
+ | |||
+ | int main(){ | ||
+ | double xmax = 0.6; | ||
+ | double zmax = 0.1; | ||
+ | |||
+ | // | ||
+ | |||
+ | cout << "Tmin (Celcius) (z=0) ?" << endl; | ||
+ | cin >> Tmin; | ||
+ | cout << "Tmax (Celcius) (z=zmax)?" | ||
+ | cin >> Tmax; | ||
+ | cout << " | ||
+ | Npas=100000; | ||
+ | double theta; | ||
+ | cout <<" | ||
+ | cin >> theta; | ||
+ | theta *= M_PI/ | ||
+ | |||
+ | double dz = zmax/ | ||
+ | |||
+ | // Evolution rayon : | ||
+ | |||
+ | double grad[Npas]; | ||
+ | gradient(Npas, | ||
+ | double y[4]; | ||
+ | y[0]=0; //x | ||
+ | y[1]=zmax/ | ||
+ | y[2]=cos(theta)*c/ | ||
+ | y[3]=sin(theta)*c/ | ||
+ | double dt =1e-14; | ||
+ | |||
+ | |||
+ | ofstream fichier(" | ||
+ | for(double t=0; | ||
+ | { | ||
+ | |||
+ | if(y[0]> | ||
+ | if(y[1]> | ||
+ | if(y[1]< | ||
+ | fichier << t ; | ||
+ | cout << t << endl ; // | ||
+ | for(int i=0; | ||
+ | fichier << endl; | ||
+ | rk4(grad, | ||
+ | } | ||
+ | fichier.close(); | ||
+ | |||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== GRAPHES ===== | ||
- | {{ : | + | {{: |