Statistiques
| Révision :

root / TrouNoir / trou_noir_float.c @ 263

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