-
ESTERIE Pierre authoredESTERIE Pierre authored
testRotationAlgorithmProc.cpp 6.03 KiB
// See LICENCE file at project root
// ==== CMAKE =====
// @FUSE_MPI
// ================
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include "Kernels/Rotation/FRotationCell.hpp"
#include "Kernels/Rotation/FRotationKernel.hpp"
#include "Components/FSimpleLeaf.hpp"
#include "Kernels/P2P/FP2PParticleContainerIndexed.hpp"
#include "Utils/FParameters.hpp"
#include "Utils/FMemUtils.hpp"
#include "Containers/FOctree.hpp"
#include "Containers/FVector.hpp"
#include "Files/FRandomLoader.hpp"
#include "Files/FMpiTreeBuilder.hpp"
#include "Core/FFmmAlgorithm.hpp"
#include "Core/FFmmAlgorithmThread.hpp"
#include "Core/FFmmAlgorithmThreadProc.hpp"
#include "Utils/FLeafBalance.hpp"
#include "Utils/FParameterNames.hpp"
/**
* This program runs the FMM Algorithm Distributed with the Rotation kernel
*/
// Simply create particles and try the kernels
int main(int argc, char* argv[])
{
FHelpDescribeAndExit(argc, argv,
"Test with MPI the chebyshev FMM and compare it to the direct computation for debugging purpose.",
FParameterDefinitions::NbParticles, FParameterDefinitions::OctreeHeight,
FParameterDefinitions::OctreeSubHeight, FParameterDefinitions::NbThreads);
typedef double FReal;
const unsigned int ORDER = 5;
typedef FP2PParticleContainerIndexed<FReal> ContainerClass;
typedef FSimpleLeaf<FReal, ContainerClass > LeafClass;
typedef FRotationCell<FReal,ORDER> CellClass;
typedef FOctree<FReal,CellClass,ContainerClass,LeafClass> OctreeClass;
typedef FRotationKernel<FReal,CellClass,ContainerClass,ORDER> KernelClass;
typedef FFmmAlgorithmThreadProc<OctreeClass,CellClass,ContainerClass,KernelClass,LeafClass> FmmClass;
FMpi app(argc,argv);
const FSize nbParticles = FParameters::getValue(argc,argv, FParameterDefinitions::NbParticles.options, 10000000ULL);
const unsigned int TreeHeight = FParameters::getValue(argc, argv, FParameterDefinitions::OctreeHeight.options, 5);
const unsigned int SubTreeHeight = FParameters::getValue(argc, argv, FParameterDefinitions::OctreeSubHeight.options, 2);
const unsigned int NbThreads = FParameters::getValue(argc, argv, FParameterDefinitions::NbThreads.options, omp_get_max_threads());
FTic time;
std::cout << ">> This executable has to be used to test Proc Rotation Algorithm. \n";
omp_set_num_threads(NbThreads);