00001 #ifdef GTHDF5
00002 template<class T,unsigned int Dim> void DataSink<T,Dim>::savePhaseSpaceData()
00003 {
00004 T *x=(double*)malloc(beam_m->getLocalNum()*sizeof(double));
00005 T *y=(double*)malloc(beam_m->getLocalNum()*sizeof(double));
00006 T *z=(double*)malloc(beam_m->getLocalNum()*sizeof(double));
00007 T *px=(double*)malloc(beam_m->getLocalNum()*sizeof(double));
00008 T *py=(double*)malloc(beam_m->getLocalNum()*sizeof(double));
00009 T *pz=(double*)malloc(beam_m->getLocalNum()*sizeof(double));
00010 long long int *id=(long long int*)malloc(beam_m->getLocalNum()*sizeof(long long));
00011
00012 double actPos = beam_m->getActSPos();
00013 double structLenght = beam_m->getMaxZ();
00014 Vector_t org = beam_m->getOrigin();
00015 Vector_t maxX = beam_m->getRmax();
00016 Vector_t minX = beam_m->getRmin();
00017 Vector_t maxP = beam_m->getPmax();
00018 Vector_t minP = beam_m->getPmin();
00019 unsigned long protons = beam_m->getNumberOfProtons();
00020 unsigned long electrons = beam_m->getNumberOfElectrons();
00021 Vector_t centroid = beam_m->getCentroid();
00022 unsigned nTot = beam_m->getTotalNum();
00023 for (long long i=0; i<beam_m->getLocalNum();i++) {
00024 x[i] = beam_m->R[i](0);
00025 y[i] = beam_m->R[i](1);
00026 z[i] = beam_m->R[i](2);
00027 px[i] = beam_m->P[i](0);
00028 py[i] = beam_m->P[i](1);
00029 pz[i] = beam_m->P[i](2);
00030 if (i< (electrons-1))
00031 id[i] = beam_m->ID[i]; else
00032 id[i] = -1*(long int)beam_m->ID[i];
00033 }
00034 H5PartSetStep(file_m,idx_m);
00035 H5PartSetNumParticles(file_m,beam_m->getLocalNum());
00036
00037 H5PartWriteDataFloat64(file_m,"x",x);
00038 H5PartWriteDataFloat64(file_m,"y",y);
00039 H5PartWriteDataFloat64(file_m,"z",z);
00040 H5PartWriteDataFloat64(file_m,"px",px);
00041 H5PartWriteDataFloat64(file_m,"py",py);
00042 H5PartWriteDataFloat64(file_m,"pz",pz);
00043 H5PartWriteDataInt64(file_m,"id",id);
00044 long long step = idx_m;
00045 H5PartWriteStepAttrib(file_m,"Step",H5T_NATIVE_INT64,&step,1);
00046
00047
00048
00049 H5PartWriteAttrib(file_m,"Spos",H5T_NATIVE_DOUBLE,&actPos,1);
00050 H5PartWriteAttrib(file_m,"structLen",H5T_NATIVE_DOUBLE,&structLenght,1);
00051
00052 H5PartWriteAttrib(file_m,"org",H5T_NATIVE_DOUBLE,&org,3);
00053 H5PartWriteAttrib(file_m,"maxX",H5T_NATIVE_DOUBLE,&maxX,3);
00054 H5PartWriteAttrib(file_m,"minX",H5T_NATIVE_DOUBLE,&minX,3);
00055 H5PartWriteAttrib(file_m,"maxP",H5T_NATIVE_DOUBLE,&maxP,3);
00056 H5PartWriteAttrib(file_m,"minP",H5T_NATIVE_DOUBLE,&minP,3);
00057 H5PartWriteAttrib(file_m,"centroid",H5T_NATIVE_DOUBLE,¢roid,3);
00058 delete x;
00059 delete y;
00060 delete z;
00061 delete id;
00062 idx_m++;
00063 }