6 #include <gsl/gsl_math.h>
36 message(0,
"Starting pair-wise short range gravity...\n");
77 double r = iter->
base.
r;
81 if(
P[other].Mass == 0) {
82 endrun(12,
"Encountered zero mass particle during density;"
83 " We haven't implemented tracer particles and this shall not happen\n");
90 double mass =
P[other].Mass;
94 if (otherh > h) h = otherh;
99 fac = mass / (r2 * r);
102 double h_inv = 1.0 / h;
103 double h3_inv = h_inv * h_inv * h_inv;
104 double u = r * h_inv;
107 fac = mass * h3_inv * (10.666666666667 + u * u * (32.0 * u - 38.4));
110 mass * h3_inv * (21.333333333333 - 48.0 * u +
111 38.4 * u * u - 10.666666666667 * u * u * u - 0.066666666667 / (u * u * u));
113 wp = -2.8 + u * u * (5.333333333333 + u * u * (6.4 * u - 9.6));
116 -3.2 + 0.066666666667 / u + u * u * (10.666666666667 +
117 u * (-16.0 + u * (9.6 - 2.133333333333 * u)));
119 pot = mass * h_inv * wp;
124 for(d = 0; d < 3; d ++)
125 O->
Acc[d] += - dist[d] * fac;
void message(int where, const char *fmt,...)
void endrun(int where, const char *fmt,...)
int grav_apply_short_range_window(double r, double *fac, double *pot, const double cellsize)
double FORCE_SOFTENING(int i, int type)
static void grav_short_pair_ngbiter(TreeWalkQueryGravShort *I, TreeWalkResultGravShort *O, TreeWalkNgbIterGravShort *iter, LocalTreeWalk *lv)
void grav_short_pair(const ActiveParticles *act, PetaPM *pm, ForceTree *tree, double Rcut, double rho0, int NeutrinoTracer, int FastParticleType)
#define GRAV_GET_PRIV(tw)
static void grav_short_copy(int place, TreeWalkQueryGravShort *input, TreeWalk *tw)
static void grav_short_reduce(int place, TreeWalkResultGravShort *result, enum TreeWalkReduceMode mode, TreeWalk *tw)
static void grav_short_postprocess(int i, TreeWalk *tw)
int64_t NumActiveParticle
enum NgbTreeFindSymmetric symmetric
TreeWalkHasWorkFunction haswork
size_t ngbiter_type_elsize
TreeWalkProcessFunction postprocess
TreeWalkNgbIterFunction ngbiter
TreeWalkReduceResultFunction reduce
TreeWalkVisitFunction visit
size_t result_type_elsize
TreeWalkFillQueryFunction fill
int treewalk_visit_ngbiter(TreeWalkQueryBase *I, TreeWalkResultBase *O, LocalTreeWalk *lv)
void treewalk_run(TreeWalk *tw, int *active_set, size_t size)
int(* TreeWalkVisitFunction)(TreeWalkQueryBase *input, TreeWalkResultBase *output, LocalTreeWalk *lv)
void(* TreeWalkReduceResultFunction)(const int j, TreeWalkResultBase *result, const enum TreeWalkReduceMode mode, TreeWalk *tw)
void(* TreeWalkProcessFunction)(const int i, TreeWalk *tw)
void(* TreeWalkNgbIterFunction)(TreeWalkQueryBase *input, TreeWalkResultBase *output, TreeWalkNgbIterBase *iter, LocalTreeWalk *lv)
void(* TreeWalkFillQueryFunction)(const int j, TreeWalkQueryBase *query, TreeWalk *tw)
@ NGB_TREEFIND_ASYMMETRIC
#define walltime_measure(name)