1use crate::impl_macros::macros::*;
2use crate::prelude::*;
3use crate::quantities::*;
4use ndarray::{Array1, Array2, ArrayView1, ArrayView2};
5use num_traits::identities::Zero;
6use num_traits::FromPrimitive;
7use std::cmp::Ordering;
8use std::fmt;
9use std::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Neg, Sub, SubAssign};
10#[cfg(feature = "pyo3")]
11use pyo3::pyclass;
12#[cfg(feature = "serde")]
13use serde::{Deserialize, Serialize};
14
15#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
16#[derive(Copy, Clone, PartialEq, Debug)]
17#[cfg_attr(feature = "pyo3", pyclass(eq, eq_int))]
18pub enum DensityUnit {
19 kg_dmcb,
20 kg_mcb,
21 g_cmcb,
22 g_mcb,
23 lb_ftcb,
24 lb_incb,
25}
26
27impl PhysicsUnit for DensityUnit {
28 fn name(&self) -> &str {
29 match &self {
30 DensityUnit::kg_dmcb => "kg/dm³",
31 DensityUnit::kg_mcb => "kg/m³",
32 DensityUnit::g_cmcb => "g/cm³",
33 DensityUnit::g_mcb => "g/m³",
34 DensityUnit::lb_ftcb => "lb/ft³",
35 DensityUnit::lb_incb => "lb/in³",
36 }
37 }
38
39 fn base_per_x(&self) -> (f64, i32) {
40 match self {
41 DensityUnit::kg_dmcb => (1.0, 3),
42 DensityUnit::kg_mcb => (1.0, 0),
43 DensityUnit::g_cmcb => (1.0, 3),
44 DensityUnit::g_mcb => (1.0, -3),
45 DensityUnit::lb_ftcb => (1.60185, 1),
46 DensityUnit::lb_incb => (2.76799, 4),
47 }
48 }
49}
50
51impl_const!(Density, aluminium, 2.7, 3);
52impl_const!(Density, water, 1., 3);
53impl_const!(Density, air, 1.225, 0);
54impl_const!(Density, steel, 7.78, 3);
55impl_const!(Density, graphit, 2.26, 3);
56impl_const!(Density, diamant, 3.51, 3);
57impl_const!(Density, lithium, 5.34, 2);
58impl_const!(Density, chrome, 7.14, 3);
59impl_const!(Density, copper, 8.92, 3);
60impl_const!(Density, zink, 7.14, 3);
61impl_const!(Density, nickel, 8.907, 3);
62impl_const!(Density, lead, 1.1342, 4);
63impl_const!(Density, beryllium, 1.845, 3);
64impl_const!(Density, bor, 2.35, 3);
65impl_const!(Density, natrium, 9.68, 2);
66impl_const!(Density, magnesium, 1.737, 3);
67impl_const!(Density, silicium, 2.336, 3);
68impl_const!(Density, sulfur, 2.07, 3);
69impl_const!(Density, potassium, 8.56, 2);
70impl_const!(Density, scandium, 2.989, 3);
71impl_const!(Density, titanium, 4.5, 3);
72impl_const!(Density, vanadium, 6.099, 3);
73impl_const!(Density, manganese, 7.476, 3);
74impl_const!(Density, iron, 7.874, 3);
75impl_const!(Density, cobalt, 8.834, 3);
76impl_const!(Density, germanium, 5.327, 3);
77impl_const!(Density, arsenic, 5.782, 3);
78impl_const!(Density, rubidium, 1.534, 3);
79impl_const!(Density, yttrium, 4.469, 3);
80impl_const!(Density, zirconium, 6.505, 3);
81impl_const!(Density, niobium, 8.582, 3);
82impl_const!(Density, molybdenum, 1.0223, 4);
83impl_const!(Density, ruthenium, 1.2364, 4);
84impl_const!(Density, rhodium, 1.2423, 4);
85impl_const!(Density, palladium, 1.2007, 4);
86impl_const!(Density, silver, 1.0503, 4);
87impl_const!(Density, cadmium, 8.649, 3);
88impl_const!(Density, indium, 7.290, 3);
89impl_const!(Density, tin, 7.31, 3);
90impl_const!(Density, antimony, 6.694, 3);
91impl_const!(Density, tellurium, 6.237, 3);
92impl_const!(Density, iodine, 4.944, 3);
93impl_const!(Density, caesium, 1.886, 3);
94impl_const!(Density, barium, 3.594, 3);
95impl_const!(Density, lutetium, 9.84, 3);
96impl_const!(Density, hafnium, 13.281, 3);
97impl_const!(Density, tantalum, 16.678, 3);
98impl_const!(Density, tungsten, 1.9254, 4);
99impl_const!(Density, rhenium, 2.1010, 4);
100impl_const!(Density, osmium, 2.2587, 4);
101impl_const!(Density, iridium, 2.2562, 4);
102impl_const!(Density, platinum, 2.1452, 4);
103impl_const!(Density, gold, 1.9283, 4);
104impl_const!(Density, mercury, 1.3546, 4);
105impl_const!(Density, thallium, 1.1873, 4);
106impl_const!(Density, bismuth, 9.807, 3);
107impl_const!(Density, polonium, 9.4, 3);
108impl_const!(Density, francium, 2.458, 3);
109impl_const!(Density, radium, 5.5, 3);
110impl_const!(Density, lawrencium, 1.44, 4);
111impl_const!(Density, rutherfordium, 1.7, 4);
112impl_const!(Density, cerium, 6.7, 3);
113impl_const!(Density, praseodymium, 6.773, 3);
114impl_const!(Density, neodymium, 7.007, 3);
115impl_const!(Density, promethium, 7.2, 3);
116impl_const!(Density, samarium, 7.518, 3);
117impl_const!(Density, europium, 5.246, 3);
118impl_const!(Density, gadolinium, 7.899, 3);
119impl_const!(Density, terbium, 8.229, 3);
120impl_const!(Density, dysprosium, 8.55, 3);
121impl_const!(Density, holmium, 8.795, 3);
122impl_const!(Density, erbium, 9.065, 3);
123impl_const!(Density, ytterbium, 6.967, 3);
124impl_const!(Density, actinium, 1., 4);
125impl_const!(Density, protactinium, 1.543, 4);
126impl_const!(Density, uranium, 1.905, 4);
127impl_const!(Density, neptunium, 2.048, 4);
128impl_const!(Density, plutonium, 1.985, 4);
129impl_const!(Density, americium, 12., 4);
130impl_const!(Density, curium, 13.51, 4);
131
132impl_quantity!(Density, DensityUnit, DensityUnit::kg_dmcb);
133impl_div_with_self_to_f64!(Density);
134
135impl_div!(Density, Volume, Mass);