Statistiques
| Révision :

root / TrouNoir / trou_noir.c @ 212

Historique | Voir | Annoter | Télécharger (11,82 ko)

1 197 equemene
/*
2 197 equemene
        Programme original realise en Fortran 77 en mars 1994
3 197 equemene
        pour les Travaux Pratiques de Modelisation Numerique
4 197 equemene
        DEA d'astrophysique et techniques spatiales de Meudon
5 197 equemene

6 197 equemene
                par Herve Aussel et Emmanuel Quemener
7 197 equemene

8 197 equemene
        Conversion en C par Emmanuel Quemener en aout 1997
9 197 equemene

10 197 equemene
        Remerciements a :
11 197 equemene

12 197 equemene
        - Herve Aussel pour sa procedure sur le spectre de corps noir
13 197 equemene
        - Didier Pelat pour l'aide lors de ce travail
14 197 equemene
        - Jean-Pierre Luminet pour son article de 1979
15 197 equemene
        - Le Numerical Recipies pour ses recettes de calcul
16 197 equemene
        - Luc Blanchet pour sa disponibilite lors de mes interrogations en RG
17 197 equemene

18 197 equemene
        Mes Coordonnees :        Emmanuel Quemener
19 197 equemene
                                Departement Optique
20 197 equemene
                                ENST de Bretagne
21 197 equemene
                                BP 832
22 197 equemene
                                29285 BREST Cedex
23 197 equemene

24 197 equemene
                                Emmanuel.Quemener@enst-bretagne.fr
25 197 equemene

26 197 equemene
        Compilation sous gcc ( Compilateur GNU sous Linux ) :
27 197 equemene

28 197 equemene
                gcc -O6 -m486 -o trou_noir trou_noir.c -lm
29 197 equemene
*/
30 197 equemene
31 197 equemene
#include <stdio.h>
32 197 equemene
#include <math.h>
33 197 equemene
#include <stdlib.h>
34 197 equemene
#include <string.h>
35 197 equemene
36 197 equemene
#define nbr 200 /* Nombre de colonnes du spectre */
37 197 equemene
38 197 equemene
#define PI 3.14159265359
39 197 equemene
40 197 equemene
double atanp(double x,double y)
41 197 equemene
{
42 197 equemene
  double angle;
43 197 equemene
44 197 equemene
  angle=atan2(y,x);
45 197 equemene
46 197 equemene
  if (angle<0)
47 197 equemene
    {
48 197 equemene
      angle+=2*PI;
49 197 equemene
    }
50 197 equemene
51 197 equemene
  return angle;
52 197 equemene
}
53 197 equemene
54 197 equemene
55 197 equemene
double f(double v)
56 197 equemene
{
57 197 equemene
  return v;
58 197 equemene
}
59 197 equemene
60 197 equemene
double g(double u,double m,double b)
61 197 equemene
{
62 197 equemene
// return (3.*m/b*pow(u,2)-u);
63 197 equemene
  return (3.*m/b*pow(u,2)-u);
64 197 equemene
}
65 197 equemene
66 197 equemene
67 197 equemene
void calcul(double *us,double *vs,double up,double vp,
68 197 equemene
            double h,double m,double b)
69 197 equemene
{
70 197 equemene
  double c[4],d[4];
71 197 equemene
72 197 equemene
  c[0]=h*f(vp);
73 197 equemene
  c[1]=h*f(vp+c[0]/2.);
74 197 equemene
  c[2]=h*f(vp+c[1]/2.);
75 197 equemene
  c[3]=h*f(vp+c[2]);
76 197 equemene
  d[0]=h*g(up,m,b);
77 197 equemene
  d[1]=h*g(up+d[0]/2.,m,b);
78 197 equemene
  d[2]=h*g(up+d[1]/2.,m,b);
79 197 equemene
  d[3]=h*g(up+d[2],m,b);
80 197 equemene
81 197 equemene
  *us=up+(c[0]+2.*c[1]+2.*c[2]+c[3])/6.;
82 197 equemene
  *vs=vp+(d[0]+2.*d[1]+2.*d[2]+d[3])/6.;
83 197 equemene
}
84 197 equemene
85 197 equemene
void rungekutta(double *ps,double *us,double *vs,
86 197 equemene
                double pp,double up,double vp,
87 197 equemene
                double h,double m,double b)
88 197 equemene
{
89 197 equemene
  calcul(us,vs,up,vp,h,m,b);
90 197 equemene
  *ps=pp+h;
91 197 equemene
}
92 197 equemene
93 197 equemene
94 197 equemene
double decalage_spectral(double r,double b,double phi,
95 197 equemene
                         double tho,double m)
96 197 equemene
{
97 197 equemene
  return (sqrt(1-3*m/r)/(1+sqrt(m/pow(r,3))*b*sin(tho)*sin(phi)));
98 197 equemene
}
99 197 equemene
100 197 equemene
void spectre(int nt[nbr],double fx[nbr],double rf,int q,double b,double db,
101 197 equemene
             double h,double r,double m,double bss,double *flx)
102 197 equemene
{
103 197 equemene
  int fi;
104 197 equemene
105 197 equemene
  fi=(int)(rf*nbr/bss);
106 197 equemene
  nt[fi]+=1;
107 197 equemene
  *flx=pow(r/m,q)*pow(rf,4)*b*db*h;
108 197 equemene
  fx[fi]=fx[fi]+*flx;
109 197 equemene
}
110 197 equemene
111 197 equemene
void spectre_cn(int nt[nbr],double fx[nbr],double rf,double b,double db,
112 197 equemene
                double h,double r,double m,double bss,double *flx)
113 197 equemene
{
114 197 equemene
  double nu_rec,nu_em,qu,v,temp,temp_em,flux_int,m_point,planck,c,k;
115 197 equemene
  int fi,posfreq;
116 197 equemene
117 197 equemene
  planck=6.62e-34;
118 197 equemene
  k=1.38e-23;
119 197 equemene
  temp=3.e7;
120 197 equemene
  m_point=1.e14;
121 197 equemene
  v=1.-3./r;
122 197 equemene
123 197 equemene
  qu=1/sqrt(1-3./r)/sqrt(r)*(sqrt(r)-sqrt(6)+sqrt(3)/2*log((sqrt(r)+sqrt(3))/(sqrt(r)-sqrt(3))*(sqrt(6)-sqrt(3))/(sqrt(6)+sqrt(3))));
124 197 equemene
125 197 equemene
  temp_em=temp*sqrt(m)*exp(0.25*log(m_point))*exp(-0.75*log(r))*
126 197 equemene
    exp(-0.125*log(v))*exp(0.25*log(qu));
127 197 equemene
128 197 equemene
  flux_int=0;
129 197 equemene
  *flx=0;
130 197 equemene
131 197 equemene
  for (fi=1;fi<nbr;fi++)
132 197 equemene
    {
133 197 equemene
      nu_em=bss*fi/nbr;
134 197 equemene
      nu_rec=nu_em*rf;
135 197 equemene
      posfreq=1./bss*nu_rec*nbr;
136 197 equemene
      if ((posfreq>0)&&(posfreq<nbr))
137 197 equemene
        {
138 197 equemene
          flux_int=2*planck/9e16*pow(nu_em,3)/(exp(planck*nu_em/k/temp_em)-1.)*pow(rf,3)*b*db*h;
139 197 equemene
          fx[posfreq]+=flux_int;
140 197 equemene
          *flx+=flux_int;
141 197 equemene
          nt[posfreq]+=1;
142 197 equemene
        }
143 197 equemene
    }
144 197 equemene
}
145 197 equemene
146 197 equemene
void impact(double d,double phi,int dim,double r,double b,double tho,double m,
147 197 equemene
            double **zp,double **fp,
148 197 equemene
            int nt[200],double fx[200],int q,double db,
149 197 equemene
            double h,double bss,int raie)
150 197 equemene
{
151 197 equemene
  double xe,ye;
152 197 equemene
  int xi,yi;
153 197 equemene
  double flx,rf;
154 197 equemene
  xe=d*sin(phi);
155 197 equemene
  ye=-d*cos(phi);
156 197 equemene
157 197 equemene
  xi=(int)xe+dim/2;
158 197 equemene
  yi=(int)ye+dim/2;
159 197 equemene
160 197 equemene
  rf=decalage_spectral(r,b,phi,tho,m);
161 197 equemene
162 197 equemene
  if (raie==0)
163 197 equemene
    {
164 197 equemene
      spectre(nt,fx,rf,q,b,db,h,r,m,bss,&flx);
165 197 equemene
    }
166 197 equemene
  else
167 197 equemene
    {
168 197 equemene
      spectre_cn(nt,fx,rf,b,db,h,r,m,bss,&flx);
169 197 equemene
    }
170 197 equemene
171 197 equemene
  if (zp[xi][yi]==0.)
172 197 equemene
    {
173 197 equemene
      zp[xi][yi]=1./rf;
174 197 equemene
    }
175 197 equemene
176 197 equemene
  if (fp[xi][yi]==0.)
177 197 equemene
    {
178 197 equemene
      fp[xi][yi]=flx;
179 197 equemene
    }
180 197 equemene
}
181 197 equemene
182 197 equemene
void sauvegarde_pgm(char nom[24],unsigned int **image,int dim)
183 197 equemene
{
184 197 equemene
  FILE            *sortie;
185 197 equemene
  unsigned long   i,j;
186 197 equemene
187 197 equemene
  sortie=fopen(nom,"w");
188 197 equemene
189 197 equemene
  fprintf(sortie,"P5\n");
190 197 equemene
  fprintf(sortie,"%i %i\n",dim,dim);
191 197 equemene
  fprintf(sortie,"255\n");
192 197 equemene
193 197 equemene
  for (j=0;j<dim;j++) for (i=0;i<dim;i++)
194 197 equemene
    {
195 197 equemene
      fputc(image[i][j],sortie);
196 197 equemene
    }
197 197 equemene
198 197 equemene
  fclose(sortie);
199 197 equemene
}
200 197 equemene
201 197 equemene
void sauvegarde_dat(char nom[24],double tableau[3][nbr],int raie)
202 197 equemene
{
203 197 equemene
  FILE            *sortie;
204 197 equemene
  unsigned long   i;
205 197 equemene
206 197 equemene
  sortie=fopen(nom,"w");
207 197 equemene
208 197 equemene
  fprintf(sortie,"# Trou Noir entoure d'un Disque d'Accretion\n");
209 197 equemene
210 197 equemene
  if (raie==0)
211 197 equemene
    {
212 197 equemene
      fprintf(sortie,"# Colonne 1 : Frequence_Recue/Frequence_Emise\n");
213 197 equemene
    }
214 197 equemene
  else
215 197 equemene
    {
216 197 equemene
      fprintf(sortie,"# Colonne 1 : Fr?quence d'Emission en Hertz\n");
217 197 equemene
    }
218 197 equemene
219 197 equemene
  fprintf(sortie,"# Colonne 2 : Intensite Normalisee\n");
220 197 equemene
  fprintf(sortie,"# Colonne 3 : Nombre d'Impacts Normalise\n");
221 197 equemene
222 197 equemene
  for (i=1;i<nbr;i++)
223 197 equemene
    {
224 197 equemene
      fprintf(sortie,"%f\t%f\t%f\n",tableau[0][i],tableau[1][i],tableau[2][i]);
225 197 equemene
    }
226 197 equemene
227 197 equemene
  fclose(sortie);
228 197 equemene
}
229 197 equemene
230 197 equemene
int main(int argc,char *argv[])
231 197 equemene
{
232 197 equemene
233 197 equemene
  double m,rs,ri,re,tho,ro;
234 197 equemene
  int q;
235 197 equemene
236 197 equemene
  double bss,stp;
237 197 equemene
  int nmx,dim;
238 197 equemene
  double d,bmx,db,b,h;
239 197 equemene
  double up,vp,pp;
240 197 equemene
  double us,vs,ps;
241 197 equemene
  double rp[2000];
242 197 equemene
  double **zp,**fp;
243 197 equemene
  unsigned int **izp,**ifp;
244 197 equemene
  double zmx,fmx,zen,fen;
245 197 equemene
  double flux_tot,impc_tot;
246 197 equemene
  double fx[nbr];
247 197 equemene
  int nt[nbr];
248 197 equemene
  double tableau[3][nbr];
249 197 equemene
  double phi,thi,thx,phd,php,nr,r;
250 197 equemene
  int ni,ii,i,imx,j,n,tst,dist,raie,pc,fcl,zcl;
251 197 equemene
  double nh;
252 197 equemene
253 197 equemene
  if (argc==2)
254 197 equemene
    {
255 197 equemene
      if (strcmp(argv[1],"-aide")==0)
256 197 equemene
        {
257 197 equemene
          printf("\nSimulation d'un disque d'accretion autour d'un trou noir\n");
258 197 equemene
          printf("\nParametres a definir :\n\n");
259 197 equemene
          printf("   1) Dimension de l'Image\n");
260 197 equemene
          printf("   2) Masse relative du trou noir\n");
261 197 equemene
          printf("   3) Dimension du disque exterieur\n");
262 197 equemene
          printf("   4) Distance de l'observateur\n");
263 197 equemene
          printf("   5) Inclinaison par rapport au disque (en degres)\n");
264 197 equemene
          printf("   6) Observation a distance FINIE ou INFINIE\n");
265 197 equemene
          printf("   7) Rayonnement de disque MONOCHROMATIQUE ou CORPS_NOIR\n");
266 197 equemene
          printf("   8) Normalisation des flux INTERNE ou EXTERNE\n");
267 197 equemene
          printf("   9) Normalisation de z INTERNE ou EXTERNE\n");
268 197 equemene
          printf("  10) Impression des images NEGATIVE ou POSITIVE\n");
269 197 equemene
          printf("  11) Nom de l'image des Flux\n");
270 197 equemene
          printf("  12) Nom de l'image des decalages spectraux\n");
271 197 equemene
          printf("  13) Nom du fichier contenant le spectre\n");
272 197 equemene
          printf("  14) Valeur de normalisation des flux\n");
273 197 equemene
          printf("  15) Valeur de normalisation des decalages spectraux\n");
274 197 equemene
          printf("\nSi aucun parametre defini, parametres par defaut :\n\n");
275 197 equemene
          printf("   1) Dimension de l'image : 256 pixels de cote\n");
276 197 equemene
          printf("   2) Masse relative du trou noir : 1\n");
277 197 equemene
          printf("   3) Dimension du disque exterieur : 12 \n");
278 197 equemene
          printf("   4) Distance de l'observateur : 100 \n");
279 197 equemene
          printf("   5) Inclinaison par rapport au disque (en degres) : 10\n");
280 197 equemene
          printf("   6) Observation a distance FINIE\n");
281 197 equemene
          printf("   7) Rayonnement de disque MONOCHROMATIQUE\n");
282 197 equemene
          printf("   8) Normalisation des flux INTERNE\n");
283 197 equemene
          printf("   9) Normalisation des z INTERNE\n");
284 197 equemene
          printf("  10) Impression des images NEGATIVE ou POSITIVE\n");
285 197 equemene
                 printf("  11) Nom de l'image des flux : flux.pgm\n");
286 197 equemene
          printf("  12) Nom de l'image des z : z.pgm\n");
287 197 equemene
          printf("  13) Nom du fichier contenant le spectre : spectre.dat\n");
288 197 equemene
          printf("  14) <non definie>\n");
289 197 equemene
          printf("  15) <non definie>\n");
290 197 equemene
        }
291 197 equemene
    }
292 197 equemene
293 197 equemene
  if ((argc==14)||(argc==16))
294 197 equemene
    {
295 197 equemene
      printf("# Utilisation les valeurs definies par l'utilisateur\n");
296 197 equemene
297 197 equemene
      dim=atoi(argv[1]);
298 197 equemene
      m=atof(argv[2]);
299 197 equemene
      re=atof(argv[3]);
300 197 equemene
      ro=atof(argv[4]);
301 197 equemene
      tho=PI/180.*(90-atof(argv[5]));
302 197 equemene
303 197 equemene
      rs=2.*m;
304 197 equemene
      ri=3.*rs;
305 197 equemene
      q=-2;
306 197 equemene
307 197 equemene
      if (strcmp(argv[6],"FINIE")==0)
308 197 equemene
        {
309 197 equemene
          dist=0;
310 197 equemene
        }
311 197 equemene
      else
312 197 equemene
        {
313 197 equemene
          dist=1;
314 197 equemene
        }
315 197 equemene
316 197 equemene
      if (strcmp(argv[7],"MONOCHROMATIQUE")==0)
317 197 equemene
        {
318 197 equemene
          raie=0;
319 197 equemene
        }
320 197 equemene
      else
321 197 equemene
        {
322 197 equemene
          raie=1;
323 197 equemene
        }
324 197 equemene
325 197 equemene
      if (strcmp(argv[8],"EXTERNE")==0)
326 197 equemene
        {
327 197 equemene
          fen=atof(argv[14]);
328 197 equemene
        }
329 197 equemene
330 197 equemene
      if (strcmp(argv[9],"EXTERNE")==0)
331 197 equemene
        {
332 197 equemene
          zen=atof(argv[15]);
333 197 equemene
        }
334 197 equemene
335 197 equemene
    }
336 197 equemene
  else
337 197 equemene
    {
338 197 equemene
      printf("# Utilisation les valeurs par defaut\n");
339 197 equemene
340 197 equemene
      dim=256;
341 197 equemene
      m=1.;
342 197 equemene
      rs=2.*m;
343 197 equemene
      ri=3.*rs;
344 197 equemene
      re=12.;
345 197 equemene
      ro=100.;
346 197 equemene
      tho=PI/180.*80;
347 197 equemene
      q=-2;
348 197 equemene
      dist=0;
349 197 equemene
      raie=0;
350 197 equemene
    }
351 197 equemene
352 197 equemene
      printf("# Dimension de l'image : %i\n",dim);
353 197 equemene
      printf("# Masse : %f\n",m);
354 197 equemene
      printf("# Rayon singularite : %f\n",rs);
355 197 equemene
      printf("# Rayon interne : %f\n",ri);
356 197 equemene
      printf("# Rayon externe : %f\n",re);
357 197 equemene
      printf("# Distance de l'observateur : %f\n",ro);
358 197 equemene
      printf("# Inclinaison a la normale en radian : %f\n",tho);
359 197 equemene
360 197 equemene
  for (i=0;i<nbr;i++)
361 197 equemene
    {
362 197 equemene
      fx[i]=0.;
363 197 equemene
      nt[i]=0;
364 197 equemene
    }
365 197 equemene
366 197 equemene
  zp=(double**)calloc(dim,sizeof(double*));
367 197 equemene
  zp[0]=(double*)calloc(dim*dim,sizeof(double));
368 197 equemene
369 197 equemene
  fp=(double**)calloc(dim,sizeof(double*));
370 197 equemene
  fp[0]=(double*)calloc(dim*dim,sizeof(double));
371 197 equemene
372 197 equemene
  izp=(unsigned int**)calloc(dim,sizeof(unsigned int*));
373 197 equemene
  izp[0]=(unsigned int*)calloc(dim*dim,sizeof(unsigned int));
374 197 equemene
375 197 equemene
  ifp=(unsigned int**)calloc(dim,sizeof(unsigned int*));
376 197 equemene
  ifp[0]=(unsigned int*)calloc(dim*dim,sizeof(unsigned int));
377 197 equemene
378 197 equemene
  for (i=1;i<dim;i++)
379 197 equemene
    {
380 197 equemene
      zp[i]=zp[i-1]+dim;
381 197 equemene
      fp[i]=fp[i-1]+dim;
382 197 equemene
      izp[i]=izp[i-1]+dim;
383 197 equemene
      ifp[i]=ifp[i-1]+dim;
384 197 equemene
    }
385 197 equemene
386 197 equemene
  nmx=dim;
387 197 equemene
  stp=dim/(2.*nmx);
388 197 equemene
  bmx=1.25*re;
389 197 equemene
  b=0.;
390 197 equemene
  thx=asin(bmx/ro);
391 197 equemene
  pc=0;
392 197 equemene
393 197 equemene
  if (raie==0)
394 197 equemene
    {
395 197 equemene
      bss=2;
396 197 equemene
    }
397 197 equemene
  else
398 197 equemene
    {
399 197 equemene
      bss=3e21;
400 197 equemene
    }
401 197 equemene
402 197 equemene
  for (n=1;n<=nmx;n++)
403 197 equemene
    {
404 197 equemene
      h=PI/500.;
405 197 equemene
      d=stp*n;
406 197 equemene
407 197 equemene
      if (dist==1)
408 197 equemene
        {
409 197 equemene
          db=bmx/(double)nmx;
410 197 equemene
          b=db*(double)n;
411 197 equemene
          up=0.;
412 197 equemene
          vp=1.;
413 197 equemene
        }
414 197 equemene
      else
415 197 equemene
        {
416 197 equemene
          thi=thx/(double)nmx*(double)n;
417 197 equemene
          db=ro*sin(thi)-b;
418 197 equemene
          b=ro*sin(thi);
419 197 equemene
          up=sin(thi);
420 197 equemene
          vp=cos(thi);
421 197 equemene
        }
422 197 equemene
423 197 equemene
      pp=0.;
424 197 equemene
      nh=1;
425 197 equemene
426 197 equemene
      rungekutta(&ps,&us,&vs,pp,up,vp,h,m,b);
427 197 equemene
428 197 equemene
      rp[(int)nh]=fabs(b/us);
429 197 equemene
430 197 equemene
      do
431 197 equemene
        {
432 197 equemene
          nh++;
433 197 equemene
          pp=ps;
434 197 equemene
          up=us;
435 197 equemene
          vp=vs;
436 197 equemene
          rungekutta(&ps,&us,&vs,pp,up,vp,h,m,b);
437 197 equemene
438 197 equemene
          rp[(int)nh]=b/us;
439 197 equemene
440 197 equemene
        } while ((rp[(int)nh]>=rs)&&(rp[(int)nh]<=rp[1]));
441 197 equemene
442 197 equemene
      for (i=nh+1;i<2000;i++)
443 197 equemene
        {
444 197 equemene
          rp[i]=0.;
445 197 equemene
        }
446 197 equemene
447 197 equemene
      imx=(int)(8*d);
448 197 equemene
449 197 equemene
      for (i=0;i<=imx;i++)
450 197 equemene
        {
451 197 equemene
          phi=2.*PI/(double)imx*(double)i;
452 197 equemene
          phd=atanp(cos(phi)*sin(tho),cos(tho));
453 197 equemene
          phd=fmod(phd,PI);
454 197 equemene
          ii=0;
455 197 equemene
          tst=0;
456 197 equemene
457 197 equemene
          do
458 197 equemene
            {
459 197 equemene
              php=phd+(double)ii*PI;
460 197 equemene
              nr=php/h;
461 197 equemene
              ni=(int)nr;
462 197 equemene
463 197 equemene
              if ((double)ni<nh)
464 197 equemene
                {
465 197 equemene
                  r=(rp[ni+1]-rp[ni])*(nr-ni*1.)+rp[ni];
466 197 equemene
                }
467 197 equemene
              else
468 197 equemene
                {
469 197 equemene
                  r=rp[ni];
470 197 equemene
                }
471 197 equemene
472 197 equemene
              if ((r<=re)&&(r>=ri))
473 197 equemene
                {
474 197 equemene
                  tst=1;
475 197 equemene
                  impact(d,phi,dim,r,b,tho,m,zp,fp,nt,fx,q,db,h,bss,raie);
476 197 equemene
                }
477 197 equemene
478 197 equemene
              ii++;
479 197 equemene
            } while ((ii<=2)&&(tst==0));
480 197 equemene
        }
481 197 equemene
    }
482 197 equemene
483 197 equemene
  fmx=fp[0][0];
484 197 equemene
  zmx=zp[0][0];
485 197 equemene
486 197 equemene
  for (i=0;i<dim;i++) for (j=0;j<dim;j++)
487 197 equemene
    {
488 197 equemene
      if (fmx<fp[i][j])
489 197 equemene
        {
490 197 equemene
          fmx=fp[i][j];
491 197 equemene
        }
492 197 equemene
493 197 equemene
      if (zmx<zp[i][j])
494 197 equemene
        {
495 197 equemene
          zmx=zp[i][j];
496 197 equemene
        }
497 197 equemene
    }
498 197 equemene
499 197 equemene
  printf("\nLe flux maximal detecte est de %f",fmx);
500 197 equemene
  printf("\nLe decalage spectral maximal detecte est de %f\n\n",zmx);
501 197 equemene
502 197 equemene
  if (strcmp(argv[8],"EXTERNE")==0)
503 197 equemene
    {
504 197 equemene
      fmx=fen;
505 197 equemene
    }
506 197 equemene
507 197 equemene
  if (strcmp(argv[9],"EXTERNE")==0)
508 197 equemene
    {
509 197 equemene
      zmx=zen;
510 197 equemene
    }
511 197 equemene
512 197 equemene
  for (i=0;i<dim;i++) for (j=0;j<dim;j++)
513 197 equemene
    {
514 197 equemene
      zcl=(int)(255/zmx*zp[i][dim-1-j]);
515 197 equemene
      fcl=(int)(255/fmx*fp[i][dim-1-j]);
516 197 equemene
517 197 equemene
      if (strcmp(argv[8],"NEGATIVE")==0)
518 197 equemene
        {
519 197 equemene
          if (zcl>255)
520 197 equemene
            {
521 197 equemene
              izp[i][j]=0;
522 197 equemene
            }
523 197 equemene
          else
524 197 equemene
            {
525 197 equemene
              izp[i][j]=255-zcl;
526 197 equemene
            }
527 197 equemene
528 197 equemene
          if (fcl>255)
529 197 equemene
            {
530 197 equemene
              ifp[i][j]=0;
531 197 equemene
            }
532 197 equemene
          else
533 197 equemene
            {
534 197 equemene
              ifp[i][j]=255-fcl;
535 197 equemene
            }
536 197 equemene
537 197 equemene
        }
538 197 equemene
      else
539 197 equemene
        {
540 197 equemene
          if (zcl>255)
541 197 equemene
            {
542 197 equemene
              izp[i][j]=255;
543 197 equemene
            }
544 197 equemene
          else
545 197 equemene
            {
546 197 equemene
              izp[i][j]=zcl;
547 197 equemene
            }
548 197 equemene
549 197 equemene
          if (fcl>255)
550 197 equemene
            {
551 197 equemene
              ifp[i][j]=255;
552 197 equemene
            }
553 197 equemene
          else
554 197 equemene
            {
555 197 equemene
              ifp[i][j]=fcl;
556 197 equemene
            }
557 197 equemene
558 197 equemene
        }
559 197 equemene
560 197 equemene
    }
561 197 equemene
562 197 equemene
  flux_tot=0;
563 197 equemene
  impc_tot=0;
564 197 equemene
565 197 equemene
  for (i=1;i<nbr;i++)
566 197 equemene
    {
567 197 equemene
      flux_tot+=fx[i];
568 197 equemene
      impc_tot+=nt[i];
569 197 equemene
    }
570 197 equemene
571 197 equemene
  for (i=1;i<nbr;i++)
572 197 equemene
    {
573 197 equemene
      tableau[0][i]=bss*i/nbr;
574 197 equemene
      tableau[1][i]=fx[i]/flux_tot;
575 197 equemene
      tableau[2][i]=(double)nt[i]/(double)impc_tot;
576 197 equemene
    }
577 197 equemene
578 197 equemene
  if ((argc==14)||(argc==16))
579 197 equemene
   {
580 197 equemene
     sauvegarde_pgm(argv[11],ifp,dim);
581 197 equemene
     sauvegarde_pgm(argv[12],izp,dim);
582 197 equemene
     sauvegarde_dat(argv[13],tableau,raie);
583 197 equemene
   }
584 197 equemene
  else
585 197 equemene
    {
586 197 equemene
      sauvegarde_pgm("z.pgm",izp,dim);
587 197 equemene
      sauvegarde_pgm("flux.pgm",ifp,dim);
588 197 equemene
      sauvegarde_dat("spectre.dat",tableau,raie);
589 197 equemene
    }
590 197 equemene
591 197 equemene
  free(zp[0]);
592 197 equemene
  free(zp);
593 197 equemene
  free(fp[0]);
594 197 equemene
  free(fp);
595 197 equemene
596 197 equemene
  free(izp[0]);
597 197 equemene
  free(izp);
598 197 equemene
  free(ifp[0]);
599 197 equemene
  free(ifp);
600 197 equemene
601 197 equemene
}
602 197 equemene