Commit 1310ef8d authored by Berenger Bramas's avatar Berenger Bramas

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

parent 48b4c296
...@@ -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);