Skip to content
Snippets Groups Projects
Commit 211800d8 authored by Aaron Councilman's avatar Aaron Councilman
Browse files

Avoid extra memory in cfd

parent 8c47ad93
No related branches found
No related tags found
1 merge request!186Rodinia
Pipeline #201729 passed
......@@ -231,11 +231,10 @@ const RK : usize = 3;
fn time_step<nelr: usize>(
j: usize,
old_variables: Variables::<nelr>,
variables: Variables::<nelr>,
step_factors: f32[nelr],
fluxes: Variables::<nelr>,
) -> Variables::<nelr> {
let variables : Variables::<nelr>;
for i = 0 to nelr {
let factor = step_factors[i] / (RK + 1 - j) as f32;
......@@ -245,7 +244,7 @@ fn time_step<nelr: usize>(
variables.momentum.z[i] = old_variables.momentum.z[i] + factor * fluxes.momentum.z[i];
variables.energy[i] = old_variables.energy[i] + factor * fluxes.energy[i];
}
return variables;
}
......@@ -286,7 +285,7 @@ fn euler<nelr: usize>(
ff_flux_contribution_momentum_x,
ff_flux_contribution_momentum_y,
ff_flux_contribution_momentum_z);
variables = time_step::<nelr>(j, old_variables, step_factors, fluxes);
variables = time_step::<nelr>(j, old_variables, variables, step_factors, fluxes);
}
}
......
......@@ -34,7 +34,7 @@ fn run_euler(
ff_fc_momentum_y: &Float3,
ff_fc_momentum_z: &Float3,
) -> Vec<f32> {
let variables = HerculesImmBox::from(variables.as_slice());
let mut variables = HerculesMutBox::from(variables);
let areas = HerculesImmBox::from(areas);
let elements_surrounding_elements = HerculesImmBox::from(elements_surrounding_elements);
let normals = HerculesImmBox::from(normals);
......@@ -87,7 +87,7 @@ fn run_pre_euler(
ff_fc_momentum_y: &Float3,
ff_fc_momentum_z: &Float3,
) -> Vec<f32> {
let variables = HerculesImmBox::from(variables.as_slice());
let mut variables = HerculesMutBox::from(variables);
let areas = HerculesImmBox::from(areas);
let elements_surrounding_elements = HerculesImmBox::from(elements_surrounding_elements);
let normals = HerculesImmBox::from(normals);
......@@ -223,6 +223,14 @@ fn cfd_harness(args: CFDInputs) {
};
if !compare_floats(&res_juno, &res_rust) {
let len = res_juno.len();
let diff = res_juno
.into_iter()
.zip(res_rust.into_iter())
.enumerate()
.filter(|(_, (x, y))| !compare_float(*x, *y))
.collect::<Vec<_>>();
println!("Diff at {} of {}", diff.len(), len);
panic!("Mismatch in results");
}
}
......
......@@ -310,21 +310,20 @@ const RK : usize = 3;
fn time_step<nelr: usize>(
j: usize,
old_variables: Variables::<nelr>,
variables: Variables::<nelr>,
step_factors: f32[nelr],
fluxes: Variables::<nelr>,
) -> Variables::<nelr> {
let variables : Variables::<nelr>;
for i = 0 to nelr {
let factor = step_factors[i] / (RK + 1 - j) as f32;
variables.density[i] = old_variables.density[i] + factor * fluxes.density[i];
variables.energy[i] = old_variables.energy[i] + factor * fluxes.energy[i];
variables.momentum.x[i] = old_variables.momentum.x[i] + factor * fluxes.momentum.x[i];
variables.momentum.y[i] = old_variables.momentum.y[i] + factor * fluxes.momentum.y[i];
variables.momentum.z[i] = old_variables.momentum.z[i] + factor * fluxes.momentum.z[i];
variables.energy[i] = old_variables.energy[i] + factor * fluxes.energy[i];
}
return variables;
}
......@@ -367,7 +366,7 @@ fn pre_euler<nelr: usize>(
fc_momentum_y, fc_momentum_z, fc_density_energy,
ff_fc_density_energy, ff_fc_momentum_x,
ff_fc_momentum_y, ff_fc_momentum_z);
variables = time_step::<nelr>(j, old_variables, step_factors, fluxes);
variables = time_step::<nelr>(j, old_variables, variables, step_factors, fluxes);
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment