Révision 218 TrouNoir/TrouNoir.py
TrouNoir.py (revision 218) | ||
---|---|---|
227 | 227 |
raie=Line; |
228 | 228 |
|
229 | 229 |
private float d,bmx,db,b,h; |
230 |
private float rp[TRACKPOINTS];
|
|
230 |
private float rp0,rpp,rps;
|
|
231 | 231 |
private float phi,thi,phd,php,nr,r; |
232 | 232 |
private int nh; |
233 | 233 |
private float zp,fp; |
... | ... | |
250 | 250 |
// impact parameter |
251 | 251 |
b=sqrt(x*x+y*y)*(float)2.e0f/(float)sizex*bmx; |
252 | 252 |
// step of impact parameter; |
253 |
// db=bmx/(float)(sizex/2); |
|
254 | 253 |
db=bmx/(float)(sizex); |
255 | 254 |
|
256 | 255 |
up=0.; |
... | ... | |
261 | 260 |
|
262 | 261 |
rungekutta(&ps,&us,&vs,pp,up,vp,h,m,b); |
263 | 262 |
|
264 |
rp[nh]=fabs(b/us); |
|
263 |
rps=fabs(b/us); |
|
264 |
rp0=rps; |
|
265 | 265 |
|
266 | 266 |
int ExitOnImpact=0; |
267 | 267 |
|
... | ... | |
271 | 271 |
pp=ps; |
272 | 272 |
up=us; |
273 | 273 |
vp=vs; |
274 |
rungekutta(&ps,&us,&vs,pp,up,vp,h,m,b); |
|
275 |
rp[nh]=fabs(b/us); |
|
276 |
ExitOnImpact = ((fmod(pp,PI)<fmod(phd,PI))&&(fmod(ps,PI)>fmod(phd,PI)))&&(rp[nh]>ri)&&(rp[nh]<re)?1:0; |
|
274 |
rungekutta(&ps,&us,&vs,pp,up,vp,h,m,b); |
|
275 |
rpp=rps; |
|
276 |
rps=fabs(b/us); |
|
277 |
ExitOnImpact = ((fmod(pp,PI)<fmod(phd,PI))&&(fmod(ps,PI)>fmod(phd,PI)))&&(rps>ri)&&(rps<re)?1:0; |
|
277 | 278 |
|
278 |
} while ((rp[nh]>=rs)&&(rp[nh]<=rp[0])&&(ExitOnImpact==0));
|
|
279 |
} while ((rps>=rs)&&(rps<=rp0)&&(ExitOnImpact==0));
|
|
279 | 280 |
|
280 | 281 |
if (ExitOnImpact==1) { |
281 |
impact(phi,rp[nh-1],b,tho,m,&zp,&fp,q,db,h,raie);
|
|
282 |
impact(phi,rpp,b,tho,m,&zp,&fp,q,db,h,raie);
|
|
282 | 283 |
} |
283 | 284 |
else |
284 | 285 |
{ |
... | ... | |
712 | 713 |
float ExternalRadius,float Angle, |
713 | 714 |
int Line) |
714 | 715 |
{ |
715 |
uint xi=(uint)blockIdx.x;
|
|
716 |
uint yi=(uint)blockIdx.y;
|
|
716 |
uint xi=(uint)(blockIdx.x*blockDim.x+threadIdx.x);
|
|
717 |
uint yi=(uint)(blockIdx.y*blockDim.y+threadIdx.y);
|
|
717 | 718 |
uint sizex=(uint)gridDim.x*blockDim.x; |
718 | 719 |
uint sizey=(uint)gridDim.y*blockDim.y; |
719 | 720 |
|
... | ... | |
731 | 732 |
raie=Line; |
732 | 733 |
|
733 | 734 |
float d,bmx,db,b,h; |
734 |
float rp[TRACKPOINTS];
|
|
735 |
float rp0,rpp,rps;
|
|
735 | 736 |
float phi,thi,phd,php,nr,r; |
736 | 737 |
int nh; |
737 | 738 |
float zp,fp; |
... | ... | |
765 | 766 |
|
766 | 767 |
rungekutta(&ps,&us,&vs,pp,up,vp,h,m,b); |
767 | 768 |
|
768 |
rp[nh]=fabs(b/us); |
|
769 |
rps=fabs(b/us); |
|
770 |
rp0=rps; |
|
769 | 771 |
|
770 | 772 |
int ExitOnImpact=0; |
771 | 773 |
|
... | ... | |
775 | 777 |
pp=ps; |
776 | 778 |
up=us; |
777 | 779 |
vp=vs; |
778 |
rungekutta(&ps,&us,&vs,pp,up,vp,h,m,b); |
|
779 |
rp[nh]=fabs(b/us); |
|
780 |
ExitOnImpact = ((fmod(pp,PI)<fmod(phd,PI))&&(fmod(ps,PI)>fmod(phd,PI)))&&(rp[nh]>ri)&&(rp[nh]<re)?1:0; |
|
780 |
rungekutta(&ps,&us,&vs,pp,up,vp,h,m,b); |
|
781 |
rpp=rps; |
|
782 |
rps=fabs(b/us); |
|
783 |
ExitOnImpact = ((fmod(pp,PI)<fmod(phd,PI))&&(fmod(ps,PI)>fmod(phd,PI)))&&(rps>ri)&&(rps<re)?1:0; |
|
781 | 784 |
|
782 |
} while ((rp[nh]>=rs)&&(rp[nh]<=rp[0])&&(ExitOnImpact==0));
|
|
785 |
} while ((rps>=rs)&&(rps<=rp0)&&(ExitOnImpact==0));
|
|
783 | 786 |
|
784 | 787 |
if (ExitOnImpact==1) { |
785 |
impact(phi,rp[nh-1],b,tho,m,&zp,&fp,q,db,h,raie);
|
|
788 |
impact(phi,rpp,b,tho,m,&zp,&fp,q,db,h,raie);
|
|
786 | 789 |
} |
787 | 790 |
else |
788 | 791 |
{ |
... | ... | |
790 | 793 |
fp=0.; |
791 | 794 |
} |
792 | 795 |
|
796 |
__syncthreads(); |
|
797 |
|
|
793 | 798 |
zImage[yi+sizex*xi]=(float)zp; |
794 | 799 |
fImage[yi+sizex*xi]=(float)fp; |
795 | 800 |
} |
... | ... | |
1165 | 1170 |
numpy.int32(Line)) |
1166 | 1171 |
CLLaunch.wait() |
1167 | 1172 |
|
1168 |
elapsed = time.time()-start_time |
|
1169 |
print("\nElapsed Time : %f" % elapsed) |
|
1173 |
compute = time.time()-start_time |
|
1170 | 1174 |
|
1171 | 1175 |
cl.enqueue_copy(queue,zImage,zImageCL).wait() |
1172 | 1176 |
cl.enqueue_copy(queue,fImage,fImageCL).wait() |
1173 | 1177 |
cl.enqueue_copy(queue,Trajectories,TrajectoriesCL).wait() |
1174 | 1178 |
cl.enqueue_copy(queue,IdLast,IdLastCL).wait() |
1179 |
elapsed = time.time()-start_time |
|
1180 |
print("\nCompute Time : %f" % compute) |
|
1181 |
print("Elapsed Time : %f\n" % elapsed) |
|
1175 | 1182 |
|
1176 | 1183 |
zMaxPosition=numpy.where(zImage[:,:]==zImage.max()) |
1177 | 1184 |
fMaxPosition=numpy.where(fImage[:,:]==fImage.max()) |
... | ... | |
1261 | 1268 |
numpy.float32(ExternalRadius), |
1262 | 1269 |
numpy.float32(Angle), |
1263 | 1270 |
numpy.int32(Line), |
1264 |
grid=(zImage.shape[0],zImage.shape[1]),block=(1,1,1))
|
|
1271 |
grid=(zImage.shape[0]/32,zImage.shape[1]/32),block=(32,32,1))
|
|
1265 | 1272 |
elif Method=='TrajectoCircle': |
1266 | 1273 |
TrajectoryCU(TrajectoriesCU,IdLastCU, |
1267 | 1274 |
numpy.uint32(Trajectories.shape[1]), |
... | ... | |
1301 | 1308 |
grid=(zImage.shape[0],zImage.shape[1],1),block=(1,1,1)) |
1302 | 1309 |
|
1303 | 1310 |
|
1304 |
elapsed = time.time()-start_time |
|
1305 |
print("\nElapsed Time : %f" % elapsed) |
|
1311 |
compute = time.time()-start_time |
|
1306 | 1312 |
|
1307 | 1313 |
cuda.memcpy_dtoh(zImage,zImageCU) |
1308 | 1314 |
cuda.memcpy_dtoh(fImage,fImageCU) |
1315 |
elapsed = time.time()-start_time |
|
1316 |
print("\nCompute Time : %f" % compute) |
|
1317 |
print("Elapsed Time : %f\n" % elapsed) |
|
1309 | 1318 |
|
1310 | 1319 |
zMaxPosition=numpy.where(zImage[:,:]==zImage.max()) |
1311 | 1320 |
fMaxPosition=numpy.where(fImage[:,:]==fImage.max()) |
1312 | 1321 |
print("Z max @(%i,%i) : %f" % (zMaxPosition[0][0],zMaxPosition[1][0],zImage.max())) |
1313 | 1322 |
print("Flux max @(%i,%i) : %f\n" % (fMaxPosition[0][0],fMaxPosition[1][0],fImage.max())) |
1314 | 1323 |
|
1324 |
Context.pop() |
|
1325 |
|
|
1315 | 1326 |
Context.detach() |
1316 | 1327 |
|
1317 | 1328 |
return(elapsed) |
Formats disponibles : Unified diff