Révision 224 TrouNoir/TrouNoir.py

TrouNoir.py (revision 224)
46 46
#define EINSTEIN 0
47 47
#define NEWTON 1
48 48

  
49
#ifdef SETTRACKPOINTS
50
#define TRACKPOINTS SETTRACKPOINTS
51
#else
49 52
#define TRACKPOINTS 2048
53
#endif
50 54

  
51 55
float atanp(float x,float y)
52 56
{
......
297 301

  
298 302
__kernel void Pixel(__global float *zImage,__global float *fImage,
299 303
                    __global float *Trajectories,__global int *IdLast,
300
                    uint ImpactParameter,uint TrackPoints,
304
                    uint ImpactParameter,
301 305
                    float Mass,float InternalRadius,
302 306
                    float ExternalRadius,float Angle,
303 307
                    int Line)
......
329 333
  bmx=1.25*re;
330 334

  
331 335
  // Angular step of integration
332
  h=4.e0f*PI/(float)TrackPoints;
336
  h=4.e0f*PI/(float)TRACKPOINTS;
333 337

  
334 338
  // Step of Impact Parameter
335 339
  db=bmx/(2.e0*(float)ImpactParameter);
......
360 364

  
361 365
      if (ni<IdLast[bi])
362 366
      {
363
        r=(Trajectories[bi*TrackPoints+ni+1]-Trajectories[bi*TrackPoints+ni])*(nr-ni*1.)+Trajectories[bi*TrackPoints+ni];
367
        r=(Trajectories[bi*TRACKPOINTS+ni+1]-Trajectories[bi*TRACKPOINTS+ni])*(nr-ni*1.)+Trajectories[bi*TRACKPOINTS+ni];
364 368
      }
365 369
      else
366 370
      {
367
        r=Trajectories[bi*TrackPoints+ni];
371
        r=Trajectories[bi*TRACKPOINTS+ni];
368 372
      }
369 373
	   
370 374
      if ((r<=re)&&(r>=ri))
......
386 390

  
387 391
__kernel void Circle(__global float *Trajectories,__global int *IdLast,
388 392
                     __global float *zImage,__global float *fImage,
389
                     int TrackPoints,
390 393
                     float Mass,float InternalRadius,
391 394
                     float ExternalRadius,float Angle,
392 395
                     int Line)
......
421 424
  bmx=1.25*re;
422 425

  
423 426
  // Angular step of integration
424
  h=4.e0f*PI/(float)TrackPoints;
427
  h=4.e0f*PI/(float)TRACKPOINTS;
425 428

  
426 429
  // impact parameter
427 430
  b=(float)bi/(float)bmaxi*bmx;
428
  db=bmx/(2.e0*(float)bmaxi);
431
  db=bmx/(2.e0f*(float)bmaxi);
429 432

  
430 433
  phi=2.*PI/(float)imx*(float)i;
431 434
  phd=atanp(cos(phi)*sin(tho),cos(tho));
......
443 446

  
444 447
     if (ni<IdLast[bi])
445 448
     {
446
        r=(Trajectories[bi*TrackPoints+ni+1]-Trajectories[bi*TrackPoints+ni])*(nr-ni*1.)+Trajectories[bi*TrackPoints+ni];
449
        r=(Trajectories[bi*TRACKPOINTS+ni+1]-Trajectories[bi*TRACKPOINTS+ni])*(nr-ni*1.)+Trajectories[bi*TRACKPOINTS+ni];
447 450
     }
448 451
     else
449 452
     {
450
	r=Trajectories[bi*TrackPoints+ni];
453
	r=Trajectories[bi*TRACKPOINTS+ni];
451 454
     }
452 455
	   
453 456
     if ((r<=re)&&(r>=ri))
......
466 469

  
467 470
}
468 471

  
469
__kernel void Trajectory(__global float *Trajectories,
470
                         __global int *IdLast,int TrackPoints,
472
__kernel void Trajectory(__global float *Trajectories,__global int *IdLast,
471 473
                         float Mass,float InternalRadius,
472 474
                         float ExternalRadius,float Angle,
473 475
                         int Line)
......
479 481

  
480 482
  // Perform trajectory for each pixel
481 483

  
484
  float m,rs,re;
485

  
486
  m=Mass;
487
  rs=2.*m;
488
  re=ExternalRadius;
489

  
490
  float bmx,b,h;
491
  int nh;
492

  
493
  // Autosize for image
494
  bmx=1.25*re;
495

  
496
  // Angular step of integration
497
  h=4.e0f*PI/(float)TRACKPOINTS;
498

  
499
  // impact parameter
500
  b=(float)bi/(float)bmaxi*bmx;
501

  
502
  float up,vp,pp,us,vs,ps;
503

  
504
  up=0.;
505
  vp=1.;
506
      
507
  pp=0.;
508
  nh=0;
509

  
510
  rungekutta(&ps,&us,&vs,pp,up,vp,h,m,b);
511
  
512
  // b versus us
513
  float bvus=fabs(b/us);
514
  float bvus0=bvus;
515
  Trajectories[bi*TRACKPOINTS+nh]=bvus;
516

  
517
  do
518
  {
519
     nh++;
520
     pp=ps;
521
     up=us;
522
     vp=vs;
523
     rungekutta(&ps,&us,&vs,pp,up,vp,h,m,b);
524
     bvus=fabs(b/us);
525
     Trajectories[bi*TRACKPOINTS+nh]=bvus;
526

  
527
  } while ((bvus>=rs)&&(bvus<=bvus0));
528

  
529
  IdLast[bi]=nh;
530

  
531
  barrier(CLK_GLOBAL_MEM_FENCE);
532
 
533
}
534

  
535
__kernel void Original(__global float *zImage,__global float *fImage,
536
                       float Mass,float InternalRadius,
537
                       float ExternalRadius,float Angle,
538
                       int Line)
539
{
540
  // Integer Impact Parameter ID 
541
  int bi=get_global_id(0);
542
  // Integer Impact Parameter Size (half of image)
543
  int bmaxi=get_global_size(0);
544

  
545
  float Trajectories[2048];
546

  
547
  // Perform trajectory for each pixel
548

  
482 549
  float m,rs,ri,re,tho;
483 550
  int raie,q;
484 551

  
......
490 557
  q=-2;
491 558
  raie=Line;
492 559

  
493
  float d,bmx,db,b,h;
494
  float phi,thi,phd,php,nr,r;
560
  float bmx,db,b,h;
495 561
  int nh;
496
  float zp,fp;
497 562

  
498 563
  // Autosize for image
499
  bmx=1.25*re;
564
  bmx=1.25e0f*re;
500 565

  
501 566
  // Angular step of integration
502
  h=4.e0f*PI/(float)TrackPoints;
567
  h=4.e0f*PI/(float)TRACKPOINTS;
503 568

  
504 569
  // impact parameter
505 570
  b=(float)bi/(float)bmaxi*bmx;
571
  db=bmx/(2.e0f*(float)bmaxi);
506 572

  
507 573
  float up,vp,pp,us,vs,ps;
508 574

  
......
517 583
  // b versus us
518 584
  float bvus=fabs(b/us);
519 585
  float bvus0=bvus;
520
  Trajectories[bi*TrackPoints+nh]=bvus;
586
  Trajectories[nh]=bvus;
521 587

  
522 588
  do
523 589
  {
......
527 593
     vp=vs;
528 594
     rungekutta(&ps,&us,&vs,pp,up,vp,h,m,b);
529 595
     bvus=fabs(b/us);
530
     Trajectories[bi*TrackPoints+nh]=bvus;
596
     Trajectories[nh]=bvus;
531 597

  
532 598
  } while ((bvus>=rs)&&(bvus<=bvus0));
533 599

  
534
  IdLast[bi]=nh;
600
  int imx=(int)(16*bi);
535 601

  
602
  for (int i=0;i<imx;i++)
603
  {
604
     float zp=0,fp=0;
605
     float phi=2.*PI/(float)imx*(float)i;
606
     float phd=atanp(cos(phi)*sin(tho),cos(tho));
607
     uint yi=(uint)((float)bi*sin(phi)+bmaxi);
608
     uint xi=(uint)((float)bi*cos(phi)+bmaxi);
609

  
610
     int HalfLap=0,ExitOnImpact=0,ni;
611
     float php,nr,r;
612

  
613
     do
614
     {
615
        php=phd+(float)HalfLap*PI;
616
        nr=php/h;
617
        ni=(int)nr;
618

  
619
        if (ni<nh)
620
        {
621
           r=(Trajectories[ni+1]-Trajectories[ni])*(nr-ni*1.)+Trajectories[ni];
622
        }
623
        else
624
        {
625
           r=Trajectories[ni];
626
        }
627
	   
628
        if ((r<=re)&&(r>=ri))
629
        {
630
           ExitOnImpact=1;
631
           impact(phi,r,b,tho,m,&zp,&fp,q,db,h,raie);
632
        }
633
	      
634
        HalfLap++;
635

  
636
     } while ((HalfLap<=2)&&(ExitOnImpact==0));
637
 
638
     zImage[yi+2*bmaxi*xi]=zp;
639
     fImage[yi+2*bmaxi*xi]=fp;
640

  
641
  }
642

  
536 643
  barrier(CLK_GLOBAL_MEM_FENCE);
537 644
 
538 645
}
......
547 654
#define EINSTEIN 0
548 655
#define NEWTON 1
549 656

  
550
#define TRACKPOINTS 2048
657
#ifdef SETTRACKPOINTS
658
#define TRACKPOINTS SETTRACKPOINTS
659
#else
660
#define TRACKPOINTS
661
#endif
551 662

  
552 663
__device__ float nothing(float x)
553 664
{
......
804 915

  
805 916
__global__ void Pixel(float *zImage,float *fImage,
806 917
                      float *Trajectories,int *IdLast,
807
                      uint ImpactParameter,uint TrackPoints,
918
                      uint ImpactParameter,
808 919
                      float Mass,float InternalRadius,
809 920
                      float ExternalRadius,float Angle,
810 921
                      int Line)
......
835 946
  bmx=1.25*re;
836 947

  
837 948
  // Angular step of integration
838
  h=4.e0f*PI/(float)TrackPoints;
949
  h=4.e0f*PI/(float)TRACKPOINTS;
839 950

  
840 951
  // Step of Impact Parameter
841 952
  db=bmx/(2.e0*(float)ImpactParameter);
......
865 976

  
866 977
      if (ni<IdLast[bi])
867 978
      {
868
        r=(Trajectories[bi*TrackPoints+ni+1]-Trajectories[bi*TrackPoints+ni])*(nr-ni*1.)+Trajectories[bi*TrackPoints+ni];
979
        r=(Trajectories[bi*TRACKPOINTS+ni+1]-Trajectories[bi*TRACKPOINTS+ni])*(nr-ni*1.)+Trajectories[bi*TRACKPOINTS+ni];
869 980
      }
870 981
      else
871 982
      {
872
        r=Trajectories[bi*TrackPoints+ni];
983
        r=Trajectories[bi*TRACKPOINTS+ni];
873 984
      }
874 985
	   
875 986
      if ((r<=re)&&(r>=ri))
......
889 1000

  
890 1001
__global__ void Circle(float *Trajectories,int *IdLast,
891 1002
                       float *zImage,float *fImage,
892
                       int TrackPoints,
893 1003
                       float Mass,float InternalRadius,
894 1004
                       float ExternalRadius,float Angle,
895 1005
                       int Line)
......
924 1034
  bmx=1.25*re;
925 1035

  
926 1036
  // Angular step of integration
927
  h=4.e0f*PI/(float)TrackPoints;
1037
  h=4.e0f*PI/(float)TRACKPOINTS;
928 1038

  
929 1039
  // impact parameter
930 1040
  b=(float)bi/(float)bmaxi*bmx;
......
946 1056

  
947 1057
     if (ni<IdLast[bi])
948 1058
     {
949
        r=(Trajectories[bi*TrackPoints+ni+1]-Trajectories[bi*TrackPoints+ni])*(nr-ni*1.)+Trajectories[bi*TrackPoints+ni];
1059
        r=(Trajectories[bi*TRACKPOINTS+ni+1]-Trajectories[bi*TRACKPOINTS+ni])*(nr-ni*1.)+Trajectories[bi*TRACKPOINTS+ni];
950 1060
     }
951 1061
     else
952 1062
     {
953
	r=Trajectories[bi*TrackPoints+ni];
1063
	r=Trajectories[bi*TRACKPOINTS+ni];
954 1064
     }
955 1065
	   
956 1066
     if ((r<=re)&&(r>=ri))
......
967 1077

  
968 1078
}
969 1079

  
970
__global__ void Trajectory(float *Trajectories,
971
                           int *IdLast,int TrackPoints,
1080
__global__ void Trajectory(float *Trajectories,int *IdLast,
972 1081
                           float Mass,float InternalRadius,
973 1082
                           float ExternalRadius,float Angle,
974 1083
                           int Line)
......
1000 1109
  bmx=1.25*re;
1001 1110

  
1002 1111
  // Angular step of integration
1003
  h=4.e0f*PI/(float)TrackPoints;
1112
  h=4.e0f*PI/(float)TRACKPOINTS;
1004 1113

  
1005 1114
  // impact parameter
1006 1115
  b=(float)bi/(float)bmaxi*bmx;
......
1018 1127
  // b versus us
1019 1128
  float bvus=fabs(b/us);
1020 1129
  float bvus0=bvus;
1021
  Trajectories[bi*TrackPoints+nh]=bvus;
1130
  Trajectories[bi*TRACKPOINTS+nh]=bvus;
1022 1131

  
1023 1132
  do
1024 1133
  {
......
1028 1137
     vp=vs;
1029 1138
     rungekutta(&ps,&us,&vs,pp,up,vp,h,m,b);
1030 1139
     bvus=fabs(b/us);
1031
     Trajectories[bi*TrackPoints+nh]=bvus;
1140
     Trajectories[bi*TRACKPOINTS+nh]=bvus;
1032 1141

  
1033 1142
  } while ((bvus>=rs)&&(bvus<=bvus0));
1034 1143

  
1035 1144
  IdLast[bi]=nh;
1036 1145

  
1037 1146
}
1147

  
1148
__global__ void Original(float *zImage,float *fImage,
1149
                         float Mass,float InternalRadius,
1150
                         float ExternalRadius,float Angle,
1151
                         int Line)
1152
{
1153
  // Integer Impact Parameter ID 
1154
  int bi=blockIdx.x*blockDim.x+threadIdx.x;
1155

  
1156
  // Integer Impact Parameter Size (half of image)
1157
  int bmaxi=gridDim.x*blockDim.x;
1158

  
1159
  float Trajectories[2048];
1160

  
1161
  // Perform trajectory for each pixel
1162

  
1163
  float m,rs,ri,re,tho;
1164
  int raie,q;
1165

  
1166
  m=Mass;
1167
  rs=2.*m;
1168
  ri=InternalRadius;
1169
  re=ExternalRadius;
1170
  tho=Angle;
1171
  q=-2;
1172
  raie=Line;
1173

  
1174
  float bmx,db,b,h;
1175
  int nh;
1176

  
1177
  // Autosize for image
1178
  bmx=1.25e0f*re;
1179

  
1180
  // Angular step of integration
1181
  h=4.e0f*PI/(float)TRACKPOINTS;
1182

  
1183
  // impact parameter
1184
  b=(float)bi/(float)bmaxi*bmx;
1185
  db=bmx/(2.e0f*(float)bmaxi);
1186

  
1187
  float up,vp,pp,us,vs,ps;
1188

  
1189
  up=0.;
1190
  vp=1.;
1191
      
1192
  pp=0.;
1193
  nh=0;
1194

  
1195
  rungekutta(&ps,&us,&vs,pp,up,vp,h,m,b);
1196
  
1197
  // b versus us
1198
  float bvus=fabs(b/us);
1199
  float bvus0=bvus;
1200
  Trajectories[nh]=bvus;
1201

  
1202
  do
1203
  {
1204
     nh++;
1205
     pp=ps;
1206
     up=us;
1207
     vp=vs;
1208
     rungekutta(&ps,&us,&vs,pp,up,vp,h,m,b);
1209
     bvus=fabs(b/us);
1210
     Trajectories[nh]=bvus;
1211

  
1212
  } while ((bvus>=rs)&&(bvus<=bvus0));
1213

  
1214
  int imx=(int)(16*bi);
1215

  
1216
  for (int i=0;i<imx;i++)
1217
  {
1218
     float zp=0,fp=0;
1219
     float phi=2.*PI/(float)imx*(float)i;
1220
     float phd=atanp(cos(phi)*sin(tho),cos(tho));
1221
     uint yi=(uint)((float)bi*sin(phi)+bmaxi);
1222
     uint xi=(uint)((float)bi*cos(phi)+bmaxi);
1223

  
1224
     int HalfLap=0,ExitOnImpact=0,ni;
1225
     float php,nr,r;
1226

  
1227
     do
1228
     {
1229
        php=phd+(float)HalfLap*PI;
1230
        nr=php/h;
1231
        ni=(int)nr;
1232

  
1233
        if (ni<nh)
1234
        {
1235
           r=(Trajectories[ni+1]-Trajectories[ni])*(nr-ni*1.)+Trajectories[ni];
1236
        }
1237
        else
1238
        {
1239
           r=Trajectories[ni];
1240
        }
1241
	   
1242
        if ((r<=re)&&(r>=ri))
1243
        {
1244
           ExitOnImpact=1;
1245
           impact(phi,r,b,tho,m,&zp,&fp,q,db,h,raie);
1246
        }
1247
	      
1248
        HalfLap++;
1249

  
1250
     } while ((HalfLap<=2)&&(ExitOnImpact==0));
1251

  
1252
   __syncthreads();
1253

  
1254
   zImage[yi+2*bmaxi*xi]=zp;
1255
   fImage[yi+2*bmaxi*xi]=fp;
1256

  
1257
  }
1258
 
1259
}
1038 1260
"""
1039 1261
    return(BlobCUDA)
1040 1262
    
......
1110 1332
    
1111 1333
    #    BlackHoleCL = cl.Program(ctx,KERNEL_CODE.substitute(kernel_params)).build()
1112 1334

  
1113
    BuildOptions="-cl-mad-enable -DPHYSICS=%i " % (PhysicsList[Physics])
1335
    BuildOptions="-cl-mad-enable -DPHYSICS=%i -DSETTRACKPOINTS=%i " % (PhysicsList[Physics],InputCL['TrackPoints'])
1114 1336

  
1115 1337
    BlackHoleCL = cl.Program(ctx,BlobOpenCL).build(options = BuildOptions)
1116 1338
    
......
1133 1355
                                       numpy.float32(Angle),
1134 1356
                                       numpy.int32(Line))
1135 1357
        CLLaunch.wait()
1358
    elif Method=='Original':
1359
        CLLaunch=BlackHoleCL.Original(queue,(zImage.shape[0]/2,),
1360
                                      None,zImageCL,fImageCL,
1361
                                      numpy.float32(Mass),
1362
                                      numpy.float32(InternalRadius),
1363
                                      numpy.float32(ExternalRadius),
1364
                                      numpy.float32(Angle),
1365
                                      numpy.int32(Line))
1366
        CLLaunch.wait()
1136 1367
    elif Method=='TrajectoCircle':
1137 1368
        CLLaunch=BlackHoleCL.Trajectory(queue,(Trajectories.shape[0],),
1138 1369
                                        None,TrajectoriesCL,IdLastCL,
1139
                                        numpy.uint32(Trajectories.shape[1]),
1140 1370
                                        numpy.float32(Mass),
1141 1371
                                        numpy.float32(InternalRadius),
1142 1372
                                        numpy.float32(ExternalRadius),
......
1147 1377
                                           zImage.shape[0]*4),None,
1148 1378
                                    TrajectoriesCL,IdLastCL,
1149 1379
                                    zImageCL,fImageCL,
1150
                                    numpy.uint32(Trajectories.shape[1]),
1151 1380
                                    numpy.float32(Mass),
1152 1381
                                    numpy.float32(InternalRadius),
1153 1382
                                    numpy.float32(ExternalRadius),
......
1157 1386
    else:
1158 1387
        CLLaunch=BlackHoleCL.Trajectory(queue,(Trajectories.shape[0],),
1159 1388
                                        None,TrajectoriesCL,IdLastCL,
1160
                                        numpy.uint32(Trajectories.shape[1]),
1161 1389
                                        numpy.float32(Mass),
1162 1390
                                        numpy.float32(InternalRadius),
1163 1391
                                        numpy.float32(ExternalRadius),
......
1168 1396
                                          zImage.shape[1]),None,
1169 1397
                                   zImageCL,fImageCL,TrajectoriesCL,IdLastCL,
1170 1398
                                   numpy.uint32(Trajectories.shape[0]),
1171
                                   numpy.uint32(Trajectories.shape[1]),
1172 1399
                                        numpy.float32(Mass),
1173 1400
                                        numpy.float32(InternalRadius),
1174 1401
                                        numpy.float32(ExternalRadius),
......
1246 1473
    Context=XPU.make_context()
1247 1474

  
1248 1475
    try:
1249
        mod = SourceModule(KernelCodeCuda(),options=['--compiler-options','-DPHYSICS=%i' % (PhysicsList[Physics])])
1476
        mod = SourceModule(KernelCodeCuda(),options=['--compiler-options','-DPHYSICS=%i -DSETTRACKPOINTS=%i' % (PhysicsList[Physics],TrackPoints)])
1250 1477
        print("Compilation seems to be OK")
1251 1478
    except:
1252 1479
        print("Compilation seems to break")
1253 1480

  
1254 1481
    EachPixelCU=mod.get_function("EachPixel")
1482
    OriginalCU=mod.get_function("Original")
1255 1483
    TrajectoryCU=mod.get_function("Trajectory")
1256 1484
    PixelCU=mod.get_function("Pixel")
1257 1485
    CircleCU=mod.get_function("Circle")
......
1276 1504
                    numpy.int32(Line),
1277 1505
                    grid=(zImage.shape[0]/32,zImage.shape[1]/32),
1278 1506
                    block=(32,32,1))
1507
    elif Method=='Original':
1508
        OriginalCU(zImageCU,fImageCU,
1509
                   numpy.float32(Mass),
1510
                   numpy.float32(InternalRadius),
1511
                   numpy.float32(ExternalRadius),
1512
                   numpy.float32(Angle),
1513
                   numpy.int32(Line),
1514
                   grid=(zImage.shape[0]/32/2,1),
1515
                   block=(32,1,1))
1279 1516
    elif Method=='TrajectoCircle':
1280 1517
        TrajectoryCU(TrajectoriesCU,IdLastCU,
1281
                     numpy.uint32(Trajectories.shape[1]),
1282 1518
                     numpy.float32(Mass),
1283 1519
                     numpy.float32(InternalRadius),
1284 1520
                     numpy.float32(ExternalRadius),
......
1288 1524
                     block=(32,1,1))
1289 1525
        
1290 1526
        CircleCU(TrajectoriesCU,IdLastCU,zImageCU,fImageCU,
1291
                 numpy.uint32(Trajectories.shape[1]),
1292 1527
                 numpy.float32(Mass),
1293 1528
                 numpy.float32(InternalRadius),
1294 1529
                 numpy.float32(ExternalRadius),
......
1298 1533
                 block=(32,32,1))
1299 1534
    else:
1300 1535
        TrajectoryCU(TrajectoriesCU,IdLastCU,
1301
                     numpy.uint32(Trajectories.shape[1]),
1302 1536
                     numpy.float32(Mass),
1303 1537
                     numpy.float32(InternalRadius),
1304 1538
                     numpy.float32(ExternalRadius),
......
1309 1543
        
1310 1544
        PixelCU(zImageCU,fImageCU,TrajectoriesCU,IdLastCU,
1311 1545
                numpy.uint32(Trajectories.shape[0]),
1312
                numpy.uint32(Trajectories.shape[1]),
1313 1546
                numpy.float32(Mass),
1314 1547
                numpy.float32(InternalRadius),
1315 1548
                numpy.float32(ExternalRadius),
......
1368 1601
    # No output as image
1369 1602
    NoImage = False
1370 1603
    
1371
    HowToUse='%s -h [Help] -b [BlackBodyEmission] -n [NoImage] -p <Einstein/Newton> -s <SizeInPixels> -m <Mass> -i <DiscInternalRadius> -x <DiscExternalRadius> -a <AngleAboveDisc> -d <DeviceId> -c <Greyscale/Red2Yellow> -g <CUDA/OpenCL> -t <EachPixel/TrajectoCircle/TrajectoPixel> -v <FP32/FP64>'
1604
    HowToUse='%s -h [Help] -b [BlackBodyEmission] -n [NoImage] -p <Einstein/Newton> -s <SizeInPixels> -m <Mass> -i <DiscInternalRadius> -x <DiscExternalRadius> -a <AngleAboveDisc> -d <DeviceId> -c <Greyscale/Red2Yellow> -g <CUDA/OpenCL> -t <EachPixel/TrajectoCircle/TrajectoPixel/Original> -v <FP32/FP64>'
1372 1605

  
1373 1606
    try:
1374 1607
        opts, args = getopt.getopt(sys.argv[1:],"hbns:m:i:x:a:d:g:v:t:c:p:",["blackbody","noimage","camera","size=","mass=","internal=","external=","angle=","device=","gpustyle=","variabletype=","method=","colors=","physics="])

Formats disponibles : Unified diff