Bonjour à tous et à toutes,
je suis un débrouillard en programmation.J'ai un souci avec mon programme.
Je veux resoudre une equation de transport dans l'espace,pour ce faire j'ai essayé de representer ceci dans un tableau dynamique à 3 dimensions,dont vous verez la structrure ci-dessus.Je veux kil me donne Ne_j[ix][iy][0],comme resultat.ça compile,mais l'execution donne segmentation fault.Je vous laisse regarder le programme principal.J'ai besoin d'aide.
Code:int main() { FILE* ecrit1; FILE* ecrit2; ecrit1= fopen("test1 .txt","w+"); ecrit2= fopen("test2 .txt","w+"); /* ---------------------------------------------------------------------------------------------------------------*/ /* Données de base : Pression, P, en bar Mobilités, mu, en m2/V/s Coefficient de recombinaison, k, en 1/m Tension, DV, en Volts Géométrie du détecteur : distance inter-électrode d, longueur a et b en m */ /* ---------------------------------------------------------------------------------------------------------------*/ double P,mua,mue,k,DV,d,E,a,b; d = 0.001; a = 0.001; b = 0.001; P = 1.0; mua = 4.4e-5/P; mue = 0.035/P; k = 1.0e-12*sqrt(P); DV = 200; E = DV/d; /* ---------------------------------------------------------------------------------------------------------------*/ /* Paramètres du calcul Pas en temps, deltat, en seconde Pas en coordonnée x, deltax, en m Pas en coordonnée y, deltay, en m Pas en coordonnée z, deltaz, en m Nombre de pas en x, Nx (sans unité) Nombre de pas en y, Ny (sans unité) Nombre de pas en z, Nz (sans unité) Nombre de Courant, Cra et Cre (pas d'unité) Intervalle de temps de la mesure, T, en secondes Nombre, NMAX, de pas en temps, deltat, durant l'intervalle de temps T de la mesure */ /* ---------------------------------------------------------------------------------------------------------------*/ int Nx,Ny,Nz,dim1,dim2,dim3,i,j;; double NMAX,deltax,deltay,deltaz,deltat,Cra,Cre,T; int ix,iy,iz; Nx=100; Ny=100; Nz=100; deltax=a/Nx*1.0; deltay=b/Ny*1.0; deltaz=d/Nz*1.0; deltat=0.1e-9; Cra = mua*E*deltat/deltaz; Cre = -mue*E*deltat/deltaz; T = 0.001; NMAX = (int)(T/deltat); /* ---------------------------------------------------------------------------------------------------------------*/ /* Création et initialisation des tableaux à zéro */ /* ---------------------------------------------------------------------------------------------------------------*/ vector< vector< vector< double > > > SOURCE(Nx,vector< vector< double > > (Ny,vector< double > (Nz,0.0))); vector< vector< vector< double > > > Ne_j(Nx,vector< vector< double > > (Ny,vector< double > (Nz,0.0))); vector< vector< vector< double > > > Ne_jp1(Nx,vector< vector< double > > (Ny,vector< double > (Nz,0.0))); vector< vector< vector< double > > > Na_j(Nx,vector< vector< double > > (Ny,vector< double > (Nz,0.0))); vector< vector< vector< double > > > Na_jp1(Nx,vector< vector< double > > (Ny,vector< double > (Nz,0.0))); /* ---------------------------------------------------------------------------------------------------------------*/ /* Caractéristiques du cluster */ /* ---------------------------------------------------------------------------------------------------------------*/ double N0,R,xc,yc,zc,s; N0 = 1.0e8; R = d/10.0; xc = a/2.0; yc = b/2.0; zc = d/2.0; /* ---------------------------------------------------------------------------------------------------------------*/ /* Propagation des charges électriques */ /* ---------------------------------------------------------------------------------------------------------------*/ double Cluster,x,y,z; for(j=0;j<NMAX+1;j++) { // conditions aux limitesz for(ix=0;ix<Ne_j.size();ix++) { for(iy=0;iy<Ne_j[ix].size();iy++) { Na_j[ix][iy][0] = 0.0; Ne_j[ix][iy][Nz]=0.0; } } // intégration de Ne sur l'anode double INT2_Ne_j=0.0; for(ix=0;ix<Ne_j.size();ix++) { for(iy=0;iy<Ne_j[ix].size();iy++) { INT2_Ne_j = INT2_Ne_j+Ne_j[ix][iy][0]*deltax*deltay; } } fprintf(ecrit1,"%10e %10e\n",j*deltat,INT2_Ne_j); // resolution des équations de transport for(ix=0;ix<Ne_j.size();ix++) { for(iy=0;iy<Ne_j[ix].size();iy++) { for(iz=0;iz<Ne_j[ix][iy].size();iz++) { x = ix*deltax*1.0; y = iy*deltay*1.0; z = iz*deltaz*1.0; Cluster = cluster_droit(R,xc,yc,zc,x,y,z); SOURCE[ix][iy][iz] = N0*Cluster/deltat; Na_jp1[ix][iy][iz+1]= (Na_j[ix][iy][iz+1]+Cra*Na_jp1[ix][iy][iz]+deltat*(SOURCE[ix][iy][iz+1]-k*Ne_j[ix][iy][iz+1]*Na_j[ix][iy][iz+1]))/(1.0+Cra); Ne_jp1[ix][iy][Nz-(iz+1)] = (Ne_j[ix][iy][Nz-(iz+1)]-Cre*Ne_jp1[ix][iy][Nz-iz]+deltat*(SOURCE[ix][iy][iz+1]-k*Ne_j[ix][iy][Nz-(iz+1)]*Na_j[ix][iy][Nz-(iz+1)]))/(1.0-Cre); Na_j[ix][iy][iz+1] = Na_jp1[ix][iy][iz+1] Ne_j[ix][iy][Nz-(iz+1)] = Ne_jp1[ix][iy][Nz-(iz+1)]; } } } fprintf(ecrit2,"%e\n",Ne_j[ix][iy][0]); printf("%e\n",Ne_j[ix][iy][0]); } fclose(ecrit1); fclose(ecrit2); return (0); }
-----