Statistiques
| Révision :

root / TrouNoir / trou_noir_1994.f @ 231

Historique | Voir | Annoter | Télécharger (18,29 ko)

1 208 equemene
      PROGRAM MODELISATION_NUMERIQUE
2 208 equemene
3 208 equemene
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
4 208 equemene
c                                                                            c
5 208 equemene
c MODELISATION NUMERIQUE D'UN DISQUE D'ACCRETION AUTOUR D'UN TROU NOIR :     c
6 208 equemene
c                                                                            c
7 208 equemene
c APPARENCE & SPECTRE                                                        c
8 208 equemene
c                                                                            c
9 208 equemene
c Programme realise par : Herve AUSSEL                                       c
10 208 equemene
c                         Emmanuel QUEMENER                                  c
11 208 equemene
c                                                                            c
12 208 equemene
c Dans le cadre de l'unite de modelisation numerique du DEA                  c
13 208 equemene
c d'Astrophysique & Techniques Spatiales (Paris 7 & 11)                      c
14 208 equemene
c                                                                            c
15 208 equemene
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
16 208 equemene
17 208 equemene
      IMPLICIT NONE
18 208 equemene
      REAL*8 pi
19 208 equemene
      PARAMETER (pi=3.141592654)
20 208 equemene
21 208 equemene
c
22 208 equemene
c PARAMETRES PHYSIQUES DU SYSTEME DISQUE, TROU-NOIR, OBSERVATEUR
23 208 equemene
c
24 208 equemene
25 208 equemene
      REAL*8 m                  ! masse reduite du trou noir
26 208 equemene
      REAL*8 rs,ri,re           ! rayons de Schwarzschild,interieur et exterieur
27 208 equemene
      REAL*8 tho                ! angle normale-disque & direction-observateur
28 208 equemene
      REAL*8 ro                 ! distance entre l'observateur et le trou noir
29 208 equemene
      INTEGER*4 q               ! parametre de spectre
30 208 equemene
      REAL*4 bss                ! borne superieure du spectre
31 208 equemene
32 208 equemene
c
33 208 equemene
c PARAMETRES DE LA PLAQUE PHOTOGRAPHIQUE
34 208 equemene
c
35 208 equemene
36 208 equemene
      INTEGER*4 dim             ! dimension de la plaque photographique (en pixels)
37 208 equemene
      PARAMETER (dim=512)
38 208 equemene
      REAL*4 stp                ! pas d'iteration en pixels sur la plaque
39 208 equemene
      INTEGER*4 nmx             ! nombre total d'iterations
40 208 equemene
      REAL*8 d                  ! distance exploree du centre de la plaque
41 208 equemene
      REAL*8 bmx                ! parametre d'impact maximal
42 208 equemene
43 208 equemene
c
44 208 equemene
c PARAMETRES INITIAUX D' INTEGRATION
45 208 equemene
c
46 208 equemene
47 208 equemene
      REAL*8 db                 ! avancement du parametre d'impact
48 208 equemene
      REAL*8 b                  ! parametre d'impact du photon
49 208 equemene
      REAL*8 h                  ! avancement angulaire initial
50 208 equemene
51 208 equemene
c
52 208 equemene
c PARAMETRES D'INTEGRATION DU SYSTEME DIFFERENTIEL
53 208 equemene
c
54 208 equemene
55 208 equemene
      REAL*8 up,vp,pp           ! parametres du SED , precedents
56 208 equemene
      REAL*8 us,vs,ps           ! parametres du SED , suivants
57 208 equemene
58 208 equemene
c
59 208 equemene
c RESULTATS DE L'INTEGRATION DE L'EQUATION DIFFERENTIELLE
60 208 equemene
c
61 208 equemene
62 208 equemene
      REAL*8 rp(2000)           ! vecteur polaire
63 208 equemene
      REAL*8 nh                 ! nombre d'avancements angulaires
64 208 equemene
65 208 equemene
c
66 208 equemene
c RESULTATS DE LA SIMULATION
67 208 equemene
c
68 208 equemene
69 208 equemene
      REAL*4 zp(dim,dim) 	! image en decalage spectral
70 208 equemene
      REAL*4 fp(dim,dim) 	! image en flux
71 208 equemene
      REAL*8 fx(200)            ! flux par tranche de decalage de frequence
72 208 equemene
      INTEGER*4 nt(200) 	! nombre de photon par tranche de decalage
73 208 equemene
74 208 equemene
c
75 208 equemene
c AUTRES VARIABLES...
76 208 equemene
c
77 208 equemene
78 208 equemene
      INTEGER*4 pc              ! pourcentage du balayage realise
79 208 equemene
      REAL*8 phi                ! angle de la plaque photographique
80 208 equemene
      REAL*8 thi                ! angle trou noir-observateur & direction emission
81 208 equemene
      REAL*8 thx                ! angle thi maximal
82 208 equemene
      REAL*8 phd                ! angle donnant l'intersection des plans
83 208 equemene
      REAL*8 php                ! angle d'intersection intermediaire
84 208 equemene
      REAL*8 nr                 ! indice d'intersection reel du vecteur
85 208 equemene
      INTEGER*4 ni              ! indice d'intersection entier du vecteur
86 208 equemene
      INTEGER*4 ii              ! indice de 1' image (primaire, secondaire, ...)
87 208 equemene
      REAL*8 r                  ! rayon moyen d'impact sur le disque
88 208 equemene
      INTEGER*4 nbr             ! nombre de bandes de rapport de frequence
89 208 equemene
      INTEGER*4 i,imx,j,n
90 208 equemene
      LOGICAL tst
91 208 equemene
      REAL*8 atanp              ! fonction arctangente : resultat entre 0 et 2*pi
92 208 equemene
      LOGICAL raie            ! variable interactive de type de spectre
93 208 equemene
      LOGICAL dist            ! variable interactive de distance
94 208 equemene
95 208 equemene
c
96 208 equemene
c TYPE DE SPECTRE
97 208 equemene
c
98 208 equemene
99 208 equemene
c      raie=.TRUE.               ! TRUE -> raie infiniment fine
100 208 equemene
      raie=.FALSE.               ! FALSE -> corps noir
101 208 equemene
102 208 equemene
c
103 208 equemene
c TYPE DE DISTANCE
104 208 equemene
c
105 208 equemene
106 208 equemene
      dist=.TRUE.               ! TRUE -> distance infinie
107 208 equemene
c                               ! FALSE -> distance finie
108 208 equemene
109 208 equemene
c
110 208 equemene
c INITIALISATION DES TABLEAUX
111 208 equemene
c
112 208 equemene
113 208 equemene
      DO i=1,200
114 208 equemene
         fx(i)=0.
115 208 equemene
         nt(i)=0
116 208 equemene
      END DO
117 208 equemene
118 208 equemene
      DO i=1,dim
119 208 equemene
         DO j=1,dim
120 208 equemene
            zp(i,j)=0.
121 208 equemene
            fp(i,j)=0.
122 208 equemene
         END DO
123 208 equemene
      END DO
124 208 equemene
125 208 equemene
c
126 208 equemene
c DEFINITION DES PARAMETRES PHYSIQUES
127 208 equemene
c
128 208 equemene
129 208 equemene
      m=1.
130 208 equemene
      rs=2.*m
131 208 equemene
      ri=3.*rs
132 208 equemene
      re=12.
133 208 equemene
      ro=100.
134 208 equemene
      tho=pi/180.*80.
135 208 equemene
      IF (raie .EQV. .TRUE.) THEN
136 208 equemene
         q=-2
137 208 equemene
      ELSE
138 208 equemene
         q=-3/4
139 208 equemene
      ENDIF
140 208 equemene
141 208 equemene
c
142 208 equemene
c DEFINITION DES PARAMETRES NUMERIQUES
143 208 equemene
c
144 208 equemene
145 208 equemene
      nmx=dim
146 208 equemene
      stp=dim/(2.*nmx)
147 208 equemene
      bmx=1.25*re
148 208 equemene
      b=0.
149 208 equemene
      thx=asin(bmx/ro)
150 208 equemene
      pc=0
151 208 equemene
      nbr=200
152 208 equemene
      IF (raie .EQV. .TRUE.) THEN
153 208 equemene
         bss=2.
154 208 equemene
      ELSE
155 208 equemene
         bss=1.e19
156 208 equemene
      ENDIF
157 208 equemene
158 208 equemene
c
159 208 equemene
c BOUCLE PRINCIPALE DE LA SIMULATION
160 208 equemene
c
161 208 equemene
162 208 equemene
      DO n=1,nmx
163 208 equemene
         pc=INT(100./nmx*n)
164 208 equemene
         IF (pc.NE.INT(100./nmx*(n-1))) WRITE (*,*) pc, ' %'
165 208 equemene
166 208 equemene
c
167 208 equemene
c Affectation des conditions initiales de la resolution Runge-Kutta
168 208 equemene
c ( Premier etage d'imbrication -> n )
169 208 equemene
c
170 208 equemene
         h=pi/500.
171 208 equemene
         d=stp*n
172 208 equemene
         IF (dist .EQV. .TRUE.) THEN
173 208 equemene
            db=bmx/nmx
174 208 equemene
            b=db*n
175 208 equemene
            up=0.
176 208 equemene
            vp=1.
177 208 equemene
         ELSE
178 208 equemene
            thi=thx/nmx*n
179 208 equemene
            db=ro*DSIN(thi)-b
180 208 equemene
            b=ro*DSIN(thi)
181 208 equemene
            up=DSIN(thi)
182 208 equemene
            vp=DCOS(thi)
183 208 equemene
         ENDIF
184 208 equemene
         pp=0.
185 208 equemene
         nh=1
186 208 equemene
         CALL rungekutta(ps,us,vs,pp,up,vp,h,m,b)
187 208 equemene
         rp(nh)=ABS(b/us)
188 208 equemene
189 208 equemene
c
190 208 equemene
c Resolution de l'equation differentielle pour un parametre b donne
191 208 equemene
c Les resultats sont stockes dans le vecteur polaire rp(n)
192 208 equemene
c ( Deuxieme etage d'imbrication -> n & nh )
193 208 equemene
c
194 208 equemene
195 208 equemene
         DO WHILE ((rp(nh).GE.rs).AND.(rp(nh).LE.rp(1)))
196 208 equemene
            nh=nh+1
197 208 equemene
            pp=ps
198 208 equemene
            up=us
199 208 equemene
            vp=vs
200 208 equemene
            CALL rungekutta(ps,us,vs,pp,up,vp,h,m,b)
201 208 equemene
            rp(nh)=b/us
202 208 equemene
         END DO
203 208 equemene
204 208 equemene
c
205 208 equemene
c Mise a zero de tous les termes non redefinis du vecteur polaire
206 208 equemene
c ( Deuxieme etage d'imbrication -> n & 1 )
207 208 equemene
c
208 208 equemene
209 208 equemene
         DO i=nh+1,2000
210 208 equemene
            rp(i)=0.
211 208 equemene
         END DO
212 208 equemene
213 208 equemene
c
214 208 equemene
c Determination des points de la trajectoire coupant le plan du disque
215 208 equemene
c par echantillonnage de 1' angle phi sur un cercle, a pas radial constant
216 208 equemene
c ( Deuxieme etage d'imbrication -> n & 1 )
217 208 equemene
c
218 208 equemene
219 208 equemene
         imx=INT(8*d)
220 208 equemene
         DO i=0,imx
221 208 equemene
            phi=2*pi/imx*i
222 208 equemene
223 208 equemene
c Calcul de l'angle "brut" d'intersection dans la base polaire
224 208 equemene
225 208 equemene
            phd=atanp(DCOS(phi)*DSIN(tho),DCOS(tho))
226 208 equemene
            phd=phd-INT(phd/pi)*pi
227 208 equemene
            ii=0
228 208 equemene
            tst=.FALSE.
229 208 equemene
230 208 equemene
c
231 208 equemene
c Boucle tant que - que l'image tertiaire n'a pas ete teste
232 208 equemene
c - le rayon n'est pas dans le domaine du disque
233 208 equemene
c ( Troisieme etage d'imbrication -> n , 1 , (ii, tst) , r )
234 208 equemene
c
235 208 equemene
236 208 equemene
            DO WHILE((ii.LE.2).AND.(tst.EQV..FALSE.))
237 208 equemene
238 208 equemene
c Calcul de l'angle d'intersection pour chacune des images
239 208 equemene
240 208 equemene
               php=phd+ii*pi
241 208 equemene
               nr=php/h
242 208 equemene
               ni=INT(nr)
243 208 equemene
244 208 equemene
c Interpolation lineaire de la distance photon-trou noir
245 208 equemene
246 208 equemene
               IF (ni.LT.nh) THEN
247 208 equemene
                  r=(rp(ni+1)-rp(ni))*(nr-ni*1.)+rp(ni)
248 208 equemene
               ELSE
249 208 equemene
                  r=rp(ni)
250 208 equemene
               ENDIF
251 208 equemene
252 208 equemene
253 208 equemene
c
254 208 equemene
c Test d'impact sur le disque
255 208 equemene
c ( Quatrieme etage d'imbrication -> n , i , (ii,tst) , r )
256 208 equemene
c
257 208 equemene
258 208 equemene
               IF ((r.LE.re).AND.(r.GE.ri)) then
259 208 equemene
                  tst=.TRUE.
260 208 equemene
261 208 equemene
c S'il y a impact calcul - du rapport de frequence
262 208 equemene
c - du spectre de photons et de flux
263 208 equemene
264 208 equemene
                  CALL impact(raie,d,phi,dim,r,b,tho,m,zp,fp,nt,
265 208 equemene
     & fx,q,db,h,nbr,bss)
266 208 equemene
267 208 equemene
               END IF
268 208 equemene
269 208 equemene
               ii=ii+1
270 208 equemene
            END DO
271 208 equemene
         END DO
272 208 equemene
      END DO
273 208 equemene
274 208 equemene
c Appel de la routine d'affichage
275 208 equemene
276 208 equemene
      CALL affichage(zp,fp,nt,fx,dim,nbr,bss,bmx,m,ri,re,tho,pi)
277 208 equemene
278 208 equemene
      WRITE(*,*)
279 208 equemene
      WRITE(*,*) 'C''est TERMINE ! '
280 208 equemene
      WRITE(*,*)
281 208 equemene
282 208 equemene
      STOP
283 208 equemene
      END PROGRAM
284 208 equemene
285 208 equemene
c
286 208 equemene
c Cette fonction permet de trouver un arctangente entre 0 et 2*pi
287 208 equemene
c
288 208 equemene
289 208 equemene
      REAL*8 function atanp(x,y)
290 208 equemene
      REAL*8 x,y,pi,eps
291 208 equemene
      pi=3.141592654
292 208 equemene
      eps=1.e-20
293 208 equemene
      IF (ABS(x).LE.eps) then
294 208 equemene
         IF (ABS(y).EQ.Y) then
295 208 equemene
            atanp=pi/2.
296 208 equemene
         ELSE
297 208 equemene
            atanp=3.*pi/2.
298 208 equemene
         END IF
299 208 equemene
      ELSE
300 208 equemene
         IF (ABS(x).EQ.x) then
301 208 equemene
            IF (ABS(y).EQ.Y) then
302 208 equemene
               atanp=DATAN(y/x)
303 208 equemene
            ELSE
304 208 equemene
               atanp=DATAN(y/x)+2.*pi
305 208 equemene
            END IF
306 208 equemene
         ELSE
307 208 equemene
            atanp=DATAN(y/x)+pi
308 208 equemene
         END IF
309 208 equemene
      END IF
310 208 equemene
      RETURN
311 208 equemene
      END
312 208 equemene
313 208 equemene
c
314 208 equemene
c Premiere fonction du systeme -> ( d(u)/d(phi)=f(phi,u,v) )
315 208 equemene
c
316 208 equemene
317 208 equemene
      REAL*8 function f(v)
318 208 equemene
      REAL*8 v
319 208 equemene
      f=v
320 208 equemene
      RETURN
321 208 equemene
      END
322 208 equemene
323 208 equemene
c
324 208 equemene
c Deuxieme fonction du systeme -> ( d(v)/d(phi)=g(phi,u,v) )
325 208 equemene
c
326 208 equemene
327 208 equemene
      REAL*8 function g(u,m,b)
328 208 equemene
      REAL*8 u, m, b
329 208 equemene
      g=3.*m/b*u**2-u
330 208 equemene
      RETURN
331 208 equemene
      END
332 208 equemene
333 208 equemene
c
334 208 equemene
c Routine de d'intergration par la methode de Runge-Kutta
335 208 equemene
c
336 208 equemene
337 208 equemene
      SUBROUTINE rungekutta(ps,us,vs,pp,up,vp,h,m,b)
338 208 equemene
      REAL*8 ps,us,vs,pp,up,vp,h,m,b
339 208 equemene
      CALL calcul(us,vs,up,vp,h,m,b)
340 208 equemene
      ps=pp+h
341 208 equemene
      RETURN
342 208 equemene
      END
343 208 equemene
344 208 equemene
      SUBROUTINE calcul(us,vs,up,vp,h,m,b)
345 208 equemene
      REAL*8 us,vs,up,vp,h,m,b
346 208 equemene
      REAL*8 c(4),d(4),f,g
347 208 equemene
      c(1)=h*f(vp)
348 208 equemene
      c(2)=h* f(vp+c(1)/2.)
349 208 equemene
      c(3)=h*f(vp+c(2)/2.)
350 208 equemene
      c(4)=h*f(vp+c(3))
351 208 equemene
      d(1)=h*g(up,m,b)
352 208 equemene
      d(2)=h*g(up+d(1)/2.,m,b)
353 208 equemene
      d(3)=h*g(up+d(2)/2.,m,b)
354 208 equemene
      d(4)=h*g(up+d(3),m,b)
355 208 equemene
      us=up+(c(1)+2.*c(2)+2.*c(3)+c(4))/6.
356 208 equemene
      vs=vp+(d(1)+2.*d(2)+2.*d(3)+d(4))/6.
357 208 equemene
      RETURN
358 208 equemene
      END
359 208 equemene
360 208 equemene
c
361 208 equemene
c En cas d'impact, cette procedure :
362 208 equemene
c - etablit la position du pixel consisdere sur les images
363 208 equemene
c - appelle la routine de calcul de decalage spectral
364 208 equemene
c - appelle la routine de calcul du flux et du spectre
365 208 equemene
c - affecte a chacun des pixels sa valeur calculee
366 208 equemene
c
367 208 equemene
368 208 equemene
      SUBROUTINE impact(raie,d,phi,dim,r,b,tho,m,zp,fp,
369 208 equemene
     & nt,fx,q,db,h,nbr,bss)
370 208 equemene
      REAL*8 d,phi,r,b,tho,m,fx(200),db,h
371 208 equemene
      INTEGER*4 dim,nt(200),q,nbr
372 208 equemene
      REAL*4 zp(dim,dim),fp(dim,dim),bss
373 208 equemene
      REAL*4 xe,ye
374 208 equemene
      INTEGER*4 xi,yi
375 208 equemene
      REAL*8 flx,rf
376 208 equemene
      LOGICAL raie
377 208 equemene
      xe=d*DSIN(phi)
378 208 equemene
      ye=-d*DCOS(phi)
379 208 equemene
380 208 equemene
c Calcul des coordonnees (x,y) du pixel sur chacune des images
381 208 equemene
382 208 equemene
      xi=INT(xe)+INT(dim/2.)
383 208 equemene
      yi=INT(ye)+INT(dim/2.)
384 208 equemene
385 208 equemene
c Appel de la routine de decalage spectral
386 208 equemene
387 208 equemene
      CALL decalage_spectral(rf,r,b,phi,tho,m)
388 208 equemene
389 208 equemene
c Appel de la routine de calcul de flux et de modification de spectre
390 208 equemene
c pour le cas d'une raie infiniment fine ou un corps noir
391 208 equemene
392 208 equemene
      IF (raie .EQV. .TRUE.) THEN
393 208 equemene
         CALL spectre(nt,fx,rf,q,b,db,h,r,m,nbr,bss,flx)
394 208 equemene
      ELSE
395 208 equemene
         CALL spectre_bb(nt,fx,rf,q,b,db,h,r,m,nbr,bss,flx)
396 208 equemene
      END IF
397 208 equemene
398 208 equemene
c Affectation sur chacune des images du decalage spectral et du flux
399 208 equemene
400 208 equemene
      IF(zp(xi,yi).EQ.0.) zp(xi,yi)=1./rf
401 208 equemene
      IF(fp(xi,yi).EQ.0.) fp(xi,yi)=flx
402 208 equemene
403 208 equemene
      RETURN
404 208 equemene
      END
405 208 equemene
406 208 equemene
c Calcul du rapport entre la frequence recue et la frequence emise
407 208 equemene
408 208 equemene
      SUBROUTINE decalage_spectral(rf,r,b,phi,tho,m)
409 208 equemene
      REAL*8 rf,r,b,phi,tho,m
410 208 equemene
      rf=sqrt(1-3*m/r)/(1+sqrt(m/r**3)*b*sin(tho)*sin(phi))
411 208 equemene
      RETURN
412 208 equemene
      END
413 208 equemene
414 208 equemene
c Calcul du flux puis du spectre pour une raie infiniment fine
415 208 equemene
416 208 equemene
      SUBROUTINE spectre(nt,fx,rf,q,b,db,h,r,m,nbr,bss,flx)
417 208 equemene
      REAL*8 fx(200)
418 208 equemene
      REAL*8 rf,b,db,h,r,m,flx
419 208 equemene
      REAL*4 bss
420 208 equemene
      INTEGER*4 nt(200),q,nbr
421 208 equemene
      INTEGER*4 fi
422 208 equemene
      fi=INT(rf*nbr/bss)
423 208 equemene
      nt(fi)=nt(fi)+1
424 208 equemene
      flx=(r/m)**q*rf**4*b*db*h
425 208 equemene
      fx(fi)=fx(fi)+flx
426 208 equemene
      RETURN
427 208 equemene
      END
428 208 equemene
429 208 equemene
c Calcul du flux puis du spectre pour un corps noir
430 208 equemene
431 208 equemene
      SUBROUTINE spectre_bb(nr,fx,rf,q,b,db,h,r,m,nbr,bss,flx)
432 208 equemene
      REAL*8 fx(200),nu_rec,nu_em,qu,v
433 208 equemene
      REAL*8 rf,b,db,h,r,m,flx,temp,temp_em,flux_int
434 208 equemene
      REAL*8 m_point
435 208 equemene
      REAL*4 bss
436 208 equemene
      INTEGER*4 nr(200),q,nbr
437 208 equemene
      INTEGER*4 fi,posfreq
438 208 equemene
      REAL*8 planck,c,k
439 208 equemene
      PARAMETER (planck=6.62e-34) ! definition des constantes
440 208 equemene
      PARAMETER (c=3.e8)
441 208 equemene
      PARAMETER (k=1.38e-23)
442 208 equemene
443 208 equemene
c
444 208 equemene
c Definition des parametres pour le calcul de la temperature d'emission
445 208 equemene
c puis calcul
446 208 equemene
c
447 208 equemene
448 208 equemene
      temp=3.e7
449 208 equemene
      m_point=1.
450 208 equemene
451 208 equemene
c v -> C du rapport
452 208 equemene
453 208 equemene
      v=1.-3./r
454 208 equemene
455 208 equemene
c qu -> Q du rapport
456 208 equemene
457 208 equemene
      qu=((1-3./r)**-.5)*(r**-.5)*((r**.5-6.**.5)+
458 208 equemene
     & ((3.**.5)/2.)*log ((r**.5)-(3.**.5))*0.171517)
459 208 equemene
      qu=abs(qu)
460 208 equemene
      temp_em=temp*m**.5
461 208 equemene
      temp_em=temp_em*m_point**.25
462 208 equemene
      temp_em=temp_em*r**(-.75)
463 208 equemene
      temp_em=temp_em*v**(-1./8.)
464 208 equemene
      temp_em=temp_em*qu**.25
465 208 equemene
466 208 equemene
c
467 208 equemene
c initialisation des compteurs de flux
468 208 equemene
c flux int : flux recu pour le pixel dans la tranque posfreq
469 208 equemene
c flx : flux "bolometrique", integre de 0. a bss
470 208 equemene
c
471 208 equemene
472 208 equemene
      flux_int=0.
473 208 equemene
      flx=0.
474 208 equemene
475 208 equemene
c
476 208 equemene
c Balayage en frequence du spectre
477 208 equemene
c
478 208 equemene
479 208 equemene
      DO fi=1,nbr
480 208 equemene
         nu_em=bss*fi/nbr 	!frequence d' emission
481 208 equemene
         nu_rec=nu_em*rf 	!frequence de reception
482 208 equemene
         posfreq=INT(nu_rec*200./bss) !case ou se trouve nu rec
483 208 equemene
484 208 equemene
c
485 208 equemene
c test pour savoir si la frequence de reception est bien dans le
486 208 equemene
c domaine du spectre calcule
487 208 equemene
c
488 208 equemene
489 208 equemene
         if ((posfreq.GE.1).AND.(posfreq.LE.nbr)) THEN
490 208 equemene
            nr(posfreq)=nr(posfreq)+1
491 208 equemene
492 208 equemene
c Loi du corps noir
493 208 equemene
494 208 equemene
            flux_int=(2.*h*(nu_em**3/c**2))*
495 208 equemene
     & (1./(exp(planck*nu_em/(k*temp_em))-1.))
496 208 equemene
497 208 equemene
c Integration sur le pixel
498 208 equemene
499 208 equemene
            flux_int=flux_int*rf**3*b*db*h
500 208 equemene
501 208 equemene
c Remplissage du spectre
502 208 equemene
503 208 equemene
            fx(posfreq)=flux_int+fx(posfreq)
504 208 equemene
505 208 equemene
c Intergration bolometrique
506 208 equemene
507 208 equemene
            flx=flx+flux_int
508 208 equemene
         ENDIF
509 208 equemene
      END DO
510 208 equemene
      RETURN
511 208 equemene
      END
512 208 equemene
513 208 equemene
c
514 208 equemene
c AFFICHAGE DES RESULTATS : 6 fenetres de sortie
515 208 equemene
c
516 208 equemene
c - Image en decalage spectral
517 208 equemene
c - Image en flux
518 208 equemene
c - Dessin de parametres physiques interessants
519 208 equemene
c - Dessin des limites du disque a l'infini
520 208 equemene
c - Dessin du spectre en flux
521 208 equemene
c - Dessin du spectre en nombre de photons
522 208 equemene
c
523 208 equemene
524 208 equemene
      SUBROUTINE affichage(zp,fp,nt,fx,dim,nbr,bss,bmx,m,ri,re,tho,pi)
525 208 equemene
      INTEGER*4 nt(200),dim,nbr
526 208 equemene
      REAL*4 zp(dim,dim),fp(dim,dim),bss
527 208 equemene
      REAL*8 fx(200),bmx,m,ri,re,tho,pi
528 208 equemene
      INTEGER*4 np,i,j
529 208 equemene
      REAL*8 fm,nm
530 208 equemene
      REAL*4 fmx,zmx,x(200),y(200),tr(6),c(20),bmp
531 208 equemene
      LOGICAL tg
532 208 equemene
      LOGICAL ps
533 208 equemene
534 208 equemene
      tg=.TRUE.                 ! TRUE : affichage en tons de gris
535 208 equemene
c                               ! FALSE : affichage en contours
536 208 equemene
537 208 equemene
      ps=.FALSE.                ! TRUE : affichage postscript
538 208 equemene
c                               ! FALSE : affichage fenetre Xwindow
539 208 equemene
540 208 equemene
541 208 equemene
c
542 208 equemene
c TRANSFORMATION DE L'IMAGE DES FLUX : FLUX -> FLUX RELATIFS
543 208 equemene
c
544 208 equemene
545 208 equemene
      np=0
546 208 equemene
      fm=0.
547 208 equemene
      DO i=1,dim
548 208 equemene
         DO j=1,dim
549 208 equemene
            IF (fp(i,j).NE.0.) np=np+1
550 208 equemene
            fm=fm+fp(i,j)
551 208 equemene
         END DO
552 208 equemene
      END DO
553 208 equemene
      fm=fm/np
554 208 equemene
555 208 equemene
c
556 208 equemene
c DETERMINATION DU DECALAGE SPECTRAL MAXIMUM ET DU FLUX MAXIMUM
557 208 equemene
c
558 208 equemene
559 208 equemene
      fmx=0.
560 208 equemene
      zmx=0.
561 208 equemene
      DO i=1,dim
562 208 equemene
         DO j=1,dim
563 208 equemene
            fp(i,j)=fp(i,j)/fm
564 208 equemene
            IF (fmx.LT.fp(i,j)) fmx=fp(i,j)
565 208 equemene
            IF (zmx.LT.zp(i,j)) zmx=zp(i,j)
566 208 equemene
         END DO
567 208 equemene
      END DO
568 208 equemene
569 208 equemene
      DATA tr/0.,1.,0.,0.,0.,1./
570 208 equemene
571 208 equemene
c
572 208 equemene
c AFFICHAGE DE L'IMAGE DES DECALAGES SPECTRAUX
573 208 equemene
c
574 208 equemene
575 208 equemene
      if (ps .EQV. .TRUE.) THEN
576 208 equemene
         CALL PGBEGIN (0,'image1.ps/ps',1,1)
577 208 equemene
      ELSE
578 208 equemene
         CALL PGBEGIN (0,'/xwindow',1,1)
579 208 equemene
      END IF
580 208 equemene
      CALL PGENV (1.,dim/1.,1.,dim/1.,1,-1)
581 208 equemene
      CALL PGLABEL('Image des decalages spectraux','',
582 208 equemene
     &'DISQUE D''ACCRETION AUTOUR D''UN TROU NOIR')
583 208 equemene
      IF (tg .EQV. .TRUE.) THEN
584 208 equemene
         DO i=0,25
585 208 equemene
            DO j=0,25
586 208 equemene
               zp(i+25,j+25)=1.
587 208 equemene
            END DO
588 208 equemene
         END DO
589 208 equemene
         CALL PGGRAY(zp,dim,dim,2,dim-1,2,dim-1,zmx,0.,tr)
590 208 equemene
      ELSE
591 208 equemene
         DO i=1,20
592 208 equemene
            c(i)=0.2*(i-1)
593 208 equemene
         END DO
594 208 equemene
         CALL PGCONS(zp,dim,dim,1,dim,1,dim,c,12,tr)
595 208 equemene
      END IF
596 208 equemene
      CALL PGEND
597 208 equemene
598 208 equemene
c
599 208 equemene
c AFFICHAGE DE L'IMAGE DES FLUX
600 208 equemene
c
601 208 equemene
602 208 equemene
      if (ps .EQV. .TRUE.) THEN
603 208 equemene
         CALL PGBEGIN (0,'image2.ps/ps',1,1)
604 208 equemene
      ELSE
605 208 equemene
         CALL PGBEGIN (0,'/xwindow',1,1)
606 208 equemene
      END IF
607 208 equemene
      CALL PGENV(1.,dim/1.,1.,dim/1.,1,-1)
608 208 equemene
      CALL PGLABEL(' Image des flux','',
609 208 equemene
     &'DISQUE D''ACCRETION AUTOUR D''UN TROU NOIR')
610 208 equemene
      if (tg) THEN
611 208 equemene
         DO i=0,25
612 208 equemene
            DO j=0,25
613 208 equemene
               fp(i+25,j+25)=1.
614 208 equemene
            END DO
615 208 equemene
         END DO
616 208 equemene
         CALL PGGRAY(fp,dim,dim,2,dim-1,2,dim-1,fmx,0.,tr)
617 208 equemene
      ELSE
618 208 equemene
         DO i=1,8
619 208 equemene
            c(i)=0.0625*2.**(i-1)
620 208 equemene
         END DO
621 208 equemene
         CALL PGCONS(fp,dim,dim,1,dim,1,dim,c,8,tr)
622 208 equemene
      END IF
623 208 equemene
      CALL PGEND
624 208 equemene
625 208 equemene
c
626 208 equemene
c AFFICHAGE DES DONNEES PHYSIQUES
627 208 equemene
c
628 208 equemene
629 208 equemene
      bmp=bmx
630 208 equemene
631 208 equemene
      if (ps .EQV. .TRUE.) THEN
632 208 equemene
         CALL PGBEGIN (0,'image3.ps/ps',1,1)
633 208 equemene
      ELSE
634 208 equemene
         CALL PGBEGIN (0,'/xwindow',1,1)
635 208 equemene
      END IF
636 208 equemene
      CALL PGENV (-bmp,bmp,-bmp,bmp,1,0)
637 208 equemene
      CALL PGLABEL('Rayon de Schwarzschild &
638 208 equemene
     &Parametre d''impact critique','',
639 208 equemene
     &'DISQUE D''ACCRETION AUTOUR D''UN TROU NOIR')
640 208 equemene
      DO i=1,200
641 208 equemene
         x(i)=2.*m*cos(2.*pi*i/200.)
642 208 equemene
         y(i)=2.*m*sin(2.*pi*i/200.)
643 208 equemene
      END DO
644 208 equemene
      CALL PGLINE(200,x,y)
645 208 equemene
      DO i=1,200
646 208 equemene
         x(i)=m*SQRT(27.)*cos(2.*pi*i/200.)
647 208 equemene
         y(i)=m*SQRT(27.)*sin(2.*pi*i/200.)
648 208 equemene
      END DO
649 208 equemene
      CALL PGLINE(200,x,y)
650 208 equemene
      CALL PGEND
651 208 equemene
652 208 equemene
c
653 208 equemene
c AFFICHAGE DES CONTOURS DU DISQUE
654 208 equemene
c
655 208 equemene
656 208 equemene
      if (ps .EQV. .TRUE.) THEN
657 208 equemene
         CALL PGBEGIN (0,'image4.ps/ps',1,1)
658 208 equemene
      ELSE
659 208 equemene
         CALL PGBEGIN (0,'/xwindow',1,1)
660 208 equemene
      END IF
661 208 equemene
      CALL PGENV(-bmp,bmp,-bmp,bmp,1,0)
662 208 equemene
      CALL PGLABEL('Limites interieure &
663 208 equemene
     &exterieure du disque a l''infini','',
664 208 equemene
     &'DISQUE D''ACCRETION AUTOUR D''UN TROU NOIR')
665 208 equemene
      DO i=1,200
666 208 equemene
         x(i)=ri*cos(2.*pi*i/200.)
667 208 equemene
         y(i)=ri*cos(tho)*sin (2.*pi*i/200.)
668 208 equemene
      END DO
669 208 equemene
      CALL PGLINE(200,x,y)
670 208 equemene
      DO i=1,200
671 208 equemene
         x(i)=re*cos(2.*pi*i/200.)
672 208 equemene
         y(i)=re*cos(tho)*sin(2.*pi*i/200.)
673 208 equemene
      END DO
674 208 equemene
      CALL PGLINE(200,x,y)
675 208 equemene
      CALL PGEND
676 208 equemene
677 208 equemene
c
678 208 equemene
c DETERMINATION DES FLUX ET NOMBRE D'IMPACTS MOYENS SUR LES SPECTRES
679 208 equemene
c
680 208 equemene
681 208 equemene
      fm=0.
682 208 equemene
      nm=0.
683 208 equemene
      stp=bss/nbr
684 208 equemene
      j=0
685 208 equemene
      do i=1,nbr
686 208 equemene
         x(i)=i*stp
687 208 equemene
         fm=fm+fx(i)
688 208 equemene
         nm=nm+1.*nt(i)
689 208 equemene
         IF (nt(i).GT.0) j=j+1
690 208 equemene
      END DO
691 208 equemene
      fm=fm/j
692 208 equemene
      nm=nm/j
693 208 equemene
694 208 equemene
c
695 208 equemene
c AFFICHAGE DU SPECTRE EN FLUX
696 208 equemene
c
697 208 equemene
698 208 equemene
      DO i=1,nbr
699 208 equemene
         y(i)=fx(i)/fm
700 208 equemene
      END DO
701 208 equemene
      if (ps .EQV. .TRUE.) THEN
702 208 equemene
         CALL PGBEGIN (0,'image5.ps/ps',1,1)
703 208 equemene
      ELSE
704 208 equemene
         CALL PGBEGIN (0,'/xwindow',1,1)
705 208 equemene
      END IF
706 208 equemene
      CALL PGENV (0.,2.,0.,10.,0,1)
707 208 equemene
      CALL PGLABEL('Rapport des frequences recue/emise',
708 208 equemene
     &'Flux relatif','SPECTRE DU DISQUE')
709 208 equemene
      CALL PGLINE(200,x,y)
710 208 equemene
      CALL PGEND
711 208 equemene
712 208 equemene
c
713 208 equemene
c AFFICHAGE DU SPECTRE EN NOMBRE D'IMPACTS
714 208 equemene
c
715 208 equemene
716 208 equemene
      DO i=1,nbr
717 208 equemene
         y(i)=1.*nt(i)/nm
718 208 equemene
      END DO
719 208 equemene
      if (ps .EQV. .TRUE.) THEN
720 208 equemene
         CALL PGBEGIN (0,'image6.ps/ps',1,1)
721 208 equemene
      ELSE
722 208 equemene
         CALL PGBEGIN (0,'/xwindow',1,1)
723 208 equemene
      END IF
724 208 equemene
      CALL PGENV(0.,2.,0.,10.,0,1)
725 208 equemene
      CALL PGLABEL('Rapport des frequences recue/emise',
726 208 equemene
     &' Nombre relatif d''impacts','SPECTRE DU DISQUE')
727 208 equemene
      CALL PGLINE(200,x,y)
728 208 equemene
      CALL PGEND
729 208 equemene
730 208 equemene
      RETURN
731 208 equemene
      END
732 208 equemene
733 208 equemene
c compilation : g77 -o trou_noir trou_noir.f -lpgplot
734 208 equemene
c               -L/usr/local/lib/pgplot -lX11 -L/usr/X11/lib
735 208 equemene
c SORTIE GRAPHIQUE : -> Envoi sur l'ecran : /xwindow
736 208 equemene
c ( dans PGBEGIN ) -> Envoi en format postscript : nom image.ps/ps
737 208 equemene
738 208 equemene
739 208 equemene
740 208 equemene