MP-Gadget  5.0.1.dev1-76bc7d4726-dirty
Functions | Variables
densitykernel.c File Reference
#include <math.h>
#include "densitykernel.h"
#include "utils/endrun.h"
Include dependency graph for densitykernel.c:

Go to the source code of this file.

Functions

double wk_cs (DensityKernel *kernel, double q)
 
double dwk_cs (DensityKernel *kernel, double q)
 
static double wk_qus (DensityKernel *kernel, double q)
 
static double dwk_qus (DensityKernel *kernel, double q)
 
static double wk_qs (DensityKernel *kernel, double q)
 
static double dwk_qs (DensityKernel *kernel, double q)
 
double density_kernel_dwk (DensityKernel *kernel, double u)
 
double density_kernel_wk (DensityKernel *kernel, double u)
 
double density_kernel_desnumngb (DensityKernel *kernel, double eta)
 
double density_kernel_volume (DensityKernel *kernel)
 
static void density_kernel_init_with_type (DensityKernel *kernel, int type, double H)
 
void density_kernel_init (DensityKernel *kernel, double H, enum DensityKernelType type)
 

Variables

struct {
   const char *   name
 
   double(*   wk )(DensityKernel *kernel, double q)
 
   double(*   dwk )(DensityKernel *kernel, double q)
 
   double   support
 
   double   sigma [3]
 
KERNELS []
 

Function Documentation

◆ density_kernel_desnumngb()

double density_kernel_desnumngb ( DensityKernel kernel,
double  eta 
)

Definition at line 124 of file densitykernel.c.

125 {
126  /* this returns the expected number of ngb in for given sph resolution
127  * deseta */
128  /* See Price: arxiv 1012.1885. eq 12 */
129  double support = kernel->support;
130  return NORM_COEFF * pow(support * eta, NUMDIMS);
131 }
double support
Definition: densitykernel.c:96
#define NORM_COEFF
Definition: densitykernel.h:6
#define NUMDIMS
Definition: densitykernel.h:5
static double kernel(double loga, void *params)
Definition: lightcone.c:59

References kernel(), NORM_COEFF, NUMDIMS, and support.

Referenced by GetDensityKernelType().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ density_kernel_dwk()

double density_kernel_dwk ( DensityKernel kernel,
double  u 
)

Definition at line 108 of file densitykernel.c.

109 {
110  double support = KERNELS[kernel->type].support;
111  return kernel->dWknorm *
112  KERNELS[kernel->type].dwk(kernel, u * support);
113 }
static struct @3 KERNELS[]

References kernel(), KERNELS, and support.

Referenced by density_ngbiter(), and hydro_ngbiter().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ density_kernel_init()

void density_kernel_init ( DensityKernel kernel,
double  H,
enum DensityKernelType  type 
)

Definition at line 157 of file densitykernel.c.

158 {
159  int t = -1;
160  if(type == DENSITY_KERNEL_CUBIC_SPLINE) {
161  t = 0;
162  } else
163  if(type == DENSITY_KERNEL_QUINTIC_SPLINE) {
164  t = 1;
165  } else
166  if(type == DENSITY_KERNEL_QUARTIC_SPLINE) {
167  t = 2;
168  } else {
169  endrun(1, "Density Kernel type is unknown\n");
170  }
172 }
static void density_kernel_init_with_type(DensityKernel *kernel, int type, double H)
@ DENSITY_KERNEL_CUBIC_SPLINE
Definition: densitykernel.h:18
@ DENSITY_KERNEL_QUINTIC_SPLINE
Definition: densitykernel.h:19
@ DENSITY_KERNEL_QUARTIC_SPLINE
Definition: densitykernel.h:20
void endrun(int where, const char *fmt,...)
Definition: endrun.c:147

References DENSITY_KERNEL_CUBIC_SPLINE, density_kernel_init_with_type(), DENSITY_KERNEL_QUARTIC_SPLINE, DENSITY_KERNEL_QUINTIC_SPLINE, endrun(), and kernel().

Referenced by blackhole_accretion_ngbiter(), blackhole_dynfric_ngbiter(), blackhole_feedback_ngbiter(), density_ngbiter(), GetDensityKernelType(), hydro_ngbiter(), metal_return_ngbiter(), set_density_params(), and stellar_density_ngbiter().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ density_kernel_init_with_type()

static void density_kernel_init_with_type ( DensityKernel kernel,
int  type,
double  H 
)
static

Definition at line 140 of file densitykernel.c.

141 {
142  kernel->H = H;
143  kernel->HH = H * H;
144  kernel->Hinv = 1. / H;
145  kernel->type = type;
146  kernel->name = KERNELS[kernel->type].name;
147  kernel->support = KERNELS[kernel->type].support;
148 
149  double sigma = KERNELS[kernel->type].sigma[NUMDIMS - 1];
150  double hinv = kernel->Hinv * kernel->support;
151 
152  kernel->Wknorm = sigma * pow(hinv, NUMDIMS);
153  kernel->dWknorm = kernel->Wknorm * hinv;
154 }
double sigma[3]
Definition: densitykernel.c:97

References kernel(), KERNELS, NUMDIMS, and sigma.

Referenced by density_kernel_init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ density_kernel_volume()

double density_kernel_volume ( DensityKernel kernel)

Definition at line 134 of file densitykernel.c.

135 {
136  return NORM_COEFF * pow(kernel->H, NUMDIMS);
137 }

References kernel(), NORM_COEFF, and NUMDIMS.

Referenced by density_ngbiter(), and stellar_density_ngbiter().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ density_kernel_wk()

double density_kernel_wk ( DensityKernel kernel,
double  u 
)

Definition at line 116 of file densitykernel.c.

117 {
118  double support = KERNELS[kernel->type].support;
119  return kernel->Wknorm *
120  KERNELS[kernel->type].wk(kernel, u * support);
121 }

References kernel(), KERNELS, and support.

Referenced by blackhole_accretion_ngbiter(), blackhole_dynfric_ngbiter(), blackhole_feedback_ngbiter(), density_ngbiter(), metal_return_ngbiter(), and stellar_density_ngbiter().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dwk_cs()

double dwk_cs ( DensityKernel kernel,
double  q 
)

Definition at line 33 of file densitykernel.c.

33  {
34  if(q < 1.0) {
35  return - 0.25 * 3 * pow(2 - q, 2) + 3 * pow(1 - q, 2);
36  }
37  if(q < 2.0) {
38  return -0.25 * 3 * pow(2 - q, 2);
39  }
40  return 0.0;
41 }

◆ dwk_qs()

static double dwk_qs ( DensityKernel kernel,
double  q 
)
static

Definition at line 78 of file densitykernel.c.

78  {
79  if(q < 1.0) {
80  return -5 * pow(3 - q, 4) + 30 * pow(2 - q, 4)
81  - 75 * pow (1 - q, 4);
82  }
83  if(q < 2.0) {
84  return -5 * pow(3 - q, 4) + 30 * pow(2 - q, 4);
85  }
86  if(q < 3.0) {
87  return -5 * pow(3 - q, 4);
88  }
89  return 0.0;
90 }

◆ dwk_qus()

static double dwk_qus ( DensityKernel kernel,
double  q 
)
static

Definition at line 54 of file densitykernel.c.

54  {
55  if(q < 0.5) {
56  return -4 * pow(2.5 - q, 3) + 20 * pow(1.5 - q, 3) - 40 * pow(0.5 - q, 3);
57  }
58  if(q < 1.5) {
59  return -4 * pow(2.5 - q, 3) + 20 * pow(1.5 - q, 3);
60  }
61  if(q < 2.5) {
62  return -4 * pow(2.5 - q, 3);
63  }
64  return 0.0;
65 }

◆ wk_cs()

double wk_cs ( DensityKernel kernel,
double  q 
)

We use Price 1012.1885 kernels sml in Gadget is the support big H in Price,

u = r / H q = r / h

luckily, wk = 1 / H ** 3 W_volker(u) = 1 / h ** 3 W_price(q) and dwk = 1 / H ** 4 dw_volker/du = 1 / h ** 4 dw_price/dq

wk_xx is Price eq 6 , 7, 8, without sigma

the function density_kernel_wk and _dwk takes u to maintain compatibility with volker's gadget.

Definition at line 24 of file densitykernel.c.

24  {
25  if(q < 1.0) {
26  return 0.25 * pow(2 - q, 3) - pow(1 - q, 3);
27  }
28  if(q < 2.0) {
29  return 0.25 * pow(2 - q, 3);
30  }
31  return 0.0;
32 }

◆ wk_qs()

static double wk_qs ( DensityKernel kernel,
double  q 
)
static

Definition at line 66 of file densitykernel.c.

66  {
67  if(q < 1.0) {
68  return pow(3 - q, 5) - 6 * pow(2 - q, 5) + 15 * pow(1 - q, 5);
69  }
70  if(q < 2.0) {
71  return pow(3 - q, 5)- 6 * pow(2 - q, 5);
72  }
73  if(q < 3.0) {
74  return pow(3 - q, 5);
75  }
76  return 0.0;
77 }

◆ wk_qus()

static double wk_qus ( DensityKernel kernel,
double  q 
)
static

Definition at line 42 of file densitykernel.c.

42  {
43  if(q < 0.5) {
44  return pow(2.5 - q, 4) - 5 * pow(1.5 - q, 4) + 10 * pow(0.5 - q, 4);
45  }
46  if(q < 1.5) {
47  return pow(2.5 - q, 4) - 5 * pow(1.5 - q, 4);
48  }
49  if(q < 2.5) {
50  return pow(2.5 - q, 4);
51  }
52  return 0.0;
53 }

Variable Documentation

◆ dwk

double(* dwk) (DensityKernel *kernel, double q) ( DensityKernel kernel,
double  q 
)

Definition at line 95 of file densitykernel.c.

Referenced by density_kernel_dW(), and density_ngbiter().

◆ 

struct { ... } KERNELS[]
Initial value:
= {
{ "CubicSpline", wk_cs, dwk_cs, 2.,
{2 / 3., 10 / (7 * M_PI), 1 / M_PI} },
{ "QuinticSpline", wk_qs, dwk_qs, 3.,
{1 / 120., 7 / (478 * M_PI), 1 / (120 * M_PI)} },
{ "QuarticSpline", wk_qus, dwk_qus, 2.5,
{1 / 24., 96 / (1199 * M_PI), 1 / (20 * M_PI)} },
}
static double dwk_qs(DensityKernel *kernel, double q)
Definition: densitykernel.c:78
static double wk_qs(DensityKernel *kernel, double q)
Definition: densitykernel.c:66
double wk_cs(DensityKernel *kernel, double q)
Definition: densitykernel.c:24
double dwk_cs(DensityKernel *kernel, double q)
Definition: densitykernel.c:33
static double wk_qus(DensityKernel *kernel, double q)
Definition: densitykernel.c:42
static double dwk_qus(DensityKernel *kernel, double q)
Definition: densitykernel.c:54

Referenced by density_kernel_dwk(), density_kernel_init_with_type(), and density_kernel_wk().

◆ name

const char* name

◆ sigma

double sigma[3]

◆ support

double support

Definition at line 96 of file densitykernel.c.

Referenced by density_kernel_desnumngb(), density_kernel_dwk(), and density_kernel_wk().

◆ wk

double(* wk) (DensityKernel *kernel, double q) ( DensityKernel kernel,
double  q 
)