Skip to content
GitLab
Menu
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
15af3919
Commit
15af3919
authored
Mar 14, 2016
by
Pedro Gonnet
Browse files
Merge branch 'master' of gitlab.cosma.dur.ac.uk:swift/swiftsim into engine_exchange_strays
Conflicts: src/engine.c src/space.c src/space.h
parents
ed926dce
b88e04a2
Changes
44
Show whitespace changes
Inline
Side-by-side
examples/BigCosmoVolume/makeIC.py
View file @
15af3919
...
...
@@ -64,7 +64,7 @@ v = inputFile["/PartType0/Velocities"][:,:]
m
=
inputFile
[
"/PartType0/Masses"
][:]
h
=
inputFile
[
"/PartType0/SmoothingLength"
][:]
u
=
inputFile
[
"/PartType0/InternalEnergy"
][:]
ids
=
np
.
array
(
range
(
np
.
size
(
u
)),
dtype
=
'L'
)
ids
=
np
.
array
(
range
(
np
.
size
(
u
)),
dtype
=
'L'
)
+
1
# Downsample
print
"Downsampling..."
...
...
examples/BigPerturbedBox/makeIC_fcc.py
View file @
15af3919
...
...
@@ -111,6 +111,6 @@ ds[()] = h
ds
=
grp
.
create_dataset
(
'InternalEnergy'
,
(
numPart
,
1
),
'f'
)
ds
[()]
=
u
ds
=
grp
.
create_dataset
(
'ParticleIDs'
,
(
numPart
,
1
),
'L'
)
ds
[()]
=
ids
ds
[()]
=
ids
+
1
file
.
close
()
examples/GreshoVortex/makeIC.py
View file @
15af3919
...
...
@@ -82,7 +82,7 @@ for i in range(L):
else
:
P
=
P
+
3.
+
4.
*
log
(
2.
)
u
[
index
]
=
P
/
((
gamma
-
1.
)
*
rho
)
ids
[
index
]
=
partId
ids
[
index
]
=
partId
+
1
partId
=
partId
+
1
...
...
examples/Makefile.am
View file @
15af3919
...
...
@@ -63,13 +63,15 @@ swift_fixdt_mpi_LDADD = ../src/.libs/libswiftsim_mpi.a $(HDF5_LDFLAGS) $(HDF5_L
# Scripts to generate ICs
EXTRA_DIST
=
UniformBox/makeIC.py
\
UniformDMBox/makeIC.py
\
PerturbedBox/makeIC.py
\
SedovBlast/makeIC.py SedovBlast/makeIC_fcc.py SedovBlast/solution.py
\
SodShock/makeIC.py SodShock/solution.py SodShock/glass_001.hdf5 SodShock/glass_002.hdf5 SodShock/rhox.py
\
CosmoVolume/getIC.sh
\
BigCosmoVolume/makeIC.py
\
BigPerturbedBox/makeIC_fcc.py
\
GreshoVortex/makeIC.py GreshoVortex/solution.py
GreshoVortex/makeIC.py GreshoVortex/solution.py
\
MultiTypes/makeIC.py
# Scripts to plot task graphs
...
...
examples/MultiTypes/makeIC.py
0 → 100644
View file @
15af3919
###############################################################################
# This file is part of SWIFT.
# Copyright (c) 2013 Pedro Gonnet (pedro.gonnet@durham.ac.uk),
# Matthieu Schaller (matthieu.schaller@durham.ac.uk)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import
h5py
import
sys
from
numpy
import
*
# Generates a swift IC file containing a cartesian distribution of DM particles
# with a density of 1
# Parameters
periodic
=
1
# 1 For periodic box
boxSize
=
1.
Lgas
=
int
(
sys
.
argv
[
1
])
# Number of particles along one axis
rhoGas
=
2.
# Density
P
=
1.
# Pressure
gamma
=
5.
/
3.
# Gas adiabatic index
rhoDM
=
1.
Ldm
=
int
(
sys
.
argv
[
2
])
# Number of particles along one axis
fileName
=
"multiTypes.hdf5"
#---------------------------------------------------
numGas
=
Lgas
**
3
massGas
=
boxSize
**
3
*
rhoGas
/
numGas
internalEnergy
=
P
/
((
gamma
-
1.
)
*
rhoGas
)
numDM
=
Ldm
**
3
massDM
=
boxSize
**
3
*
rhoDM
/
numDM
#--------------------------------------------------
#File
file
=
h5py
.
File
(
fileName
,
'w'
)
# Header
grp
=
file
.
create_group
(
"/Header"
)
grp
.
attrs
[
"BoxSize"
]
=
boxSize
grp
.
attrs
[
"NumPart_Total"
]
=
[
numGas
,
numDM
,
0
,
0
,
0
,
0
]
grp
.
attrs
[
"NumPart_Total_HighWord"
]
=
[
0
,
0
,
0
,
0
,
0
,
0
]
grp
.
attrs
[
"NumPart_ThisFile"
]
=
[
numGas
,
numDM
,
0
,
0
,
0
,
0
]
grp
.
attrs
[
"Time"
]
=
0.0
grp
.
attrs
[
"NumFilesPerSnapshot"
]
=
1
grp
.
attrs
[
"MassTable"
]
=
[
0.0
,
massDM
,
0.0
,
0.0
,
0.0
,
0.0
]
grp
.
attrs
[
"Flag_Entropy_ICs"
]
=
0
#Runtime parameters
grp
=
file
.
create_group
(
"/RuntimePars"
)
grp
.
attrs
[
"PeriodicBoundariesOn"
]
=
periodic
# Gas Particle group
grp
=
file
.
create_group
(
"/PartType0"
)
v
=
zeros
((
numGas
,
3
))
ds
=
grp
.
create_dataset
(
'Velocities'
,
(
numGas
,
3
),
'f'
)
ds
[()]
=
v
v
=
zeros
(
1
)
m
=
full
((
numGas
,
1
),
massGas
)
ds
=
grp
.
create_dataset
(
'Masses'
,
(
numGas
,
1
),
'f'
)
ds
[()]
=
m
m
=
zeros
(
1
)
h
=
full
((
numGas
,
1
),
1.1255
*
boxSize
/
Lgas
)
ds
=
grp
.
create_dataset
(
'SmoothingLength'
,
(
numGas
,
1
),
'f'
)
ds
[()]
=
h
h
=
zeros
(
1
)
u
=
full
((
numGas
,
1
),
internalEnergy
)
ds
=
grp
.
create_dataset
(
'InternalEnergy'
,
(
numGas
,
1
),
'f'
)
ds
[()]
=
u
u
=
zeros
(
1
)
ids
=
linspace
(
0
,
numGas
,
numGas
,
endpoint
=
False
).
reshape
((
numGas
,
1
))
ds
=
grp
.
create_dataset
(
'ParticleIDs'
,
(
numGas
,
1
),
'L'
)
ds
[()]
=
ids
+
1
x
=
ids
%
Lgas
;
y
=
((
ids
-
x
)
/
Lgas
)
%
Lgas
;
z
=
(
ids
-
x
-
Lgas
*
y
)
/
Lgas
**
2
;
coords
=
zeros
((
numGas
,
3
))
coords
[:,
0
]
=
z
[:,
0
]
*
boxSize
/
Lgas
+
boxSize
/
(
2
*
Lgas
)
coords
[:,
1
]
=
y
[:,
0
]
*
boxSize
/
Lgas
+
boxSize
/
(
2
*
Lgas
)
coords
[:,
2
]
=
x
[:,
0
]
*
boxSize
/
Lgas
+
boxSize
/
(
2
*
Lgas
)
ds
=
grp
.
create_dataset
(
'Coordinates'
,
(
numGas
,
3
),
'd'
)
ds
[()]
=
coords
# DM Particle group
grp
=
file
.
create_group
(
"/PartType1"
)
v
=
zeros
((
numDM
,
3
))
ds
=
grp
.
create_dataset
(
'Velocities'
,
(
numDM
,
3
),
'f'
)
ds
[()]
=
v
v
=
zeros
(
1
)
m
=
full
((
numDM
,
1
),
massDM
)
ds
=
grp
.
create_dataset
(
'Masses'
,
(
numDM
,
1
),
'f'
)
ds
[()]
=
m
m
=
zeros
(
1
)
ids
=
linspace
(
0
,
numDM
,
numDM
,
endpoint
=
False
).
reshape
((
numDM
,
1
))
ds
=
grp
.
create_dataset
(
'ParticleIDs'
,
(
numDM
,
1
),
'L'
)
ds
[()]
=
ids
+
Lgas
**
3
+
1
x
=
ids
%
Ldm
;
y
=
((
ids
-
x
)
/
Ldm
)
%
Ldm
;
z
=
(
ids
-
x
-
Ldm
*
y
)
/
Ldm
**
2
;
coords
=
zeros
((
numDM
,
3
))
coords
[:,
0
]
=
z
[:,
0
]
*
boxSize
/
Ldm
+
boxSize
/
(
2
*
Ldm
)
coords
[:,
1
]
=
y
[:,
0
]
*
boxSize
/
Ldm
+
boxSize
/
(
2
*
Ldm
)
coords
[:,
2
]
=
x
[:,
0
]
*
boxSize
/
Ldm
+
boxSize
/
(
2
*
Ldm
)
ds
=
grp
.
create_dataset
(
'Coordinates'
,
(
numDM
,
3
),
'd'
)
ds
[()]
=
coords
file
.
close
()
examples/PerturbedBox/makeIC.py
View file @
15af3919
...
...
@@ -103,6 +103,6 @@ ds[()] = h
ds
=
grp
.
create_dataset
(
'InternalEnergy'
,
(
numPart
,
1
),
'f'
)
ds
[()]
=
u
ds
=
grp
.
create_dataset
(
'ParticleIDs'
,
(
numPart
,
1
),
'L'
)
ds
[()]
=
ids
ds
[()]
=
ids
+
1
file
.
close
()
examples/SedovBlast/makeIC.py
View file @
15af3919
...
...
@@ -69,7 +69,7 @@ for i in range(L):
m
[
index
]
=
mass
h
[
index
]
=
1.1255
*
boxSize
/
L
u
[
index
]
=
internalEnergy
ids
[
index
]
=
index
ids
[
index
]
=
index
+
1
if
sqrt
((
x
-
boxSize
/
2.
)
**
2
+
(
y
-
boxSize
/
2.
)
**
2
+
(
z
-
boxSize
/
2.
)
**
2
)
<
2.01
*
boxSize
/
L
:
u
[
index
]
=
u
[
index
]
+
E0
/
(
33.
*
mass
)
print
"Particle "
,
index
,
" set to detonate."
...
...
examples/SedovBlast/makeIC_fcc.py
View file @
15af3919
...
...
@@ -72,7 +72,7 @@ for i in range(L):
m
[
index
]
=
mass
h
[
index
]
=
1.1255
*
hbox
u
[
index
]
=
internalEnergy
ids
[
index
]
=
index
ids
[
index
]
=
index
+
1
if
sqrt
((
x
-
boxSize
/
2.
)
**
2
+
(
y
-
boxSize
/
2.
)
**
2
+
(
z
-
boxSize
/
2.
)
**
2
)
<
1.2
*
hbox
:
u
[
index
]
=
u
[
index
]
+
E0
/
(
28.
*
mass
)
print
"Particle "
,
index
,
" set to detonate."
...
...
examples/SodShock/makeIC.py
View file @
15af3919
...
...
@@ -86,8 +86,8 @@ h = append(h1, h2,0)
u
=
append
(
u1
,
u2
,
0
)
m
=
append
(
m1
,
m2
,
0
)
ids
=
zeros
(
numPart
,
dtype
=
'L'
)
for
i
in
range
(
numPart
):
ids
[
i
]
=
i
for
i
in
range
(
1
,
numPart
+
1
):
ids
[
i
-
1
]
=
i
#Final operations
h
/=
2
...
...
examples/UniformBox/makeIC.py
View file @
15af3919
...
...
@@ -86,7 +86,7 @@ u = zeros(1)
ids
=
linspace
(
0
,
numPart
,
numPart
,
endpoint
=
False
).
reshape
((
numPart
,
1
))
ds
=
grp
.
create_dataset
(
'ParticleIDs'
,
(
numPart
,
1
),
'L'
)
ds
[()]
=
ids
ds
[()]
=
ids
+
1
x
=
ids
%
L
;
y
=
((
ids
-
x
)
/
L
)
%
L
;
z
=
(
ids
-
x
-
L
*
y
)
/
L
**
2
;
...
...
examples/UniformBox/makeICbig.py
View file @
15af3919
...
...
@@ -98,7 +98,7 @@ for n in range(n_iterations):
u
=
zeros
(
1
)
ids
=
linspace
(
offset
,
offset
+
N
,
N
,
endpoint
=
False
).
reshape
((
N
,
1
))
ds_id
[
offset
:
offset
+
N
]
=
ids
ds_id
[
offset
:
offset
+
N
]
=
ids
+
1
x
=
ids
%
L
;
y
=
((
ids
-
x
)
/
L
)
%
L
;
z
=
(
ids
-
x
-
L
*
y
)
/
L
**
2
;
...
...
@@ -130,10 +130,8 @@ u = full((remainder, 1), internalEnergy)
ds_u
[
offset
:
offset
+
remainder
]
=
u
u
=
zeros
(
1
)
print
"Done"
,
offset
+
remainder
,
"/"
,
numPart
ids
=
linspace
(
offset
,
offset
+
remainder
,
remainder
,
endpoint
=
False
).
reshape
((
remainder
,
1
))
ds_id
[
offset
:
offset
+
remainder
]
=
ids
ds_id
[
offset
:
offset
+
remainder
]
=
ids
+
1
x
=
ids
%
L
;
y
=
((
ids
-
x
)
/
L
)
%
L
;
z
=
(
ids
-
x
-
L
*
y
)
/
L
**
2
;
...
...
@@ -143,6 +141,7 @@ coords[:,1] = y[:,0] * boxSize / L + boxSize / (2*L)
coords
[:,
2
]
=
x
[:,
0
]
*
boxSize
/
L
+
boxSize
/
(
2
*
L
)
ds_x
[
offset
:
offset
+
remainder
,:]
=
coords
print
"Done"
,
offset
+
remainder
,
"/"
,
numPart
...
...
examples/UniformDMBox/makeIC.py
0 → 100644
View file @
15af3919
###############################################################################
# This file is part of SWIFT.
# Copyright (c) 2013 Pedro Gonnet (pedro.gonnet@durham.ac.uk),
# Matthieu Schaller (matthieu.schaller@durham.ac.uk)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import
h5py
import
sys
from
numpy
import
*
# Generates a swift IC file containing a cartesian distribution of DM particles
# with a density of 1
# Parameters
periodic
=
1
# 1 For periodic box
boxSize
=
1.
rho
=
1.
L
=
int
(
sys
.
argv
[
1
])
# Number of particles along one axis
fileName
=
"uniformDMBox_%d.hdf5"
%
L
#---------------------------------------------------
numPart
=
L
**
3
mass
=
boxSize
**
3
*
rho
/
numPart
#--------------------------------------------------
#File
file
=
h5py
.
File
(
fileName
,
'w'
)
# Header
grp
=
file
.
create_group
(
"/Header"
)
grp
.
attrs
[
"BoxSize"
]
=
boxSize
grp
.
attrs
[
"NumPart_Total"
]
=
[
0
,
numPart
,
0
,
0
,
0
,
0
]
grp
.
attrs
[
"NumPart_Total_HighWord"
]
=
[
0
,
0
,
0
,
0
,
0
,
0
]
grp
.
attrs
[
"NumPart_ThisFile"
]
=
[
0
,
numPart
,
0
,
0
,
0
,
0
]
grp
.
attrs
[
"Time"
]
=
0.0
grp
.
attrs
[
"NumFilesPerSnapshot"
]
=
1
grp
.
attrs
[
"MassTable"
]
=
[
0.0
,
mass
,
0.0
,
0.0
,
0.0
,
0.0
]
grp
.
attrs
[
"Flag_Entropy_ICs"
]
=
0
#Runtime parameters
grp
=
file
.
create_group
(
"/RuntimePars"
)
grp
.
attrs
[
"PeriodicBoundariesOn"
]
=
periodic
#Particle group
grp
=
file
.
create_group
(
"/PartType1"
)
v
=
zeros
((
numPart
,
3
))
ds
=
grp
.
create_dataset
(
'Velocities'
,
(
numPart
,
3
),
'f'
)
ds
[()]
=
v
v
=
zeros
(
1
)
m
=
full
((
numPart
,
1
),
mass
)
ds
=
grp
.
create_dataset
(
'Masses'
,
(
numPart
,
1
),
'f'
)
ds
[()]
=
m
m
=
zeros
(
1
)
ids
=
linspace
(
0
,
numPart
,
numPart
,
endpoint
=
False
).
reshape
((
numPart
,
1
))
ds
=
grp
.
create_dataset
(
'ParticleIDs'
,
(
numPart
,
1
),
'L'
)
ds
[()]
=
ids
+
1
x
=
ids
%
L
;
y
=
((
ids
-
x
)
/
L
)
%
L
;
z
=
(
ids
-
x
-
L
*
y
)
/
L
**
2
;
coords
=
zeros
((
numPart
,
3
))
coords
[:,
0
]
=
z
[:,
0
]
*
boxSize
/
L
+
boxSize
/
(
2
*
L
)
coords
[:,
1
]
=
y
[:,
0
]
*
boxSize
/
L
+
boxSize
/
(
2
*
L
)
coords
[:,
2
]
=
x
[:,
0
]
*
boxSize
/
L
+
boxSize
/
(
2
*
L
)
ds
=
grp
.
create_dataset
(
'Coordinates'
,
(
numPart
,
3
),
'd'
)
ds
[()]
=
coords
file
.
close
()
examples/main.c
View file @
15af3919
...
...
@@ -58,8 +58,9 @@
int
main
(
int
argc
,
char
*
argv
[])
{
int
c
,
icount
,
j
,
k
,
N
,
periodic
=
1
;
long
long
N_total
=
-
1
;
int
c
,
icount
,
periodic
=
1
;
size_t
Ngas
=
0
,
Ngpart
=
0
;
long
long
N_total
[
2
]
=
{
0
,
0
};
int
nr_threads
=
1
,
nr_queues
=
-
1
;
int
dump_tasks
=
0
;
int
data
[
2
];
...
...
@@ -67,6 +68,7 @@ int main(int argc, char *argv[]) {
double
h_max
=
-
1
.
0
,
scaling
=
1
.
0
;
double
time_end
=
DBL_MAX
;
struct
part
*
parts
=
NULL
;
struct
gpart
*
gparts
=
NULL
;
struct
space
s
;
struct
engine
e
;
struct
UnitSystem
us
;
...
...
@@ -354,14 +356,14 @@ int main(int argc, char *argv[]) {
if
(
myrank
==
0
)
clocks_gettime
(
&
tic
);
#if defined(WITH_MPI)
#if defined(HAVE_PARALLEL_HDF5)
read_ic_parallel
(
ICfileName
,
dim
,
&
parts
,
&
N
,
&
periodic
,
myrank
,
nr_nodes
,
read_ic_parallel
(
ICfileName
,
dim
,
&
parts
,
&
N
gas
,
&
periodic
,
myrank
,
nr_nodes
,
MPI_COMM_WORLD
,
MPI_INFO_NULL
);
#else
read_ic_serial
(
ICfileName
,
dim
,
&
parts
,
&
N
,
&
periodic
,
myrank
,
nr_nodes
,
read_ic_serial
(
ICfileName
,
dim
,
&
parts
,
&
N
gas
,
&
periodic
,
myrank
,
nr_nodes
,
MPI_COMM_WORLD
,
MPI_INFO_NULL
);
#endif
#else
read_ic_single
(
ICfileName
,
dim
,
&
parts
,
&
N
,
&
periodic
);
read_ic_single
(
ICfileName
,
dim
,
&
parts
,
&
gparts
,
&
Ngas
,
&
Ngpart
,
&
periodic
);
#endif
if
(
myrank
==
0
)
{
...
...
@@ -372,24 +374,35 @@ int main(int argc, char *argv[]) {
}
#if defined(WITH_MPI)
long
long
N_long
=
N
;
MPI_Reduce
(
&
N_long
,
&
N_total
,
1
,
MPI_LONG_LONG
,
MPI_SUM
,
0
,
MPI_COMM_WORLD
);
long
long
N_long
[
2
]
=
{
Ngas
,
Ngpart
};
MPI_Reduce
(
&
N_long
,
&
N_total
,
2
,
MPI_LONG_LONG
,
MPI_SUM
,
0
,
MPI_COMM_WORLD
);
if
(
myrank
==
0
)
message
(
"Read %lld gas particles and %lld DM particles from the ICs"
,
N_total
[
0
],
N_total
[
1
]);
#else
N_total
=
N
;
N_total
[
0
]
=
Ngas
;
N_total
[
1
]
=
Ngpart
-
Ngas
;
message
(
"Read %lld gas particles and %lld DM particles from the ICs"
,
N_total
[
0
],
N_total
[
1
]);
#endif
if
(
myrank
==
0
)
message
(
"Read %lld particles from the ICs"
,
N_total
);
/* Apply h scaling */
if
(
scaling
!=
1
.
0
)
for
(
k
=
0
;
k
<
N
;
k
++
)
parts
[
k
].
h
*=
scaling
;
for
(
size_t
k
=
0
;
k
<
N
gas
;
k
++
)
parts
[
k
].
h
*=
scaling
;
/* Apply shift */
if
(
shift
[
0
]
!=
0
||
shift
[
1
]
!=
0
||
shift
[
2
]
!=
0
)
for
(
k
=
0
;
k
<
N
;
k
++
)
{
if
(
shift
[
0
]
!=
0
||
shift
[
1
]
!=
0
||
shift
[
2
]
!=
0
)
{
for
(
size_t
k
=
0
;
k
<
N
gas
;
k
++
)
{
parts
[
k
].
x
[
0
]
+=
shift
[
0
];
parts
[
k
].
x
[
1
]
+=
shift
[
1
];
parts
[
k
].
x
[
2
]
+=
shift
[
2
];
}
for
(
size_t
k
=
0
;
k
<
Ngpart
;
k
++
)
{
gparts
[
k
].
x
[
0
]
+=
shift
[
0
];
gparts
[
k
].
x
[
1
]
+=
shift
[
1
];
gparts
[
k
].
x
[
2
]
+=
shift
[
2
];
}
}
/* Set default number of queues. */
if
(
nr_queues
<
0
)
nr_queues
=
nr_threads
;
...
...
@@ -399,7 +412,8 @@ int main(int argc, char *argv[]) {
/* Initialize the space with this data. */
if
(
myrank
==
0
)
clocks_gettime
(
&
tic
);
space_init
(
&
s
,
dim
,
parts
,
N
,
periodic
,
h_max
,
myrank
==
0
);
space_init
(
&
s
,
dim
,
parts
,
gparts
,
Ngas
,
Ngpart
,
periodic
,
h_max
,
myrank
==
0
);
if
(
myrank
==
0
&&
verbose
)
{
clocks_gettime
(
&
toc
);
message
(
"space_init took %.3f %s."
,
clocks_diff
(
&
tic
,
&
toc
),
...
...
@@ -415,6 +429,7 @@ int main(int argc, char *argv[]) {
message
(
"highest-level cell dimensions are [ %i %i %i ]."
,
s
.
cdim
[
0
],
s
.
cdim
[
1
],
s
.
cdim
[
2
]);
message
(
"%zi parts in %i cells."
,
s
.
nr_parts
,
s
.
tot_cells
);
message
(
"%zi gparts in %i cells."
,
s
.
nr_gparts
,
s
.
tot_cells
);
message
(
"maximum depth is %d."
,
s
.
maxdepth
);
// message( "cutoffs in [ %g %g ]." , s.h_min , s.h_max ); fflush(stdout);
}
...
...
@@ -482,9 +497,10 @@ int main(int argc, char *argv[]) {
if
(
myrank
==
0
)
{
message
(
"Running on %lld particles until t=%.3e with %i threads and %i "
"queues (dt_min=%.3e, dt_max=%.3e)..."
,
N_total
,
time_end
,
e
.
nr_threads
,
e
.
sched
.
nr_queues
,
e
.
dt_min
,
e
.
dt_max
);
"Running on %lld gas particles and %lld DM particles until t=%.3e with "
"%i threads and %i queues (dt_min=%.3e, dt_max=%.3e)..."
,
N_total
[
0
],
N_total
[
1
],
time_end
,
e
.
nr_threads
,
e
.
sched
.
nr_queues
,
e
.
dt_min
,
e
.
dt_max
);
fflush
(
stdout
);
}
...
...
@@ -499,7 +515,7 @@ int main(int argc, char *argv[]) {
clocks_getunit
());
/* Let loose a runner on the space. */
for
(
j
=
0
;
!
engine_is_done
(
&
e
);
j
++
)
{
for
(
int
j
=
0
;
!
engine_is_done
(
&
e
);
j
++
)
{
/* Repartition the space amongst the nodes? */
#ifdef WITH_MPI
...
...
src/Makefile.am
View file @
15af3919
...
...
@@ -46,9 +46,9 @@ AM_SOURCES = space.c runner.c queue.c task.c cell.c engine.c \
# Include files for distribution, not installation.
nobase_noinst_HEADERS
=
approx_math.h atomic.h cycle.h error.h inline.h kernel.h vector.h
\
runner_doiact.h runner_doiact_grav.h units.h intrinsics.h minmax.h
\
gravity.h
\
gravity/Default/gravity.h gravity/Default/
runner_iact_grav
.h
\
gravity/Default/gravity_part.h
\
gravity.h
gravity_io.h
\
gravity/Default/gravity.h gravity/Default/
gravity_iact.h gravity/Default/gravity_io
.h
\
gravity/Default/gravity_debug.h
gravity/Default/gravity_part.h
\
hydro.h hydro_io.h
\
hydro/Minimal/hydro.h hydro/Minimal/hydro_iact.h hydro/Minimal/hydro_io.h
\
hydro/Minimal/hydro_debug.h hydro/Minimal/hydro_part.h
\
...
...
src/cell.c
View file @
15af3919
...
...
@@ -376,9 +376,9 @@ void cell_split(struct cell *c) {
int
i
,
j
;
const
int
count
=
c
->
count
,
gcount
=
c
->
gcount
;
struct
part
*
parts
=
c
->
parts
;
struct
xpart
*
xparts
=
c
->
xparts
;
struct
gpart
*
gparts
=
c
->
gparts
;
struct
part
*
parts
=
c
->
parts
;
struct
xpart
*
xparts
=
c
->
xparts
;
struct
gpart
*
gparts
=
c
->
gparts
;
int
left
[
8
],
right
[
8
];
double
pivot
[
3
];
...
...
src/common_io.c
View file @
15af3919
...
...
@@ -359,7 +359,9 @@ FILE* prepareXMFfile() {
if
(
tempFile
==
NULL
)
error
(
"Unable to open temporary file."
);
for
(
int
i
=
0
;
fgets
(
buffer
,
1024
,
tempFile
)
!=
NULL
&&
i
<
counter
-
3
;
i
++
)
{
int
i
=
0
;
while
(
fgets
(
buffer
,
1024
,
tempFile
)
!=
NULL
&&
i
<
counter
-
3
)
{
i
++
;
fprintf
(
xmfFile
,
"%s"
,
buffer
);
}
fprintf
(
xmfFile
,
"
\n
"
);
...
...
@@ -471,4 +473,90 @@ void writeXMFline(FILE* xmfFile, char* fileName, char* name, long long N,
fprintf
(
xmfFile
,
"</Attribute>
\n
"
);
}
/**
* @brief Prepare the DM particles (in gparts) read in for the addition of the
* other particle types
*
* This function assumes that the DM particles are all at the start of the
* gparts array
*
* @param gparts The array of #gpart freshly read in.
* @param Ndm The number of DM particles read in.
*/
void
prepare_dm_gparts
(
struct
gpart
*
gparts
,
size_t
Ndm
)
{
/* Let's give all these gparts a negative id */
for
(
size_t
i
=
0
;
i
<
Ndm
;
++
i
)
{
/* 0 or negative ids are not allowed */
if
(
gparts
[
i
].
id
<=
0
)
error
(
"0 or negative ID for DM particle"
);
gparts
[
i
].
id
=
-
gparts
[
i
].
id
;
}
}
/**
* @brief Copy every #part into the corresponding #gpart and link them.
*
* This function assumes that the DM particles are all at the start of the
* gparts array and adds the hydro particles afterwards
*
* @param parts The array of #part freshly read in.
* @param gparts The array of #gpart freshly read in with all the DM particles
*at the start
* @param Ngas The number of gas particles read in.
* @param Ndm The number of DM particles read in.
*/
void
duplicate_hydro_gparts
(
struct
part
*
parts
,
struct
gpart
*
gparts
,
size_t
Ngas
,
size_t
Ndm
)
{
for
(
size_t
i
=
0
;
i
<
Ngas
;
++
i
)
{
/* Duplicate the crucial information */
gparts
[
i
+
Ndm
].
x
[
0
]
=
parts
[
i
].
x
[
0
];
gparts
[
i
+
Ndm
].
x
[
1
]
=
parts
[
i
].
x
[
1
];
gparts
[
i
+
Ndm
].
x
[
2
]
=
parts
[
i
].
x
[
2
];
gparts
[
i
+
Ndm
].
v_full
[
0
]
=
parts
[
i
].
v
[
0
];
gparts
[
i
+
Ndm
].
v_full
[
1
]
=
parts
[
i
].
v
[
1
];
gparts
[
i
+
Ndm
].
v_full
[
2
]
=
parts
[
i
].
v
[
2
];
gparts
[
i
+
Ndm
].
mass
=
parts
[
i
].
mass
;
/* Link the particles */
gparts
[
i
+
Ndm
].
part
=
&
parts
[
i
];
parts
[
i
].
gpart
=
&
gparts
[
i
+
Ndm
];
}
}
/**
* @brief Copy every DM #gpart into the dmparts array.
*
* @param gparts The array of #gpart containing all particles.
* @param Ntot The number of #gpart.
* @param dmparts The array of #gpart containg DM particles to be filled.
* @param Ndm The number of DM particles.
*/
void
collect_dm_gparts
(
struct
gpart
*
gparts
,
size_t
Ntot
,
struct
gpart
*
dmparts
,
size_t
Ndm
)
{
size_t
count
=
0
;
/* Loop over all gparts */
for
(
size_t
i
=
0
;
i
<
Ntot
;
++
i
)
{
/* And collect the DM ones */
if
(
gparts
[
i
].
id
<
0
)
{
memcpy
(
&
dmparts
[
count
],
&
gparts
[
i
],
sizeof
(
struct
gpart
));
dmparts
[
count
].
id
=
-
dmparts
[
count
].
id
;
count
++
;
}
}
/* Check that everything is fine */
if
(
count
!=
Ndm
)
error
(
"Collected the wrong number of dm particles (%zd vs. %zd expected)"
,
count
,
Ndm
);
}
#endif