programmation c++
Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

programmation c++



  1. #1
    invitee74668d8

    programmation c++


    ------

    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);
    }

    -----
    Dernière modification par JPL ; 02/07/2010 à 19h25. Motif: Ajout de la balise Code pour garder les indentations

  2. #2
    bzh_nicolas

    Re : programmation c++

    Il faudrait que tu nous donnes le code complet, ou que tu nous dises à quel étape ça plante (que te dis le debugger ?).

Discussions similaires

  1. programmation
    Par invite1f9136b7 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 29/05/2009, 17h16
  2. programmation
    Par inviteaefa36c2 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 26/05/2008, 12h31
  3. Programmation
    Par invite7e1f35e9 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 24/04/2006, 13h33
  4. programmation en C
    Par esboy dans le forum Électronique
    Réponses: 15
    Dernier message: 14/04/2006, 11h32
Découvrez nos comparatifs produits sur l'informatique et les technologies.