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
22970bd2
Commit
22970bd2
authored
Aug 05, 2016
by
Stefan Arridge
Browse files
Cooling actually works now
parent
6e2c2eac
Changes
5
Hide whitespace changes
Inline
Side-by-side
examples/UniformBox/plots/energy_plot.py
View file @
22970bd2
...
...
@@ -2,46 +2,40 @@ import numpy as np
import
matplotlib.pyplot
as
plt
import
h5py
as
h5
n_snaps
=
10
2
n_snaps
=
10
1
directory
=
'../'
snap_name_base
=
"Isothermal_"
plot_dir
=
"random_orbits_1d"
plot_filename_base
=
"snap"
v_rot
=
200.
r_0
=
100.
snap_name_base
=
"uniformBox_"
plot_dir
=
"./"
plot_title
=
r
"$\Lambda \, = \, 1.0$"
plot_filename
=
"energy_plot_lambda_1.png"
e_kin_array
=
[]
e_
pot
_array
=
[]
e_
therm
_array
=
[]
e_total_array
=
[]
snap_numbers
=
np
.
linspace
(
0
,
n_snaps
)
for
i
in
range
(
n_snaps
):
snap_number
=
"%03d"
%
i
filename
=
directory
+
snap_name_base
+
snap_number
+
".hdf5"
f
=
h5
.
File
(
filename
)
print
"Reading snap number %d"
%
i
header
=
f
[
"Header"
]
n_parts
=
header
.
attrs
[
"NumPart_ThisFile"
][
1
]
pos
=
np
.
array
(
f
[
"PartType1/Coordinates"
])
x
=
pos
[:,
0
]
y
=
pos
[:,
1
]
z
=
pos
[:,
2
]
r
=
np
.
sqrt
(
x
**
2
+
y
**
2
+
z
**
2
)
e_pot_particles
=
v_rot
**
2
*
np
.
log
(
r
/
r_0
)
e_pot_total
=
np
.
sum
(
e_pot_particles
)
e_pot_array
=
np
.
append
(
e_pot_array
,
e_pot_total
)
v
=
np
.
array
(
f
[
"PartType1/Velocities"
])
u
=
np
.
array
(
f
[
"PartType0/InternalEnergy"
])
u_total
=
np
.
sum
(
u
)
e_therm_array
=
np
.
append
(
e_therm_array
,
u_total
)
v
=
np
.
array
(
f
[
"PartType0/Velocities"
])
e_kin_particles
=
0.5
*
v
**
2
e_kin_total
=
np
.
sum
(
e_kin_particles
)
e_kin_array
=
np
.
append
(
e_kin_array
,
e_kin_total
)
e_total_array
=
np
.
append
(
e_total_array
,
e_kin_total
+
e_pot
_total
)
e_total_array
=
np
.
append
(
e_total_array
,
e_kin_total
+
u
_total
)
print
snap_numbers
.
shape
print
e_kin_array
.
shape
plt
.
plot
(
e_kin_array
,
label
=
"Kinetic Energy"
)
plt
.
plot
(
e_
pot
_array
,
label
=
"
Potenti
al Energy"
)
plt
.
plot
(
e_
therm
_array
,
label
=
"
Intern
al Energy"
)
plt
.
plot
(
e_total_array
,
label
=
"Total Energy"
)
plt
.
legend
(
loc
=
"upper right"
)
plot_filename
=
"%s/energy_plot.png"
%
plot_dir
plt
.
savefig
(
plot_filename
,
format
=
"png"
)
plt
.
xlabel
(
"Snapshot number"
)
plt
.
ylabel
(
"Energy (code units)"
)
plt
.
legend
(
loc
=
"lower right"
)
plt
.
title
(
plot_title
)
full_plot_filename
=
"%s/%s"
%
(
plot_dir
,
plot_filename
)
plt
.
savefig
(
full_plot_filename
,
format
=
"png"
)
plt
.
close
()
examples/UniformBox/uniformBox.yml
View file @
22970bd2
...
...
@@ -41,3 +41,10 @@ PointMass:
position_y
:
50.
position_z
:
50.
mass
:
1e10
# mass of external point mass in internal units
# Cooling parameters (Constant cooling)
Cooling
:
lambda
:
0.1
min_energy
:
0.0
cooling_tstep_mult
:
1.0
\ No newline at end of file
src/cooling.c
View file @
22970bd2
...
...
@@ -88,11 +88,11 @@ float calculate_new_thermal_energy(float u_old, float dt, const struct cooling_d
//This function integrates the cooling equation, given the initial thermal energy and the timestep dt.
//Returns 0 if successful and 1 if not
int
status
=
0
;
float
du_dt
=
cooling
->
const_cooling
.
lambda
;
float
du_dt
=
-
cooling
->
const_cooling
.
lambda
;
float
u_floor
=
cooling
->
const_cooling
.
min_energy
;
float
u_new
;
if
(
u_old
-
du_dt
*
dt
>
u_floor
){
u_new
=
u_old
-
du_dt
*
dt
;
u_new
=
u_old
+
du_dt
*
dt
;
}
else
{
u_new
=
u_floor
;
...
...
src/runner.c
View file @
22970bd2
...
...
@@ -167,14 +167,14 @@ void runner_do_cooling(struct runner *r, struct cell *c, int timer) {
OUT
;
#endif
/* Loop over the
g
parts in this cell. */
/* Loop over the parts in this cell. */
for
(
int
i
=
0
;
i
<
count
;
i
++
)
{
/* Get a direct pointer on the part. */
struct
part
*
restrict
p
=
&
parts
[
i
];
/*
Is this part within the time step?
*/
if
(
p
->
ti_
end
<
=
ti_current
)
{
/*
Kick has already updated ti_end, so need to check ti_begin
*/
if
(
p
->
ti_
begin
=
=
ti_current
)
{
dt
=
(
p
->
ti_end
-
p
->
ti_begin
)
*
timeBase
;
update_entropy
(
cooling
,
constants
,
p
,
dt
);
}
...
...
src/task.c
View file @
22970bd2
...
...
@@ -101,6 +101,7 @@ enum task_actions task_acts_on(const struct task *t) {
case
task_type_sort
:
case
task_type_ghost
:
case
task_type_cooling
:
return
task_action_part
;
break
;
...
...
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