Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 1310ef8d authored by Berenger Bramas's avatar Berenger Bramas
Browse files

clean merge by putting interaction counting into the define simgrid macro section

parent 48b4c296
Branches
Tags
No related merge requests found
...@@ -1143,9 +1143,7 @@ protected: ...@@ -1143,9 +1143,7 @@ protected:
// put the right codelet // put the right codelet
task->cl = &m2m_cl; task->cl = &m2m_cl;
// put args values #ifdef STARPU_SIMGRID_MLR_MODELS
char *arg_buffer;
size_t arg_buffer_size;
size_t nbChildParent = 0; size_t nbChildParent = 0;
{ {
CellContainerClass*const currentCells = tree->getCellGroup(idxLevel, idxGroup); CellContainerClass*const currentCells = tree->getCellGroup(idxLevel, idxGroup);
...@@ -1171,8 +1169,7 @@ protected: ...@@ -1171,8 +1169,7 @@ protected:
idxParentCell += 1; idxParentCell += 1;
} }
} }
#ifdef STARPU_SIMGRID_MLR_MODELS
double *parameters = (double*) calloc(1,m2m_cl.model->nparameters*sizeof(double)); double *parameters = (double*) calloc(1,m2m_cl.model->nparameters*sizeof(double));
parameters[0] = (double) idxLevel; parameters[0] = (double) idxLevel;
parameters[1] = (double) tree->getCellGroup(idxLevel,idxGroup)->getNumberOfCellsInBlock(); parameters[1] = (double) tree->getCellGroup(idxLevel,idxGroup)->getNumberOfCellsInBlock();
...@@ -1184,6 +1181,9 @@ protected: ...@@ -1184,6 +1181,9 @@ protected:
parameters[6] = (double) nbChildParent; parameters[6] = (double) nbChildParent;
#endif #endif
// put args values
char *arg_buffer;
size_t arg_buffer_size;
starpu_codelet_pack_args((void**)&arg_buffer, &arg_buffer_size, starpu_codelet_pack_args((void**)&arg_buffer, &arg_buffer_size,
STARPU_VALUE, &wrapperptr, sizeof(wrapperptr), STARPU_VALUE, &wrapperptr, sizeof(wrapperptr),
STARPU_VALUE, &idxLevel, sizeof(idxLevel), STARPU_VALUE, &idxLevel, sizeof(idxLevel),
...@@ -1225,9 +1225,7 @@ protected: ...@@ -1225,9 +1225,7 @@ protected:
// put the right codelet // put the right codelet
task->cl = &m2m_cl; task->cl = &m2m_cl;
// put args values #ifdef STARPU_SIMGRID_MLR_MODELS
char *arg_buffer;
size_t arg_buffer_size;
size_t nbChildParent = 0; size_t nbChildParent = 0;
{ {
CellContainerClass*const currentCells = tree->getCellGroup(idxLevel, idxGroup); CellContainerClass*const currentCells = tree->getCellGroup(idxLevel, idxGroup);
...@@ -1254,7 +1252,6 @@ protected: ...@@ -1254,7 +1252,6 @@ protected:
idxParentCell += 1; idxParentCell += 1;
} }
} }
#ifdef STARPU_SIMGRID_MLR_MODELS
double *parameters = (double*) calloc(1,m2m_cl.model->nparameters*sizeof(double)); double *parameters = (double*) calloc(1,m2m_cl.model->nparameters*sizeof(double));
parameters[0] = (double) idxLevel; parameters[0] = (double) idxLevel;
parameters[1] = (double) tree->getCellGroup(idxLevel,idxGroup)->getNumberOfCellsInBlock(); parameters[1] = (double) tree->getCellGroup(idxLevel,idxGroup)->getNumberOfCellsInBlock();
...@@ -1265,6 +1262,9 @@ protected: ...@@ -1265,6 +1262,9 @@ protected:
FMath::Max(tree->getCellGroup(idxLevel,idxGroup)->getStartingIndex(), tree->getCellGroup(idxLevel+1,idxSubGroup)->getStartingIndex()>>3); FMath::Max(tree->getCellGroup(idxLevel,idxGroup)->getStartingIndex(), tree->getCellGroup(idxLevel+1,idxSubGroup)->getStartingIndex()>>3);
parameters[6] = (double) nbChildParent; parameters[6] = (double) nbChildParent;
#endif #endif
// put args values
char *arg_buffer;
size_t arg_buffer_size;
starpu_codelet_pack_args((void**)&arg_buffer, &arg_buffer_size, starpu_codelet_pack_args((void**)&arg_buffer, &arg_buffer_size,
STARPU_VALUE, &wrapperptr, sizeof(wrapperptr), STARPU_VALUE, &wrapperptr, sizeof(wrapperptr),
...@@ -1309,6 +1309,7 @@ protected: ...@@ -1309,6 +1309,7 @@ protected:
if(inner){ if(inner){
FLOG( timerInBlock.tic() ); FLOG( timerInBlock.tic() );
for(int idxGroup = 0 ; idxGroup < tree->getNbCellGroupAtLevel(idxLevel) ; ++idxGroup){ for(int idxGroup = 0 ; idxGroup < tree->getNbCellGroupAtLevel(idxLevel) ; ++idxGroup){
#ifdef STARPU_SIMGRID_MLR_MODELS
size_t nbM2LInteractions = 0; size_t nbM2LInteractions = 0;
{ {
CellContainerClass*const currentCells = tree->getCellGroup(idxLevel, idxGroup); CellContainerClass*const currentCells = tree->getCellGroup(idxLevel, idxGroup);
...@@ -1332,7 +1333,6 @@ protected: ...@@ -1332,7 +1333,6 @@ protected:
} }
} }
} }
#ifdef STARPU_SIMGRID_MLR_MODELS
double *parameters = (double*) calloc(1,m2l_cl_in.model->nparameters*sizeof(double)); double *parameters = (double*) calloc(1,m2l_cl_in.model->nparameters*sizeof(double));
parameters[0] = (double) idxLevel; parameters[0] = (double) idxLevel;
parameters[1] = (double) tree->getCellGroup(idxLevel,idxGroup)->getNumberOfCellsInBlock(); parameters[1] = (double) tree->getCellGroup(idxLevel,idxGroup)->getNumberOfCellsInBlock();
...@@ -1371,6 +1371,7 @@ protected: ...@@ -1371,6 +1371,7 @@ protected:
for(int idxInteraction = 0; idxInteraction < int(externalInteractionsAllLevel[idxLevel][idxGroup].size()) ; ++idxInteraction){ for(int idxInteraction = 0; idxInteraction < int(externalInteractionsAllLevel[idxLevel][idxGroup].size()) ; ++idxInteraction){
const int interactionid = externalInteractionsAllLevel[idxLevel][idxGroup][idxInteraction].otherBlockId; const int interactionid = externalInteractionsAllLevel[idxLevel][idxGroup][idxInteraction].otherBlockId;
const std::vector<OutOfBlockInteraction>* outsideInteractions = &externalInteractionsAllLevel[idxLevel][idxGroup][idxInteraction].interactions; const std::vector<OutOfBlockInteraction>* outsideInteractions = &externalInteractionsAllLevel[idxLevel][idxGroup][idxInteraction].interactions;
#ifdef STARPU_SIMGRID_MLR_MODELS
int nbDiff0 = 0; int nbDiff0 = 0;
int nbDiff1 = 0; int nbDiff1 = 0;
{ {
...@@ -1388,8 +1389,6 @@ protected: ...@@ -1388,8 +1389,6 @@ protected:
} }
} }
} }
int mode = 1;
#ifdef STARPU_SIMGRID_MLR_MODELS
double *parameters = (double*) calloc(1,m2l_cl_inout.model->nparameters*sizeof(double)); double *parameters = (double*) calloc(1,m2l_cl_inout.model->nparameters*sizeof(double));
parameters[0] = (double) idxLevel; parameters[0] = (double) idxLevel;
parameters[1] = (double) tree->getCellGroup(idxLevel,idxGroup)->getNumberOfCellsInBlock(); parameters[1] = (double) tree->getCellGroup(idxLevel,idxGroup)->getNumberOfCellsInBlock();
...@@ -1400,6 +1399,7 @@ protected: ...@@ -1400,6 +1399,7 @@ protected:
parameters[6] = (double) nbDiff0; parameters[6] = (double) nbDiff0;
parameters[7] = (double) nbDiff1; parameters[7] = (double) nbDiff1;
#endif #endif
int mode = 1;
starpu_insert_task(&m2l_cl_inout, starpu_insert_task(&m2l_cl_inout,
STARPU_VALUE, &wrapperptr, sizeof(wrapperptr), STARPU_VALUE, &wrapperptr, sizeof(wrapperptr),
...@@ -1505,9 +1505,7 @@ protected: ...@@ -1505,9 +1505,7 @@ protected:
else{ else{
task->cl = &l2l_cl; task->cl = &l2l_cl;
} }
// put args values #ifdef STARPU_SIMGRID_MLR_MODELS
char *arg_buffer;
size_t arg_buffer_size;
size_t nbChildParent = 0; size_t nbChildParent = 0;
{ {
CellContainerClass*const currentCells = tree->getCellGroup(idxLevel, idxGroup); CellContainerClass*const currentCells = tree->getCellGroup(idxLevel, idxGroup);
...@@ -1533,7 +1531,6 @@ protected: ...@@ -1533,7 +1531,6 @@ protected:
idxParentCell += 1; idxParentCell += 1;
} }
} }
#ifdef STARPU_SIMGRID_MLR_MODELS
double *parameters = (double*) calloc(1,l2l_cl.model->nparameters*sizeof(double)); double *parameters = (double*) calloc(1,l2l_cl.model->nparameters*sizeof(double));
parameters[0] = (double) idxLevel; parameters[0] = (double) idxLevel;
parameters[1] = (double) tree->getCellGroup(idxLevel,idxGroup)->getNumberOfCellsInBlock(); parameters[1] = (double) tree->getCellGroup(idxLevel,idxGroup)->getNumberOfCellsInBlock();
...@@ -1544,7 +1541,10 @@ protected: ...@@ -1544,7 +1541,10 @@ protected:
FMath::Max(tree->getCellGroup(idxLevel,idxGroup)->getStartingIndex(), tree->getCellGroup(idxLevel+1,idxSubGroup)->getStartingIndex()>>3); FMath::Max(tree->getCellGroup(idxLevel,idxGroup)->getStartingIndex(), tree->getCellGroup(idxLevel+1,idxSubGroup)->getStartingIndex()>>3);
parameters[6] = (double) nbChildParent; parameters[6] = (double) nbChildParent;
#endif #endif
// put args values
char *arg_buffer;
size_t arg_buffer_size;
starpu_codelet_pack_args((void**)&arg_buffer, &arg_buffer_size, starpu_codelet_pack_args((void**)&arg_buffer, &arg_buffer_size,
STARPU_VALUE, &wrapperptr, sizeof(wrapperptr), STARPU_VALUE, &wrapperptr, sizeof(wrapperptr),
STARPU_VALUE, &idxLevel, sizeof(idxLevel), STARPU_VALUE, &idxLevel, sizeof(idxLevel),
...@@ -1590,9 +1590,7 @@ protected: ...@@ -1590,9 +1590,7 @@ protected:
else{ else{
task->cl = &l2l_cl; task->cl = &l2l_cl;
} }
// put args values #ifdef STARPU_SIMGRID_MLR_MODELS
char *arg_buffer;
size_t arg_buffer_size;
size_t nbChildParent = 0; size_t nbChildParent = 0;
{ {
CellContainerClass*const currentCells = tree->getCellGroup(idxLevel, idxGroup); CellContainerClass*const currentCells = tree->getCellGroup(idxLevel, idxGroup);
...@@ -1618,7 +1616,6 @@ protected: ...@@ -1618,7 +1616,6 @@ protected:
idxParentCell += 1; idxParentCell += 1;
} }
} }
#ifdef STARPU_SIMGRID_MLR_MODELS
double *parameters = (double*) calloc(1,l2l_cl.model->nparameters*sizeof(double)); double *parameters = (double*) calloc(1,l2l_cl.model->nparameters*sizeof(double));
parameters[0] = (double) idxLevel; parameters[0] = (double) idxLevel;
parameters[1] = (double) tree->getCellGroup(idxLevel,idxGroup)->getNumberOfCellsInBlock(); parameters[1] = (double) tree->getCellGroup(idxLevel,idxGroup)->getNumberOfCellsInBlock();
...@@ -1630,6 +1627,9 @@ protected: ...@@ -1630,6 +1627,9 @@ protected:
parameters[6] = (double) nbChildParent; parameters[6] = (double) nbChildParent;
#endif #endif
// put args values
char *arg_buffer;
size_t arg_buffer_size;
starpu_codelet_pack_args((void**)&arg_buffer, &arg_buffer_size, starpu_codelet_pack_args((void**)&arg_buffer, &arg_buffer_size,
STARPU_VALUE, &wrapperptr, sizeof(wrapperptr), STARPU_VALUE, &wrapperptr, sizeof(wrapperptr),
STARPU_VALUE, &idxLevel, sizeof(idxLevel), STARPU_VALUE, &idxLevel, sizeof(idxLevel),
...@@ -1673,6 +1673,7 @@ protected: ...@@ -1673,6 +1673,7 @@ protected:
for(int idxInteraction = 0; idxInteraction < int(externalInteractionsLeafLevel[idxGroup].size()) ; ++idxInteraction){ for(int idxInteraction = 0; idxInteraction < int(externalInteractionsLeafLevel[idxGroup].size()) ; ++idxInteraction){
const int interactionid = externalInteractionsLeafLevel[idxGroup][idxInteraction].otherBlockId; const int interactionid = externalInteractionsLeafLevel[idxGroup][idxInteraction].otherBlockId;
const std::vector<OutOfBlockInteraction>* outsideInteractions = &externalInteractionsLeafLevel[idxGroup][idxInteraction].interactions; const std::vector<OutOfBlockInteraction>* outsideInteractions = &externalInteractionsLeafLevel[idxGroup][idxInteraction].interactions;
#ifdef STARPU_SIMGRID_MLR_MODELS
int nbDiff0 = 0; int nbDiff0 = 0;
int nbDiff1 = 0; int nbDiff1 = 0;
size_t nbInteractions = 0; size_t nbInteractions = 0;
...@@ -1696,7 +1697,6 @@ protected: ...@@ -1696,7 +1697,6 @@ protected:
} }
} }
} }
#ifdef STARPU_SIMGRID_MLR_MODELS
double *parameters = (double*) calloc(1,p2p_cl_inout.model->nparameters*sizeof(double)); double *parameters = (double*) calloc(1,p2p_cl_inout.model->nparameters*sizeof(double));
parameters[0] = (double) tree->getParticleGroup(idxGroup)->getNumberOfLeavesInBlock(); parameters[0] = (double) tree->getParticleGroup(idxGroup)->getNumberOfLeavesInBlock();
parameters[1] = (double) tree->getParticleGroup(idxGroup)->getSizeOfInterval(); parameters[1] = (double) tree->getParticleGroup(idxGroup)->getSizeOfInterval();
...@@ -1705,9 +1705,9 @@ protected: ...@@ -1705,9 +1705,9 @@ protected:
parameters[4] = (double) tree->getParticleGroup(interactionid)->getSizeOfInterval(); parameters[4] = (double) tree->getParticleGroup(interactionid)->getSizeOfInterval();
parameters[5] = (double) tree->getParticleGroup(interactionid)->getNbParticlesInGroup(); parameters[5] = (double) tree->getParticleGroup(interactionid)->getNbParticlesInGroup();
parameters[6] = (double) outsideInteractions->size(); parameters[6] = (double) outsideInteractions->size();
parameters[7] = (double) nbDiff0; parameters[7] = (double) nbDiff0;
parameters[8] = (double) nbDiff1; parameters[8] = (double) nbDiff1;
parameters[9] = (double) nbInteractions; parameters[9] = (double) nbInteractions;
#endif #endif
starpu_insert_task(&p2p_cl_inout, starpu_insert_task(&p2p_cl_inout,
...@@ -1750,6 +1750,7 @@ protected: ...@@ -1750,6 +1750,7 @@ protected:
FLOG( timerOutBlock.tac() ); FLOG( timerOutBlock.tac() );
FLOG( timerInBlock.tic() ); FLOG( timerInBlock.tic() );
for(int idxGroup = 0 ; idxGroup < tree->getNbParticleGroup() ; ++idxGroup){ for(int idxGroup = 0 ; idxGroup < tree->getNbParticleGroup() ; ++idxGroup){
#ifdef STARPU_SIMGRID_MLR_MODELS
size_t nbInteractions = 0; size_t nbInteractions = 0;
{ {
ParticleGroupClass* containers = tree->getParticleGroup(idxGroup); ParticleGroupClass* containers = tree->getParticleGroup(idxGroup);
...@@ -1778,7 +1779,6 @@ protected: ...@@ -1778,7 +1779,6 @@ protected:
} }
} }
} }
#ifdef STARPU_SIMGRID_MLR_MODELS
double *parameters = (double*) calloc(1,p2p_cl_in.model->nparameters*sizeof(double)); double *parameters = (double*) calloc(1,p2p_cl_in.model->nparameters*sizeof(double));
parameters[0] = (double) tree->getParticleGroup(idxGroup)->getNumberOfLeavesInBlock(); parameters[0] = (double) tree->getParticleGroup(idxGroup)->getNumberOfLeavesInBlock();
parameters[1] = (double) tree->getParticleGroup(idxGroup)->getSizeOfInterval(); parameters[1] = (double) tree->getParticleGroup(idxGroup)->getSizeOfInterval();
......
...@@ -45,282 +45,10 @@ ...@@ -45,282 +45,10 @@
#define RANDOM_PARTICLES #define RANDOM_PARTICLES
template <class FReal>
class FSphericalRandomLoader : public FAbstractLoader<FReal> {
protected:
const int nbParticles; //< the number of particles
const FReal boxWidth; //< the box width
const FPoint<FReal> centerOfBox; //< The center of box
const bool nu;
const bool snu;
const bool su;
const bool elu;
const bool ssnu;
const bool elsu;
FReal rotationMatrix[3][3];
void initRotationMatrix(){
const FReal alpha = FMath::FPi<FReal>()/8;
const FReal omega = FMath::FPi<FReal>()/4;
FReal yrotation[3][3];
yrotation[0][0] = FMath::Cos(alpha); yrotation[0][1] = 0.0; yrotation[0][2] = FMath::Sin(alpha);
yrotation[1][0] = 0.0; yrotation[1][1] = 1.0; yrotation[1][2] = 0.0;
yrotation[2][0] = -FMath::Sin(alpha); yrotation[2][1] = 0.0; yrotation[2][2] = FMath::Cos(alpha);
FReal zrotation[3][3];
zrotation[0][0] = FMath::Cos(omega); zrotation[0][1] = -FMath::Sin(omega); zrotation[0][2] = 0.0;
zrotation[1][0] = FMath::Sin(omega); zrotation[1][1] = FMath::Cos(omega); zrotation[1][2] = 0.0;
zrotation[2][0] = 0.0; zrotation[2][1] = 0.0; zrotation[2][2] = 1.0;
for(int i = 0 ; i < 3 ; ++i){
for(int j = 0 ; j < 3 ; ++j){
FReal sum = 0.0;
for(int k = 0 ; k < 3 ; ++k){
sum += zrotation[i][k] * yrotation[k][j];
}
rotationMatrix[i][j] = sum;
}
}
}
public:
/**
* The constructor need the simulation data
*/
FSphericalRandomLoader(const int inNbParticles, const bool inNu = false,
const bool inSnu = false,
const bool inSu = false,
const bool inElu = false,
const bool inSsnu = false,
const bool inElsu = false)
: nbParticles(inNbParticles), boxWidth(1.0), centerOfBox(0,0,0), nu(inNu),
snu(inSnu), su(inSu), elu(inElu), ssnu(inSsnu), elsu(inElsu) {
srand48(static_cast<unsigned int>(0));
if( !nu && !snu && !su && !elu && !ssnu && !elsu ){
std::cout << "UNIFORM" << std::endl;
}
else if( snu ){
std::cout << "slightly NON UNIFORM" << std::endl;
}
else if( su ){
std::cout << "SPHERICAL UNIFORM" << std::endl;
}
else if( elu ){
std::cout << "ELLIPSE UNIFORM" << std::endl;
}
else if( elsu ){
std::cout << "ELLIPSE NON UNIFORM" << std::endl;
initRotationMatrix();
}
else if( ssnu ){
std::cout << "spherical Slightly non UNIFORM" << std::endl;
}
else{
std::cout << "NON UNIFORM" << std::endl;
}
}
/**
* Default destructor
*/
virtual ~FSphericalRandomLoader(){
}
/**
* @return true
*/
bool isOpen() const{
return true;
}
/**
* To get the number of particles from this loader
* @param the number of particles the loader can fill
*/
FSize getNumberOfParticles() const{
return FSize(this->nbParticles);
}
/**
* The center of the box
* @return box center
*/
FPoint<FReal> getCenterOfBox() const{
return this->centerOfBox;
}
/**
* The box width
* @return box width
*/
FReal getBoxWidth() const{
return this->boxWidth;
}
/**
* Fill a particle
* @warning to work with the loader, particles has to expose a setPosition method
* @param the particle to fill
*/
void fillParticle(FPoint<FReal>* partPtr){
FPoint<FReal>& inParticle = *partPtr;
if( !nu && !snu && !su && !elu && !ssnu && !elsu ){
inParticle.setPosition(
(getRandom() * boxWidth) + centerOfBox.getX() - boxWidth/2,
(getRandom() * boxWidth) + centerOfBox.getY() - boxWidth/2,
(getRandom() * boxWidth) + centerOfBox.getZ() - boxWidth/2);
}
else if( snu ){
const FReal XCenter = centerOfBox.getX();
const FReal YCenter = centerOfBox.getY();
const FReal ZCenter = centerOfBox.getZ();
const FReal rayon = FReal(0.4);
const FReal thresh = FReal(0.15);
const FReal threshDiv2 = thresh/2;
// Generate particles
const FReal theta = getRandom() * FMath::FPi<FReal>();
const FReal omega = getRandom() * FMath::FPi<FReal>() * FReal(2);
const FReal px = rayon * FMath::Cos(omega) * FMath::Sin(theta) + XCenter + thresh * getRandom() - threshDiv2;
const FReal py = rayon * FMath::Sin(omega) * FMath::Sin(theta) + YCenter + thresh * getRandom() - threshDiv2;
const FReal pz = rayon * FMath::Cos(theta) + ZCenter + thresh * getRandom() - threshDiv2;
inParticle.setPosition(px,py,pz);
}
else if( su ){
//http://www.cs.cmu.edu/~mws/rpos.html
const FReal r = 0.4;
const FReal pz = getRandom()*2.0*r - r;
const FReal omega = getRandom() * FMath::FPi<FReal>() * FReal(2);
const FReal theta = FMath::ASin(pz/r);
const FReal px = r * cos(theta) * cos(omega);
const FReal py = r * cos(theta) * sin(omega);
inParticle.setPosition(px,py,pz);
}
else if( elu ){
const FReal a = 0.4;
const FReal b = 0.15;
const FReal maxPerimeter = 2.0 * FMath::FPi<FReal>() * a;
FReal px = 0;
// rayon du cercle pour ce x
FReal subr = 0;
do {
px = (getRandom() * a * 2) - a;
subr = FMath::Sqrt( (1.0 - ((px*px)/(a*a))) * (b*b) );
} while( (getRandom()*maxPerimeter) > subr );
// on genere un angle
const FReal omega = getRandom() * FMath::FPi<FReal>() * FReal(2);
// on recupere py et pz sur le cercle
const FReal py = FMath::Cos(omega) * subr;
const FReal pz = FMath::Sin(omega) * subr;
inParticle.setPosition(px,py,pz);
}
else if( elsu ){
const FReal a = 0.5;
const FReal b = 0.1;
const FReal MaxDensity = 10.0;
const FReal maxPerimeter = 2.0 * FMath::FPi<FReal>() * a ;
FReal px = 0;
// rayon du cercle pour ce x
FReal subr = 0;
FReal coef = 1.0;
do {
//px = ( ((getRandom()*8.0+getRandom())/9.0) * a * 2) - a;
px = (getRandom() * a * 2.0) - a;
coef = FMath::Abs(px) * MaxDensity/a + 1.0;
subr = FMath::Sqrt( (1.0 - ((px*px)/(a*a))) * (b*b) );
} while( (getRandom()*maxPerimeter) > subr * coef );
// on genere un angle
const FReal omega = getRandom() * FMath::FPi<FReal>() * FReal(2);
// on recupere py et pz sur le cercle
const FReal py = FMath::Cos(omega) * subr;
const FReal pz = FMath::Sin(omega) * subr;
// inParticle.setPosition(px,py,pz);
inParticle.setPosition(px * rotationMatrix[0][0] + py * rotationMatrix[0][1]+ pz * rotationMatrix[0][2],
px * rotationMatrix[1][0] + py * rotationMatrix[1][1]+ pz * rotationMatrix[1][2],
px * rotationMatrix[2][0] + py * rotationMatrix[2][1]+ pz * rotationMatrix[2][2]);
}
else if( ssnu ){
const FReal XCenter = centerOfBox.getX();
const FReal YCenter = centerOfBox.getY();
const FReal ZCenter = centerOfBox.getZ();
const FReal rayon = FReal(0.4);
// Generate particles
/*static const int NbAcc = 2;
FReal acc = 0;
for(int idx = 0 ; idx < NbAcc ; ++idx){
acc += getRandom()/FReal(NbAcc);
}*/
FReal acc = ((getRandom()*8)+getRandom())/9;
const FReal theta = acc * FMath::FPi<FReal>();
const FReal omega = getRandom() * FMath::FPi<FReal>() * FReal(2);
const FReal px = rayon * FMath::Cos(omega) * FMath::Sin(theta) + XCenter ;
const FReal py = rayon * FMath::Sin(omega) * FMath::Sin(theta) + YCenter ;
const FReal pz = rayon * FMath::Cos(theta) + ZCenter ;
inParticle.setPosition(px,py,pz);
}
else{
const FReal XCenter = centerOfBox.getX();
const FReal YCenter = centerOfBox.getY();
const FReal ZCenter = centerOfBox.getZ();
const FReal rayon = FReal(0.4);
const FReal theta = getRandom() * FMath::FPi<FReal>();
const FReal omega = getRandom() * FMath::FPi<FReal>() * FReal(2);
const FReal px = rayon * FMath::Cos(omega) * FMath::Sin(theta) + XCenter ;
const FReal py = rayon * FMath::Sin(omega) * FMath::Sin(theta) + YCenter ;
const FReal pz = rayon * FMath::Cos(theta) + ZCenter ;
inParticle.setPosition(px,py,pz);
}
}
/** Get a random number between 0 & 1 */
FReal getRandom() const{
return FReal(drand48());
}
};
extern "C" {
int main(int argc, char* argv[]){ int main(int argc, char* argv[]){
const FParameterNames LocalOptionBlocSize { {"-bs"}, "The size of the block of the blocked tree"}; const FParameterNames LocalOptionBlocSize { {"-bs"}, "The size of the block of the blocked tree"};
const FParameterNames LocalOptionNoValidate { {"-no-validation"}, "To avoid comparing with direct computation"}; const FParameterNames LocalOptionNoValidate { {"-no-validation"}, "To avoid comparing with direct computation"};
const FParameterNames LocalOptionNonUnif { {"-nonunif"}, "To generate non uniform"}; FHelpDescribeAndExit(argc, argv, "Perform Lagrange Kernel based simulation with StarPU",
const FParameterNames LocalOptionProlateNonUnif { {"-prolate-nonunif"}, "To generate prolate non unif distribution"};
const FParameterNames LocalOptionProlate { {"-prolate"}, "To generate prolate distribution"};
const FParameterNames LocalOptionSpherical { {"-spherical"}, "To generate spherical distribution"};
const FParameterNames LocalOptionSphericalNonUnif { {"-spherical-nonunif"}, "To generate spherical non unif distribution"};
FHelpDescribeAndExit(argc, argv, "Test the blocked tree by counting the particles.",
FParameterDefinitions::OctreeHeight, FParameterDefinitions::OctreeHeight,
#ifdef RANDOM_PARTICLES #ifdef RANDOM_PARTICLES
FParameterDefinitions::NbParticles, FParameterDefinitions::NbParticles,
...@@ -328,8 +56,6 @@ int main(int argc, char* argv[]){ ...@@ -328,8 +56,6 @@ int main(int argc, char* argv[]){
FParameterDefinitions::InputFile, FParameterDefinitions::InputFile,
#endif #endif
FParameterDefinitions::NbThreads, FParameterDefinitions::NbThreads,
LocalOptionProlateNonUnif, LocalOptionProlate,
LocalOptionSpherical, LocalOptionSphericalNonUnif,LocalOptionNonUnif,
LocalOptionBlocSize, LocalOptionNoValidate); LocalOptionBlocSize, LocalOptionNoValidate);
// Initialize the types // Initialize the types
...@@ -365,14 +91,7 @@ int main(int argc, char* argv[]){ ...@@ -365,14 +91,7 @@ int main(int argc, char* argv[]){
// Load the particles // Load the particles
#ifdef RANDOM_PARTICLES #ifdef RANDOM_PARTICLES
const bool prolate = FParameters::existParameter(argc,argv,LocalOptionProlate.options); FRandomLoader<FReal> loader(FParameters::getValue(argc,argv,FParameterDefinitions::NbParticles.options, 2000), 1.0, FPoint<FReal>(0,0,0), 0);
const bool prolatenonunif = FParameters::existParameter(argc,argv,LocalOptionProlateNonUnif.options);
const bool spherical = FParameters::existParameter(argc,argv,LocalOptionSpherical.options);
const bool sphericalnonunif = FParameters::existParameter(argc,argv,LocalOptionSphericalNonUnif.options);
const bool nonunif = FParameters::existParameter(argc,argv,LocalOptionNonUnif.options);
FSphericalRandomLoader<FReal> loader(FParameters::getValue(argc,argv,FParameterDefinitions::NbParticles.options, 2000),
nonunif, false, spherical, prolate, sphericalnonunif, prolatenonunif);
#else #else
const char* const filename = FParameters::getStr(argc,argv,FParameterDefinitions::InputFile.options, "../Data/test20k.fma"); const char* const filename = FParameters::getStr(argc,argv,FParameterDefinitions::InputFile.options, "../Data/test20k.fma");
FFmaGenericLoader<FReal> loader(filename); FFmaGenericLoader<FReal> loader(filename);
...@@ -484,4 +203,4 @@ int main(int argc, char* argv[]){ ...@@ -484,4 +203,4 @@ int main(int argc, char* argv[]){
return 0; return 0;
} }
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment