MP-Gadget
5.0.1.dev1-76bc7d4726-dirty
|
#include <mpi.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <omp.h>
#include "utils.h"
#include "treewalk.h"
#include "partmanager.h"
#include "domain.h"
#include "forcetree.h"
#include <signal.h>
Go to the source code of this file.
Classes | |
struct | SendRecvBuffer |
struct | TreeWalkThreadLocals |
struct | data_nodelist |
struct | data_index |
Macros | |
#define | BREAKPOINT raise(SIGTRAP) |
#define | FACT1 0.366025403785 /* FACT1 = 0.5 * (sqrt(3)-1) */ |
#define | WATCH |
Functions | |
void | set_treewalk_params (ParameterSet *ps) |
static void | ev_init_thread (const struct TreeWalkThreadLocals local_exports, TreeWalk *const tw, LocalTreeWalk *lv) |
static void | ev_begin (TreeWalk *tw, int *active_set, const size_t size) |
static void | ev_finish (TreeWalk *tw) |
static void | ev_primary (TreeWalk *tw) |
static struct SendRecvBuffer | ev_get_remote (TreeWalk *tw) |
static void | ev_secondary (TreeWalk *tw) |
static void | ev_reduce_result (const struct SendRecvBuffer sndrcv, TreeWalk *tw) |
static int | ev_ndone (TreeWalk *tw) |
static int | ngb_treefind_threads (TreeWalkQueryBase *I, TreeWalkResultBase *O, TreeWalkNgbIterBase *iter, int startnode, LocalTreeWalk *lv) |
static int | data_index_compare (const void *a, const void *b) |
static struct TreeWalkThreadLocals | ev_alloc_threadlocals (TreeWalk *tw, const int NTask, const int NumThreads) |
static void | ev_free_threadlocals (struct TreeWalkThreadLocals local_exports) |
static void | treewalk_init_query (TreeWalk *tw, TreeWalkQueryBase *query, int i, int *NodeList) |
static void | treewalk_init_result (TreeWalk *tw, TreeWalkResultBase *result, TreeWalkQueryBase *query) |
static void | treewalk_reduce_result (TreeWalk *tw, TreeWalkResultBase *result, int i, enum TreeWalkReduceMode mode) |
static int | real_ev (struct TreeWalkThreadLocals local_exports, TreeWalk *tw, size_t *dataindexoffset, size_t *nexports, int *currentIndex) |
void | treewalk_build_queue (TreeWalk *tw, int *active_set, const size_t size, int may_have_garbage) |
int | treewalk_export_particle (LocalTreeWalk *lv, int no) |
void | treewalk_run (TreeWalk *tw, int *active_set, size_t size) |
static void | ev_communicate (void *sendbuf, void *recvbuf, size_t elsize, const struct SendRecvBuffer sndrcv, int import) |
static int | data_index_compare_by_index (const void *a, const void *b) |
int | treewalk_visit_ngbiter (TreeWalkQueryBase *I, TreeWalkResultBase *O, LocalTreeWalk *lv) |
static int | cull_node (const TreeWalkQueryBase *const I, const TreeWalkNgbIterBase *const iter, const struct NODE *const current, const double BoxSize) |
int | treewalk_visit_nolist_ngbiter (TreeWalkQueryBase *I, TreeWalkResultBase *O, LocalTreeWalk *lv) |
void | treewalk_do_hsml_loop (TreeWalk *tw, int *queue, int64_t queuesize, int update_hsml) |
double | ngb_narrow_down (double *right, double *left, const double *radius, const double *numNgb, int maxcmpt, int desnumngb, int *closeidx, double BoxSize) |
Variables | |
static int | ImportBufferBoost |
static struct data_nodelist * | DataNodeList |
static struct data_index * | DataIndexTable |
static TreeWalk * | GDB_current_ev = NULL |
#define BREAKPOINT raise(SIGTRAP) |
Definition at line 15 of file treewalk.c.
#define FACT1 0.366025403785 /* FACT1 = 0.5 * (sqrt(3)-1) */ |
Definition at line 17 of file treewalk.c.
#define WATCH |
Definition at line 112 of file treewalk.c.
|
static |
Cull a node.
Returns 1 if the node shall be opened; Returns 0 if the node has no business with this query.
Definition at line 1011 of file treewalk.c.
References NODE::center, DMAX, FACT1, NODE::hmax, TreeWalkNgbIterBase::Hsml, NODE::len, NODE::mom, NEAREST, NGB_TREEFIND_SYMMETRIC, TreeWalkQueryBase::Pos, and TreeWalkNgbIterBase::symmetric.
Referenced by ngb_treefind_threads(), and treewalk_visit_nolist_ngbiter().
|
static |
This function is used as a comparison kernel in a sort routine. It is used to group particles in the communication buffer that are going to be sent to the same CPU.
Definition at line 85 of file treewalk.c.
|
static |
Definition at line 793 of file treewalk.c.
Referenced by ev_reduce_result().
|
static |
Definition at line 118 of file treewalk.c.
References LocalTreeWalk::BunchSize, TreeWalk::BunchSize, LocalTreeWalk::DataIndexOffset, TreeWalkThreadLocals::Exportflag, LocalTreeWalk::exportflag, TreeWalkThreadLocals::Exportindex, LocalTreeWalk::exportindex, TreeWalkThreadLocals::Exportnodecount, LocalTreeWalk::exportnodecount, LocalTreeWalk::Nexport, LocalTreeWalk::ngblist, TreeWalk::Ngblist, LocalTreeWalk::Ninteractions, LocalTreeWalk::Nlist, LocalTreeWalk::Nnodesinlist, NTask, TreeWalk::NTask, part_manager_type::NumPart, PartManager, and LocalTreeWalk::tw.
Referenced by ev_primary(), and ev_secondary().
|
static |
Definition at line 161 of file treewalk.c.
References TreeWalk::BunchSize, DataIndexTable, DataNodeList, endrun(), TreeWalk::ev_label, ImportBufferBoost, message(), MPI_INT64, mymalloc, mymalloc_freebytes, TreeWalk::Ngblist, TreeWalk::Niteration, TreeWalk::NoNgblist, TreeWalk::NTask, part_manager_type::NumPart, PartManager, TreeWalk::query_type_elsize, report_memory_usage, TreeWalk::result_type_elsize, treewalk_build_queue(), TreeWalk::WorkSetSize, and TreeWalk::WorkSetStart.
Referenced by treewalk_run().
|
static |
Definition at line 692 of file treewalk.c.
References MPI_Alltoallv_sparse(), SendRecvBuffer::Recv_count, SendRecvBuffer::Recv_offset, SendRecvBuffer::Send_count, and SendRecvBuffer::Send_offset.
Referenced by ev_reduce_result().
|
static |
Definition at line 229 of file treewalk.c.
References DataIndexTable, DataNodeList, myfree, TreeWalk::Ngblist, TreeWalk::work_set_stolen_from_active, and TreeWalk::WorkSet.
Referenced by treewalk_run().
|
static |
Definition at line 154 of file treewalk.c.
References TreeWalkThreadLocals::Exportflag, TreeWalkThreadLocals::Exportindex, and ta_free.
Referenced by ev_primary(), and ev_secondary().
|
static |
Definition at line 692 of file treewalk.c.
Referenced by treewalk_run().
|
static |
Definition at line 118 of file treewalk.c.
Referenced by ev_secondary(), and real_ev().
|
static |
Definition at line 513 of file treewalk.c.
References TreeWalk::BufferFullFlag, second(), timediff(), and TreeWalk::timewait2.
Referenced by treewalk_run().
|
static |
Definition at line 466 of file treewalk.c.
References TreeWalk::BufferFullFlag, DataIndexTable, ev_alloc_threadlocals(), ev_free_threadlocals(), myfree, TreeWalk::Nexport, TreeWalk::NTask, TreeWalk::NThread, real_ev(), second(), ta_malloc, TreeWalk::timecomp1, timediff(), TreeWalk::WorkSetSize, and TreeWalk::WorkSetStart.
Referenced by treewalk_run().
|
static |
Definition at line 810 of file treewalk.c.
References data_index_compare_by_index(), TreeWalk::dataget, DataIndexTable, TreeWalk::dataresult, ev_communicate(), data_index::Index, data_index::IndexGet, myfree, mymalloc, TreeWalk::Nexport, qsort_openmp, TreeWalk::reduce, TreeWalk::result_type_elsize, second(), TreeWalk::timecommsumm2, TreeWalk::timecomp1, timediff(), TREEWALK_GHOSTS, and treewalk_reduce_result().
Referenced by treewalk_run().
|
static |
Definition at line 526 of file treewalk.c.
References TreeWalk::dataget, TreeWalk::dataresult, ev_alloc_threadlocals(), ev_free_threadlocals(), ev_init_thread(), LocalTreeWalk::mode, mymalloc, TreeWalk::Nimport, LocalTreeWalk::Nlist, TreeWalk::Nlist, LocalTreeWalk::Nnodesinlist, TreeWalk::Nnodesinlist, TreeWalk::NTask, TreeWalk::NThread, TreeWalk::query_type_elsize, TreeWalk::result_type_elsize, second(), LocalTreeWalk::target, TreeWalk::timecomp2, timediff(), treewalk_init_result(), and TreeWalk::visit.
Referenced by treewalk_run().
double ngb_narrow_down | ( | double * | right, |
double * | left, | ||
const double * | radius, | ||
const double * | numNgb, | ||
int | maxcmpt, | ||
int | desnumngb, | ||
int * | closeidx, | ||
double | BoxSize | ||
) |
Definition at line 1366 of file treewalk.c.
Referenced by sfr_wind_weight_postprocess(), and stellar_density_check_neighbours().
|
static |
Definition at line 1052 of file treewalk.c.
References ForceTree::BoxSize, NODE::ChildType, cull_node(), endrun(), NODE::f, force_get_father(), TreeWalkNgbIterBase::mask, LocalTreeWalk::mode, LocalTreeWalk::ngblist, NodeChild::noccupied, node_is_particle(), node_is_pseudo_particle(), ForceTree::Nodes, PARTICLE_NODE_TYPE, PSEUDO_NODE_TYPE, NODE::s, NODE::sibling, NodeChild::suns, LocalTreeWalk::target, NODE::TopLevel, TreeWalk::tree, treewalk_export_particle(), LocalTreeWalk::tw, and NodeChild::Types.
Referenced by treewalk_visit_ngbiter().
|
static |
Definition at line 288 of file treewalk.c.
References atomic_fetch_and_add(), TreeWalk::BufferFullFlag, LocalTreeWalk::BunchSize, LocalTreeWalk::DataIndexOffset, DataIndexTable, endrun(), ev_init_thread(), TreeWalk::evaluated, data_index::Index, message(), LocalTreeWalk::mode, LocalTreeWalk::Nexport, LocalTreeWalk::NThisParticleExport, TreeWalk::NThread, TreeWalk::query_type_elsize, TreeWalk::result_type_elsize, LocalTreeWalk::target, treewalk_init_query(), treewalk_init_result(), TREEWALK_PRIMARY, treewalk_reduce_result(), TreeWalk::visit, TreeWalk::WorkSet, TreeWalk::WorkSetSize, and TreeWalk::WorkSetStart.
Referenced by ev_primary().
void set_treewalk_params | ( | ParameterSet * | ps | ) |
Definition at line 55 of file treewalk.c.
References ImportBufferBoost, param_get_int(), and ThisTask.
Referenced by read_parameter_file().
void treewalk_build_queue | ( | TreeWalk * | tw, |
int * | active_set, | ||
const size_t | size, | ||
int | may_have_garbage | ||
) |
Definition at line 394 of file treewalk.c.
References endrun(), gadget_compact_thread_arrays(), gadget_setup_thread_arrays(), TreeWalk::haswork, mymalloc, myrealloc, TreeWalk::NThread, P, qsort_openmp, ta_free, ta_malloc, TreeWalk::work_set_stolen_from_active, TreeWalk::WorkSet, and TreeWalk::WorkSetSize.
Referenced by blackhole(), ev_begin(), and treewalk_do_hsml_loop().
void treewalk_do_hsml_loop | ( | TreeWalk * | tw, |
int * | queue, | ||
int64_t | queuesize, | ||
int | update_hsml | ||
) |
Definition at line 1254 of file treewalk.c.
References endrun(), gadget_compact_thread_arrays(), gadget_setup_thread_arrays(), TreeWalk::haswork, MAXITER, TreeWalk::maxnumngb, message(), TreeWalk::minnumngb, MPI_INT64, myfree, mymalloc, mymalloc2, myrealloc, TreeWalk::Niteration, TreeWalk::NPLeft, TreeWalk::NPRedo, P, TreeWalk::Redo_thread_alloc, ta_free, ta_malloc, treewalk_build_queue(), treewalk_run(), TreeWalk::WorkSet, and TreeWalk::WorkSetSize.
Referenced by density(), stellar_density(), and winds_find_weights().
int treewalk_export_particle | ( | LocalTreeWalk * | lv, |
int | no | ||
) |
Definition at line 567 of file treewalk.c.
References LocalTreeWalk::BunchSize, LocalTreeWalk::DataIndexOffset, DataIndexTable, DataNodeList, endrun(), LocalTreeWalk::exportflag, LocalTreeWalk::exportindex, LocalTreeWalk::exportnodecount, data_index::Index, data_index::IndexGet, ForceTree::lastnode, LocalTreeWalk::mode, LocalTreeWalk::Nexport, data_nodelist::NodeList, NODELISTLENGTH, LocalTreeWalk::NThisParticleExport, LocalTreeWalk::target, topleaf_data::Task, data_index::Task, ForceTree::TopLeaves, TreeWalk::tree, topleaf_data::treenode, and LocalTreeWalk::tw.
Referenced by force_treeev_shortrange(), ngb_treefind_threads(), and treewalk_visit_nolist_ngbiter().
|
static |
Definition at line 243 of file treewalk.c.
References TreeWalk::fill, ForceTree::firstnode, data_nodelist::NodeList, TreeWalkQueryBase::NodeList, NODELISTLENGTH, P, TreeWalkQueryBase::Pos, and TreeWalk::tree.
Referenced by real_ev().
|
static |
Definition at line 269 of file treewalk.c.
References TreeWalk::result_type_elsize.
Referenced by ev_secondary(), and real_ev().
|
static |
Definition at line 278 of file treewalk.c.
References endrun(), P, and TreeWalk::reduce.
Referenced by ev_reduce_result(), and real_ev().
void treewalk_run | ( | TreeWalk * | tw, |
int * | active_set, | ||
size_t | size | ||
) |
Definition at line 619 of file treewalk.c.
References endrun(), ev_begin(), ev_finish(), ev_get_remote(), ev_ndone(), ev_primary(), ev_reduce_result(), ev_secondary(), TreeWalk::evaluated, force_tree_allocated(), GDB_current_ev, myfree, mymalloc, TreeWalk::Nexport, TreeWalk::Nexport_sum, TreeWalk::Nexportfull, TreeWalk::Niteration, TreeWalk::NTask, TreeWalk::postprocess, TreeWalk::preprocess, TreeWalk::repeatdisallowed, second(), SendRecvBuffer::Send_count, ta_free, TreeWalk::timecomp3, timediff(), TreeWalk::tree, TreeWalk::visit, TreeWalk::WorkSet, and TreeWalk::WorkSetSize.
Referenced by blackhole(), fof_label_primary(), fof_label_secondary(), grav_short_pair(), grav_short_tree(), hydro_force(), ionize_all_part(), metal_return(), treewalk_do_hsml_loop(), and winds_and_feedback().
int treewalk_visit_ngbiter | ( | TreeWalkQueryBase * | I, |
TreeWalkResultBase * | O, | ||
LocalTreeWalk * | lv | ||
) |
Definition at line 924 of file treewalk.c.
References ForceTree::BoxSize, TreeWalkNgbIterBase::dist, DMAX, endrun(), TreeWalkNgbIterBase::Hsml, ForceTree::mask, TreeWalkNgbIterBase::mask, LocalTreeWalk::mode, NEAREST, NGB_TREEFIND_SYMMETRIC, ngb_treefind_threads(), TreeWalk::ngbiter, TreeWalk::ngbiter_type_elsize, LocalTreeWalk::ngblist, LocalTreeWalk::Ninteractions, LocalTreeWalk::Nlist, LocalTreeWalk::Nnodesinlist, TreeWalkQueryBase::NodeList, TreeWalkNgbIterBase::other, P, TreeWalkQueryBase::Pos, TreeWalkNgbIterBase::r, TreeWalkNgbIterBase::r2, TreeWalkNgbIterBase::symmetric, TreeWalk::tree, and LocalTreeWalk::tw.
Referenced by blackhole(), fof_label_primary(), grav_short_pair(), hydro_force(), ionize_all_part(), and metal_return().
int treewalk_visit_nolist_ngbiter | ( | TreeWalkQueryBase * | I, |
TreeWalkResultBase * | O, | ||
LocalTreeWalk * | lv | ||
) |
Definition at line 1143 of file treewalk.c.
References ForceTree::BoxSize, NODE::ChildType, cull_node(), TreeWalkNgbIterBase::dist, endrun(), NODE::f, TreeWalkNgbIterBase::Hsml, TreeWalkNgbIterBase::mask, LocalTreeWalk::mode, NEAREST, TreeWalk::ngbiter, TreeWalk::ngbiter_type_elsize, LocalTreeWalk::Nlist, LocalTreeWalk::Nnodesinlist, NodeChild::noccupied, TreeWalkQueryBase::NodeList, ForceTree::Nodes, TreeWalkNgbIterBase::other, P, PARTICLE_NODE_TYPE, TreeWalkQueryBase::Pos, PSEUDO_NODE_TYPE, TreeWalkNgbIterBase::r, TreeWalkNgbIterBase::r2, NODE::s, NODE::sibling, NodeChild::suns, LocalTreeWalk::target, NODE::TopLevel, TreeWalk::tree, treewalk_export_particle(), LocalTreeWalk::tw, and NodeChild::Types.
Referenced by density(), fof_label_secondary(), stellar_density(), and winds_find_weights().
|
static |
Referenced by ev_begin(), ev_finish(), ev_primary(), ev_reduce_result(), real_ev(), and treewalk_export_particle().
|
static |
the particles to be exported are grouped by task-number. This table allows the results to be disentangled again and to be assigned to the correct particle
Referenced by ev_begin(), ev_finish(), and treewalk_export_particle().
|
static |
Definition at line 115 of file treewalk.c.
Referenced by treewalk_run().
|
static |
Definition at line 36 of file treewalk.c.
Referenced by ev_begin(), and set_treewalk_params().