Révision 226 TrouNoir/TrouNoir.py
TrouNoir.py (revision 226) | ||
---|---|---|
25 | 25 |
# - Luc Blanchet for his disponibility about my questions in General Relativity |
26 | 26 |
# - Pierre Lena for his passion about science and vulgarisation |
27 | 27 |
|
28 |
# If crash on OpenCL Intel implementation, disable VECTORIZER with |
|
29 |
# export CL_CONFIG_USE_VECTORIZER=0 |
|
30 |
|
|
28 | 31 |
import pyopencl as cl |
29 | 32 |
import numpy |
30 | 33 |
import time,string |
... | ... | |
38 | 41 |
PhysicsList={'Einstein':0,'Newton':1} |
39 | 42 |
return(PhysicsList) |
40 | 43 |
|
44 |
# |
|
45 |
# Blank space below to simplify debugging on OpenCL code |
|
46 |
# |
|
47 |
|
|
48 |
|
|
49 |
|
|
50 |
|
|
51 |
|
|
52 |
|
|
53 |
|
|
54 |
|
|
55 |
|
|
56 |
|
|
57 |
|
|
58 |
|
|
59 |
|
|
60 |
|
|
61 |
|
|
62 |
|
|
63 |
|
|
64 |
|
|
65 |
|
|
66 |
|
|
67 |
|
|
68 |
|
|
69 |
|
|
70 |
|
|
71 |
|
|
72 |
|
|
73 |
|
|
74 |
|
|
75 |
|
|
76 |
|
|
77 |
|
|
78 |
|
|
79 |
|
|
80 |
|
|
81 |
|
|
82 |
|
|
83 |
|
|
84 |
|
|
85 |
|
|
86 |
|
|
87 |
|
|
88 |
|
|
89 |
|
|
90 |
|
|
91 |
|
|
92 |
|
|
93 |
|
|
94 |
|
|
95 |
|
|
96 |
|
|
97 |
|
|
98 |
|
|
99 |
|
|
100 |
|
|
41 | 101 |
BlobOpenCL= """ |
42 | 102 |
|
43 | 103 |
#define PI (float)3.14159265359 |
... | ... | |
221 | 281 |
|
222 | 282 |
// Perform trajectory for each pixel, exit on hit |
223 | 283 |
|
224 |
private float m,rs,ri,re,tho;
|
|
225 |
private int q,raie;
|
|
284 |
float m,rs,ri,re,tho; |
|
285 |
int q,raie; |
|
226 | 286 |
|
227 | 287 |
m=Mass; |
228 | 288 |
rs=2.*m; |
... | ... | |
232 | 292 |
q=-2; |
233 | 293 |
raie=Line; |
234 | 294 |
|
235 |
private float d,bmx,db,b,h;
|
|
236 |
private float rp0,rpp,rps;
|
|
237 |
private float phi,thi,phd,php,nr,r;
|
|
238 |
private int nh;
|
|
239 |
private float zp,fp;
|
|
295 |
float bmx,db,b,h;
|
|
296 |
float rp0,rpp,rps; |
|
297 |
float phi,phd;
|
|
298 |
int nh; |
|
299 |
float zp=0.,fp=0.;
|
|
240 | 300 |
|
241 | 301 |
// Autosize for image |
242 | 302 |
bmx=1.25*re; |
243 |
b=0.; |
|
244 | 303 |
|
245 | 304 |
h=4.e0f*PI/(float)TRACKPOINTS; |
246 | 305 |
|
... | ... | |
265 | 324 |
nh=0; |
266 | 325 |
|
267 | 326 |
rungekutta(&ps,&us,&vs,pp,up,vp,h,m,b); |
268 |
|
|
327 |
|
|
269 | 328 |
rps=fabs(b/us); |
270 | 329 |
rp0=rps; |
271 | 330 |
|
... | ... | |
277 | 336 |
pp=ps; |
278 | 337 |
up=us; |
279 | 338 |
vp=vs; |
280 |
rungekutta(&ps,&us,&vs,pp,up,vp,h,m,b); |
|
281 | 339 |
rpp=rps; |
340 |
// rungekutta(&ps,&us,&vs,pp,up,vp,h,m,b); |
|
282 | 341 |
rps=fabs(b/us); |
283 |
ExitOnImpact = ((fmod(pp,PI)<fmod(phd,PI))&&(fmod(ps,PI)>fmod(phd,PI)))&&(rps>ri)&&(rps<re)?1:0;
|
|
342 |
ExitOnImpact = ((fmod(pp,PI)<fmod(phd,PI))&&(fmod(ps,PI)>fmod(phd,PI)))&&(rps>=ri)&&(rps<=re)?1:0;
|
|
284 | 343 |
|
285 | 344 |
} while ((rps>=rs)&&(rps<=rp0)&&(ExitOnImpact==0)); |
286 | 345 |
|
... | ... | |
313 | 372 |
|
314 | 373 |
// Perform trajectory for each pixel |
315 | 374 |
|
316 |
float m,rs,ri,re,tho;
|
|
375 |
float m,ri,re,tho; |
|
317 | 376 |
int q,raie; |
318 | 377 |
|
319 | 378 |
m=Mass; |
320 |
rs=2.*m; |
|
321 | 379 |
ri=InternalRadius; |
322 | 380 |
re=ExternalRadius; |
323 | 381 |
tho=Angle; |
324 | 382 |
q=-2; |
325 | 383 |
raie=Line; |
326 | 384 |
|
327 |
float d,bmx,db,b,h; |
|
328 |
float phi,thi,phd,php,nr,r; |
|
329 |
int nh; |
|
330 |
float zp=0,fp=0; |
|
385 |
float bmx,db,b,h; |
|
386 |
float phi,phd,php,nr,r; |
|
387 |
float zp=0.,fp=0.; |
|
331 | 388 |
|
332 | 389 |
// Autosize for image, 25% greater than external radius |
333 | 390 |
bmx=1.25*re; |
... | ... | |
405 | 462 |
|
406 | 463 |
// Perform trajectory for each pixel |
407 | 464 |
|
408 |
float m,rs,ri,re,tho;
|
|
465 |
float m,ri,re,tho; |
|
409 | 466 |
int q,raie; |
410 | 467 |
|
411 | 468 |
m=Mass; |
412 |
rs=2.*m; |
|
413 | 469 |
ri=InternalRadius; |
414 | 470 |
re=ExternalRadius; |
415 | 471 |
tho=Angle; |
416 | 472 |
raie=Line; |
417 | 473 |
|
418 | 474 |
float bmx,db,b,h; |
419 |
float phi,thi,phd; |
|
420 |
int nh; |
|
475 |
float phi,phd; |
|
421 | 476 |
float zp=0,fp=0; |
422 | 477 |
|
423 | 478 |
// Autosize for image |
Formats disponibles : Unified diff