diff --git a/Addons/CKernelApi/Src/CScalfmmApi.h b/Addons/CKernelApi/Src/CScalfmmApi.h index 29269af8bc224be36424547034a1f40432210cb9..92b033ed4ddecfb7d3612e45e0912fd2ffcb902c 100644 --- a/Addons/CKernelApi/Src/CScalfmmApi.h +++ b/Addons/CKernelApi/Src/CScalfmmApi.h @@ -170,7 +170,7 @@ typedef void (*Callback_copy_cell)(void * userDatas, FSize size, void * memoryAl * @param userData cell user data * @param userData Kernel user data */ -typedef void (*Callback_finalize_leaf)(int level, FSize nbParts, const FSize * idxParts, long long morton_index, double center[3], +typedef void (*Callback_apply_on_leaf)(int level, FSize nbParts, const FSize * idxParts, long long morton_index, double center[3], void * cellDatas,void * leafDatas, void * userDatas); /** @@ -608,7 +608,7 @@ typedef void (*Callback_P2PSym)(void * targetLeaf, FSize nbParticles, const FSiz * @param spatial_position double[3] center of the cell * @param usercell ptr to user's cell */ -typedef void (*Callback_reset_cell)(int level, long long morton_index, int* tree_position, double* spatial_position, void * userCell, void * userData); +typedef void (*Callback_apply_on_cell)(int level, long long morton_index, int* tree_position, double* spatial_position, void * userCell, void * userData); /** * @brief Structure containing callbacks to fill in order to define @@ -667,7 +667,7 @@ void scalfmm_execute_fmm(scalfmm_handle Handle); * called after insert_parts. * @param */ -void scalfmm_apply_on_leaf(scalfmm_handle Handle, Callback_finalize_leaf function); +void scalfmm_apply_on_leaf(scalfmm_handle Handle, Callback_apply_on_leaf function); ///////////////////////////////////////////////////////////////////// @@ -689,11 +689,10 @@ void scalfmm_apply_on_leaf(scalfmm_handle Handle, Callback_finalize_leaf functio void scalfmm_dealloc_handle(scalfmm_handle handle, Callback_free_cell cellDestroyer); /** - * @brief this function reset all the data of the tree. (i e multipole - * and local development, forces and potentials) + * @brief This function apply the function param on each cell of the octree * @param Handle scalfmm_handle provided by scalfmm_init. */ -void scalfmm_reset_tree(scalfmm_handle handle, Callback_reset_cell cellReseter); +void scalfmm_apply_on_cell(scalfmm_handle handle, Callback_apply_on_cell function); ///////////////////////////////////////////////////////////////////// /////////////// Monitoring functions ///////////////// diff --git a/Addons/CKernelApi/Src/FInterEngine.hpp b/Addons/CKernelApi/Src/FInterEngine.hpp index d2165dbf17792c19e03401acdb9beb1a6277caf3..499e74e1a6fb4942799b36ccc58fd7574c601d95 100644 --- a/Addons/CKernelApi/Src/FInterEngine.hpp +++ b/Addons/CKernelApi/Src/FInterEngine.hpp @@ -716,8 +716,9 @@ public: } //Simple call to FScalFMMEngine method with good template - void reset_tree(Callback_reset_cell /*not used*/){ - FScalFMMEngine::template generic_reset_tree(octree); + void apply_on_cell(Callback_apply_on_cell /*not used*/){ + //We used this one to clean the Cehb cell in the user defined cheb kernel situation. + FScalFMMEngine::template generic_apply_on_cell(octree); } diff --git a/Addons/CKernelApi/Src/FScalFMMEngine.hpp b/Addons/CKernelApi/Src/FScalFMMEngine.hpp index 2f1e97c20db8d119380508167a7832bb5b4c8e0e..a397fb7dfebc00b758f150a96ce1f3b20cc132fe 100644 --- a/Addons/CKernelApi/Src/FScalFMMEngine.hpp +++ b/Addons/CKernelApi/Src/FScalFMMEngine.hpp @@ -173,7 +173,7 @@ public: virtual void set_potentials_npart( int nbParts, int* idxOfParticles, FReal * potentialsToRead, PartType type){ FAssertLF(0,"No tree instancied, exiting ...\n"); } - virtual void apply_on_each_leaf(Callback_finalize_leaf function){ + virtual void apply_on_each_leaf(Callback_apply_on_leaf function){ FAssertLF(0,"No tree instancied, exiting ...\n"); } @@ -771,11 +771,11 @@ public: } } - virtual void reset_tree(Callback_reset_cell cellReset){ + virtual void apply_on_cell(Callback_apply_on_cell function){ } template - void generic_reset_tree(FOctree * tree){ + void generic_apply_on_cell(FOctree * tree){ //Reset forces and potentials tree->forEachLeaf([&](LeafClass * leaf){ ContainerClass * targets = leaf->getTargets(); @@ -1057,8 +1057,8 @@ extern "C" void scalfmm_utils_interactionPosition(int interactionPosition, int* } -extern "C" void scalfmm_reset_tree(scalfmm_handle Handle, Callback_reset_cell cellReseter){ - ((ScalFmmCoreHandle * ) Handle)->engine->reset_tree(cellReseter); +extern "C" void scalfmm_apply_on_cell(scalfmm_handle Handle, Callback_apply_on_cell function){ + ((ScalFmmCoreHandle * ) Handle)->engine->apply_on_cell(function); } extern "C" void scalfmm_print_everything(scalfmm_handle Handle){ @@ -1069,7 +1069,7 @@ extern "C" void scalfmm_set_upper_limit(scalfmm_handle Handle, int upperLimit){ ((ScalFmmCoreHandle * ) Handle)->engine->set_upper_limit(upperLimit); } -extern "C" void scalfmm_apply_on_leaf(scalfmm_handle Handle, Callback_finalize_leaf function){ +extern "C" void scalfmm_apply_on_leaf(scalfmm_handle Handle, Callback_apply_on_leaf function){ ((ScalFmmCoreHandle * ) Handle)->engine->apply_on_each_leaf(function); } diff --git a/Addons/CKernelApi/Src/FScalfmmApiInit.cpp b/Addons/CKernelApi/Src/FScalfmmApiInit.cpp index b1fb350e74f860fb2d552e3cca1c952cd75d94fd..556467a0ad02a0471823022a0250fb6a44073d7a 100644 --- a/Addons/CKernelApi/Src/FScalfmmApiInit.cpp +++ b/Addons/CKernelApi/Src/FScalfmmApiInit.cpp @@ -386,7 +386,7 @@ void ChebKernel_P2P(FSize nbParticles, const FSize* particleIndexes, const FSize //Empty tree coordinate int coord[3] = {0,0,0}; - inKernelStruct->kernel[id_thread]->P2P(FTreeCoordinate(coord),tempContTarget,nullptr,tempContSources,sourcePosition,size); + inKernelStruct->kernel[id_thread]->P2P(FTreeCoordinate(coord),tempContTarget,tempContTarget,tempContSources,sourcePosition,size); //get back forces & potentials double * forcesToFill = reinterpret_cast(inKernel)->forcesComputed[id_thread]; diff --git a/Addons/CKernelApi/Src/FUserKernelDistrEngine.hpp b/Addons/CKernelApi/Src/FUserKernelDistrEngine.hpp index 7f6fbd153da7a2666fac6794fb8c3c78beed6f01..dba12ace23184eb84ebf61a35dea3d788b5049a0 100644 --- a/Addons/CKernelApi/Src/FUserKernelDistrEngine.hpp +++ b/Addons/CKernelApi/Src/FUserKernelDistrEngine.hpp @@ -637,7 +637,7 @@ public: }); } - void apply_on_each_leaf(Callback_finalize_leaf function){ + void apply_on_each_leaf(Callback_apply_on_leaf function){ if(octreeDist){ FUserKernelEngine::template generic_apply_on_each_leaf(octreeDist,kernel->getUserKernelDatas(),function); }else{ diff --git a/Addons/CKernelApi/Src/FUserKernelEngine.hpp b/Addons/CKernelApi/Src/FUserKernelEngine.hpp index 2f7d6bf8b40cda3d6c10209c79244dd197da84d6..9b267b4bca7198c344f206beb1e3f20614b57144 100644 --- a/Addons/CKernelApi/Src/FUserKernelEngine.hpp +++ b/Addons/CKernelApi/Src/FUserKernelEngine.hpp @@ -335,7 +335,7 @@ public: this->octree = new OctreeClass(TreeHeight,FMath::Min(3,TreeHeight-1),BoxWidth,FPoint(BoxCenter)); } - void reset_tree(Callback_reset_cell cellReset){ + void apply_on_cell(Callback_apply_on_cell function){ double boxwidth = octree->getBoxWidth(); //apply user function reset on each user's cell octree->forEachCellWithLevel([&](CoreCell * currCell,const int currLevel){ @@ -347,7 +347,7 @@ public: position[0] = boxCorner.getX() + currCoord.getX()*boxwidth/double(1<getContainer(),kernel->getUserKernelDatas()); + function(currLevel,currMorton,arrayCoord,position,currCell->getContainer(),kernel->getUserKernelDatas()); } }); } @@ -444,14 +444,14 @@ public: FScalFMMEngine::template generic_set_positions_npart(octree,NbPositions,idxOfParticles,X,Y,Z,type); } - virtual void apply_on_each_leaf(Callback_finalize_leaf function){ + virtual void apply_on_each_leaf(Callback_apply_on_leaf function){ generic_apply_on_each_leaf(octree,kernel->getUserKernelDatas(),function); } template void generic_apply_on_each_leaf(FOctree* octreeIn, void * kernelUserData, - Callback_finalize_leaf function){ + Callback_apply_on_leaf function){ if(octreeIn){ octreeIn->forEachCellLeaf([&](CoreCell * currCell, LeafClass * leaf){ int lvl = octreeIn->getHeight(); diff --git a/Addons/CKernelApi/Tests/testChebInterface.c b/Addons/CKernelApi/Tests/testChebInterface.c index 0d59b21f946b31c39263aaf9e525191cdad48053..5c0cda316128d91493826c80f1f9b0413649ff87 100644 --- a/Addons/CKernelApi/Tests/testChebInterface.c +++ b/Addons/CKernelApi/Tests/testChebInterface.c @@ -99,13 +99,13 @@ void on_leaf(int level, FSize nbParts, const FSize * idxParts, long long morton_ * @param number of particle (no default value) */ int main(int argc, char ** av){ - omp_set_num_threads(1); + //omp_set_num_threads(1); printf("Start\n"); if(argc<2){ printf("Use : %s nb_part (optionnal : TreeHeight) \nexiting\n",av[0]); exit(0); } - int nbPart= atoi(av[1]); + int nbPart= atoi(av[1]);; int treeHeight = 5 ; if(argc>2){ int treeHeight = atoi(av[2]); @@ -125,12 +125,9 @@ int main(int argc, char ** av){ printf("Creating Particles:\n"); FSize idxPart; for(idxPart = 0 ; idxPart < nbPart ; ++idxPart){ - particleXYZ[idxPart*3] = (random()/(double)(RAND_MAX))*boxWidth - - boxWidth/2 + boxCenter[0]; - particleXYZ[idxPart*3+1] = (random()/(double)(RAND_MAX))*boxWidth - - boxWidth/2 + boxCenter[1]; - particleXYZ[idxPart*3+2] = (random()/(double)(RAND_MAX))*boxWidth - - boxWidth/2 + boxCenter[2]; + particleXYZ[idxPart*3] = (random()/(double)(RAND_MAX))*boxWidth - boxWidth/2 + boxCenter[0]; + particleXYZ[idxPart*3+1] = (random()/(double)(RAND_MAX))*boxWidth - boxWidth/2 + boxCenter[1]; + particleXYZ[idxPart*3+2] = (random()/(double)(RAND_MAX))*boxWidth - boxWidth/2 + boxCenter[2]; physicalValues[idxPart] = 1.0; } } @@ -360,8 +357,8 @@ int main(int argc, char ** av){ free(potentialsRef); //Reset - scalfmm_reset_tree(handle,cheb_resetCell); - scalfmm_reset_tree(handle_ref,NULL); + scalfmm_apply_on_cell(handle,cheb_resetCell); + scalfmm_apply_on_cell(handle_ref,NULL); printf("Internal resets done \n");