Make output_Energy safe

This commit is contained in:
Timothy Warren 2020-01-13 11:25:15 -05:00
parent b4759fb1b1
commit 8c08349b04

View File

@ -102,7 +102,7 @@ fn offset_Momentum(bodies: &mut [body; BODIES_COUNT]) {
} }
// Output the total energy of the system. // Output the total energy of the system.
unsafe fn output_Energy(bodies: &mut [body; BODIES_COUNT]) { fn output_Energy(bodies: &mut [body; BODIES_COUNT]) {
let mut energy = 0.; let mut energy = 0.;
for i in 0..BODIES_COUNT { for i in 0..BODIES_COUNT {
// Add the kinetic energy for each body. // Add the kinetic energy for each body.
@ -115,21 +115,18 @@ unsafe fn output_Energy(bodies: &mut [body; BODIES_COUNT]) {
// Add the potential energy between this body and // Add the potential energy between this body and
// every other body // every other body
for j in i + 1..BODIES_COUNT { for j in i + 1..BODIES_COUNT {
let mut position_Delta = [mem::MaybeUninit::<f64>::uninit(); 3]; let mut position_Delta = [0.; 3];
for m in 0..3 { for m in 0..3 {
position_Delta[m] position_Delta[m] =
.as_mut_ptr() bodies[i].position[m] - bodies[j].position[m];
.write(bodies[i].position[m] - bodies[j].position[m]);
} }
let position_Delta: [f64; 3] = mem::transmute(position_Delta); let position_Delta: [f64; 3] = mem::transmute(position_Delta);
energy -= bodies[i].mass * bodies[j].mass energy -= bodies[i].mass * bodies[j].mass / f64::sqrt(
/ f64::sqrt(
position_Delta[0] * position_Delta[0] position_Delta[0] * position_Delta[0]
+ position_Delta[1] * position_Delta[1] + position_Delta[1] * position_Delta[1]
+ position_Delta[2] * position_Delta[2], + position_Delta[2] * position_Delta[2]);
);
} }
} }