Skip to content

Commit b409de7

Browse files
committed
Add check on maximum number density to catch errors.
1 parent 51587bd commit b409de7

4 files changed

Lines changed: 13 additions & 3 deletions

File tree

‎src/consts.rs‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,6 @@ pub const TABLE_SIZE: usize = Z_MAX*(Z_MAX + 1)/2;
4444
/// Gauss-Legendre Points
4545
pub const GL_X: [f64; 5] = [0./2. + 1./2., -0.538469/2. + 1./2., 0.538469/2. + 1./2., -0.90618/2. + 1./2., 0.90618/2. + 1./2.];
4646
/// Gauss-Legendre Weights
47-
pub const GL_W: [f64; 5] = [0.568889/2., 0.478629/2., 0.478629/2., 0.236927/2., 0.236927/2.];
47+
pub const GL_W: [f64; 5] = [0.568889/2., 0.478629/2., 0.478629/2., 0.236927/2., 0.236927/2.];
48+
/// Enforced maximum number density
49+
pub const MAX_DENSITY: f64 = 1e32;

‎src/geometry.rs‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,9 @@ impl Geometry for Mesh0D {
6565

6666
let densities: Vec<f64> = input.densities.iter().map(|element| element/(length_unit).powi(3)).collect();
6767
assert!(!densities.is_empty(), "Input Error: density list empty.");
68-
68+
6969
let total_density: f64 = densities.iter().sum();
70+
assert!(total_density < MAX_DENSITY, "Input Error: total density {}/m^3 exceeds realistic values; check values or units.", total_density);
7071

7172
let energy_barrier_thickness = 1./total_density.cbrt()/SQRTPI*2.;
7273

@@ -154,6 +155,7 @@ impl Geometry for Mesh1D {
154155
let densities: Vec<Vec<f64>> = geometry_input.densities
155156
.iter()
156157
.map( |row| row.iter().map(|element| element/(length_unit).powi(3)).collect() ).collect();
158+
157159

158160
//Assert all layer density lists are equal length
159161
assert!(
@@ -170,6 +172,7 @@ impl Geometry for Mesh1D {
170172
layer_bottom += layer_thickness*length_unit;
171173

172174
let total_density: f64 = densities.iter().sum();
175+
assert!(total_density < MAX_DENSITY, "Input Error: total density {}/m^3 exceeds realistic values; check values or units.", total_density);
173176
let concentrations: Vec<f64> = densities.iter().map(|&density| density/total_density).collect::<Vec<f64>>();
174177

175178
layers.push(Layer1D::new(layer_top, layer_bottom, densities, concentrations, ck));
@@ -308,6 +311,7 @@ impl Geometry for HomogeneousMesh2D {
308311
let densities: Vec<f64> = input.densities.iter().map(|element| element/(length_unit).powi(3)).collect();
309312

310313
let total_density: f64 = densities.iter().sum();
314+
assert!(total_density < MAX_DENSITY, "Input Error: total density {}/m^3 exceeds realistic values; check values or units.", total_density);
311315

312316
let energy_barrier_thickness = 1./total_density.cbrt()/SQRTPI*2.;
313317

@@ -476,6 +480,7 @@ impl Geometry for Mesh2D {
476480
y3*length_unit,
477481
);
478482
let total_density: f64 = densities.iter().sum();
483+
assert!(total_density < MAX_DENSITY, "Input Error: total density {}/m^3 exceeds realistic values; check values or units.", total_density);
479484
let concentrations: Vec<f64> = densities.iter().map(|&density| density/total_density).collect::<Vec<f64>>();
480485

481486
cells.push(Cell2D::new(coordinate_set_converted, densities, concentrations, ck));

‎src/parry.rs‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ impl Geometry for ParryBall {
7777
let electronic_stopping_correction_factor = input.electronic_stopping_correction_factor;
7878
let densities: Vec<f64> = input.densities.iter().map(|element| element/(length_unit).powi(3)).collect();
7979
let total_density: f64 = densities.iter().sum();
80+
assert!(total_density < MAX_DENSITY, "Input Error: total density {}/m^3 exceeds realistic values; check values or units.", total_density);
8081
let energy_barrier_thickness = total_density.powf(-1./3.)/SQRTPI*2.;
8182
let concentrations: Vec<f64> = densities.iter().map(|&density| density/total_density).collect::<Vec<f64>>();
8283
let radius = input.radius*length_unit;
@@ -201,6 +202,7 @@ impl Geometry for ParryTriMesh {
201202
let electronic_stopping_correction_factor = input.electronic_stopping_correction_factor;
202203
let densities: Vec<f64> = input.densities.iter().map(|element| element/(length_unit).powi(3)).collect();
203204
let total_density: f64 = densities.iter().sum();
205+
assert!(total_density < MAX_DENSITY, "Input Error: total density {}/m^3 exceeds realistic values; check values or units.", total_density);
204206
let energy_barrier_thickness = total_density.powf(-1./3.)/SQRTPI*2.;
205207
let concentrations: Vec<f64> = densities.iter().map(|&density| density/total_density).collect::<Vec<f64>>();
206208
let points = input.vertices.iter().map(|p| Point::new(p[0]*length_unit , p[1]*length_unit , p[2]*length_unit)).collect();

‎src/sphere.rs‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,14 @@ impl Geometry for Sphere {
6363
"NM" => NM,
6464
"M" => 1.,
6565
_ => input.length_unit.parse()
66-
.unwrap_or_else(|_| panic!("Input errror: could nor parse length unit {}. Use a valid float or one of ANGSTROM, NM, MICRON, CM, MM, M",
66+
.unwrap_or_else(|_| panic!("Input errror: could nor parse length unit {}. Use a valid float or one of ANGSTROM, NM, MICRON, CM, MM, M",
6767
&input.length_unit.as_str())),
6868
};
6969

7070
let electronic_stopping_correction_factor = input.electronic_stopping_correction_factor;
7171
let densities: Vec<f64> = input.densities.iter().map(|element| element/(length_unit).powi(3)).collect();
7272
let total_density: f64 = densities.iter().sum();
73+
assert!(total_density < MAX_DENSITY, "Input Error: total density {}/m^3 exceeds realistic values; check values or units.", total_density);
7374
let energy_barrier_thickness = total_density.powf(-1./3.)/SQRTPI*2.;
7475
let concentrations: Vec<f64> = densities.iter().map(|&density| density/total_density).collect::<Vec<f64>>();
7576
let radius = input.radius*length_unit;

0 commit comments

Comments
 (0)