Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
SWIFT
SWIFTsim
Commits
24d50a46
Commit
24d50a46
authored
Feb 22, 2013
by
Matthieu Schaller
Browse files
Added the main equations for the gravity calculation to the theory file.
Former-commit-id: d283aa296f49349b3251390e4a260154375570ae
parent
a81dc7ac
Changes
1
Hide whitespace changes
Inline
Side-by-side
theory/latex/swift.tex
View file @
24d50a46
...
...
@@ -168,22 +168,99 @@ This section describes the physics of the DM particles but as all particles are
apply to all four types.
\section
{
Particle definition
}
Every particle contains the following information:
\begin{table}
[h]
\centering
\begin{tabular}
{
|l|c|l|
}
\hline
\textbf
{
Quantity
}
&
\textbf
{
Symbol
}
&
\textbf
{
Units
}
\\
\hline
\hline
Position
&
$
\vec
{
x
}$
&
$
[
m
]
$
\\
Velocity
&$
\vec
{
v
}$
&
$
[
m
\cdot
s
^{
-
1
}
]
$
\\
Acceleration
&$
\vec
{
a
}$
&
$
[
m
\cdot
s
^{
-
2
}
]
$
\\
Mass
&
$
m
$
&
$
[
kg
]
$
\\
Softening length
&
$
\epsilon
$
&
$
[
m
]
$
\\
Time step
&
$
\Delta
t
$
&
$
[
s
]
$
\\
Norm of old acceleration
&
$
a
_{
old
}$
&
$
[
m
\cdot
s
^{
-
2
}
]
$
\\
\hline
\end{tabular}
\end{table}
In what follows, we will use
$
\vec
{
r
}_{
ij
}
=
\vec
{
x
_
i
}
-
\vec
{
x
_
j
}$
and
$
\hat
{
r
}_{
ij
}
=
\vec
{
r
}_{
ij
}
/
|
\vec
{
r
}_{
ij
}
|
$
to simplify the notation.
\\
In most calculations, the mass and softening length of the particles are constants for a given type of particles but
this is not true anymore when including the
\eagle
physics as the gas, star and BH particles will change mass over
time. In cosmological simulations, the softening length is a function of time.
\section
{
Gravity interactions
}
The interaction is computed between all pairs of particles. The acceleration of particle
$
i
$
due to one other particle
$
j
$
is given by:
\begin{equation}
\vec
{
a
_
i
}
=
\left\lbrace
\begin{array}
{
rcl
}
\Bigg
. G
_
N
\dfrac
{
m
_
j
}{
|
\vec
{
r
}_{
ij
}
|
^
3
}
\vec
{
r
}_{
ij
}&
\mbox
{
if
}
&
\Big
.
\dfrac
{
|
\vec
{
r
}_{
ij
}
|
}{
\epsilon
}
\geq
1
\\
\Bigg
. G
_
N
\dfrac
{
m
_
j
}{
\epsilon
^
3
}
\phi\left
(
\frac
{
|
\vec
{
r
}_{
ij
}
|
}{
\epsilon
}
\right
)
\vec
{
r
}_{
ij
}
&
\mbox
{
if
}
&
\Big
.
\dfrac
{
|
\vec
{
r
}_{
ij
}
|
}{
\epsilon
}
< 1
\\
\end{array}
\right
.
\end{equation}
where the softened potential
$
\phi
(
u
)
$
is given by:
\begin{equation}
\phi
(u) =
\left\lbrace
\begin{array}
{
rcl
}
\frac
{
32
}{
3
}
-
\frac
{
192
}{
5
}
u
^
2 + 32u
^
3
&
\mbox
{
if
}
&
u <
\Big
.
\frac
{
1
}{
2
}
\\
\frac
{
64
}{
3
}
- 48u +
\frac
{
192
}{
5
}
u
^
2 -
\frac
{
32
}{
3
}
u
^
3 -
\frac
{
2
}{
30
}
\dfrac
{
1
}{
u
^
3
}&
\mbox
{
if
}
&
\Big
.u
\geq
\frac
{
1
}{
2
}
\\
\end{array}
\right
.
\end{equation}
and
$
G
_
N
$
is Newton's constant for gravity. The softening length used in this equation is the maximum of the softening
length of both particles, i.e.
$
\epsilon
=
\max
(
\epsilon
_
i,
\epsilon
_
j
)
$
. Notice that this softened potential is
derived from the smoothing kernel used in the SPH part of the calculation with a smoothing length
$
h
=
1
.
4
\epsilon
$
. This
corresponds to a Plummer sphere of size
$
\epsilon
$
.
\\
\textcolor
{
red
}{
This is the softening potential used in GADGET. There is something weird about this function that I want
to check but for now it should be sufficient.
}
\\
The maximal time step a particle is allowed to have is related to the acceleration by:
\begin{equation}
\Delta
t
_
i =
\sqrt
{
\frac
{
2
\eta
\epsilon
_
i
}{
|
\vec
{
a
_
i
}
|
}}
\end{equation}
where
$
\eta
$
is some accuracy constant which generally takes a value around
$
\eta
\approx
0
.
025
$
.
\section
{
Periodic boundary conditions
}
In most cases, the simulations are run with periodic boundary conditions. The simplest way to treat the formally
infinite number of interactions in a tree code is to use the Ewald summation technique. In this case, the acceleration
of a particle gets a new term:
\begin{equation}
\vec
{
a
_
i
}
=
\vec
{
a
_
i
}
+
\sum
_
j m
_
j
\vec
{
f
}_
c(
\vec
{
r
}_{
ij
}
).
\end{equation}
The correction terms
$
\vec
{
f
}_
c
$
are expensive to compute but are constant in time and only depend on the distance
between the particles. This means that the values can be pre-computed and stored in a table. A simple 3D interpolation
of the values in this table is then used when actually computing the force.
\gadget
and other code use a
$
64
^
3
$
elements table representing one octant. The other ones can be obtained thanks to the symmetry properties of the term.
\\
\textcolor
{
red
}{
Add here the calculation of the Ewald correction table.
}
\\
\section
{
Fast Multipole Method
}
\textcolor
{
red
}{
To be done.
}
...
...
@@ -194,6 +271,8 @@ apply to all four types.
\chapter
{
Gas particles - SPH
}
\label
{
chap:SPH
}
This chapter presents the equations used to simulate gas interactions.
\section
{
Particle definition
}
Every particle contains the following information:
...
...
@@ -217,10 +296,9 @@ Every particle contains the following information:
Time step
&
Secondary
&
$
\Delta
t
$
&
$
[
s
]
$
\\
Signal velocity
&
Secondary
&
$
v
_{
sig
}$&
$
[
m
\cdot
s
^{
-
1
}
]
$
\\
\hline
Artificial viscosity
&
Primary
&
$
\alpha
$
&
$
[-]
$
\\
Artificial conductivity
&
Primary
&
$
\alpha
_
u
$
&
$
[-]
$
\\
Velocity curl
&
Secondary
&
$
\nabla\times
\vec
{
v
}$
&
$
[
s
^{
-
1
}
]
$
\\
Velocity divergence
&
Secondary
&
$
\nabla\cdot
\vec
{
v
}$
&
$
[
s
^{
-
1
}
]
$
\\
Internal energy Laplacian
&
Secondary
&
$
\nabla
u
$
&
$
[
m
\cdot
s
^{
-
2
}
]
$
\\
Balsara switch
&
Secondary
&
$
f
$
&
$
[-
]
$
\\
\hline
\end{tabular}
\end{table}
...
...
@@ -231,12 +309,6 @@ ones are computed from secondary ones in another loop (force loop). \\
For optimisation purposes, any function of these quantities could be stored. For instance,
$
1
/
h
$
instead of
$
h
$
or
$
\frac
{
P
}{
\rho\Omega
}$
instead of
$
\Omega
$
may be options worth exploring.
\\
The four quantities in the second part of the table are used in improved state-of-the-art implementations of SPH. In a
first approximation, they can be neglected.
\\
In what follows, we will use
$
\vec
{
r
}_{
ij
}
=
\vec
{
x
_
i
}
-
\vec
{
x
_
j
}$
and
$
\hat
{
r
}_{
ij
}
=
\vec
{
r
}_{
ij
}
/
|
\vec
{
r
}_{
ij
}
|
$
to simplify the notation.
\section
{
Kernel function
}
The kernel function can always be decomposed as:
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment