Skip to content

Commit ede7791

Browse files
crystal-growthiliekturtles
authored andcommitted
Add TemperatureGradient quantity with related units.
1 parent 1ff2f3a commit ede7791

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed

src/si/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ system! {
113113
specific_heat_capacity::SpecificHeatCapacity,
114114
surface_electric_current_density::SurfaceElectricCurrentDensity,
115115
temperature_coefficient::TemperatureCoefficient,
116+
temperature_gradient::TemperatureGradient,
116117
temperature_interval::TemperatureInterval,
117118
thermal_conductivity::ThermalConductivity,
118119
thermodynamic_temperature::ThermodynamicTemperature,

src/si/temperature_gradient.rs

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
//! Temperature gradient (base unit kelvin per meter, m⁻¹ · K).
2+
3+
quantity! {
4+
/// Temperature gradient (base unit kelvin per meter, m⁻¹ · K).
5+
quantity: TemperatureGradient; "temperature gradient";
6+
/// Dimension of temperature gradient, L⁻¹Th (base unit kelvin per meter, K · m⁻¹).
7+
dimension: ISQ<
8+
N1, // length
9+
Z0, // mass
10+
Z0, // time
11+
Z0, // electric current
12+
P1, // thermodynamic temperature
13+
Z0, // amount of substance
14+
Z0>; // luminous intensity
15+
units {
16+
@kelvin_per_kilometer: prefix!(none) / prefix!(kilo); "K/km", "kelvin per kilometer",
17+
"kelvins per kilometer";
18+
@kelvin_per_hectometer: prefix!(none) / prefix!(hecto); "K/hm", "kelvin per hectometer",
19+
"kelvins per hectometer";
20+
@kelvin_per_meter: prefix!(none); "K/m", "kelvin per meter", "kelvins per meter";
21+
@kelvin_per_centimeter: prefix!(none) / prefix!(centi); "K/cm", "kelvin per centimeter",
22+
"kelvins per centimeter";
23+
@kelvin_per_millimeter: prefix!(none) / prefix!(milli); "K/mm", "kelvin per millimeter",
24+
"kelvins per millimeter";
25+
@kelvin_per_micrometer: prefix!(none) / prefix!(micro); "K/µm", "kelvin per micrometer",
26+
"kelvins per micrometer";
27+
}
28+
}
29+
30+
#[cfg(test)]
31+
mod test {
32+
storage_types! {
33+
use crate::num::One;
34+
use crate::si::temperature_gradient as tg;
35+
use crate::si::temperature_interval as ti;
36+
use crate::si::quantities::*;
37+
use crate::si::length as l;
38+
use crate::tests::Test;
39+
40+
#[test]
41+
fn check_dimension() {
42+
let _: TemperatureGradient<V> = TemperatureInterval::new::<ti::kelvin>(V::one())
43+
/ Length::new::<l::meter>(V::one());
44+
}
45+
46+
#[test]
47+
fn check_units() {
48+
test::<ti::kelvin, l::meter, tg::kelvin_per_meter>();
49+
test::<ti::kelvin, l::centimeter, tg::kelvin_per_centimeter>();
50+
test::<ti::kelvin, l::millimeter, tg::kelvin_per_millimeter>();
51+
test::<ti::kelvin, l::micrometer, tg::kelvin_per_micrometer>();
52+
test::<ti::kelvin, l::hectometer, tg::kelvin_per_hectometer>();
53+
test::<ti::kelvin, l::kilometer, tg::kelvin_per_kilometer>();
54+
55+
fn test<TI: ti::Conversion<V>, L: l::Conversion<V>, TG: tg::Conversion<V>>() {
56+
Test::assert_approx_eq(&TemperatureGradient::new::<TG>(V::one()),
57+
&(TemperatureInterval::new::<TI>(V::one())
58+
/ Length::new::<L>(V::one())));
59+
}
60+
}
61+
}
62+
}

0 commit comments

Comments
 (0)