1
2use core::fmt;
5use super::UnitStruct;
6use super::NumLike;
7use super::base::*;
8use super::geometry::*;
9use super::mechanical::*;
10use super::nuclear::*;
11
12#[cfg(feature="serde")]
14use serde::{Serialize, Deserialize};
15#[cfg(feature="num-bigfloat")]
16use num_bigfloat;
17#[cfg(feature="num-complex")]
18use num_complex;
19
20
21
22#[derive(UnitStruct, Debug, Clone)]
24#[cfg_attr(feature="serde", derive(Serialize, Deserialize))]
25pub struct CatalyticActivity<T: NumLike>{
26 pub molps: T
28}
29
30impl<T> CatalyticActivity<T> where T: NumLike {
31
32 pub fn unit_name() -> &'static str { "moles per second" }
34
35 pub fn unit_symbol() -> &'static str { "mol/s" }
37
38 pub fn from_molps(molps: T) -> Self { CatalyticActivity{molps: molps} }
43
44 pub fn to_molps(&self) -> T { self.molps.clone() }
46
47 pub fn from_moles_per_second(moles_per_second: T) -> Self { CatalyticActivity{molps: moles_per_second} }
52
53 pub fn to_moles_per_second(&self) -> T { self.molps.clone() }
55
56}
57
58impl<T> fmt::Display for CatalyticActivity<T> where T: NumLike {
59 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
60 write!(f, "{} {}", &self.molps, Self::unit_symbol())
61 }
62}
63
64impl<T> CatalyticActivity<T> where T: NumLike+From<f64> {
65
66 pub fn to_Nps(&self) -> T {
70 return self.molps.clone() * T::from(6.02214076e+23_f64);
71 }
72
73 pub fn from_Nps(Nps: T) -> Self {
80 CatalyticActivity{molps: Nps * T::from(1.66053906717385e-24_f64)}
81 }
82
83 pub fn to_mmolps(&self) -> T {
87 return self.molps.clone() * T::from(1000.0_f64);
88 }
89
90 pub fn from_mmolps(mmolps: T) -> Self {
97 CatalyticActivity{molps: mmolps * T::from(0.001_f64)}
98 }
99
100 pub fn to_umolps(&self) -> T {
104 return self.molps.clone() * T::from(1000000.0_f64);
105 }
106
107 pub fn from_umolps(umolps: T) -> Self {
114 CatalyticActivity{molps: umolps * T::from(1e-06_f64)}
115 }
116
117 pub fn to_nmolps(&self) -> T {
121 return self.molps.clone() * T::from(1000000000.0_f64);
122 }
123
124 pub fn from_nmolps(nmolps: T) -> Self {
131 CatalyticActivity{molps: nmolps * T::from(1e-09_f64)}
132 }
133
134}
135
136
137#[cfg(feature="num-bigfloat")]
139impl core::ops::Mul<CatalyticActivity<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
140 type Output = CatalyticActivity<num_bigfloat::BigFloat>;
141 fn mul(self, rhs: CatalyticActivity<num_bigfloat::BigFloat>) -> Self::Output {
142 CatalyticActivity{molps: self * rhs.molps}
143 }
144}
145#[cfg(feature="num-bigfloat")]
147impl core::ops::Mul<CatalyticActivity<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
148 type Output = CatalyticActivity<num_bigfloat::BigFloat>;
149 fn mul(self, rhs: CatalyticActivity<num_bigfloat::BigFloat>) -> Self::Output {
150 CatalyticActivity{molps: self.clone() * rhs.molps}
151 }
152}
153#[cfg(feature="num-bigfloat")]
155impl core::ops::Mul<&CatalyticActivity<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
156 type Output = CatalyticActivity<num_bigfloat::BigFloat>;
157 fn mul(self, rhs: &CatalyticActivity<num_bigfloat::BigFloat>) -> Self::Output {
158 CatalyticActivity{molps: self * rhs.molps.clone()}
159 }
160}
161#[cfg(feature="num-bigfloat")]
163impl core::ops::Mul<&CatalyticActivity<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
164 type Output = CatalyticActivity<num_bigfloat::BigFloat>;
165 fn mul(self, rhs: &CatalyticActivity<num_bigfloat::BigFloat>) -> Self::Output {
166 CatalyticActivity{molps: self.clone() * rhs.molps.clone()}
167 }
168}
169
170#[cfg(feature="num-complex")]
172impl core::ops::Mul<CatalyticActivity<num_complex::Complex32>> for num_complex::Complex32 {
173 type Output = CatalyticActivity<num_complex::Complex32>;
174 fn mul(self, rhs: CatalyticActivity<num_complex::Complex32>) -> Self::Output {
175 CatalyticActivity{molps: self * rhs.molps}
176 }
177}
178#[cfg(feature="num-complex")]
180impl core::ops::Mul<CatalyticActivity<num_complex::Complex32>> for &num_complex::Complex32 {
181 type Output = CatalyticActivity<num_complex::Complex32>;
182 fn mul(self, rhs: CatalyticActivity<num_complex::Complex32>) -> Self::Output {
183 CatalyticActivity{molps: self.clone() * rhs.molps}
184 }
185}
186#[cfg(feature="num-complex")]
188impl core::ops::Mul<&CatalyticActivity<num_complex::Complex32>> for num_complex::Complex32 {
189 type Output = CatalyticActivity<num_complex::Complex32>;
190 fn mul(self, rhs: &CatalyticActivity<num_complex::Complex32>) -> Self::Output {
191 CatalyticActivity{molps: self * rhs.molps.clone()}
192 }
193}
194#[cfg(feature="num-complex")]
196impl core::ops::Mul<&CatalyticActivity<num_complex::Complex32>> for &num_complex::Complex32 {
197 type Output = CatalyticActivity<num_complex::Complex32>;
198 fn mul(self, rhs: &CatalyticActivity<num_complex::Complex32>) -> Self::Output {
199 CatalyticActivity{molps: self.clone() * rhs.molps.clone()}
200 }
201}
202
203#[cfg(feature="num-complex")]
205impl core::ops::Mul<CatalyticActivity<num_complex::Complex64>> for num_complex::Complex64 {
206 type Output = CatalyticActivity<num_complex::Complex64>;
207 fn mul(self, rhs: CatalyticActivity<num_complex::Complex64>) -> Self::Output {
208 CatalyticActivity{molps: self * rhs.molps}
209 }
210}
211#[cfg(feature="num-complex")]
213impl core::ops::Mul<CatalyticActivity<num_complex::Complex64>> for &num_complex::Complex64 {
214 type Output = CatalyticActivity<num_complex::Complex64>;
215 fn mul(self, rhs: CatalyticActivity<num_complex::Complex64>) -> Self::Output {
216 CatalyticActivity{molps: self.clone() * rhs.molps}
217 }
218}
219#[cfg(feature="num-complex")]
221impl core::ops::Mul<&CatalyticActivity<num_complex::Complex64>> for num_complex::Complex64 {
222 type Output = CatalyticActivity<num_complex::Complex64>;
223 fn mul(self, rhs: &CatalyticActivity<num_complex::Complex64>) -> Self::Output {
224 CatalyticActivity{molps: self * rhs.molps.clone()}
225 }
226}
227#[cfg(feature="num-complex")]
229impl core::ops::Mul<&CatalyticActivity<num_complex::Complex64>> for &num_complex::Complex64 {
230 type Output = CatalyticActivity<num_complex::Complex64>;
231 fn mul(self, rhs: &CatalyticActivity<num_complex::Complex64>) -> Self::Output {
232 CatalyticActivity{molps: self.clone() * rhs.molps.clone()}
233 }
234}
235
236
237
238#[cfg(feature = "uom")]
240impl<T> Into<uom::si::f32::CatalyticActivity> for CatalyticActivity<T> where T: NumLike+Into<f32> {
241 fn into(self) -> uom::si::f32::CatalyticActivity {
242 uom::si::f32::CatalyticActivity::new::<uom::si::catalytic_activity::mole_per_second>(self.molps.into())
243 }
244}
245
246#[cfg(feature = "uom")]
248impl<T> From<uom::si::f32::CatalyticActivity> for CatalyticActivity<T> where T: NumLike+From<f32> {
249 fn from(src: uom::si::f32::CatalyticActivity) -> Self {
250 CatalyticActivity{molps: T::from(src.value)}
251 }
252}
253
254#[cfg(feature = "uom")]
256impl<T> Into<uom::si::f64::CatalyticActivity> for CatalyticActivity<T> where T: NumLike+Into<f64> {
257 fn into(self) -> uom::si::f64::CatalyticActivity {
258 uom::si::f64::CatalyticActivity::new::<uom::si::catalytic_activity::mole_per_second>(self.molps.into())
259 }
260}
261
262#[cfg(feature = "uom")]
264impl<T> From<uom::si::f64::CatalyticActivity> for CatalyticActivity<T> where T: NumLike+From<f64> {
265 fn from(src: uom::si::f64::CatalyticActivity) -> Self {
266 CatalyticActivity{molps: T::from(src.value)}
267 }
268}
269
270
271impl<T> core::ops::Div<Amount<T>> for CatalyticActivity<T> where T: NumLike {
274 type Output = Frequency<T>;
275 fn div(self, rhs: Amount<T>) -> Self::Output {
276 Frequency{Hz: self.molps / rhs.mol}
277 }
278}
279impl<T> core::ops::Div<Amount<T>> for &CatalyticActivity<T> where T: NumLike {
281 type Output = Frequency<T>;
282 fn div(self, rhs: Amount<T>) -> Self::Output {
283 Frequency{Hz: self.molps.clone() / rhs.mol}
284 }
285}
286impl<T> core::ops::Div<&Amount<T>> for CatalyticActivity<T> where T: NumLike {
288 type Output = Frequency<T>;
289 fn div(self, rhs: &Amount<T>) -> Self::Output {
290 Frequency{Hz: self.molps / rhs.mol.clone()}
291 }
292}
293impl<T> core::ops::Div<&Amount<T>> for &CatalyticActivity<T> where T: NumLike {
295 type Output = Frequency<T>;
296 fn div(self, rhs: &Amount<T>) -> Self::Output {
297 Frequency{Hz: self.molps.clone() / rhs.mol.clone()}
298 }
299}
300
301impl<T> core::ops::Mul<InverseAmount<T>> for CatalyticActivity<T> where T: NumLike {
304 type Output = Frequency<T>;
305 fn mul(self, rhs: InverseAmount<T>) -> Self::Output {
306 Frequency{Hz: self.molps * rhs.per_mol}
307 }
308}
309impl<T> core::ops::Mul<InverseAmount<T>> for &CatalyticActivity<T> where T: NumLike {
311 type Output = Frequency<T>;
312 fn mul(self, rhs: InverseAmount<T>) -> Self::Output {
313 Frequency{Hz: self.molps.clone() * rhs.per_mol}
314 }
315}
316impl<T> core::ops::Mul<&InverseAmount<T>> for CatalyticActivity<T> where T: NumLike {
318 type Output = Frequency<T>;
319 fn mul(self, rhs: &InverseAmount<T>) -> Self::Output {
320 Frequency{Hz: self.molps * rhs.per_mol.clone()}
321 }
322}
323impl<T> core::ops::Mul<&InverseAmount<T>> for &CatalyticActivity<T> where T: NumLike {
325 type Output = Frequency<T>;
326 fn mul(self, rhs: &InverseAmount<T>) -> Self::Output {
327 Frequency{Hz: self.molps.clone() * rhs.per_mol.clone()}
328 }
329}
330
331impl<T> core::ops::Mul<Time<T>> for CatalyticActivity<T> where T: NumLike {
334 type Output = Amount<T>;
335 fn mul(self, rhs: Time<T>) -> Self::Output {
336 Amount{mol: self.molps * rhs.s}
337 }
338}
339impl<T> core::ops::Mul<Time<T>> for &CatalyticActivity<T> where T: NumLike {
341 type Output = Amount<T>;
342 fn mul(self, rhs: Time<T>) -> Self::Output {
343 Amount{mol: self.molps.clone() * rhs.s}
344 }
345}
346impl<T> core::ops::Mul<&Time<T>> for CatalyticActivity<T> where T: NumLike {
348 type Output = Amount<T>;
349 fn mul(self, rhs: &Time<T>) -> Self::Output {
350 Amount{mol: self.molps * rhs.s.clone()}
351 }
352}
353impl<T> core::ops::Mul<&Time<T>> for &CatalyticActivity<T> where T: NumLike {
355 type Output = Amount<T>;
356 fn mul(self, rhs: &Time<T>) -> Self::Output {
357 Amount{mol: self.molps.clone() * rhs.s.clone()}
358 }
359}
360
361impl<T> core::ops::Div<Frequency<T>> for CatalyticActivity<T> where T: NumLike {
364 type Output = Amount<T>;
365 fn div(self, rhs: Frequency<T>) -> Self::Output {
366 Amount{mol: self.molps / rhs.Hz}
367 }
368}
369impl<T> core::ops::Div<Frequency<T>> for &CatalyticActivity<T> where T: NumLike {
371 type Output = Amount<T>;
372 fn div(self, rhs: Frequency<T>) -> Self::Output {
373 Amount{mol: self.molps.clone() / rhs.Hz}
374 }
375}
376impl<T> core::ops::Div<&Frequency<T>> for CatalyticActivity<T> where T: NumLike {
378 type Output = Amount<T>;
379 fn div(self, rhs: &Frequency<T>) -> Self::Output {
380 Amount{mol: self.molps / rhs.Hz.clone()}
381 }
382}
383impl<T> core::ops::Div<&Frequency<T>> for &CatalyticActivity<T> where T: NumLike {
385 type Output = Amount<T>;
386 fn div(self, rhs: &Frequency<T>) -> Self::Output {
387 Amount{mol: self.molps.clone() / rhs.Hz.clone()}
388 }
389}
390
391impl<T> core::ops::Div<CatalyticActivity<T>> for f64 where T: NumLike+From<f64> {
394 type Output = InverseCatalyticActivity<T>;
395 fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
396 InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps}
397 }
398}
399impl<T> core::ops::Div<CatalyticActivity<T>> for &f64 where T: NumLike+From<f64> {
401 type Output = InverseCatalyticActivity<T>;
402 fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
403 InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps}
404 }
405}
406impl<T> core::ops::Div<&CatalyticActivity<T>> for f64 where T: NumLike+From<f64> {
408 type Output = InverseCatalyticActivity<T>;
409 fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
410 InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps.clone()}
411 }
412}
413impl<T> core::ops::Div<&CatalyticActivity<T>> for &f64 where T: NumLike+From<f64> {
415 type Output = InverseCatalyticActivity<T>;
416 fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
417 InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps.clone()}
418 }
419}
420
421impl<T> core::ops::Div<CatalyticActivity<T>> for f32 where T: NumLike+From<f32> {
424 type Output = InverseCatalyticActivity<T>;
425 fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
426 InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps}
427 }
428}
429impl<T> core::ops::Div<CatalyticActivity<T>> for &f32 where T: NumLike+From<f32> {
431 type Output = InverseCatalyticActivity<T>;
432 fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
433 InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps}
434 }
435}
436impl<T> core::ops::Div<&CatalyticActivity<T>> for f32 where T: NumLike+From<f32> {
438 type Output = InverseCatalyticActivity<T>;
439 fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
440 InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps.clone()}
441 }
442}
443impl<T> core::ops::Div<&CatalyticActivity<T>> for &f32 where T: NumLike+From<f32> {
445 type Output = InverseCatalyticActivity<T>;
446 fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
447 InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps.clone()}
448 }
449}
450
451impl<T> core::ops::Div<CatalyticActivity<T>> for i64 where T: NumLike+From<i64> {
454 type Output = InverseCatalyticActivity<T>;
455 fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
456 InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps}
457 }
458}
459impl<T> core::ops::Div<CatalyticActivity<T>> for &i64 where T: NumLike+From<i64> {
461 type Output = InverseCatalyticActivity<T>;
462 fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
463 InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps}
464 }
465}
466impl<T> core::ops::Div<&CatalyticActivity<T>> for i64 where T: NumLike+From<i64> {
468 type Output = InverseCatalyticActivity<T>;
469 fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
470 InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps.clone()}
471 }
472}
473impl<T> core::ops::Div<&CatalyticActivity<T>> for &i64 where T: NumLike+From<i64> {
475 type Output = InverseCatalyticActivity<T>;
476 fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
477 InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps.clone()}
478 }
479}
480
481impl<T> core::ops::Div<CatalyticActivity<T>> for i32 where T: NumLike+From<i32> {
484 type Output = InverseCatalyticActivity<T>;
485 fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
486 InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps}
487 }
488}
489impl<T> core::ops::Div<CatalyticActivity<T>> for &i32 where T: NumLike+From<i32> {
491 type Output = InverseCatalyticActivity<T>;
492 fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
493 InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps}
494 }
495}
496impl<T> core::ops::Div<&CatalyticActivity<T>> for i32 where T: NumLike+From<i32> {
498 type Output = InverseCatalyticActivity<T>;
499 fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
500 InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps.clone()}
501 }
502}
503impl<T> core::ops::Div<&CatalyticActivity<T>> for &i32 where T: NumLike+From<i32> {
505 type Output = InverseCatalyticActivity<T>;
506 fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
507 InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps.clone()}
508 }
509}
510
511#[cfg(feature="num-bigfloat")]
514impl<T> core::ops::Div<CatalyticActivity<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
515 type Output = InverseCatalyticActivity<T>;
516 fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
517 InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps}
518 }
519}
520#[cfg(feature="num-bigfloat")]
522impl<T> core::ops::Div<CatalyticActivity<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
523 type Output = InverseCatalyticActivity<T>;
524 fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
525 InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps}
526 }
527}
528#[cfg(feature="num-bigfloat")]
530impl<T> core::ops::Div<&CatalyticActivity<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
531 type Output = InverseCatalyticActivity<T>;
532 fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
533 InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps.clone()}
534 }
535}
536#[cfg(feature="num-bigfloat")]
538impl<T> core::ops::Div<&CatalyticActivity<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
539 type Output = InverseCatalyticActivity<T>;
540 fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
541 InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps.clone()}
542 }
543}
544
545#[cfg(feature="num-complex")]
548impl<T> core::ops::Div<CatalyticActivity<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
549 type Output = InverseCatalyticActivity<T>;
550 fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
551 InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps}
552 }
553}
554#[cfg(feature="num-complex")]
556impl<T> core::ops::Div<CatalyticActivity<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
557 type Output = InverseCatalyticActivity<T>;
558 fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
559 InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps}
560 }
561}
562#[cfg(feature="num-complex")]
564impl<T> core::ops::Div<&CatalyticActivity<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
565 type Output = InverseCatalyticActivity<T>;
566 fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
567 InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps.clone()}
568 }
569}
570#[cfg(feature="num-complex")]
572impl<T> core::ops::Div<&CatalyticActivity<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
573 type Output = InverseCatalyticActivity<T>;
574 fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
575 InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps.clone()}
576 }
577}
578
579#[cfg(feature="num-complex")]
582impl<T> core::ops::Div<CatalyticActivity<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
583 type Output = InverseCatalyticActivity<T>;
584 fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
585 InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps}
586 }
587}
588#[cfg(feature="num-complex")]
590impl<T> core::ops::Div<CatalyticActivity<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
591 type Output = InverseCatalyticActivity<T>;
592 fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
593 InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps}
594 }
595}
596#[cfg(feature="num-complex")]
598impl<T> core::ops::Div<&CatalyticActivity<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
599 type Output = InverseCatalyticActivity<T>;
600 fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
601 InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps.clone()}
602 }
603}
604#[cfg(feature="num-complex")]
606impl<T> core::ops::Div<&CatalyticActivity<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
607 type Output = InverseCatalyticActivity<T>;
608 fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
609 InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps.clone()}
610 }
611}
612
613#[derive(UnitStruct, Debug, Clone)]
615#[cfg_attr(feature="serde", derive(Serialize, Deserialize))]
616pub struct Concentration<T: NumLike>{
617 pub molpm3: T
619}
620
621impl<T> Concentration<T> where T: NumLike {
622
623 pub fn unit_name() -> &'static str { "moles per cubic meter" }
625
626 pub fn unit_symbol() -> &'static str { "mol/m³" }
628
629 pub fn from_molpm3(molpm3: T) -> Self { Concentration{molpm3: molpm3} }
634
635 pub fn to_molpm3(&self) -> T { self.molpm3.clone() }
637
638 pub fn from_moles_per_cubic_meter(moles_per_cubic_meter: T) -> Self { Concentration{molpm3: moles_per_cubic_meter} }
643
644 pub fn to_moles_per_cubic_meter(&self) -> T { self.molpm3.clone() }
646
647 pub fn from_mM(mM: T) -> Self { Concentration{molpm3: mM} }
652
653 pub fn to_mM(&self) -> T { self.molpm3.clone() }
655
656}
657
658impl<T> fmt::Display for Concentration<T> where T: NumLike {
659 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
660 write!(f, "{} {}", &self.molpm3, Self::unit_symbol())
661 }
662}
663
664impl<T> Concentration<T> where T: NumLike+From<f64> {
665
666 pub fn to_Npm3(&self) -> T {
670 return self.molpm3.clone() * T::from(6.02214076e+23_f64);
671 }
672
673 pub fn from_Npm3(Npm3: T) -> Self {
680 Concentration{molpm3: Npm3 * T::from(1.66053906717385e-24_f64)}
681 }
682
683 pub fn to_count_per_cubic_meter(&self) -> T {
687 return self.molpm3.clone() * T::from(6.02214076e+23_f64);
688 }
689
690 pub fn from_count_per_cubic_meter(count_per_cubic_meter: T) -> Self {
697 Concentration{molpm3: count_per_cubic_meter * T::from(1.66053906717385e-24_f64)}
698 }
699
700 pub fn to_NpL(&self) -> T {
704 return self.molpm3.clone() * T::from(6.02214076e+26_f64);
705 }
706
707 pub fn from_NpL(NpL: T) -> Self {
714 Concentration{molpm3: NpL * T::from(1.66053906717385e-21_f64)}
715 }
716
717 pub fn to_count_per_L(&self) -> T {
721 return self.molpm3.clone() * T::from(6.02214076e+26_f64);
722 }
723
724 pub fn from_count_per_L(count_per_L: T) -> Self {
731 Concentration{molpm3: count_per_L * T::from(1.66053906717385e-21_f64)}
732 }
733
734 pub fn to_Npcc(&self) -> T {
738 return self.molpm3.clone() * T::from(6.02214076e+29_f64);
739 }
740
741 pub fn from_Npcc(Npcc: T) -> Self {
748 Concentration{molpm3: Npcc * T::from(1.66053906717385e-18_f64)}
749 }
750
751 pub fn to_count_per_cc(&self) -> T {
755 return self.molpm3.clone() * T::from(6.02214076e+29_f64);
756 }
757
758 pub fn from_count_per_cc(count_per_cc: T) -> Self {
765 Concentration{molpm3: count_per_cc * T::from(1.66053906717385e-18_f64)}
766 }
767
768 pub fn to_M(&self) -> T {
772 return self.molpm3.clone() * T::from(0.001_f64);
773 }
774
775 pub fn from_M(M: T) -> Self {
782 Concentration{molpm3: M * T::from(1000.0_f64)}
783 }
784
785 pub fn to_molarity(&self) -> T {
789 return self.molpm3.clone() * T::from(0.001_f64);
790 }
791
792 pub fn from_molarity(molarity: T) -> Self {
799 Concentration{molpm3: molarity * T::from(1000.0_f64)}
800 }
801
802 pub fn to_uM(&self) -> T {
806 return self.molpm3.clone() * T::from(1000.0_f64);
807 }
808
809 pub fn from_uM(uM: T) -> Self {
816 Concentration{molpm3: uM * T::from(0.001_f64)}
817 }
818
819 pub fn to_nM(&self) -> T {
823 return self.molpm3.clone() * T::from(1000000.0_f64);
824 }
825
826 pub fn from_nM(nM: T) -> Self {
833 Concentration{molpm3: nM * T::from(1e-06_f64)}
834 }
835
836}
837
838
839#[cfg(feature="num-bigfloat")]
841impl core::ops::Mul<Concentration<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
842 type Output = Concentration<num_bigfloat::BigFloat>;
843 fn mul(self, rhs: Concentration<num_bigfloat::BigFloat>) -> Self::Output {
844 Concentration{molpm3: self * rhs.molpm3}
845 }
846}
847#[cfg(feature="num-bigfloat")]
849impl core::ops::Mul<Concentration<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
850 type Output = Concentration<num_bigfloat::BigFloat>;
851 fn mul(self, rhs: Concentration<num_bigfloat::BigFloat>) -> Self::Output {
852 Concentration{molpm3: self.clone() * rhs.molpm3}
853 }
854}
855#[cfg(feature="num-bigfloat")]
857impl core::ops::Mul<&Concentration<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
858 type Output = Concentration<num_bigfloat::BigFloat>;
859 fn mul(self, rhs: &Concentration<num_bigfloat::BigFloat>) -> Self::Output {
860 Concentration{molpm3: self * rhs.molpm3.clone()}
861 }
862}
863#[cfg(feature="num-bigfloat")]
865impl core::ops::Mul<&Concentration<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
866 type Output = Concentration<num_bigfloat::BigFloat>;
867 fn mul(self, rhs: &Concentration<num_bigfloat::BigFloat>) -> Self::Output {
868 Concentration{molpm3: self.clone() * rhs.molpm3.clone()}
869 }
870}
871
872#[cfg(feature="num-complex")]
874impl core::ops::Mul<Concentration<num_complex::Complex32>> for num_complex::Complex32 {
875 type Output = Concentration<num_complex::Complex32>;
876 fn mul(self, rhs: Concentration<num_complex::Complex32>) -> Self::Output {
877 Concentration{molpm3: self * rhs.molpm3}
878 }
879}
880#[cfg(feature="num-complex")]
882impl core::ops::Mul<Concentration<num_complex::Complex32>> for &num_complex::Complex32 {
883 type Output = Concentration<num_complex::Complex32>;
884 fn mul(self, rhs: Concentration<num_complex::Complex32>) -> Self::Output {
885 Concentration{molpm3: self.clone() * rhs.molpm3}
886 }
887}
888#[cfg(feature="num-complex")]
890impl core::ops::Mul<&Concentration<num_complex::Complex32>> for num_complex::Complex32 {
891 type Output = Concentration<num_complex::Complex32>;
892 fn mul(self, rhs: &Concentration<num_complex::Complex32>) -> Self::Output {
893 Concentration{molpm3: self * rhs.molpm3.clone()}
894 }
895}
896#[cfg(feature="num-complex")]
898impl core::ops::Mul<&Concentration<num_complex::Complex32>> for &num_complex::Complex32 {
899 type Output = Concentration<num_complex::Complex32>;
900 fn mul(self, rhs: &Concentration<num_complex::Complex32>) -> Self::Output {
901 Concentration{molpm3: self.clone() * rhs.molpm3.clone()}
902 }
903}
904
905#[cfg(feature="num-complex")]
907impl core::ops::Mul<Concentration<num_complex::Complex64>> for num_complex::Complex64 {
908 type Output = Concentration<num_complex::Complex64>;
909 fn mul(self, rhs: Concentration<num_complex::Complex64>) -> Self::Output {
910 Concentration{molpm3: self * rhs.molpm3}
911 }
912}
913#[cfg(feature="num-complex")]
915impl core::ops::Mul<Concentration<num_complex::Complex64>> for &num_complex::Complex64 {
916 type Output = Concentration<num_complex::Complex64>;
917 fn mul(self, rhs: Concentration<num_complex::Complex64>) -> Self::Output {
918 Concentration{molpm3: self.clone() * rhs.molpm3}
919 }
920}
921#[cfg(feature="num-complex")]
923impl core::ops::Mul<&Concentration<num_complex::Complex64>> for num_complex::Complex64 {
924 type Output = Concentration<num_complex::Complex64>;
925 fn mul(self, rhs: &Concentration<num_complex::Complex64>) -> Self::Output {
926 Concentration{molpm3: self * rhs.molpm3.clone()}
927 }
928}
929#[cfg(feature="num-complex")]
931impl core::ops::Mul<&Concentration<num_complex::Complex64>> for &num_complex::Complex64 {
932 type Output = Concentration<num_complex::Complex64>;
933 fn mul(self, rhs: &Concentration<num_complex::Complex64>) -> Self::Output {
934 Concentration{molpm3: self.clone() * rhs.molpm3.clone()}
935 }
936}
937
938
939
940#[cfg(feature = "uom")]
942impl<T> Into<uom::si::f32::MolarConcentration> for Concentration<T> where T: NumLike+Into<f32> {
943 fn into(self) -> uom::si::f32::MolarConcentration {
944 uom::si::f32::MolarConcentration::new::<uom::si::molar_concentration::mole_per_cubic_meter>(self.molpm3.into())
945 }
946}
947
948#[cfg(feature = "uom")]
950impl<T> From<uom::si::f32::MolarConcentration> for Concentration<T> where T: NumLike+From<f32> {
951 fn from(src: uom::si::f32::MolarConcentration) -> Self {
952 Concentration{molpm3: T::from(src.value)}
953 }
954}
955
956#[cfg(feature = "uom")]
958impl<T> Into<uom::si::f64::MolarConcentration> for Concentration<T> where T: NumLike+Into<f64> {
959 fn into(self) -> uom::si::f64::MolarConcentration {
960 uom::si::f64::MolarConcentration::new::<uom::si::molar_concentration::mole_per_cubic_meter>(self.molpm3.into())
961 }
962}
963
964#[cfg(feature = "uom")]
966impl<T> From<uom::si::f64::MolarConcentration> for Concentration<T> where T: NumLike+From<f64> {
967 fn from(src: uom::si::f64::MolarConcentration) -> Self {
968 Concentration{molpm3: T::from(src.value)}
969 }
970}
971
972
973impl<T> core::ops::Div<Amount<T>> for Concentration<T> where T: NumLike {
976 type Output = InverseVolume<T>;
977 fn div(self, rhs: Amount<T>) -> Self::Output {
978 InverseVolume{per_m3: self.molpm3 / rhs.mol}
979 }
980}
981impl<T> core::ops::Div<Amount<T>> for &Concentration<T> where T: NumLike {
983 type Output = InverseVolume<T>;
984 fn div(self, rhs: Amount<T>) -> Self::Output {
985 InverseVolume{per_m3: self.molpm3.clone() / rhs.mol}
986 }
987}
988impl<T> core::ops::Div<&Amount<T>> for Concentration<T> where T: NumLike {
990 type Output = InverseVolume<T>;
991 fn div(self, rhs: &Amount<T>) -> Self::Output {
992 InverseVolume{per_m3: self.molpm3 / rhs.mol.clone()}
993 }
994}
995impl<T> core::ops::Div<&Amount<T>> for &Concentration<T> where T: NumLike {
997 type Output = InverseVolume<T>;
998 fn div(self, rhs: &Amount<T>) -> Self::Output {
999 InverseVolume{per_m3: self.molpm3.clone() / rhs.mol.clone()}
1000 }
1001}
1002
1003impl<T> core::ops::Mul<InverseAmount<T>> for Concentration<T> where T: NumLike {
1006 type Output = InverseVolume<T>;
1007 fn mul(self, rhs: InverseAmount<T>) -> Self::Output {
1008 InverseVolume{per_m3: self.molpm3 * rhs.per_mol}
1009 }
1010}
1011impl<T> core::ops::Mul<InverseAmount<T>> for &Concentration<T> where T: NumLike {
1013 type Output = InverseVolume<T>;
1014 fn mul(self, rhs: InverseAmount<T>) -> Self::Output {
1015 InverseVolume{per_m3: self.molpm3.clone() * rhs.per_mol}
1016 }
1017}
1018impl<T> core::ops::Mul<&InverseAmount<T>> for Concentration<T> where T: NumLike {
1020 type Output = InverseVolume<T>;
1021 fn mul(self, rhs: &InverseAmount<T>) -> Self::Output {
1022 InverseVolume{per_m3: self.molpm3 * rhs.per_mol.clone()}
1023 }
1024}
1025impl<T> core::ops::Mul<&InverseAmount<T>> for &Concentration<T> where T: NumLike {
1027 type Output = InverseVolume<T>;
1028 fn mul(self, rhs: &InverseAmount<T>) -> Self::Output {
1029 InverseVolume{per_m3: self.molpm3.clone() * rhs.per_mol.clone()}
1030 }
1031}
1032
1033impl<T> core::ops::Div<Molality<T>> for Concentration<T> where T: NumLike {
1036 type Output = Density<T>;
1037 fn div(self, rhs: Molality<T>) -> Self::Output {
1038 Density{kgpm3: self.molpm3 / rhs.molpkg}
1039 }
1040}
1041impl<T> core::ops::Div<Molality<T>> for &Concentration<T> where T: NumLike {
1043 type Output = Density<T>;
1044 fn div(self, rhs: Molality<T>) -> Self::Output {
1045 Density{kgpm3: self.molpm3.clone() / rhs.molpkg}
1046 }
1047}
1048impl<T> core::ops::Div<&Molality<T>> for Concentration<T> where T: NumLike {
1050 type Output = Density<T>;
1051 fn div(self, rhs: &Molality<T>) -> Self::Output {
1052 Density{kgpm3: self.molpm3 / rhs.molpkg.clone()}
1053 }
1054}
1055impl<T> core::ops::Div<&Molality<T>> for &Concentration<T> where T: NumLike {
1057 type Output = Density<T>;
1058 fn div(self, rhs: &Molality<T>) -> Self::Output {
1059 Density{kgpm3: self.molpm3.clone() / rhs.molpkg.clone()}
1060 }
1061}
1062
1063impl<T> core::ops::Mul<MolarMass<T>> for Concentration<T> where T: NumLike {
1066 type Output = Density<T>;
1067 fn mul(self, rhs: MolarMass<T>) -> Self::Output {
1068 Density{kgpm3: self.molpm3 * rhs.kgpmol}
1069 }
1070}
1071impl<T> core::ops::Mul<MolarMass<T>> for &Concentration<T> where T: NumLike {
1073 type Output = Density<T>;
1074 fn mul(self, rhs: MolarMass<T>) -> Self::Output {
1075 Density{kgpm3: self.molpm3.clone() * rhs.kgpmol}
1076 }
1077}
1078impl<T> core::ops::Mul<&MolarMass<T>> for Concentration<T> where T: NumLike {
1080 type Output = Density<T>;
1081 fn mul(self, rhs: &MolarMass<T>) -> Self::Output {
1082 Density{kgpm3: self.molpm3 * rhs.kgpmol.clone()}
1083 }
1084}
1085impl<T> core::ops::Mul<&MolarMass<T>> for &Concentration<T> where T: NumLike {
1087 type Output = Density<T>;
1088 fn mul(self, rhs: &MolarMass<T>) -> Self::Output {
1089 Density{kgpm3: self.molpm3.clone() * rhs.kgpmol.clone()}
1090 }
1091}
1092
1093impl<T> core::ops::Div<InverseVolume<T>> for Concentration<T> where T: NumLike {
1096 type Output = Amount<T>;
1097 fn div(self, rhs: InverseVolume<T>) -> Self::Output {
1098 Amount{mol: self.molpm3 / rhs.per_m3}
1099 }
1100}
1101impl<T> core::ops::Div<InverseVolume<T>> for &Concentration<T> where T: NumLike {
1103 type Output = Amount<T>;
1104 fn div(self, rhs: InverseVolume<T>) -> Self::Output {
1105 Amount{mol: self.molpm3.clone() / rhs.per_m3}
1106 }
1107}
1108impl<T> core::ops::Div<&InverseVolume<T>> for Concentration<T> where T: NumLike {
1110 type Output = Amount<T>;
1111 fn div(self, rhs: &InverseVolume<T>) -> Self::Output {
1112 Amount{mol: self.molpm3 / rhs.per_m3.clone()}
1113 }
1114}
1115impl<T> core::ops::Div<&InverseVolume<T>> for &Concentration<T> where T: NumLike {
1117 type Output = Amount<T>;
1118 fn div(self, rhs: &InverseVolume<T>) -> Self::Output {
1119 Amount{mol: self.molpm3.clone() / rhs.per_m3.clone()}
1120 }
1121}
1122
1123impl<T> core::ops::Mul<Volume<T>> for Concentration<T> where T: NumLike {
1126 type Output = Amount<T>;
1127 fn mul(self, rhs: Volume<T>) -> Self::Output {
1128 Amount{mol: self.molpm3 * rhs.m3}
1129 }
1130}
1131impl<T> core::ops::Mul<Volume<T>> for &Concentration<T> where T: NumLike {
1133 type Output = Amount<T>;
1134 fn mul(self, rhs: Volume<T>) -> Self::Output {
1135 Amount{mol: self.molpm3.clone() * rhs.m3}
1136 }
1137}
1138impl<T> core::ops::Mul<&Volume<T>> for Concentration<T> where T: NumLike {
1140 type Output = Amount<T>;
1141 fn mul(self, rhs: &Volume<T>) -> Self::Output {
1142 Amount{mol: self.molpm3 * rhs.m3.clone()}
1143 }
1144}
1145impl<T> core::ops::Mul<&Volume<T>> for &Concentration<T> where T: NumLike {
1147 type Output = Amount<T>;
1148 fn mul(self, rhs: &Volume<T>) -> Self::Output {
1149 Amount{mol: self.molpm3.clone() * rhs.m3.clone()}
1150 }
1151}
1152
1153impl<T> core::ops::Div<Density<T>> for Concentration<T> where T: NumLike {
1156 type Output = Molality<T>;
1157 fn div(self, rhs: Density<T>) -> Self::Output {
1158 Molality{molpkg: self.molpm3 / rhs.kgpm3}
1159 }
1160}
1161impl<T> core::ops::Div<Density<T>> for &Concentration<T> where T: NumLike {
1163 type Output = Molality<T>;
1164 fn div(self, rhs: Density<T>) -> Self::Output {
1165 Molality{molpkg: self.molpm3.clone() / rhs.kgpm3}
1166 }
1167}
1168impl<T> core::ops::Div<&Density<T>> for Concentration<T> where T: NumLike {
1170 type Output = Molality<T>;
1171 fn div(self, rhs: &Density<T>) -> Self::Output {
1172 Molality{molpkg: self.molpm3 / rhs.kgpm3.clone()}
1173 }
1174}
1175impl<T> core::ops::Div<&Density<T>> for &Concentration<T> where T: NumLike {
1177 type Output = Molality<T>;
1178 fn div(self, rhs: &Density<T>) -> Self::Output {
1179 Molality{molpkg: self.molpm3.clone() / rhs.kgpm3.clone()}
1180 }
1181}
1182
1183impl<T> core::ops::Mul<VolumePerMass<T>> for Concentration<T> where T: NumLike {
1186 type Output = Molality<T>;
1187 fn mul(self, rhs: VolumePerMass<T>) -> Self::Output {
1188 Molality{molpkg: self.molpm3 * rhs.m3_per_kg}
1189 }
1190}
1191impl<T> core::ops::Mul<VolumePerMass<T>> for &Concentration<T> where T: NumLike {
1193 type Output = Molality<T>;
1194 fn mul(self, rhs: VolumePerMass<T>) -> Self::Output {
1195 Molality{molpkg: self.molpm3.clone() * rhs.m3_per_kg}
1196 }
1197}
1198impl<T> core::ops::Mul<&VolumePerMass<T>> for Concentration<T> where T: NumLike {
1200 type Output = Molality<T>;
1201 fn mul(self, rhs: &VolumePerMass<T>) -> Self::Output {
1202 Molality{molpkg: self.molpm3 * rhs.m3_per_kg.clone()}
1203 }
1204}
1205impl<T> core::ops::Mul<&VolumePerMass<T>> for &Concentration<T> where T: NumLike {
1207 type Output = Molality<T>;
1208 fn mul(self, rhs: &VolumePerMass<T>) -> Self::Output {
1209 Molality{molpkg: self.molpm3.clone() * rhs.m3_per_kg.clone()}
1210 }
1211}
1212
1213impl<T> core::ops::Div<Concentration<T>> for f64 where T: NumLike+From<f64> {
1216 type Output = MolarVolume<T>;
1217 fn div(self, rhs: Concentration<T>) -> Self::Output {
1218 MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3}
1219 }
1220}
1221impl<T> core::ops::Div<Concentration<T>> for &f64 where T: NumLike+From<f64> {
1223 type Output = MolarVolume<T>;
1224 fn div(self, rhs: Concentration<T>) -> Self::Output {
1225 MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3}
1226 }
1227}
1228impl<T> core::ops::Div<&Concentration<T>> for f64 where T: NumLike+From<f64> {
1230 type Output = MolarVolume<T>;
1231 fn div(self, rhs: &Concentration<T>) -> Self::Output {
1232 MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3.clone()}
1233 }
1234}
1235impl<T> core::ops::Div<&Concentration<T>> for &f64 where T: NumLike+From<f64> {
1237 type Output = MolarVolume<T>;
1238 fn div(self, rhs: &Concentration<T>) -> Self::Output {
1239 MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3.clone()}
1240 }
1241}
1242
1243impl<T> core::ops::Div<Concentration<T>> for f32 where T: NumLike+From<f32> {
1246 type Output = MolarVolume<T>;
1247 fn div(self, rhs: Concentration<T>) -> Self::Output {
1248 MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3}
1249 }
1250}
1251impl<T> core::ops::Div<Concentration<T>> for &f32 where T: NumLike+From<f32> {
1253 type Output = MolarVolume<T>;
1254 fn div(self, rhs: Concentration<T>) -> Self::Output {
1255 MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3}
1256 }
1257}
1258impl<T> core::ops::Div<&Concentration<T>> for f32 where T: NumLike+From<f32> {
1260 type Output = MolarVolume<T>;
1261 fn div(self, rhs: &Concentration<T>) -> Self::Output {
1262 MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3.clone()}
1263 }
1264}
1265impl<T> core::ops::Div<&Concentration<T>> for &f32 where T: NumLike+From<f32> {
1267 type Output = MolarVolume<T>;
1268 fn div(self, rhs: &Concentration<T>) -> Self::Output {
1269 MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3.clone()}
1270 }
1271}
1272
1273impl<T> core::ops::Div<Concentration<T>> for i64 where T: NumLike+From<i64> {
1276 type Output = MolarVolume<T>;
1277 fn div(self, rhs: Concentration<T>) -> Self::Output {
1278 MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3}
1279 }
1280}
1281impl<T> core::ops::Div<Concentration<T>> for &i64 where T: NumLike+From<i64> {
1283 type Output = MolarVolume<T>;
1284 fn div(self, rhs: Concentration<T>) -> Self::Output {
1285 MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3}
1286 }
1287}
1288impl<T> core::ops::Div<&Concentration<T>> for i64 where T: NumLike+From<i64> {
1290 type Output = MolarVolume<T>;
1291 fn div(self, rhs: &Concentration<T>) -> Self::Output {
1292 MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3.clone()}
1293 }
1294}
1295impl<T> core::ops::Div<&Concentration<T>> for &i64 where T: NumLike+From<i64> {
1297 type Output = MolarVolume<T>;
1298 fn div(self, rhs: &Concentration<T>) -> Self::Output {
1299 MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3.clone()}
1300 }
1301}
1302
1303impl<T> core::ops::Div<Concentration<T>> for i32 where T: NumLike+From<i32> {
1306 type Output = MolarVolume<T>;
1307 fn div(self, rhs: Concentration<T>) -> Self::Output {
1308 MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3}
1309 }
1310}
1311impl<T> core::ops::Div<Concentration<T>> for &i32 where T: NumLike+From<i32> {
1313 type Output = MolarVolume<T>;
1314 fn div(self, rhs: Concentration<T>) -> Self::Output {
1315 MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3}
1316 }
1317}
1318impl<T> core::ops::Div<&Concentration<T>> for i32 where T: NumLike+From<i32> {
1320 type Output = MolarVolume<T>;
1321 fn div(self, rhs: &Concentration<T>) -> Self::Output {
1322 MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3.clone()}
1323 }
1324}
1325impl<T> core::ops::Div<&Concentration<T>> for &i32 where T: NumLike+From<i32> {
1327 type Output = MolarVolume<T>;
1328 fn div(self, rhs: &Concentration<T>) -> Self::Output {
1329 MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3.clone()}
1330 }
1331}
1332
1333#[cfg(feature="num-bigfloat")]
1336impl<T> core::ops::Div<Concentration<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
1337 type Output = MolarVolume<T>;
1338 fn div(self, rhs: Concentration<T>) -> Self::Output {
1339 MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3}
1340 }
1341}
1342#[cfg(feature="num-bigfloat")]
1344impl<T> core::ops::Div<Concentration<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
1345 type Output = MolarVolume<T>;
1346 fn div(self, rhs: Concentration<T>) -> Self::Output {
1347 MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3}
1348 }
1349}
1350#[cfg(feature="num-bigfloat")]
1352impl<T> core::ops::Div<&Concentration<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
1353 type Output = MolarVolume<T>;
1354 fn div(self, rhs: &Concentration<T>) -> Self::Output {
1355 MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3.clone()}
1356 }
1357}
1358#[cfg(feature="num-bigfloat")]
1360impl<T> core::ops::Div<&Concentration<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
1361 type Output = MolarVolume<T>;
1362 fn div(self, rhs: &Concentration<T>) -> Self::Output {
1363 MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3.clone()}
1364 }
1365}
1366
1367#[cfg(feature="num-complex")]
1370impl<T> core::ops::Div<Concentration<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
1371 type Output = MolarVolume<T>;
1372 fn div(self, rhs: Concentration<T>) -> Self::Output {
1373 MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3}
1374 }
1375}
1376#[cfg(feature="num-complex")]
1378impl<T> core::ops::Div<Concentration<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
1379 type Output = MolarVolume<T>;
1380 fn div(self, rhs: Concentration<T>) -> Self::Output {
1381 MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3}
1382 }
1383}
1384#[cfg(feature="num-complex")]
1386impl<T> core::ops::Div<&Concentration<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
1387 type Output = MolarVolume<T>;
1388 fn div(self, rhs: &Concentration<T>) -> Self::Output {
1389 MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3.clone()}
1390 }
1391}
1392#[cfg(feature="num-complex")]
1394impl<T> core::ops::Div<&Concentration<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
1395 type Output = MolarVolume<T>;
1396 fn div(self, rhs: &Concentration<T>) -> Self::Output {
1397 MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3.clone()}
1398 }
1399}
1400
1401#[cfg(feature="num-complex")]
1404impl<T> core::ops::Div<Concentration<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
1405 type Output = MolarVolume<T>;
1406 fn div(self, rhs: Concentration<T>) -> Self::Output {
1407 MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3}
1408 }
1409}
1410#[cfg(feature="num-complex")]
1412impl<T> core::ops::Div<Concentration<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
1413 type Output = MolarVolume<T>;
1414 fn div(self, rhs: Concentration<T>) -> Self::Output {
1415 MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3}
1416 }
1417}
1418#[cfg(feature="num-complex")]
1420impl<T> core::ops::Div<&Concentration<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
1421 type Output = MolarVolume<T>;
1422 fn div(self, rhs: &Concentration<T>) -> Self::Output {
1423 MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3.clone()}
1424 }
1425}
1426#[cfg(feature="num-complex")]
1428impl<T> core::ops::Div<&Concentration<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
1429 type Output = MolarVolume<T>;
1430 fn div(self, rhs: &Concentration<T>) -> Self::Output {
1431 MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3.clone()}
1432 }
1433}
1434
1435#[derive(UnitStruct, Debug, Clone)]
1437#[cfg_attr(feature="serde", derive(Serialize, Deserialize))]
1438pub struct InverseCatalyticActivity<T: NumLike>{
1439 pub s_per_mol: T
1441}
1442
1443impl<T> InverseCatalyticActivity<T> where T: NumLike {
1444
1445 pub fn unit_name() -> &'static str { "seconds per mole" }
1447
1448 pub fn unit_symbol() -> &'static str { "s/mol" }
1450
1451 pub fn from_s_per_mol(s_per_mol: T) -> Self { InverseCatalyticActivity{s_per_mol: s_per_mol} }
1456
1457 pub fn to_s_per_mol(&self) -> T { self.s_per_mol.clone() }
1459
1460 pub fn from_seconds_per_mole(seconds_per_mole: T) -> Self { InverseCatalyticActivity{s_per_mol: seconds_per_mole} }
1465
1466 pub fn to_seconds_per_mole(&self) -> T { self.s_per_mol.clone() }
1468
1469}
1470
1471impl<T> fmt::Display for InverseCatalyticActivity<T> where T: NumLike {
1472 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
1473 write!(f, "{} {}", &self.s_per_mol, Self::unit_symbol())
1474 }
1475}
1476
1477impl<T> InverseCatalyticActivity<T> where T: NumLike+From<f64> {
1478
1479 pub fn to_minutes_per_mole(&self) -> T {
1483 return self.s_per_mol.clone() * T::from(0.0166666666666667_f64);
1484 }
1485
1486 pub fn from_minutes_per_mole(minutes_per_mole: T) -> Self {
1493 InverseCatalyticActivity{s_per_mol: minutes_per_mole * T::from(60.0_f64)}
1494 }
1495
1496 pub fn to_hours_per_mole(&self) -> T {
1500 return self.s_per_mol.clone() * T::from(0.000277777777777778_f64);
1501 }
1502
1503 pub fn from_hours_per_mole(hours_per_mole: T) -> Self {
1510 InverseCatalyticActivity{s_per_mol: hours_per_mole * T::from(3600.0_f64)}
1511 }
1512
1513}
1514
1515
1516#[cfg(feature="num-bigfloat")]
1518impl core::ops::Mul<InverseCatalyticActivity<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
1519 type Output = InverseCatalyticActivity<num_bigfloat::BigFloat>;
1520 fn mul(self, rhs: InverseCatalyticActivity<num_bigfloat::BigFloat>) -> Self::Output {
1521 InverseCatalyticActivity{s_per_mol: self * rhs.s_per_mol}
1522 }
1523}
1524#[cfg(feature="num-bigfloat")]
1526impl core::ops::Mul<InverseCatalyticActivity<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
1527 type Output = InverseCatalyticActivity<num_bigfloat::BigFloat>;
1528 fn mul(self, rhs: InverseCatalyticActivity<num_bigfloat::BigFloat>) -> Self::Output {
1529 InverseCatalyticActivity{s_per_mol: self.clone() * rhs.s_per_mol}
1530 }
1531}
1532#[cfg(feature="num-bigfloat")]
1534impl core::ops::Mul<&InverseCatalyticActivity<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
1535 type Output = InverseCatalyticActivity<num_bigfloat::BigFloat>;
1536 fn mul(self, rhs: &InverseCatalyticActivity<num_bigfloat::BigFloat>) -> Self::Output {
1537 InverseCatalyticActivity{s_per_mol: self * rhs.s_per_mol.clone()}
1538 }
1539}
1540#[cfg(feature="num-bigfloat")]
1542impl core::ops::Mul<&InverseCatalyticActivity<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
1543 type Output = InverseCatalyticActivity<num_bigfloat::BigFloat>;
1544 fn mul(self, rhs: &InverseCatalyticActivity<num_bigfloat::BigFloat>) -> Self::Output {
1545 InverseCatalyticActivity{s_per_mol: self.clone() * rhs.s_per_mol.clone()}
1546 }
1547}
1548
1549#[cfg(feature="num-complex")]
1551impl core::ops::Mul<InverseCatalyticActivity<num_complex::Complex32>> for num_complex::Complex32 {
1552 type Output = InverseCatalyticActivity<num_complex::Complex32>;
1553 fn mul(self, rhs: InverseCatalyticActivity<num_complex::Complex32>) -> Self::Output {
1554 InverseCatalyticActivity{s_per_mol: self * rhs.s_per_mol}
1555 }
1556}
1557#[cfg(feature="num-complex")]
1559impl core::ops::Mul<InverseCatalyticActivity<num_complex::Complex32>> for &num_complex::Complex32 {
1560 type Output = InverseCatalyticActivity<num_complex::Complex32>;
1561 fn mul(self, rhs: InverseCatalyticActivity<num_complex::Complex32>) -> Self::Output {
1562 InverseCatalyticActivity{s_per_mol: self.clone() * rhs.s_per_mol}
1563 }
1564}
1565#[cfg(feature="num-complex")]
1567impl core::ops::Mul<&InverseCatalyticActivity<num_complex::Complex32>> for num_complex::Complex32 {
1568 type Output = InverseCatalyticActivity<num_complex::Complex32>;
1569 fn mul(self, rhs: &InverseCatalyticActivity<num_complex::Complex32>) -> Self::Output {
1570 InverseCatalyticActivity{s_per_mol: self * rhs.s_per_mol.clone()}
1571 }
1572}
1573#[cfg(feature="num-complex")]
1575impl core::ops::Mul<&InverseCatalyticActivity<num_complex::Complex32>> for &num_complex::Complex32 {
1576 type Output = InverseCatalyticActivity<num_complex::Complex32>;
1577 fn mul(self, rhs: &InverseCatalyticActivity<num_complex::Complex32>) -> Self::Output {
1578 InverseCatalyticActivity{s_per_mol: self.clone() * rhs.s_per_mol.clone()}
1579 }
1580}
1581
1582#[cfg(feature="num-complex")]
1584impl core::ops::Mul<InverseCatalyticActivity<num_complex::Complex64>> for num_complex::Complex64 {
1585 type Output = InverseCatalyticActivity<num_complex::Complex64>;
1586 fn mul(self, rhs: InverseCatalyticActivity<num_complex::Complex64>) -> Self::Output {
1587 InverseCatalyticActivity{s_per_mol: self * rhs.s_per_mol}
1588 }
1589}
1590#[cfg(feature="num-complex")]
1592impl core::ops::Mul<InverseCatalyticActivity<num_complex::Complex64>> for &num_complex::Complex64 {
1593 type Output = InverseCatalyticActivity<num_complex::Complex64>;
1594 fn mul(self, rhs: InverseCatalyticActivity<num_complex::Complex64>) -> Self::Output {
1595 InverseCatalyticActivity{s_per_mol: self.clone() * rhs.s_per_mol}
1596 }
1597}
1598#[cfg(feature="num-complex")]
1600impl core::ops::Mul<&InverseCatalyticActivity<num_complex::Complex64>> for num_complex::Complex64 {
1601 type Output = InverseCatalyticActivity<num_complex::Complex64>;
1602 fn mul(self, rhs: &InverseCatalyticActivity<num_complex::Complex64>) -> Self::Output {
1603 InverseCatalyticActivity{s_per_mol: self * rhs.s_per_mol.clone()}
1604 }
1605}
1606#[cfg(feature="num-complex")]
1608impl core::ops::Mul<&InverseCatalyticActivity<num_complex::Complex64>> for &num_complex::Complex64 {
1609 type Output = InverseCatalyticActivity<num_complex::Complex64>;
1610 fn mul(self, rhs: &InverseCatalyticActivity<num_complex::Complex64>) -> Self::Output {
1611 InverseCatalyticActivity{s_per_mol: self.clone() * rhs.s_per_mol.clone()}
1612 }
1613}
1614
1615
1616
1617
1618impl<T> core::ops::Mul<Amount<T>> for InverseCatalyticActivity<T> where T: NumLike {
1621 type Output = Time<T>;
1622 fn mul(self, rhs: Amount<T>) -> Self::Output {
1623 Time{s: self.s_per_mol * rhs.mol}
1624 }
1625}
1626impl<T> core::ops::Mul<Amount<T>> for &InverseCatalyticActivity<T> where T: NumLike {
1628 type Output = Time<T>;
1629 fn mul(self, rhs: Amount<T>) -> Self::Output {
1630 Time{s: self.s_per_mol.clone() * rhs.mol}
1631 }
1632}
1633impl<T> core::ops::Mul<&Amount<T>> for InverseCatalyticActivity<T> where T: NumLike {
1635 type Output = Time<T>;
1636 fn mul(self, rhs: &Amount<T>) -> Self::Output {
1637 Time{s: self.s_per_mol * rhs.mol.clone()}
1638 }
1639}
1640impl<T> core::ops::Mul<&Amount<T>> for &InverseCatalyticActivity<T> where T: NumLike {
1642 type Output = Time<T>;
1643 fn mul(self, rhs: &Amount<T>) -> Self::Output {
1644 Time{s: self.s_per_mol.clone() * rhs.mol.clone()}
1645 }
1646}
1647
1648impl<T> core::ops::Div<InverseAmount<T>> for InverseCatalyticActivity<T> where T: NumLike {
1651 type Output = Time<T>;
1652 fn div(self, rhs: InverseAmount<T>) -> Self::Output {
1653 Time{s: self.s_per_mol / rhs.per_mol}
1654 }
1655}
1656impl<T> core::ops::Div<InverseAmount<T>> for &InverseCatalyticActivity<T> where T: NumLike {
1658 type Output = Time<T>;
1659 fn div(self, rhs: InverseAmount<T>) -> Self::Output {
1660 Time{s: self.s_per_mol.clone() / rhs.per_mol}
1661 }
1662}
1663impl<T> core::ops::Div<&InverseAmount<T>> for InverseCatalyticActivity<T> where T: NumLike {
1665 type Output = Time<T>;
1666 fn div(self, rhs: &InverseAmount<T>) -> Self::Output {
1667 Time{s: self.s_per_mol / rhs.per_mol.clone()}
1668 }
1669}
1670impl<T> core::ops::Div<&InverseAmount<T>> for &InverseCatalyticActivity<T> where T: NumLike {
1672 type Output = Time<T>;
1673 fn div(self, rhs: &InverseAmount<T>) -> Self::Output {
1674 Time{s: self.s_per_mol.clone() / rhs.per_mol.clone()}
1675 }
1676}
1677
1678impl<T> core::ops::Div<Time<T>> for InverseCatalyticActivity<T> where T: NumLike {
1681 type Output = InverseAmount<T>;
1682 fn div(self, rhs: Time<T>) -> Self::Output {
1683 InverseAmount{per_mol: self.s_per_mol / rhs.s}
1684 }
1685}
1686impl<T> core::ops::Div<Time<T>> for &InverseCatalyticActivity<T> where T: NumLike {
1688 type Output = InverseAmount<T>;
1689 fn div(self, rhs: Time<T>) -> Self::Output {
1690 InverseAmount{per_mol: self.s_per_mol.clone() / rhs.s}
1691 }
1692}
1693impl<T> core::ops::Div<&Time<T>> for InverseCatalyticActivity<T> where T: NumLike {
1695 type Output = InverseAmount<T>;
1696 fn div(self, rhs: &Time<T>) -> Self::Output {
1697 InverseAmount{per_mol: self.s_per_mol / rhs.s.clone()}
1698 }
1699}
1700impl<T> core::ops::Div<&Time<T>> for &InverseCatalyticActivity<T> where T: NumLike {
1702 type Output = InverseAmount<T>;
1703 fn div(self, rhs: &Time<T>) -> Self::Output {
1704 InverseAmount{per_mol: self.s_per_mol.clone() / rhs.s.clone()}
1705 }
1706}
1707
1708impl<T> core::ops::Mul<Frequency<T>> for InverseCatalyticActivity<T> where T: NumLike {
1711 type Output = InverseAmount<T>;
1712 fn mul(self, rhs: Frequency<T>) -> Self::Output {
1713 InverseAmount{per_mol: self.s_per_mol * rhs.Hz}
1714 }
1715}
1716impl<T> core::ops::Mul<Frequency<T>> for &InverseCatalyticActivity<T> where T: NumLike {
1718 type Output = InverseAmount<T>;
1719 fn mul(self, rhs: Frequency<T>) -> Self::Output {
1720 InverseAmount{per_mol: self.s_per_mol.clone() * rhs.Hz}
1721 }
1722}
1723impl<T> core::ops::Mul<&Frequency<T>> for InverseCatalyticActivity<T> where T: NumLike {
1725 type Output = InverseAmount<T>;
1726 fn mul(self, rhs: &Frequency<T>) -> Self::Output {
1727 InverseAmount{per_mol: self.s_per_mol * rhs.Hz.clone()}
1728 }
1729}
1730impl<T> core::ops::Mul<&Frequency<T>> for &InverseCatalyticActivity<T> where T: NumLike {
1732 type Output = InverseAmount<T>;
1733 fn mul(self, rhs: &Frequency<T>) -> Self::Output {
1734 InverseAmount{per_mol: self.s_per_mol.clone() * rhs.Hz.clone()}
1735 }
1736}
1737
1738impl<T> core::ops::Div<InverseCatalyticActivity<T>> for f64 where T: NumLike+From<f64> {
1741 type Output = CatalyticActivity<T>;
1742 fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1743 CatalyticActivity{molps: T::from(self) / rhs.s_per_mol}
1744 }
1745}
1746impl<T> core::ops::Div<InverseCatalyticActivity<T>> for &f64 where T: NumLike+From<f64> {
1748 type Output = CatalyticActivity<T>;
1749 fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1750 CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol}
1751 }
1752}
1753impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for f64 where T: NumLike+From<f64> {
1755 type Output = CatalyticActivity<T>;
1756 fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1757 CatalyticActivity{molps: T::from(self) / rhs.s_per_mol.clone()}
1758 }
1759}
1760impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for &f64 where T: NumLike+From<f64> {
1762 type Output = CatalyticActivity<T>;
1763 fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1764 CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol.clone()}
1765 }
1766}
1767
1768impl<T> core::ops::Div<InverseCatalyticActivity<T>> for f32 where T: NumLike+From<f32> {
1771 type Output = CatalyticActivity<T>;
1772 fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1773 CatalyticActivity{molps: T::from(self) / rhs.s_per_mol}
1774 }
1775}
1776impl<T> core::ops::Div<InverseCatalyticActivity<T>> for &f32 where T: NumLike+From<f32> {
1778 type Output = CatalyticActivity<T>;
1779 fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1780 CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol}
1781 }
1782}
1783impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for f32 where T: NumLike+From<f32> {
1785 type Output = CatalyticActivity<T>;
1786 fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1787 CatalyticActivity{molps: T::from(self) / rhs.s_per_mol.clone()}
1788 }
1789}
1790impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for &f32 where T: NumLike+From<f32> {
1792 type Output = CatalyticActivity<T>;
1793 fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1794 CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol.clone()}
1795 }
1796}
1797
1798impl<T> core::ops::Div<InverseCatalyticActivity<T>> for i64 where T: NumLike+From<i64> {
1801 type Output = CatalyticActivity<T>;
1802 fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1803 CatalyticActivity{molps: T::from(self) / rhs.s_per_mol}
1804 }
1805}
1806impl<T> core::ops::Div<InverseCatalyticActivity<T>> for &i64 where T: NumLike+From<i64> {
1808 type Output = CatalyticActivity<T>;
1809 fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1810 CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol}
1811 }
1812}
1813impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for i64 where T: NumLike+From<i64> {
1815 type Output = CatalyticActivity<T>;
1816 fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1817 CatalyticActivity{molps: T::from(self) / rhs.s_per_mol.clone()}
1818 }
1819}
1820impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for &i64 where T: NumLike+From<i64> {
1822 type Output = CatalyticActivity<T>;
1823 fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1824 CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol.clone()}
1825 }
1826}
1827
1828impl<T> core::ops::Div<InverseCatalyticActivity<T>> for i32 where T: NumLike+From<i32> {
1831 type Output = CatalyticActivity<T>;
1832 fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1833 CatalyticActivity{molps: T::from(self) / rhs.s_per_mol}
1834 }
1835}
1836impl<T> core::ops::Div<InverseCatalyticActivity<T>> for &i32 where T: NumLike+From<i32> {
1838 type Output = CatalyticActivity<T>;
1839 fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1840 CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol}
1841 }
1842}
1843impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for i32 where T: NumLike+From<i32> {
1845 type Output = CatalyticActivity<T>;
1846 fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1847 CatalyticActivity{molps: T::from(self) / rhs.s_per_mol.clone()}
1848 }
1849}
1850impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for &i32 where T: NumLike+From<i32> {
1852 type Output = CatalyticActivity<T>;
1853 fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1854 CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol.clone()}
1855 }
1856}
1857
1858#[cfg(feature="num-bigfloat")]
1861impl<T> core::ops::Div<InverseCatalyticActivity<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
1862 type Output = CatalyticActivity<T>;
1863 fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1864 CatalyticActivity{molps: T::from(self) / rhs.s_per_mol}
1865 }
1866}
1867#[cfg(feature="num-bigfloat")]
1869impl<T> core::ops::Div<InverseCatalyticActivity<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
1870 type Output = CatalyticActivity<T>;
1871 fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1872 CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol}
1873 }
1874}
1875#[cfg(feature="num-bigfloat")]
1877impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
1878 type Output = CatalyticActivity<T>;
1879 fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1880 CatalyticActivity{molps: T::from(self) / rhs.s_per_mol.clone()}
1881 }
1882}
1883#[cfg(feature="num-bigfloat")]
1885impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
1886 type Output = CatalyticActivity<T>;
1887 fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1888 CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol.clone()}
1889 }
1890}
1891
1892#[cfg(feature="num-complex")]
1895impl<T> core::ops::Div<InverseCatalyticActivity<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
1896 type Output = CatalyticActivity<T>;
1897 fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1898 CatalyticActivity{molps: T::from(self) / rhs.s_per_mol}
1899 }
1900}
1901#[cfg(feature="num-complex")]
1903impl<T> core::ops::Div<InverseCatalyticActivity<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
1904 type Output = CatalyticActivity<T>;
1905 fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1906 CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol}
1907 }
1908}
1909#[cfg(feature="num-complex")]
1911impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
1912 type Output = CatalyticActivity<T>;
1913 fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1914 CatalyticActivity{molps: T::from(self) / rhs.s_per_mol.clone()}
1915 }
1916}
1917#[cfg(feature="num-complex")]
1919impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
1920 type Output = CatalyticActivity<T>;
1921 fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1922 CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol.clone()}
1923 }
1924}
1925
1926#[cfg(feature="num-complex")]
1929impl<T> core::ops::Div<InverseCatalyticActivity<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
1930 type Output = CatalyticActivity<T>;
1931 fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1932 CatalyticActivity{molps: T::from(self) / rhs.s_per_mol}
1933 }
1934}
1935#[cfg(feature="num-complex")]
1937impl<T> core::ops::Div<InverseCatalyticActivity<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
1938 type Output = CatalyticActivity<T>;
1939 fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1940 CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol}
1941 }
1942}
1943#[cfg(feature="num-complex")]
1945impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
1946 type Output = CatalyticActivity<T>;
1947 fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1948 CatalyticActivity{molps: T::from(self) / rhs.s_per_mol.clone()}
1949 }
1950}
1951#[cfg(feature="num-complex")]
1953impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
1954 type Output = CatalyticActivity<T>;
1955 fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1956 CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol.clone()}
1957 }
1958}
1959
1960#[derive(UnitStruct, Debug, Clone)]
1962#[cfg_attr(feature="serde", derive(Serialize, Deserialize))]
1963pub struct InverseSpecificHeatCapacity<T: NumLike>{
1964 pub kgK_per_J: T
1966}
1967
1968impl<T> InverseSpecificHeatCapacity<T> where T: NumLike {
1969
1970 pub fn unit_name() -> &'static str { "kilogram per kelvin per joules" }
1972
1973 pub fn unit_symbol() -> &'static str { "kg·K/J" }
1975
1976 pub fn from_kilograms_kelvin_per_joule(kilograms_kelvin_per_joule: T) -> Self { InverseSpecificHeatCapacity{kgK_per_J: kilograms_kelvin_per_joule} }
1981
1982 pub fn to_kilograms_kelvin_per_joule(&self) -> T { self.kgK_per_J.clone() }
1984
1985 pub fn from_kgK_per_J(kgK_per_J: T) -> Self { InverseSpecificHeatCapacity{kgK_per_J: kgK_per_J} }
1990
1991 pub fn to_kgK_per_J(&self) -> T { self.kgK_per_J.clone() }
1993
1994}
1995
1996impl<T> fmt::Display for InverseSpecificHeatCapacity<T> where T: NumLike {
1997 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
1998 write!(f, "{} {}", &self.kgK_per_J, Self::unit_symbol())
1999 }
2000}
2001
2002impl<T> InverseSpecificHeatCapacity<T> where T: NumLike+From<f64> {
2003
2004 pub fn to_grams_kelvin_per_joule(&self) -> T {
2008 return self.kgK_per_J.clone() * T::from(1000.0_f64);
2009 }
2010
2011 pub fn from_grams_kelvin_per_joule(grams_kelvin_per_joule: T) -> Self {
2018 InverseSpecificHeatCapacity{kgK_per_J: grams_kelvin_per_joule * T::from(0.001_f64)}
2019 }
2020
2021 pub fn to_gK_per_J(&self) -> T {
2025 return self.kgK_per_J.clone() * T::from(1000.0_f64);
2026 }
2027
2028 pub fn from_gK_per_J(gK_per_J: T) -> Self {
2035 InverseSpecificHeatCapacity{kgK_per_J: gK_per_J * T::from(0.001_f64)}
2036 }
2037
2038}
2039
2040
2041#[cfg(feature="num-bigfloat")]
2043impl core::ops::Mul<InverseSpecificHeatCapacity<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
2044 type Output = InverseSpecificHeatCapacity<num_bigfloat::BigFloat>;
2045 fn mul(self, rhs: InverseSpecificHeatCapacity<num_bigfloat::BigFloat>) -> Self::Output {
2046 InverseSpecificHeatCapacity{kgK_per_J: self * rhs.kgK_per_J}
2047 }
2048}
2049#[cfg(feature="num-bigfloat")]
2051impl core::ops::Mul<InverseSpecificHeatCapacity<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
2052 type Output = InverseSpecificHeatCapacity<num_bigfloat::BigFloat>;
2053 fn mul(self, rhs: InverseSpecificHeatCapacity<num_bigfloat::BigFloat>) -> Self::Output {
2054 InverseSpecificHeatCapacity{kgK_per_J: self.clone() * rhs.kgK_per_J}
2055 }
2056}
2057#[cfg(feature="num-bigfloat")]
2059impl core::ops::Mul<&InverseSpecificHeatCapacity<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
2060 type Output = InverseSpecificHeatCapacity<num_bigfloat::BigFloat>;
2061 fn mul(self, rhs: &InverseSpecificHeatCapacity<num_bigfloat::BigFloat>) -> Self::Output {
2062 InverseSpecificHeatCapacity{kgK_per_J: self * rhs.kgK_per_J.clone()}
2063 }
2064}
2065#[cfg(feature="num-bigfloat")]
2067impl core::ops::Mul<&InverseSpecificHeatCapacity<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
2068 type Output = InverseSpecificHeatCapacity<num_bigfloat::BigFloat>;
2069 fn mul(self, rhs: &InverseSpecificHeatCapacity<num_bigfloat::BigFloat>) -> Self::Output {
2070 InverseSpecificHeatCapacity{kgK_per_J: self.clone() * rhs.kgK_per_J.clone()}
2071 }
2072}
2073
2074#[cfg(feature="num-complex")]
2076impl core::ops::Mul<InverseSpecificHeatCapacity<num_complex::Complex32>> for num_complex::Complex32 {
2077 type Output = InverseSpecificHeatCapacity<num_complex::Complex32>;
2078 fn mul(self, rhs: InverseSpecificHeatCapacity<num_complex::Complex32>) -> Self::Output {
2079 InverseSpecificHeatCapacity{kgK_per_J: self * rhs.kgK_per_J}
2080 }
2081}
2082#[cfg(feature="num-complex")]
2084impl core::ops::Mul<InverseSpecificHeatCapacity<num_complex::Complex32>> for &num_complex::Complex32 {
2085 type Output = InverseSpecificHeatCapacity<num_complex::Complex32>;
2086 fn mul(self, rhs: InverseSpecificHeatCapacity<num_complex::Complex32>) -> Self::Output {
2087 InverseSpecificHeatCapacity{kgK_per_J: self.clone() * rhs.kgK_per_J}
2088 }
2089}
2090#[cfg(feature="num-complex")]
2092impl core::ops::Mul<&InverseSpecificHeatCapacity<num_complex::Complex32>> for num_complex::Complex32 {
2093 type Output = InverseSpecificHeatCapacity<num_complex::Complex32>;
2094 fn mul(self, rhs: &InverseSpecificHeatCapacity<num_complex::Complex32>) -> Self::Output {
2095 InverseSpecificHeatCapacity{kgK_per_J: self * rhs.kgK_per_J.clone()}
2096 }
2097}
2098#[cfg(feature="num-complex")]
2100impl core::ops::Mul<&InverseSpecificHeatCapacity<num_complex::Complex32>> for &num_complex::Complex32 {
2101 type Output = InverseSpecificHeatCapacity<num_complex::Complex32>;
2102 fn mul(self, rhs: &InverseSpecificHeatCapacity<num_complex::Complex32>) -> Self::Output {
2103 InverseSpecificHeatCapacity{kgK_per_J: self.clone() * rhs.kgK_per_J.clone()}
2104 }
2105}
2106
2107#[cfg(feature="num-complex")]
2109impl core::ops::Mul<InverseSpecificHeatCapacity<num_complex::Complex64>> for num_complex::Complex64 {
2110 type Output = InverseSpecificHeatCapacity<num_complex::Complex64>;
2111 fn mul(self, rhs: InverseSpecificHeatCapacity<num_complex::Complex64>) -> Self::Output {
2112 InverseSpecificHeatCapacity{kgK_per_J: self * rhs.kgK_per_J}
2113 }
2114}
2115#[cfg(feature="num-complex")]
2117impl core::ops::Mul<InverseSpecificHeatCapacity<num_complex::Complex64>> for &num_complex::Complex64 {
2118 type Output = InverseSpecificHeatCapacity<num_complex::Complex64>;
2119 fn mul(self, rhs: InverseSpecificHeatCapacity<num_complex::Complex64>) -> Self::Output {
2120 InverseSpecificHeatCapacity{kgK_per_J: self.clone() * rhs.kgK_per_J}
2121 }
2122}
2123#[cfg(feature="num-complex")]
2125impl core::ops::Mul<&InverseSpecificHeatCapacity<num_complex::Complex64>> for num_complex::Complex64 {
2126 type Output = InverseSpecificHeatCapacity<num_complex::Complex64>;
2127 fn mul(self, rhs: &InverseSpecificHeatCapacity<num_complex::Complex64>) -> Self::Output {
2128 InverseSpecificHeatCapacity{kgK_per_J: self * rhs.kgK_per_J.clone()}
2129 }
2130}
2131#[cfg(feature="num-complex")]
2133impl core::ops::Mul<&InverseSpecificHeatCapacity<num_complex::Complex64>> for &num_complex::Complex64 {
2134 type Output = InverseSpecificHeatCapacity<num_complex::Complex64>;
2135 fn mul(self, rhs: &InverseSpecificHeatCapacity<num_complex::Complex64>) -> Self::Output {
2136 InverseSpecificHeatCapacity{kgK_per_J: self.clone() * rhs.kgK_per_J.clone()}
2137 }
2138}
2139
2140
2141
2142
2143impl<T> core::ops::Div<InverseAbsorbedDose<T>> for InverseSpecificHeatCapacity<T> where T: NumLike {
2146 type Output = Temperature<T>;
2147 fn div(self, rhs: InverseAbsorbedDose<T>) -> Self::Output {
2148 Temperature{K: self.kgK_per_J / rhs.per_Gy}
2149 }
2150}
2151impl<T> core::ops::Div<InverseAbsorbedDose<T>> for &InverseSpecificHeatCapacity<T> where T: NumLike {
2153 type Output = Temperature<T>;
2154 fn div(self, rhs: InverseAbsorbedDose<T>) -> Self::Output {
2155 Temperature{K: self.kgK_per_J.clone() / rhs.per_Gy}
2156 }
2157}
2158impl<T> core::ops::Div<&InverseAbsorbedDose<T>> for InverseSpecificHeatCapacity<T> where T: NumLike {
2160 type Output = Temperature<T>;
2161 fn div(self, rhs: &InverseAbsorbedDose<T>) -> Self::Output {
2162 Temperature{K: self.kgK_per_J / rhs.per_Gy.clone()}
2163 }
2164}
2165impl<T> core::ops::Div<&InverseAbsorbedDose<T>> for &InverseSpecificHeatCapacity<T> where T: NumLike {
2167 type Output = Temperature<T>;
2168 fn div(self, rhs: &InverseAbsorbedDose<T>) -> Self::Output {
2169 Temperature{K: self.kgK_per_J.clone() / rhs.per_Gy.clone()}
2170 }
2171}
2172
2173impl<T> core::ops::Div<InverseDoseEquivalent<T>> for InverseSpecificHeatCapacity<T> where T: NumLike {
2176 type Output = Temperature<T>;
2177 fn div(self, rhs: InverseDoseEquivalent<T>) -> Self::Output {
2178 Temperature{K: self.kgK_per_J / rhs.per_Sv}
2179 }
2180}
2181impl<T> core::ops::Div<InverseDoseEquivalent<T>> for &InverseSpecificHeatCapacity<T> where T: NumLike {
2183 type Output = Temperature<T>;
2184 fn div(self, rhs: InverseDoseEquivalent<T>) -> Self::Output {
2185 Temperature{K: self.kgK_per_J.clone() / rhs.per_Sv}
2186 }
2187}
2188impl<T> core::ops::Div<&InverseDoseEquivalent<T>> for InverseSpecificHeatCapacity<T> where T: NumLike {
2190 type Output = Temperature<T>;
2191 fn div(self, rhs: &InverseDoseEquivalent<T>) -> Self::Output {
2192 Temperature{K: self.kgK_per_J / rhs.per_Sv.clone()}
2193 }
2194}
2195impl<T> core::ops::Div<&InverseDoseEquivalent<T>> for &InverseSpecificHeatCapacity<T> where T: NumLike {
2197 type Output = Temperature<T>;
2198 fn div(self, rhs: &InverseDoseEquivalent<T>) -> Self::Output {
2199 Temperature{K: self.kgK_per_J.clone() / rhs.per_Sv.clone()}
2200 }
2201}
2202
2203impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for f64 where T: NumLike+From<f64> {
2206 type Output = SpecificHeatCapacity<T>;
2207 fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2208 SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J}
2209 }
2210}
2211impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for &f64 where T: NumLike+From<f64> {
2213 type Output = SpecificHeatCapacity<T>;
2214 fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2215 SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J}
2216 }
2217}
2218impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for f64 where T: NumLike+From<f64> {
2220 type Output = SpecificHeatCapacity<T>;
2221 fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2222 SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J.clone()}
2223 }
2224}
2225impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for &f64 where T: NumLike+From<f64> {
2227 type Output = SpecificHeatCapacity<T>;
2228 fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2229 SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J.clone()}
2230 }
2231}
2232
2233impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for f32 where T: NumLike+From<f32> {
2236 type Output = SpecificHeatCapacity<T>;
2237 fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2238 SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J}
2239 }
2240}
2241impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for &f32 where T: NumLike+From<f32> {
2243 type Output = SpecificHeatCapacity<T>;
2244 fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2245 SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J}
2246 }
2247}
2248impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for f32 where T: NumLike+From<f32> {
2250 type Output = SpecificHeatCapacity<T>;
2251 fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2252 SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J.clone()}
2253 }
2254}
2255impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for &f32 where T: NumLike+From<f32> {
2257 type Output = SpecificHeatCapacity<T>;
2258 fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2259 SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J.clone()}
2260 }
2261}
2262
2263impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for i64 where T: NumLike+From<i64> {
2266 type Output = SpecificHeatCapacity<T>;
2267 fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2268 SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J}
2269 }
2270}
2271impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for &i64 where T: NumLike+From<i64> {
2273 type Output = SpecificHeatCapacity<T>;
2274 fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2275 SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J}
2276 }
2277}
2278impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for i64 where T: NumLike+From<i64> {
2280 type Output = SpecificHeatCapacity<T>;
2281 fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2282 SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J.clone()}
2283 }
2284}
2285impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for &i64 where T: NumLike+From<i64> {
2287 type Output = SpecificHeatCapacity<T>;
2288 fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2289 SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J.clone()}
2290 }
2291}
2292
2293impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for i32 where T: NumLike+From<i32> {
2296 type Output = SpecificHeatCapacity<T>;
2297 fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2298 SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J}
2299 }
2300}
2301impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for &i32 where T: NumLike+From<i32> {
2303 type Output = SpecificHeatCapacity<T>;
2304 fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2305 SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J}
2306 }
2307}
2308impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for i32 where T: NumLike+From<i32> {
2310 type Output = SpecificHeatCapacity<T>;
2311 fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2312 SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J.clone()}
2313 }
2314}
2315impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for &i32 where T: NumLike+From<i32> {
2317 type Output = SpecificHeatCapacity<T>;
2318 fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2319 SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J.clone()}
2320 }
2321}
2322
2323#[cfg(feature="num-bigfloat")]
2326impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
2327 type Output = SpecificHeatCapacity<T>;
2328 fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2329 SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J}
2330 }
2331}
2332#[cfg(feature="num-bigfloat")]
2334impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
2335 type Output = SpecificHeatCapacity<T>;
2336 fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2337 SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J}
2338 }
2339}
2340#[cfg(feature="num-bigfloat")]
2342impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
2343 type Output = SpecificHeatCapacity<T>;
2344 fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2345 SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J.clone()}
2346 }
2347}
2348#[cfg(feature="num-bigfloat")]
2350impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
2351 type Output = SpecificHeatCapacity<T>;
2352 fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2353 SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J.clone()}
2354 }
2355}
2356
2357#[cfg(feature="num-complex")]
2360impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
2361 type Output = SpecificHeatCapacity<T>;
2362 fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2363 SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J}
2364 }
2365}
2366#[cfg(feature="num-complex")]
2368impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
2369 type Output = SpecificHeatCapacity<T>;
2370 fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2371 SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J}
2372 }
2373}
2374#[cfg(feature="num-complex")]
2376impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
2377 type Output = SpecificHeatCapacity<T>;
2378 fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2379 SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J.clone()}
2380 }
2381}
2382#[cfg(feature="num-complex")]
2384impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
2385 type Output = SpecificHeatCapacity<T>;
2386 fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2387 SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J.clone()}
2388 }
2389}
2390
2391#[cfg(feature="num-complex")]
2394impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
2395 type Output = SpecificHeatCapacity<T>;
2396 fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2397 SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J}
2398 }
2399}
2400#[cfg(feature="num-complex")]
2402impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
2403 type Output = SpecificHeatCapacity<T>;
2404 fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2405 SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J}
2406 }
2407}
2408#[cfg(feature="num-complex")]
2410impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
2411 type Output = SpecificHeatCapacity<T>;
2412 fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2413 SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J.clone()}
2414 }
2415}
2416#[cfg(feature="num-complex")]
2418impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
2419 type Output = SpecificHeatCapacity<T>;
2420 fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2421 SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J.clone()}
2422 }
2423}
2424
2425#[derive(UnitStruct, Debug, Clone)]
2427#[cfg_attr(feature="serde", derive(Serialize, Deserialize))]
2428pub struct Molality<T: NumLike>{
2429 pub molpkg: T
2431}
2432
2433impl<T> Molality<T> where T: NumLike {
2434
2435 pub fn unit_name() -> &'static str { "moles per kilogram" }
2437
2438 pub fn unit_symbol() -> &'static str { "mol/kg" }
2440
2441 pub fn from_molpkg(molpkg: T) -> Self { Molality{molpkg: molpkg} }
2446
2447 pub fn to_molpkg(&self) -> T { self.molpkg.clone() }
2449
2450 pub fn from_moles_per_kilogram(moles_per_kilogram: T) -> Self { Molality{molpkg: moles_per_kilogram} }
2455
2456 pub fn to_moles_per_kilogram(&self) -> T { self.molpkg.clone() }
2458
2459 pub fn from_mmolpg(mmolpg: T) -> Self { Molality{molpkg: mmolpg} }
2464
2465 pub fn to_mmolpg(&self) -> T { self.molpkg.clone() }
2467
2468}
2469
2470impl<T> fmt::Display for Molality<T> where T: NumLike {
2471 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2472 write!(f, "{} {}", &self.molpkg, Self::unit_symbol())
2473 }
2474}
2475
2476impl<T> Molality<T> where T: NumLike+From<f64> {
2477
2478 pub fn to_mmolpkg(&self) -> T {
2482 return self.molpkg.clone() * T::from(1000.0_f64);
2483 }
2484
2485 pub fn from_mmolpkg(mmolpkg: T) -> Self {
2492 Molality{molpkg: mmolpkg * T::from(0.001_f64)}
2493 }
2494
2495 pub fn to_umolpkg(&self) -> T {
2499 return self.molpkg.clone() * T::from(1000000.0_f64);
2500 }
2501
2502 pub fn from_umolpkg(umolpkg: T) -> Self {
2509 Molality{molpkg: umolpkg * T::from(1e-06_f64)}
2510 }
2511
2512 pub fn to_nmolpkg(&self) -> T {
2516 return self.molpkg.clone() * T::from(1000000000.0_f64);
2517 }
2518
2519 pub fn from_nmolpkg(nmolpkg: T) -> Self {
2526 Molality{molpkg: nmolpkg * T::from(1e-09_f64)}
2527 }
2528
2529 pub fn to_umolpg(&self) -> T {
2533 return self.molpkg.clone() * T::from(1000.0_f64);
2534 }
2535
2536 pub fn from_umolpg(umolpg: T) -> Self {
2543 Molality{molpkg: umolpg * T::from(0.001_f64)}
2544 }
2545
2546 pub fn to_nmolpg(&self) -> T {
2550 return self.molpkg.clone() * T::from(1000000.0_f64);
2551 }
2552
2553 pub fn from_nmolpg(nmolpg: T) -> Self {
2560 Molality{molpkg: nmolpg * T::from(1e-06_f64)}
2561 }
2562
2563}
2564
2565
2566#[cfg(feature="num-bigfloat")]
2568impl core::ops::Mul<Molality<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
2569 type Output = Molality<num_bigfloat::BigFloat>;
2570 fn mul(self, rhs: Molality<num_bigfloat::BigFloat>) -> Self::Output {
2571 Molality{molpkg: self * rhs.molpkg}
2572 }
2573}
2574#[cfg(feature="num-bigfloat")]
2576impl core::ops::Mul<Molality<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
2577 type Output = Molality<num_bigfloat::BigFloat>;
2578 fn mul(self, rhs: Molality<num_bigfloat::BigFloat>) -> Self::Output {
2579 Molality{molpkg: self.clone() * rhs.molpkg}
2580 }
2581}
2582#[cfg(feature="num-bigfloat")]
2584impl core::ops::Mul<&Molality<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
2585 type Output = Molality<num_bigfloat::BigFloat>;
2586 fn mul(self, rhs: &Molality<num_bigfloat::BigFloat>) -> Self::Output {
2587 Molality{molpkg: self * rhs.molpkg.clone()}
2588 }
2589}
2590#[cfg(feature="num-bigfloat")]
2592impl core::ops::Mul<&Molality<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
2593 type Output = Molality<num_bigfloat::BigFloat>;
2594 fn mul(self, rhs: &Molality<num_bigfloat::BigFloat>) -> Self::Output {
2595 Molality{molpkg: self.clone() * rhs.molpkg.clone()}
2596 }
2597}
2598
2599#[cfg(feature="num-complex")]
2601impl core::ops::Mul<Molality<num_complex::Complex32>> for num_complex::Complex32 {
2602 type Output = Molality<num_complex::Complex32>;
2603 fn mul(self, rhs: Molality<num_complex::Complex32>) -> Self::Output {
2604 Molality{molpkg: self * rhs.molpkg}
2605 }
2606}
2607#[cfg(feature="num-complex")]
2609impl core::ops::Mul<Molality<num_complex::Complex32>> for &num_complex::Complex32 {
2610 type Output = Molality<num_complex::Complex32>;
2611 fn mul(self, rhs: Molality<num_complex::Complex32>) -> Self::Output {
2612 Molality{molpkg: self.clone() * rhs.molpkg}
2613 }
2614}
2615#[cfg(feature="num-complex")]
2617impl core::ops::Mul<&Molality<num_complex::Complex32>> for num_complex::Complex32 {
2618 type Output = Molality<num_complex::Complex32>;
2619 fn mul(self, rhs: &Molality<num_complex::Complex32>) -> Self::Output {
2620 Molality{molpkg: self * rhs.molpkg.clone()}
2621 }
2622}
2623#[cfg(feature="num-complex")]
2625impl core::ops::Mul<&Molality<num_complex::Complex32>> for &num_complex::Complex32 {
2626 type Output = Molality<num_complex::Complex32>;
2627 fn mul(self, rhs: &Molality<num_complex::Complex32>) -> Self::Output {
2628 Molality{molpkg: self.clone() * rhs.molpkg.clone()}
2629 }
2630}
2631
2632#[cfg(feature="num-complex")]
2634impl core::ops::Mul<Molality<num_complex::Complex64>> for num_complex::Complex64 {
2635 type Output = Molality<num_complex::Complex64>;
2636 fn mul(self, rhs: Molality<num_complex::Complex64>) -> Self::Output {
2637 Molality{molpkg: self * rhs.molpkg}
2638 }
2639}
2640#[cfg(feature="num-complex")]
2642impl core::ops::Mul<Molality<num_complex::Complex64>> for &num_complex::Complex64 {
2643 type Output = Molality<num_complex::Complex64>;
2644 fn mul(self, rhs: Molality<num_complex::Complex64>) -> Self::Output {
2645 Molality{molpkg: self.clone() * rhs.molpkg}
2646 }
2647}
2648#[cfg(feature="num-complex")]
2650impl core::ops::Mul<&Molality<num_complex::Complex64>> for num_complex::Complex64 {
2651 type Output = Molality<num_complex::Complex64>;
2652 fn mul(self, rhs: &Molality<num_complex::Complex64>) -> Self::Output {
2653 Molality{molpkg: self * rhs.molpkg.clone()}
2654 }
2655}
2656#[cfg(feature="num-complex")]
2658impl core::ops::Mul<&Molality<num_complex::Complex64>> for &num_complex::Complex64 {
2659 type Output = Molality<num_complex::Complex64>;
2660 fn mul(self, rhs: &Molality<num_complex::Complex64>) -> Self::Output {
2661 Molality{molpkg: self.clone() * rhs.molpkg.clone()}
2662 }
2663}
2664
2665
2666
2667#[cfg(feature = "uom")]
2669impl<T> Into<uom::si::f32::Molality> for Molality<T> where T: NumLike+Into<f32> {
2670 fn into(self) -> uom::si::f32::Molality {
2671 uom::si::f32::Molality::new::<uom::si::molality::mole_per_kilogram>(self.molpkg.into())
2672 }
2673}
2674
2675#[cfg(feature = "uom")]
2677impl<T> From<uom::si::f32::Molality> for Molality<T> where T: NumLike+From<f32> {
2678 fn from(src: uom::si::f32::Molality) -> Self {
2679 Molality{molpkg: T::from(src.value)}
2680 }
2681}
2682
2683#[cfg(feature = "uom")]
2685impl<T> Into<uom::si::f64::Molality> for Molality<T> where T: NumLike+Into<f64> {
2686 fn into(self) -> uom::si::f64::Molality {
2687 uom::si::f64::Molality::new::<uom::si::molality::mole_per_kilogram>(self.molpkg.into())
2688 }
2689}
2690
2691#[cfg(feature = "uom")]
2693impl<T> From<uom::si::f64::Molality> for Molality<T> where T: NumLike+From<f64> {
2694 fn from(src: uom::si::f64::Molality) -> Self {
2695 Molality{molpkg: T::from(src.value)}
2696 }
2697}
2698
2699
2700impl<T> core::ops::Div<Amount<T>> for Molality<T> where T: NumLike {
2703 type Output = InverseMass<T>;
2704 fn div(self, rhs: Amount<T>) -> Self::Output {
2705 InverseMass{per_kg: self.molpkg / rhs.mol}
2706 }
2707}
2708impl<T> core::ops::Div<Amount<T>> for &Molality<T> where T: NumLike {
2710 type Output = InverseMass<T>;
2711 fn div(self, rhs: Amount<T>) -> Self::Output {
2712 InverseMass{per_kg: self.molpkg.clone() / rhs.mol}
2713 }
2714}
2715impl<T> core::ops::Div<&Amount<T>> for Molality<T> where T: NumLike {
2717 type Output = InverseMass<T>;
2718 fn div(self, rhs: &Amount<T>) -> Self::Output {
2719 InverseMass{per_kg: self.molpkg / rhs.mol.clone()}
2720 }
2721}
2722impl<T> core::ops::Div<&Amount<T>> for &Molality<T> where T: NumLike {
2724 type Output = InverseMass<T>;
2725 fn div(self, rhs: &Amount<T>) -> Self::Output {
2726 InverseMass{per_kg: self.molpkg.clone() / rhs.mol.clone()}
2727 }
2728}
2729
2730impl<T> core::ops::Mul<InverseAmount<T>> for Molality<T> where T: NumLike {
2733 type Output = InverseMass<T>;
2734 fn mul(self, rhs: InverseAmount<T>) -> Self::Output {
2735 InverseMass{per_kg: self.molpkg * rhs.per_mol}
2736 }
2737}
2738impl<T> core::ops::Mul<InverseAmount<T>> for &Molality<T> where T: NumLike {
2740 type Output = InverseMass<T>;
2741 fn mul(self, rhs: InverseAmount<T>) -> Self::Output {
2742 InverseMass{per_kg: self.molpkg.clone() * rhs.per_mol}
2743 }
2744}
2745impl<T> core::ops::Mul<&InverseAmount<T>> for Molality<T> where T: NumLike {
2747 type Output = InverseMass<T>;
2748 fn mul(self, rhs: &InverseAmount<T>) -> Self::Output {
2749 InverseMass{per_kg: self.molpkg * rhs.per_mol.clone()}
2750 }
2751}
2752impl<T> core::ops::Mul<&InverseAmount<T>> for &Molality<T> where T: NumLike {
2754 type Output = InverseMass<T>;
2755 fn mul(self, rhs: &InverseAmount<T>) -> Self::Output {
2756 InverseMass{per_kg: self.molpkg.clone() * rhs.per_mol.clone()}
2757 }
2758}
2759
2760impl<T> core::ops::Div<InverseMass<T>> for Molality<T> where T: NumLike {
2763 type Output = Amount<T>;
2764 fn div(self, rhs: InverseMass<T>) -> Self::Output {
2765 Amount{mol: self.molpkg / rhs.per_kg}
2766 }
2767}
2768impl<T> core::ops::Div<InverseMass<T>> for &Molality<T> where T: NumLike {
2770 type Output = Amount<T>;
2771 fn div(self, rhs: InverseMass<T>) -> Self::Output {
2772 Amount{mol: self.molpkg.clone() / rhs.per_kg}
2773 }
2774}
2775impl<T> core::ops::Div<&InverseMass<T>> for Molality<T> where T: NumLike {
2777 type Output = Amount<T>;
2778 fn div(self, rhs: &InverseMass<T>) -> Self::Output {
2779 Amount{mol: self.molpkg / rhs.per_kg.clone()}
2780 }
2781}
2782impl<T> core::ops::Div<&InverseMass<T>> for &Molality<T> where T: NumLike {
2784 type Output = Amount<T>;
2785 fn div(self, rhs: &InverseMass<T>) -> Self::Output {
2786 Amount{mol: self.molpkg.clone() / rhs.per_kg.clone()}
2787 }
2788}
2789
2790impl<T> core::ops::Mul<Mass<T>> for Molality<T> where T: NumLike {
2793 type Output = Amount<T>;
2794 fn mul(self, rhs: Mass<T>) -> Self::Output {
2795 Amount{mol: self.molpkg * rhs.kg}
2796 }
2797}
2798impl<T> core::ops::Mul<Mass<T>> for &Molality<T> where T: NumLike {
2800 type Output = Amount<T>;
2801 fn mul(self, rhs: Mass<T>) -> Self::Output {
2802 Amount{mol: self.molpkg.clone() * rhs.kg}
2803 }
2804}
2805impl<T> core::ops::Mul<&Mass<T>> for Molality<T> where T: NumLike {
2807 type Output = Amount<T>;
2808 fn mul(self, rhs: &Mass<T>) -> Self::Output {
2809 Amount{mol: self.molpkg * rhs.kg.clone()}
2810 }
2811}
2812impl<T> core::ops::Mul<&Mass<T>> for &Molality<T> where T: NumLike {
2814 type Output = Amount<T>;
2815 fn mul(self, rhs: &Mass<T>) -> Self::Output {
2816 Amount{mol: self.molpkg.clone() * rhs.kg.clone()}
2817 }
2818}
2819
2820impl<T> core::ops::Div<Concentration<T>> for Molality<T> where T: NumLike {
2823 type Output = VolumePerMass<T>;
2824 fn div(self, rhs: Concentration<T>) -> Self::Output {
2825 VolumePerMass{m3_per_kg: self.molpkg / rhs.molpm3}
2826 }
2827}
2828impl<T> core::ops::Div<Concentration<T>> for &Molality<T> where T: NumLike {
2830 type Output = VolumePerMass<T>;
2831 fn div(self, rhs: Concentration<T>) -> Self::Output {
2832 VolumePerMass{m3_per_kg: self.molpkg.clone() / rhs.molpm3}
2833 }
2834}
2835impl<T> core::ops::Div<&Concentration<T>> for Molality<T> where T: NumLike {
2837 type Output = VolumePerMass<T>;
2838 fn div(self, rhs: &Concentration<T>) -> Self::Output {
2839 VolumePerMass{m3_per_kg: self.molpkg / rhs.molpm3.clone()}
2840 }
2841}
2842impl<T> core::ops::Div<&Concentration<T>> for &Molality<T> where T: NumLike {
2844 type Output = VolumePerMass<T>;
2845 fn div(self, rhs: &Concentration<T>) -> Self::Output {
2846 VolumePerMass{m3_per_kg: self.molpkg.clone() / rhs.molpm3.clone()}
2847 }
2848}
2849
2850impl<T> core::ops::Mul<MolarVolume<T>> for Molality<T> where T: NumLike {
2853 type Output = VolumePerMass<T>;
2854 fn mul(self, rhs: MolarVolume<T>) -> Self::Output {
2855 VolumePerMass{m3_per_kg: self.molpkg * rhs.m3_per_mol}
2856 }
2857}
2858impl<T> core::ops::Mul<MolarVolume<T>> for &Molality<T> where T: NumLike {
2860 type Output = VolumePerMass<T>;
2861 fn mul(self, rhs: MolarVolume<T>) -> Self::Output {
2862 VolumePerMass{m3_per_kg: self.molpkg.clone() * rhs.m3_per_mol}
2863 }
2864}
2865impl<T> core::ops::Mul<&MolarVolume<T>> for Molality<T> where T: NumLike {
2867 type Output = VolumePerMass<T>;
2868 fn mul(self, rhs: &MolarVolume<T>) -> Self::Output {
2869 VolumePerMass{m3_per_kg: self.molpkg * rhs.m3_per_mol.clone()}
2870 }
2871}
2872impl<T> core::ops::Mul<&MolarVolume<T>> for &Molality<T> where T: NumLike {
2874 type Output = VolumePerMass<T>;
2875 fn mul(self, rhs: &MolarVolume<T>) -> Self::Output {
2876 VolumePerMass{m3_per_kg: self.molpkg.clone() * rhs.m3_per_mol.clone()}
2877 }
2878}
2879
2880impl<T> core::ops::Mul<Density<T>> for Molality<T> where T: NumLike {
2883 type Output = Concentration<T>;
2884 fn mul(self, rhs: Density<T>) -> Self::Output {
2885 Concentration{molpm3: self.molpkg * rhs.kgpm3}
2886 }
2887}
2888impl<T> core::ops::Mul<Density<T>> for &Molality<T> where T: NumLike {
2890 type Output = Concentration<T>;
2891 fn mul(self, rhs: Density<T>) -> Self::Output {
2892 Concentration{molpm3: self.molpkg.clone() * rhs.kgpm3}
2893 }
2894}
2895impl<T> core::ops::Mul<&Density<T>> for Molality<T> where T: NumLike {
2897 type Output = Concentration<T>;
2898 fn mul(self, rhs: &Density<T>) -> Self::Output {
2899 Concentration{molpm3: self.molpkg * rhs.kgpm3.clone()}
2900 }
2901}
2902impl<T> core::ops::Mul<&Density<T>> for &Molality<T> where T: NumLike {
2904 type Output = Concentration<T>;
2905 fn mul(self, rhs: &Density<T>) -> Self::Output {
2906 Concentration{molpm3: self.molpkg.clone() * rhs.kgpm3.clone()}
2907 }
2908}
2909
2910impl<T> core::ops::Div<VolumePerMass<T>> for Molality<T> where T: NumLike {
2913 type Output = Concentration<T>;
2914 fn div(self, rhs: VolumePerMass<T>) -> Self::Output {
2915 Concentration{molpm3: self.molpkg / rhs.m3_per_kg}
2916 }
2917}
2918impl<T> core::ops::Div<VolumePerMass<T>> for &Molality<T> where T: NumLike {
2920 type Output = Concentration<T>;
2921 fn div(self, rhs: VolumePerMass<T>) -> Self::Output {
2922 Concentration{molpm3: self.molpkg.clone() / rhs.m3_per_kg}
2923 }
2924}
2925impl<T> core::ops::Div<&VolumePerMass<T>> for Molality<T> where T: NumLike {
2927 type Output = Concentration<T>;
2928 fn div(self, rhs: &VolumePerMass<T>) -> Self::Output {
2929 Concentration{molpm3: self.molpkg / rhs.m3_per_kg.clone()}
2930 }
2931}
2932impl<T> core::ops::Div<&VolumePerMass<T>> for &Molality<T> where T: NumLike {
2934 type Output = Concentration<T>;
2935 fn div(self, rhs: &VolumePerMass<T>) -> Self::Output {
2936 Concentration{molpm3: self.molpkg.clone() / rhs.m3_per_kg.clone()}
2937 }
2938}
2939
2940impl<T> core::ops::Div<Molality<T>> for f64 where T: NumLike+From<f64> {
2943 type Output = MolarMass<T>;
2944 fn div(self, rhs: Molality<T>) -> Self::Output {
2945 MolarMass{kgpmol: T::from(self) / rhs.molpkg}
2946 }
2947}
2948impl<T> core::ops::Div<Molality<T>> for &f64 where T: NumLike+From<f64> {
2950 type Output = MolarMass<T>;
2951 fn div(self, rhs: Molality<T>) -> Self::Output {
2952 MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg}
2953 }
2954}
2955impl<T> core::ops::Div<&Molality<T>> for f64 where T: NumLike+From<f64> {
2957 type Output = MolarMass<T>;
2958 fn div(self, rhs: &Molality<T>) -> Self::Output {
2959 MolarMass{kgpmol: T::from(self) / rhs.molpkg.clone()}
2960 }
2961}
2962impl<T> core::ops::Div<&Molality<T>> for &f64 where T: NumLike+From<f64> {
2964 type Output = MolarMass<T>;
2965 fn div(self, rhs: &Molality<T>) -> Self::Output {
2966 MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg.clone()}
2967 }
2968}
2969
2970impl<T> core::ops::Div<Molality<T>> for f32 where T: NumLike+From<f32> {
2973 type Output = MolarMass<T>;
2974 fn div(self, rhs: Molality<T>) -> Self::Output {
2975 MolarMass{kgpmol: T::from(self) / rhs.molpkg}
2976 }
2977}
2978impl<T> core::ops::Div<Molality<T>> for &f32 where T: NumLike+From<f32> {
2980 type Output = MolarMass<T>;
2981 fn div(self, rhs: Molality<T>) -> Self::Output {
2982 MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg}
2983 }
2984}
2985impl<T> core::ops::Div<&Molality<T>> for f32 where T: NumLike+From<f32> {
2987 type Output = MolarMass<T>;
2988 fn div(self, rhs: &Molality<T>) -> Self::Output {
2989 MolarMass{kgpmol: T::from(self) / rhs.molpkg.clone()}
2990 }
2991}
2992impl<T> core::ops::Div<&Molality<T>> for &f32 where T: NumLike+From<f32> {
2994 type Output = MolarMass<T>;
2995 fn div(self, rhs: &Molality<T>) -> Self::Output {
2996 MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg.clone()}
2997 }
2998}
2999
3000impl<T> core::ops::Div<Molality<T>> for i64 where T: NumLike+From<i64> {
3003 type Output = MolarMass<T>;
3004 fn div(self, rhs: Molality<T>) -> Self::Output {
3005 MolarMass{kgpmol: T::from(self) / rhs.molpkg}
3006 }
3007}
3008impl<T> core::ops::Div<Molality<T>> for &i64 where T: NumLike+From<i64> {
3010 type Output = MolarMass<T>;
3011 fn div(self, rhs: Molality<T>) -> Self::Output {
3012 MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg}
3013 }
3014}
3015impl<T> core::ops::Div<&Molality<T>> for i64 where T: NumLike+From<i64> {
3017 type Output = MolarMass<T>;
3018 fn div(self, rhs: &Molality<T>) -> Self::Output {
3019 MolarMass{kgpmol: T::from(self) / rhs.molpkg.clone()}
3020 }
3021}
3022impl<T> core::ops::Div<&Molality<T>> for &i64 where T: NumLike+From<i64> {
3024 type Output = MolarMass<T>;
3025 fn div(self, rhs: &Molality<T>) -> Self::Output {
3026 MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg.clone()}
3027 }
3028}
3029
3030impl<T> core::ops::Div<Molality<T>> for i32 where T: NumLike+From<i32> {
3033 type Output = MolarMass<T>;
3034 fn div(self, rhs: Molality<T>) -> Self::Output {
3035 MolarMass{kgpmol: T::from(self) / rhs.molpkg}
3036 }
3037}
3038impl<T> core::ops::Div<Molality<T>> for &i32 where T: NumLike+From<i32> {
3040 type Output = MolarMass<T>;
3041 fn div(self, rhs: Molality<T>) -> Self::Output {
3042 MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg}
3043 }
3044}
3045impl<T> core::ops::Div<&Molality<T>> for i32 where T: NumLike+From<i32> {
3047 type Output = MolarMass<T>;
3048 fn div(self, rhs: &Molality<T>) -> Self::Output {
3049 MolarMass{kgpmol: T::from(self) / rhs.molpkg.clone()}
3050 }
3051}
3052impl<T> core::ops::Div<&Molality<T>> for &i32 where T: NumLike+From<i32> {
3054 type Output = MolarMass<T>;
3055 fn div(self, rhs: &Molality<T>) -> Self::Output {
3056 MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg.clone()}
3057 }
3058}
3059
3060#[cfg(feature="num-bigfloat")]
3063impl<T> core::ops::Div<Molality<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
3064 type Output = MolarMass<T>;
3065 fn div(self, rhs: Molality<T>) -> Self::Output {
3066 MolarMass{kgpmol: T::from(self) / rhs.molpkg}
3067 }
3068}
3069#[cfg(feature="num-bigfloat")]
3071impl<T> core::ops::Div<Molality<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
3072 type Output = MolarMass<T>;
3073 fn div(self, rhs: Molality<T>) -> Self::Output {
3074 MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg}
3075 }
3076}
3077#[cfg(feature="num-bigfloat")]
3079impl<T> core::ops::Div<&Molality<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
3080 type Output = MolarMass<T>;
3081 fn div(self, rhs: &Molality<T>) -> Self::Output {
3082 MolarMass{kgpmol: T::from(self) / rhs.molpkg.clone()}
3083 }
3084}
3085#[cfg(feature="num-bigfloat")]
3087impl<T> core::ops::Div<&Molality<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
3088 type Output = MolarMass<T>;
3089 fn div(self, rhs: &Molality<T>) -> Self::Output {
3090 MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg.clone()}
3091 }
3092}
3093
3094#[cfg(feature="num-complex")]
3097impl<T> core::ops::Div<Molality<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
3098 type Output = MolarMass<T>;
3099 fn div(self, rhs: Molality<T>) -> Self::Output {
3100 MolarMass{kgpmol: T::from(self) / rhs.molpkg}
3101 }
3102}
3103#[cfg(feature="num-complex")]
3105impl<T> core::ops::Div<Molality<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
3106 type Output = MolarMass<T>;
3107 fn div(self, rhs: Molality<T>) -> Self::Output {
3108 MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg}
3109 }
3110}
3111#[cfg(feature="num-complex")]
3113impl<T> core::ops::Div<&Molality<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
3114 type Output = MolarMass<T>;
3115 fn div(self, rhs: &Molality<T>) -> Self::Output {
3116 MolarMass{kgpmol: T::from(self) / rhs.molpkg.clone()}
3117 }
3118}
3119#[cfg(feature="num-complex")]
3121impl<T> core::ops::Div<&Molality<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
3122 type Output = MolarMass<T>;
3123 fn div(self, rhs: &Molality<T>) -> Self::Output {
3124 MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg.clone()}
3125 }
3126}
3127
3128#[cfg(feature="num-complex")]
3131impl<T> core::ops::Div<Molality<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
3132 type Output = MolarMass<T>;
3133 fn div(self, rhs: Molality<T>) -> Self::Output {
3134 MolarMass{kgpmol: T::from(self) / rhs.molpkg}
3135 }
3136}
3137#[cfg(feature="num-complex")]
3139impl<T> core::ops::Div<Molality<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
3140 type Output = MolarMass<T>;
3141 fn div(self, rhs: Molality<T>) -> Self::Output {
3142 MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg}
3143 }
3144}
3145#[cfg(feature="num-complex")]
3147impl<T> core::ops::Div<&Molality<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
3148 type Output = MolarMass<T>;
3149 fn div(self, rhs: &Molality<T>) -> Self::Output {
3150 MolarMass{kgpmol: T::from(self) / rhs.molpkg.clone()}
3151 }
3152}
3153#[cfg(feature="num-complex")]
3155impl<T> core::ops::Div<&Molality<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
3156 type Output = MolarMass<T>;
3157 fn div(self, rhs: &Molality<T>) -> Self::Output {
3158 MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg.clone()}
3159 }
3160}
3161
3162#[derive(UnitStruct, Debug, Clone)]
3164#[cfg_attr(feature="serde", derive(Serialize, Deserialize))]
3165pub struct MolarMass<T: NumLike>{
3166 pub kgpmol: T
3168}
3169
3170impl<T> MolarMass<T> where T: NumLike {
3171
3172 pub fn unit_name() -> &'static str { "kilograms per mole" }
3174
3175 pub fn unit_symbol() -> &'static str { "kg/mol" }
3177
3178 pub fn from_kgpmol(kgpmol: T) -> Self { MolarMass{kgpmol: kgpmol} }
3183
3184 pub fn to_kgpmol(&self) -> T { self.kgpmol.clone() }
3186
3187 pub fn from_kilograms_per_mole(kilograms_per_mole: T) -> Self { MolarMass{kgpmol: kilograms_per_mole} }
3192
3193 pub fn to_kilograms_per_mole(&self) -> T { self.kgpmol.clone() }
3195
3196}
3197
3198impl<T> fmt::Display for MolarMass<T> where T: NumLike {
3199 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
3200 write!(f, "{} {}", &self.kgpmol, Self::unit_symbol())
3201 }
3202}
3203
3204impl<T> MolarMass<T> where T: NumLike+From<f64> {
3205
3206 pub fn to_gpmol(&self) -> T {
3210 return self.kgpmol.clone() * T::from(1000.0_f64);
3211 }
3212
3213 pub fn from_gpmol(gpmol: T) -> Self {
3220 MolarMass{kgpmol: gpmol * T::from(0.001_f64)}
3221 }
3222
3223 pub fn to_grams_per_mole(&self) -> T {
3227 return self.kgpmol.clone() * T::from(1000.0_f64);
3228 }
3229
3230 pub fn from_grams_per_mole(grams_per_mole: T) -> Self {
3237 MolarMass{kgpmol: grams_per_mole * T::from(0.001_f64)}
3238 }
3239
3240}
3241
3242
3243#[cfg(feature="num-bigfloat")]
3245impl core::ops::Mul<MolarMass<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
3246 type Output = MolarMass<num_bigfloat::BigFloat>;
3247 fn mul(self, rhs: MolarMass<num_bigfloat::BigFloat>) -> Self::Output {
3248 MolarMass{kgpmol: self * rhs.kgpmol}
3249 }
3250}
3251#[cfg(feature="num-bigfloat")]
3253impl core::ops::Mul<MolarMass<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
3254 type Output = MolarMass<num_bigfloat::BigFloat>;
3255 fn mul(self, rhs: MolarMass<num_bigfloat::BigFloat>) -> Self::Output {
3256 MolarMass{kgpmol: self.clone() * rhs.kgpmol}
3257 }
3258}
3259#[cfg(feature="num-bigfloat")]
3261impl core::ops::Mul<&MolarMass<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
3262 type Output = MolarMass<num_bigfloat::BigFloat>;
3263 fn mul(self, rhs: &MolarMass<num_bigfloat::BigFloat>) -> Self::Output {
3264 MolarMass{kgpmol: self * rhs.kgpmol.clone()}
3265 }
3266}
3267#[cfg(feature="num-bigfloat")]
3269impl core::ops::Mul<&MolarMass<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
3270 type Output = MolarMass<num_bigfloat::BigFloat>;
3271 fn mul(self, rhs: &MolarMass<num_bigfloat::BigFloat>) -> Self::Output {
3272 MolarMass{kgpmol: self.clone() * rhs.kgpmol.clone()}
3273 }
3274}
3275
3276#[cfg(feature="num-complex")]
3278impl core::ops::Mul<MolarMass<num_complex::Complex32>> for num_complex::Complex32 {
3279 type Output = MolarMass<num_complex::Complex32>;
3280 fn mul(self, rhs: MolarMass<num_complex::Complex32>) -> Self::Output {
3281 MolarMass{kgpmol: self * rhs.kgpmol}
3282 }
3283}
3284#[cfg(feature="num-complex")]
3286impl core::ops::Mul<MolarMass<num_complex::Complex32>> for &num_complex::Complex32 {
3287 type Output = MolarMass<num_complex::Complex32>;
3288 fn mul(self, rhs: MolarMass<num_complex::Complex32>) -> Self::Output {
3289 MolarMass{kgpmol: self.clone() * rhs.kgpmol}
3290 }
3291}
3292#[cfg(feature="num-complex")]
3294impl core::ops::Mul<&MolarMass<num_complex::Complex32>> for num_complex::Complex32 {
3295 type Output = MolarMass<num_complex::Complex32>;
3296 fn mul(self, rhs: &MolarMass<num_complex::Complex32>) -> Self::Output {
3297 MolarMass{kgpmol: self * rhs.kgpmol.clone()}
3298 }
3299}
3300#[cfg(feature="num-complex")]
3302impl core::ops::Mul<&MolarMass<num_complex::Complex32>> for &num_complex::Complex32 {
3303 type Output = MolarMass<num_complex::Complex32>;
3304 fn mul(self, rhs: &MolarMass<num_complex::Complex32>) -> Self::Output {
3305 MolarMass{kgpmol: self.clone() * rhs.kgpmol.clone()}
3306 }
3307}
3308
3309#[cfg(feature="num-complex")]
3311impl core::ops::Mul<MolarMass<num_complex::Complex64>> for num_complex::Complex64 {
3312 type Output = MolarMass<num_complex::Complex64>;
3313 fn mul(self, rhs: MolarMass<num_complex::Complex64>) -> Self::Output {
3314 MolarMass{kgpmol: self * rhs.kgpmol}
3315 }
3316}
3317#[cfg(feature="num-complex")]
3319impl core::ops::Mul<MolarMass<num_complex::Complex64>> for &num_complex::Complex64 {
3320 type Output = MolarMass<num_complex::Complex64>;
3321 fn mul(self, rhs: MolarMass<num_complex::Complex64>) -> Self::Output {
3322 MolarMass{kgpmol: self.clone() * rhs.kgpmol}
3323 }
3324}
3325#[cfg(feature="num-complex")]
3327impl core::ops::Mul<&MolarMass<num_complex::Complex64>> for num_complex::Complex64 {
3328 type Output = MolarMass<num_complex::Complex64>;
3329 fn mul(self, rhs: &MolarMass<num_complex::Complex64>) -> Self::Output {
3330 MolarMass{kgpmol: self * rhs.kgpmol.clone()}
3331 }
3332}
3333#[cfg(feature="num-complex")]
3335impl core::ops::Mul<&MolarMass<num_complex::Complex64>> for &num_complex::Complex64 {
3336 type Output = MolarMass<num_complex::Complex64>;
3337 fn mul(self, rhs: &MolarMass<num_complex::Complex64>) -> Self::Output {
3338 MolarMass{kgpmol: self.clone() * rhs.kgpmol.clone()}
3339 }
3340}
3341
3342
3343
3344#[cfg(feature = "uom")]
3346impl<T> Into<uom::si::f32::MolarMass> for MolarMass<T> where T: NumLike+Into<f32> {
3347 fn into(self) -> uom::si::f32::MolarMass {
3348 uom::si::f32::MolarMass::new::<uom::si::molar_mass::kilogram_per_mole>(self.kgpmol.into())
3349 }
3350}
3351
3352#[cfg(feature = "uom")]
3354impl<T> From<uom::si::f32::MolarMass> for MolarMass<T> where T: NumLike+From<f32> {
3355 fn from(src: uom::si::f32::MolarMass) -> Self {
3356 MolarMass{kgpmol: T::from(src.value)}
3357 }
3358}
3359
3360#[cfg(feature = "uom")]
3362impl<T> Into<uom::si::f64::MolarMass> for MolarMass<T> where T: NumLike+Into<f64> {
3363 fn into(self) -> uom::si::f64::MolarMass {
3364 uom::si::f64::MolarMass::new::<uom::si::molar_mass::kilogram_per_mole>(self.kgpmol.into())
3365 }
3366}
3367
3368#[cfg(feature = "uom")]
3370impl<T> From<uom::si::f64::MolarMass> for MolarMass<T> where T: NumLike+From<f64> {
3371 fn from(src: uom::si::f64::MolarMass) -> Self {
3372 MolarMass{kgpmol: T::from(src.value)}
3373 }
3374}
3375
3376
3377impl<T> core::ops::Mul<Amount<T>> for MolarMass<T> where T: NumLike {
3380 type Output = Mass<T>;
3381 fn mul(self, rhs: Amount<T>) -> Self::Output {
3382 Mass{kg: self.kgpmol * rhs.mol}
3383 }
3384}
3385impl<T> core::ops::Mul<Amount<T>> for &MolarMass<T> where T: NumLike {
3387 type Output = Mass<T>;
3388 fn mul(self, rhs: Amount<T>) -> Self::Output {
3389 Mass{kg: self.kgpmol.clone() * rhs.mol}
3390 }
3391}
3392impl<T> core::ops::Mul<&Amount<T>> for MolarMass<T> where T: NumLike {
3394 type Output = Mass<T>;
3395 fn mul(self, rhs: &Amount<T>) -> Self::Output {
3396 Mass{kg: self.kgpmol * rhs.mol.clone()}
3397 }
3398}
3399impl<T> core::ops::Mul<&Amount<T>> for &MolarMass<T> where T: NumLike {
3401 type Output = Mass<T>;
3402 fn mul(self, rhs: &Amount<T>) -> Self::Output {
3403 Mass{kg: self.kgpmol.clone() * rhs.mol.clone()}
3404 }
3405}
3406
3407impl<T> core::ops::Div<InverseAmount<T>> for MolarMass<T> where T: NumLike {
3410 type Output = Mass<T>;
3411 fn div(self, rhs: InverseAmount<T>) -> Self::Output {
3412 Mass{kg: self.kgpmol / rhs.per_mol}
3413 }
3414}
3415impl<T> core::ops::Div<InverseAmount<T>> for &MolarMass<T> where T: NumLike {
3417 type Output = Mass<T>;
3418 fn div(self, rhs: InverseAmount<T>) -> Self::Output {
3419 Mass{kg: self.kgpmol.clone() / rhs.per_mol}
3420 }
3421}
3422impl<T> core::ops::Div<&InverseAmount<T>> for MolarMass<T> where T: NumLike {
3424 type Output = Mass<T>;
3425 fn div(self, rhs: &InverseAmount<T>) -> Self::Output {
3426 Mass{kg: self.kgpmol / rhs.per_mol.clone()}
3427 }
3428}
3429impl<T> core::ops::Div<&InverseAmount<T>> for &MolarMass<T> where T: NumLike {
3431 type Output = Mass<T>;
3432 fn div(self, rhs: &InverseAmount<T>) -> Self::Output {
3433 Mass{kg: self.kgpmol.clone() / rhs.per_mol.clone()}
3434 }
3435}
3436
3437impl<T> core::ops::Mul<InverseMass<T>> for MolarMass<T> where T: NumLike {
3440 type Output = InverseAmount<T>;
3441 fn mul(self, rhs: InverseMass<T>) -> Self::Output {
3442 InverseAmount{per_mol: self.kgpmol * rhs.per_kg}
3443 }
3444}
3445impl<T> core::ops::Mul<InverseMass<T>> for &MolarMass<T> where T: NumLike {
3447 type Output = InverseAmount<T>;
3448 fn mul(self, rhs: InverseMass<T>) -> Self::Output {
3449 InverseAmount{per_mol: self.kgpmol.clone() * rhs.per_kg}
3450 }
3451}
3452impl<T> core::ops::Mul<&InverseMass<T>> for MolarMass<T> where T: NumLike {
3454 type Output = InverseAmount<T>;
3455 fn mul(self, rhs: &InverseMass<T>) -> Self::Output {
3456 InverseAmount{per_mol: self.kgpmol * rhs.per_kg.clone()}
3457 }
3458}
3459impl<T> core::ops::Mul<&InverseMass<T>> for &MolarMass<T> where T: NumLike {
3461 type Output = InverseAmount<T>;
3462 fn mul(self, rhs: &InverseMass<T>) -> Self::Output {
3463 InverseAmount{per_mol: self.kgpmol.clone() * rhs.per_kg.clone()}
3464 }
3465}
3466
3467impl<T> core::ops::Div<Mass<T>> for MolarMass<T> where T: NumLike {
3470 type Output = InverseAmount<T>;
3471 fn div(self, rhs: Mass<T>) -> Self::Output {
3472 InverseAmount{per_mol: self.kgpmol / rhs.kg}
3473 }
3474}
3475impl<T> core::ops::Div<Mass<T>> for &MolarMass<T> where T: NumLike {
3477 type Output = InverseAmount<T>;
3478 fn div(self, rhs: Mass<T>) -> Self::Output {
3479 InverseAmount{per_mol: self.kgpmol.clone() / rhs.kg}
3480 }
3481}
3482impl<T> core::ops::Div<&Mass<T>> for MolarMass<T> where T: NumLike {
3484 type Output = InverseAmount<T>;
3485 fn div(self, rhs: &Mass<T>) -> Self::Output {
3486 InverseAmount{per_mol: self.kgpmol / rhs.kg.clone()}
3487 }
3488}
3489impl<T> core::ops::Div<&Mass<T>> for &MolarMass<T> where T: NumLike {
3491 type Output = InverseAmount<T>;
3492 fn div(self, rhs: &Mass<T>) -> Self::Output {
3493 InverseAmount{per_mol: self.kgpmol.clone() / rhs.kg.clone()}
3494 }
3495}
3496
3497impl<T> core::ops::Mul<Concentration<T>> for MolarMass<T> where T: NumLike {
3500 type Output = Density<T>;
3501 fn mul(self, rhs: Concentration<T>) -> Self::Output {
3502 Density{kgpm3: self.kgpmol * rhs.molpm3}
3503 }
3504}
3505impl<T> core::ops::Mul<Concentration<T>> for &MolarMass<T> where T: NumLike {
3507 type Output = Density<T>;
3508 fn mul(self, rhs: Concentration<T>) -> Self::Output {
3509 Density{kgpm3: self.kgpmol.clone() * rhs.molpm3}
3510 }
3511}
3512impl<T> core::ops::Mul<&Concentration<T>> for MolarMass<T> where T: NumLike {
3514 type Output = Density<T>;
3515 fn mul(self, rhs: &Concentration<T>) -> Self::Output {
3516 Density{kgpm3: self.kgpmol * rhs.molpm3.clone()}
3517 }
3518}
3519impl<T> core::ops::Mul<&Concentration<T>> for &MolarMass<T> where T: NumLike {
3521 type Output = Density<T>;
3522 fn mul(self, rhs: &Concentration<T>) -> Self::Output {
3523 Density{kgpm3: self.kgpmol.clone() * rhs.molpm3.clone()}
3524 }
3525}
3526
3527impl<T> core::ops::Div<MolarVolume<T>> for MolarMass<T> where T: NumLike {
3530 type Output = Density<T>;
3531 fn div(self, rhs: MolarVolume<T>) -> Self::Output {
3532 Density{kgpm3: self.kgpmol / rhs.m3_per_mol}
3533 }
3534}
3535impl<T> core::ops::Div<MolarVolume<T>> for &MolarMass<T> where T: NumLike {
3537 type Output = Density<T>;
3538 fn div(self, rhs: MolarVolume<T>) -> Self::Output {
3539 Density{kgpm3: self.kgpmol.clone() / rhs.m3_per_mol}
3540 }
3541}
3542impl<T> core::ops::Div<&MolarVolume<T>> for MolarMass<T> where T: NumLike {
3544 type Output = Density<T>;
3545 fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
3546 Density{kgpm3: self.kgpmol / rhs.m3_per_mol.clone()}
3547 }
3548}
3549impl<T> core::ops::Div<&MolarVolume<T>> for &MolarMass<T> where T: NumLike {
3551 type Output = Density<T>;
3552 fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
3553 Density{kgpm3: self.kgpmol.clone() / rhs.m3_per_mol.clone()}
3554 }
3555}
3556
3557impl<T> core::ops::Div<Density<T>> for MolarMass<T> where T: NumLike {
3560 type Output = MolarVolume<T>;
3561 fn div(self, rhs: Density<T>) -> Self::Output {
3562 MolarVolume{m3_per_mol: self.kgpmol / rhs.kgpm3}
3563 }
3564}
3565impl<T> core::ops::Div<Density<T>> for &MolarMass<T> where T: NumLike {
3567 type Output = MolarVolume<T>;
3568 fn div(self, rhs: Density<T>) -> Self::Output {
3569 MolarVolume{m3_per_mol: self.kgpmol.clone() / rhs.kgpm3}
3570 }
3571}
3572impl<T> core::ops::Div<&Density<T>> for MolarMass<T> where T: NumLike {
3574 type Output = MolarVolume<T>;
3575 fn div(self, rhs: &Density<T>) -> Self::Output {
3576 MolarVolume{m3_per_mol: self.kgpmol / rhs.kgpm3.clone()}
3577 }
3578}
3579impl<T> core::ops::Div<&Density<T>> for &MolarMass<T> where T: NumLike {
3581 type Output = MolarVolume<T>;
3582 fn div(self, rhs: &Density<T>) -> Self::Output {
3583 MolarVolume{m3_per_mol: self.kgpmol.clone() / rhs.kgpm3.clone()}
3584 }
3585}
3586
3587impl<T> core::ops::Mul<VolumePerMass<T>> for MolarMass<T> where T: NumLike {
3590 type Output = MolarVolume<T>;
3591 fn mul(self, rhs: VolumePerMass<T>) -> Self::Output {
3592 MolarVolume{m3_per_mol: self.kgpmol * rhs.m3_per_kg}
3593 }
3594}
3595impl<T> core::ops::Mul<VolumePerMass<T>> for &MolarMass<T> where T: NumLike {
3597 type Output = MolarVolume<T>;
3598 fn mul(self, rhs: VolumePerMass<T>) -> Self::Output {
3599 MolarVolume{m3_per_mol: self.kgpmol.clone() * rhs.m3_per_kg}
3600 }
3601}
3602impl<T> core::ops::Mul<&VolumePerMass<T>> for MolarMass<T> where T: NumLike {
3604 type Output = MolarVolume<T>;
3605 fn mul(self, rhs: &VolumePerMass<T>) -> Self::Output {
3606 MolarVolume{m3_per_mol: self.kgpmol * rhs.m3_per_kg.clone()}
3607 }
3608}
3609impl<T> core::ops::Mul<&VolumePerMass<T>> for &MolarMass<T> where T: NumLike {
3611 type Output = MolarVolume<T>;
3612 fn mul(self, rhs: &VolumePerMass<T>) -> Self::Output {
3613 MolarVolume{m3_per_mol: self.kgpmol.clone() * rhs.m3_per_kg.clone()}
3614 }
3615}
3616
3617impl<T> core::ops::Div<MolarMass<T>> for f64 where T: NumLike+From<f64> {
3620 type Output = Molality<T>;
3621 fn div(self, rhs: MolarMass<T>) -> Self::Output {
3622 Molality{molpkg: T::from(self) / rhs.kgpmol}
3623 }
3624}
3625impl<T> core::ops::Div<MolarMass<T>> for &f64 where T: NumLike+From<f64> {
3627 type Output = Molality<T>;
3628 fn div(self, rhs: MolarMass<T>) -> Self::Output {
3629 Molality{molpkg: T::from(self.clone()) / rhs.kgpmol}
3630 }
3631}
3632impl<T> core::ops::Div<&MolarMass<T>> for f64 where T: NumLike+From<f64> {
3634 type Output = Molality<T>;
3635 fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3636 Molality{molpkg: T::from(self) / rhs.kgpmol.clone()}
3637 }
3638}
3639impl<T> core::ops::Div<&MolarMass<T>> for &f64 where T: NumLike+From<f64> {
3641 type Output = Molality<T>;
3642 fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3643 Molality{molpkg: T::from(self.clone()) / rhs.kgpmol.clone()}
3644 }
3645}
3646
3647impl<T> core::ops::Div<MolarMass<T>> for f32 where T: NumLike+From<f32> {
3650 type Output = Molality<T>;
3651 fn div(self, rhs: MolarMass<T>) -> Self::Output {
3652 Molality{molpkg: T::from(self) / rhs.kgpmol}
3653 }
3654}
3655impl<T> core::ops::Div<MolarMass<T>> for &f32 where T: NumLike+From<f32> {
3657 type Output = Molality<T>;
3658 fn div(self, rhs: MolarMass<T>) -> Self::Output {
3659 Molality{molpkg: T::from(self.clone()) / rhs.kgpmol}
3660 }
3661}
3662impl<T> core::ops::Div<&MolarMass<T>> for f32 where T: NumLike+From<f32> {
3664 type Output = Molality<T>;
3665 fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3666 Molality{molpkg: T::from(self) / rhs.kgpmol.clone()}
3667 }
3668}
3669impl<T> core::ops::Div<&MolarMass<T>> for &f32 where T: NumLike+From<f32> {
3671 type Output = Molality<T>;
3672 fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3673 Molality{molpkg: T::from(self.clone()) / rhs.kgpmol.clone()}
3674 }
3675}
3676
3677impl<T> core::ops::Div<MolarMass<T>> for i64 where T: NumLike+From<i64> {
3680 type Output = Molality<T>;
3681 fn div(self, rhs: MolarMass<T>) -> Self::Output {
3682 Molality{molpkg: T::from(self) / rhs.kgpmol}
3683 }
3684}
3685impl<T> core::ops::Div<MolarMass<T>> for &i64 where T: NumLike+From<i64> {
3687 type Output = Molality<T>;
3688 fn div(self, rhs: MolarMass<T>) -> Self::Output {
3689 Molality{molpkg: T::from(self.clone()) / rhs.kgpmol}
3690 }
3691}
3692impl<T> core::ops::Div<&MolarMass<T>> for i64 where T: NumLike+From<i64> {
3694 type Output = Molality<T>;
3695 fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3696 Molality{molpkg: T::from(self) / rhs.kgpmol.clone()}
3697 }
3698}
3699impl<T> core::ops::Div<&MolarMass<T>> for &i64 where T: NumLike+From<i64> {
3701 type Output = Molality<T>;
3702 fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3703 Molality{molpkg: T::from(self.clone()) / rhs.kgpmol.clone()}
3704 }
3705}
3706
3707impl<T> core::ops::Div<MolarMass<T>> for i32 where T: NumLike+From<i32> {
3710 type Output = Molality<T>;
3711 fn div(self, rhs: MolarMass<T>) -> Self::Output {
3712 Molality{molpkg: T::from(self) / rhs.kgpmol}
3713 }
3714}
3715impl<T> core::ops::Div<MolarMass<T>> for &i32 where T: NumLike+From<i32> {
3717 type Output = Molality<T>;
3718 fn div(self, rhs: MolarMass<T>) -> Self::Output {
3719 Molality{molpkg: T::from(self.clone()) / rhs.kgpmol}
3720 }
3721}
3722impl<T> core::ops::Div<&MolarMass<T>> for i32 where T: NumLike+From<i32> {
3724 type Output = Molality<T>;
3725 fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3726 Molality{molpkg: T::from(self) / rhs.kgpmol.clone()}
3727 }
3728}
3729impl<T> core::ops::Div<&MolarMass<T>> for &i32 where T: NumLike+From<i32> {
3731 type Output = Molality<T>;
3732 fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3733 Molality{molpkg: T::from(self.clone()) / rhs.kgpmol.clone()}
3734 }
3735}
3736
3737#[cfg(feature="num-bigfloat")]
3740impl<T> core::ops::Div<MolarMass<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
3741 type Output = Molality<T>;
3742 fn div(self, rhs: MolarMass<T>) -> Self::Output {
3743 Molality{molpkg: T::from(self) / rhs.kgpmol}
3744 }
3745}
3746#[cfg(feature="num-bigfloat")]
3748impl<T> core::ops::Div<MolarMass<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
3749 type Output = Molality<T>;
3750 fn div(self, rhs: MolarMass<T>) -> Self::Output {
3751 Molality{molpkg: T::from(self.clone()) / rhs.kgpmol}
3752 }
3753}
3754#[cfg(feature="num-bigfloat")]
3756impl<T> core::ops::Div<&MolarMass<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
3757 type Output = Molality<T>;
3758 fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3759 Molality{molpkg: T::from(self) / rhs.kgpmol.clone()}
3760 }
3761}
3762#[cfg(feature="num-bigfloat")]
3764impl<T> core::ops::Div<&MolarMass<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
3765 type Output = Molality<T>;
3766 fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3767 Molality{molpkg: T::from(self.clone()) / rhs.kgpmol.clone()}
3768 }
3769}
3770
3771#[cfg(feature="num-complex")]
3774impl<T> core::ops::Div<MolarMass<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
3775 type Output = Molality<T>;
3776 fn div(self, rhs: MolarMass<T>) -> Self::Output {
3777 Molality{molpkg: T::from(self) / rhs.kgpmol}
3778 }
3779}
3780#[cfg(feature="num-complex")]
3782impl<T> core::ops::Div<MolarMass<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
3783 type Output = Molality<T>;
3784 fn div(self, rhs: MolarMass<T>) -> Self::Output {
3785 Molality{molpkg: T::from(self.clone()) / rhs.kgpmol}
3786 }
3787}
3788#[cfg(feature="num-complex")]
3790impl<T> core::ops::Div<&MolarMass<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
3791 type Output = Molality<T>;
3792 fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3793 Molality{molpkg: T::from(self) / rhs.kgpmol.clone()}
3794 }
3795}
3796#[cfg(feature="num-complex")]
3798impl<T> core::ops::Div<&MolarMass<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
3799 type Output = Molality<T>;
3800 fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3801 Molality{molpkg: T::from(self.clone()) / rhs.kgpmol.clone()}
3802 }
3803}
3804
3805#[cfg(feature="num-complex")]
3808impl<T> core::ops::Div<MolarMass<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
3809 type Output = Molality<T>;
3810 fn div(self, rhs: MolarMass<T>) -> Self::Output {
3811 Molality{molpkg: T::from(self) / rhs.kgpmol}
3812 }
3813}
3814#[cfg(feature="num-complex")]
3816impl<T> core::ops::Div<MolarMass<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
3817 type Output = Molality<T>;
3818 fn div(self, rhs: MolarMass<T>) -> Self::Output {
3819 Molality{molpkg: T::from(self.clone()) / rhs.kgpmol}
3820 }
3821}
3822#[cfg(feature="num-complex")]
3824impl<T> core::ops::Div<&MolarMass<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
3825 type Output = Molality<T>;
3826 fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3827 Molality{molpkg: T::from(self) / rhs.kgpmol.clone()}
3828 }
3829}
3830#[cfg(feature="num-complex")]
3832impl<T> core::ops::Div<&MolarMass<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
3833 type Output = Molality<T>;
3834 fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3835 Molality{molpkg: T::from(self.clone()) / rhs.kgpmol.clone()}
3836 }
3837}
3838
3839#[derive(UnitStruct, Debug, Clone)]
3841#[cfg_attr(feature="serde", derive(Serialize, Deserialize))]
3842pub struct MolarVolume<T: NumLike>{
3843 pub m3_per_mol: T
3845}
3846
3847impl<T> MolarVolume<T> where T: NumLike {
3848
3849 pub fn unit_name() -> &'static str { "cubic meters per mole" }
3851
3852 pub fn unit_symbol() -> &'static str { "m³/mol" }
3854
3855 pub fn from_m3_per_mol(m3_per_mol: T) -> Self { MolarVolume{m3_per_mol: m3_per_mol} }
3860
3861 pub fn to_m3_per_mol(&self) -> T { self.m3_per_mol.clone() }
3863
3864 pub fn from_cubic_meters_per_mole(cubic_meters_per_mole: T) -> Self { MolarVolume{m3_per_mol: cubic_meters_per_mole} }
3869
3870 pub fn to_cubic_meters_per_mole(&self) -> T { self.m3_per_mol.clone() }
3872
3873}
3874
3875impl<T> fmt::Display for MolarVolume<T> where T: NumLike {
3876 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
3877 write!(f, "{} {}", &self.m3_per_mol, Self::unit_symbol())
3878 }
3879}
3880
3881impl<T> MolarVolume<T> where T: NumLike+From<f64> {
3882
3883 pub fn to_L_per_mol(&self) -> T {
3887 return self.m3_per_mol.clone() * T::from(1000.0_f64);
3888 }
3889
3890 pub fn from_L_per_mol(L_per_mol: T) -> Self {
3897 MolarVolume{m3_per_mol: L_per_mol * T::from(0.001_f64)}
3898 }
3899
3900 pub fn to_liters_per_mole(&self) -> T {
3904 return self.m3_per_mol.clone() * T::from(1000.0_f64);
3905 }
3906
3907 pub fn from_liters_per_mole(liters_per_mole: T) -> Self {
3914 MolarVolume{m3_per_mol: liters_per_mole * T::from(0.001_f64)}
3915 }
3916
3917}
3918
3919
3920#[cfg(feature="num-bigfloat")]
3922impl core::ops::Mul<MolarVolume<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
3923 type Output = MolarVolume<num_bigfloat::BigFloat>;
3924 fn mul(self, rhs: MolarVolume<num_bigfloat::BigFloat>) -> Self::Output {
3925 MolarVolume{m3_per_mol: self * rhs.m3_per_mol}
3926 }
3927}
3928#[cfg(feature="num-bigfloat")]
3930impl core::ops::Mul<MolarVolume<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
3931 type Output = MolarVolume<num_bigfloat::BigFloat>;
3932 fn mul(self, rhs: MolarVolume<num_bigfloat::BigFloat>) -> Self::Output {
3933 MolarVolume{m3_per_mol: self.clone() * rhs.m3_per_mol}
3934 }
3935}
3936#[cfg(feature="num-bigfloat")]
3938impl core::ops::Mul<&MolarVolume<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
3939 type Output = MolarVolume<num_bigfloat::BigFloat>;
3940 fn mul(self, rhs: &MolarVolume<num_bigfloat::BigFloat>) -> Self::Output {
3941 MolarVolume{m3_per_mol: self * rhs.m3_per_mol.clone()}
3942 }
3943}
3944#[cfg(feature="num-bigfloat")]
3946impl core::ops::Mul<&MolarVolume<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
3947 type Output = MolarVolume<num_bigfloat::BigFloat>;
3948 fn mul(self, rhs: &MolarVolume<num_bigfloat::BigFloat>) -> Self::Output {
3949 MolarVolume{m3_per_mol: self.clone() * rhs.m3_per_mol.clone()}
3950 }
3951}
3952
3953#[cfg(feature="num-complex")]
3955impl core::ops::Mul<MolarVolume<num_complex::Complex32>> for num_complex::Complex32 {
3956 type Output = MolarVolume<num_complex::Complex32>;
3957 fn mul(self, rhs: MolarVolume<num_complex::Complex32>) -> Self::Output {
3958 MolarVolume{m3_per_mol: self * rhs.m3_per_mol}
3959 }
3960}
3961#[cfg(feature="num-complex")]
3963impl core::ops::Mul<MolarVolume<num_complex::Complex32>> for &num_complex::Complex32 {
3964 type Output = MolarVolume<num_complex::Complex32>;
3965 fn mul(self, rhs: MolarVolume<num_complex::Complex32>) -> Self::Output {
3966 MolarVolume{m3_per_mol: self.clone() * rhs.m3_per_mol}
3967 }
3968}
3969#[cfg(feature="num-complex")]
3971impl core::ops::Mul<&MolarVolume<num_complex::Complex32>> for num_complex::Complex32 {
3972 type Output = MolarVolume<num_complex::Complex32>;
3973 fn mul(self, rhs: &MolarVolume<num_complex::Complex32>) -> Self::Output {
3974 MolarVolume{m3_per_mol: self * rhs.m3_per_mol.clone()}
3975 }
3976}
3977#[cfg(feature="num-complex")]
3979impl core::ops::Mul<&MolarVolume<num_complex::Complex32>> for &num_complex::Complex32 {
3980 type Output = MolarVolume<num_complex::Complex32>;
3981 fn mul(self, rhs: &MolarVolume<num_complex::Complex32>) -> Self::Output {
3982 MolarVolume{m3_per_mol: self.clone() * rhs.m3_per_mol.clone()}
3983 }
3984}
3985
3986#[cfg(feature="num-complex")]
3988impl core::ops::Mul<MolarVolume<num_complex::Complex64>> for num_complex::Complex64 {
3989 type Output = MolarVolume<num_complex::Complex64>;
3990 fn mul(self, rhs: MolarVolume<num_complex::Complex64>) -> Self::Output {
3991 MolarVolume{m3_per_mol: self * rhs.m3_per_mol}
3992 }
3993}
3994#[cfg(feature="num-complex")]
3996impl core::ops::Mul<MolarVolume<num_complex::Complex64>> for &num_complex::Complex64 {
3997 type Output = MolarVolume<num_complex::Complex64>;
3998 fn mul(self, rhs: MolarVolume<num_complex::Complex64>) -> Self::Output {
3999 MolarVolume{m3_per_mol: self.clone() * rhs.m3_per_mol}
4000 }
4001}
4002#[cfg(feature="num-complex")]
4004impl core::ops::Mul<&MolarVolume<num_complex::Complex64>> for num_complex::Complex64 {
4005 type Output = MolarVolume<num_complex::Complex64>;
4006 fn mul(self, rhs: &MolarVolume<num_complex::Complex64>) -> Self::Output {
4007 MolarVolume{m3_per_mol: self * rhs.m3_per_mol.clone()}
4008 }
4009}
4010#[cfg(feature="num-complex")]
4012impl core::ops::Mul<&MolarVolume<num_complex::Complex64>> for &num_complex::Complex64 {
4013 type Output = MolarVolume<num_complex::Complex64>;
4014 fn mul(self, rhs: &MolarVolume<num_complex::Complex64>) -> Self::Output {
4015 MolarVolume{m3_per_mol: self.clone() * rhs.m3_per_mol.clone()}
4016 }
4017}
4018
4019
4020
4021#[cfg(feature = "uom")]
4023impl<T> Into<uom::si::f32::MolarVolume> for MolarVolume<T> where T: NumLike+Into<f32> {
4024 fn into(self) -> uom::si::f32::MolarVolume {
4025 uom::si::f32::MolarVolume::new::<uom::si::molar_volume::cubic_meter_per_mole>(self.m3_per_mol.into())
4026 }
4027}
4028
4029#[cfg(feature = "uom")]
4031impl<T> From<uom::si::f32::MolarVolume> for MolarVolume<T> where T: NumLike+From<f32> {
4032 fn from(src: uom::si::f32::MolarVolume) -> Self {
4033 MolarVolume{m3_per_mol: T::from(src.value)}
4034 }
4035}
4036
4037#[cfg(feature = "uom")]
4039impl<T> Into<uom::si::f64::MolarVolume> for MolarVolume<T> where T: NumLike+Into<f64> {
4040 fn into(self) -> uom::si::f64::MolarVolume {
4041 uom::si::f64::MolarVolume::new::<uom::si::molar_volume::cubic_meter_per_mole>(self.m3_per_mol.into())
4042 }
4043}
4044
4045#[cfg(feature = "uom")]
4047impl<T> From<uom::si::f64::MolarVolume> for MolarVolume<T> where T: NumLike+From<f64> {
4048 fn from(src: uom::si::f64::MolarVolume) -> Self {
4049 MolarVolume{m3_per_mol: T::from(src.value)}
4050 }
4051}
4052
4053
4054impl<T> core::ops::Mul<Amount<T>> for MolarVolume<T> where T: NumLike {
4057 type Output = Volume<T>;
4058 fn mul(self, rhs: Amount<T>) -> Self::Output {
4059 Volume{m3: self.m3_per_mol * rhs.mol}
4060 }
4061}
4062impl<T> core::ops::Mul<Amount<T>> for &MolarVolume<T> where T: NumLike {
4064 type Output = Volume<T>;
4065 fn mul(self, rhs: Amount<T>) -> Self::Output {
4066 Volume{m3: self.m3_per_mol.clone() * rhs.mol}
4067 }
4068}
4069impl<T> core::ops::Mul<&Amount<T>> for MolarVolume<T> where T: NumLike {
4071 type Output = Volume<T>;
4072 fn mul(self, rhs: &Amount<T>) -> Self::Output {
4073 Volume{m3: self.m3_per_mol * rhs.mol.clone()}
4074 }
4075}
4076impl<T> core::ops::Mul<&Amount<T>> for &MolarVolume<T> where T: NumLike {
4078 type Output = Volume<T>;
4079 fn mul(self, rhs: &Amount<T>) -> Self::Output {
4080 Volume{m3: self.m3_per_mol.clone() * rhs.mol.clone()}
4081 }
4082}
4083
4084impl<T> core::ops::Div<InverseAmount<T>> for MolarVolume<T> where T: NumLike {
4087 type Output = Volume<T>;
4088 fn div(self, rhs: InverseAmount<T>) -> Self::Output {
4089 Volume{m3: self.m3_per_mol / rhs.per_mol}
4090 }
4091}
4092impl<T> core::ops::Div<InverseAmount<T>> for &MolarVolume<T> where T: NumLike {
4094 type Output = Volume<T>;
4095 fn div(self, rhs: InverseAmount<T>) -> Self::Output {
4096 Volume{m3: self.m3_per_mol.clone() / rhs.per_mol}
4097 }
4098}
4099impl<T> core::ops::Div<&InverseAmount<T>> for MolarVolume<T> where T: NumLike {
4101 type Output = Volume<T>;
4102 fn div(self, rhs: &InverseAmount<T>) -> Self::Output {
4103 Volume{m3: self.m3_per_mol / rhs.per_mol.clone()}
4104 }
4105}
4106impl<T> core::ops::Div<&InverseAmount<T>> for &MolarVolume<T> where T: NumLike {
4108 type Output = Volume<T>;
4109 fn div(self, rhs: &InverseAmount<T>) -> Self::Output {
4110 Volume{m3: self.m3_per_mol.clone() / rhs.per_mol.clone()}
4111 }
4112}
4113
4114impl<T> core::ops::Mul<Molality<T>> for MolarVolume<T> where T: NumLike {
4117 type Output = VolumePerMass<T>;
4118 fn mul(self, rhs: Molality<T>) -> Self::Output {
4119 VolumePerMass{m3_per_kg: self.m3_per_mol * rhs.molpkg}
4120 }
4121}
4122impl<T> core::ops::Mul<Molality<T>> for &MolarVolume<T> where T: NumLike {
4124 type Output = VolumePerMass<T>;
4125 fn mul(self, rhs: Molality<T>) -> Self::Output {
4126 VolumePerMass{m3_per_kg: self.m3_per_mol.clone() * rhs.molpkg}
4127 }
4128}
4129impl<T> core::ops::Mul<&Molality<T>> for MolarVolume<T> where T: NumLike {
4131 type Output = VolumePerMass<T>;
4132 fn mul(self, rhs: &Molality<T>) -> Self::Output {
4133 VolumePerMass{m3_per_kg: self.m3_per_mol * rhs.molpkg.clone()}
4134 }
4135}
4136impl<T> core::ops::Mul<&Molality<T>> for &MolarVolume<T> where T: NumLike {
4138 type Output = VolumePerMass<T>;
4139 fn mul(self, rhs: &Molality<T>) -> Self::Output {
4140 VolumePerMass{m3_per_kg: self.m3_per_mol.clone() * rhs.molpkg.clone()}
4141 }
4142}
4143
4144impl<T> core::ops::Div<MolarMass<T>> for MolarVolume<T> where T: NumLike {
4147 type Output = VolumePerMass<T>;
4148 fn div(self, rhs: MolarMass<T>) -> Self::Output {
4149 VolumePerMass{m3_per_kg: self.m3_per_mol / rhs.kgpmol}
4150 }
4151}
4152impl<T> core::ops::Div<MolarMass<T>> for &MolarVolume<T> where T: NumLike {
4154 type Output = VolumePerMass<T>;
4155 fn div(self, rhs: MolarMass<T>) -> Self::Output {
4156 VolumePerMass{m3_per_kg: self.m3_per_mol.clone() / rhs.kgpmol}
4157 }
4158}
4159impl<T> core::ops::Div<&MolarMass<T>> for MolarVolume<T> where T: NumLike {
4161 type Output = VolumePerMass<T>;
4162 fn div(self, rhs: &MolarMass<T>) -> Self::Output {
4163 VolumePerMass{m3_per_kg: self.m3_per_mol / rhs.kgpmol.clone()}
4164 }
4165}
4166impl<T> core::ops::Div<&MolarMass<T>> for &MolarVolume<T> where T: NumLike {
4168 type Output = VolumePerMass<T>;
4169 fn div(self, rhs: &MolarMass<T>) -> Self::Output {
4170 VolumePerMass{m3_per_kg: self.m3_per_mol.clone() / rhs.kgpmol.clone()}
4171 }
4172}
4173
4174impl<T> core::ops::Mul<InverseVolume<T>> for MolarVolume<T> where T: NumLike {
4177 type Output = InverseAmount<T>;
4178 fn mul(self, rhs: InverseVolume<T>) -> Self::Output {
4179 InverseAmount{per_mol: self.m3_per_mol * rhs.per_m3}
4180 }
4181}
4182impl<T> core::ops::Mul<InverseVolume<T>> for &MolarVolume<T> where T: NumLike {
4184 type Output = InverseAmount<T>;
4185 fn mul(self, rhs: InverseVolume<T>) -> Self::Output {
4186 InverseAmount{per_mol: self.m3_per_mol.clone() * rhs.per_m3}
4187 }
4188}
4189impl<T> core::ops::Mul<&InverseVolume<T>> for MolarVolume<T> where T: NumLike {
4191 type Output = InverseAmount<T>;
4192 fn mul(self, rhs: &InverseVolume<T>) -> Self::Output {
4193 InverseAmount{per_mol: self.m3_per_mol * rhs.per_m3.clone()}
4194 }
4195}
4196impl<T> core::ops::Mul<&InverseVolume<T>> for &MolarVolume<T> where T: NumLike {
4198 type Output = InverseAmount<T>;
4199 fn mul(self, rhs: &InverseVolume<T>) -> Self::Output {
4200 InverseAmount{per_mol: self.m3_per_mol.clone() * rhs.per_m3.clone()}
4201 }
4202}
4203
4204impl<T> core::ops::Div<Volume<T>> for MolarVolume<T> where T: NumLike {
4207 type Output = InverseAmount<T>;
4208 fn div(self, rhs: Volume<T>) -> Self::Output {
4209 InverseAmount{per_mol: self.m3_per_mol / rhs.m3}
4210 }
4211}
4212impl<T> core::ops::Div<Volume<T>> for &MolarVolume<T> where T: NumLike {
4214 type Output = InverseAmount<T>;
4215 fn div(self, rhs: Volume<T>) -> Self::Output {
4216 InverseAmount{per_mol: self.m3_per_mol.clone() / rhs.m3}
4217 }
4218}
4219impl<T> core::ops::Div<&Volume<T>> for MolarVolume<T> where T: NumLike {
4221 type Output = InverseAmount<T>;
4222 fn div(self, rhs: &Volume<T>) -> Self::Output {
4223 InverseAmount{per_mol: self.m3_per_mol / rhs.m3.clone()}
4224 }
4225}
4226impl<T> core::ops::Div<&Volume<T>> for &MolarVolume<T> where T: NumLike {
4228 type Output = InverseAmount<T>;
4229 fn div(self, rhs: &Volume<T>) -> Self::Output {
4230 InverseAmount{per_mol: self.m3_per_mol.clone() / rhs.m3.clone()}
4231 }
4232}
4233
4234impl<T> core::ops::Mul<Density<T>> for MolarVolume<T> where T: NumLike {
4237 type Output = MolarMass<T>;
4238 fn mul(self, rhs: Density<T>) -> Self::Output {
4239 MolarMass{kgpmol: self.m3_per_mol * rhs.kgpm3}
4240 }
4241}
4242impl<T> core::ops::Mul<Density<T>> for &MolarVolume<T> where T: NumLike {
4244 type Output = MolarMass<T>;
4245 fn mul(self, rhs: Density<T>) -> Self::Output {
4246 MolarMass{kgpmol: self.m3_per_mol.clone() * rhs.kgpm3}
4247 }
4248}
4249impl<T> core::ops::Mul<&Density<T>> for MolarVolume<T> where T: NumLike {
4251 type Output = MolarMass<T>;
4252 fn mul(self, rhs: &Density<T>) -> Self::Output {
4253 MolarMass{kgpmol: self.m3_per_mol * rhs.kgpm3.clone()}
4254 }
4255}
4256impl<T> core::ops::Mul<&Density<T>> for &MolarVolume<T> where T: NumLike {
4258 type Output = MolarMass<T>;
4259 fn mul(self, rhs: &Density<T>) -> Self::Output {
4260 MolarMass{kgpmol: self.m3_per_mol.clone() * rhs.kgpm3.clone()}
4261 }
4262}
4263
4264impl<T> core::ops::Div<VolumePerMass<T>> for MolarVolume<T> where T: NumLike {
4267 type Output = MolarMass<T>;
4268 fn div(self, rhs: VolumePerMass<T>) -> Self::Output {
4269 MolarMass{kgpmol: self.m3_per_mol / rhs.m3_per_kg}
4270 }
4271}
4272impl<T> core::ops::Div<VolumePerMass<T>> for &MolarVolume<T> where T: NumLike {
4274 type Output = MolarMass<T>;
4275 fn div(self, rhs: VolumePerMass<T>) -> Self::Output {
4276 MolarMass{kgpmol: self.m3_per_mol.clone() / rhs.m3_per_kg}
4277 }
4278}
4279impl<T> core::ops::Div<&VolumePerMass<T>> for MolarVolume<T> where T: NumLike {
4281 type Output = MolarMass<T>;
4282 fn div(self, rhs: &VolumePerMass<T>) -> Self::Output {
4283 MolarMass{kgpmol: self.m3_per_mol / rhs.m3_per_kg.clone()}
4284 }
4285}
4286impl<T> core::ops::Div<&VolumePerMass<T>> for &MolarVolume<T> where T: NumLike {
4288 type Output = MolarMass<T>;
4289 fn div(self, rhs: &VolumePerMass<T>) -> Self::Output {
4290 MolarMass{kgpmol: self.m3_per_mol.clone() / rhs.m3_per_kg.clone()}
4291 }
4292}
4293
4294impl<T> core::ops::Div<MolarVolume<T>> for f64 where T: NumLike+From<f64> {
4297 type Output = Concentration<T>;
4298 fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4299 Concentration{molpm3: T::from(self) / rhs.m3_per_mol}
4300 }
4301}
4302impl<T> core::ops::Div<MolarVolume<T>> for &f64 where T: NumLike+From<f64> {
4304 type Output = Concentration<T>;
4305 fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4306 Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol}
4307 }
4308}
4309impl<T> core::ops::Div<&MolarVolume<T>> for f64 where T: NumLike+From<f64> {
4311 type Output = Concentration<T>;
4312 fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4313 Concentration{molpm3: T::from(self) / rhs.m3_per_mol.clone()}
4314 }
4315}
4316impl<T> core::ops::Div<&MolarVolume<T>> for &f64 where T: NumLike+From<f64> {
4318 type Output = Concentration<T>;
4319 fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4320 Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol.clone()}
4321 }
4322}
4323
4324impl<T> core::ops::Div<MolarVolume<T>> for f32 where T: NumLike+From<f32> {
4327 type Output = Concentration<T>;
4328 fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4329 Concentration{molpm3: T::from(self) / rhs.m3_per_mol}
4330 }
4331}
4332impl<T> core::ops::Div<MolarVolume<T>> for &f32 where T: NumLike+From<f32> {
4334 type Output = Concentration<T>;
4335 fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4336 Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol}
4337 }
4338}
4339impl<T> core::ops::Div<&MolarVolume<T>> for f32 where T: NumLike+From<f32> {
4341 type Output = Concentration<T>;
4342 fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4343 Concentration{molpm3: T::from(self) / rhs.m3_per_mol.clone()}
4344 }
4345}
4346impl<T> core::ops::Div<&MolarVolume<T>> for &f32 where T: NumLike+From<f32> {
4348 type Output = Concentration<T>;
4349 fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4350 Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol.clone()}
4351 }
4352}
4353
4354impl<T> core::ops::Div<MolarVolume<T>> for i64 where T: NumLike+From<i64> {
4357 type Output = Concentration<T>;
4358 fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4359 Concentration{molpm3: T::from(self) / rhs.m3_per_mol}
4360 }
4361}
4362impl<T> core::ops::Div<MolarVolume<T>> for &i64 where T: NumLike+From<i64> {
4364 type Output = Concentration<T>;
4365 fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4366 Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol}
4367 }
4368}
4369impl<T> core::ops::Div<&MolarVolume<T>> for i64 where T: NumLike+From<i64> {
4371 type Output = Concentration<T>;
4372 fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4373 Concentration{molpm3: T::from(self) / rhs.m3_per_mol.clone()}
4374 }
4375}
4376impl<T> core::ops::Div<&MolarVolume<T>> for &i64 where T: NumLike+From<i64> {
4378 type Output = Concentration<T>;
4379 fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4380 Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol.clone()}
4381 }
4382}
4383
4384impl<T> core::ops::Div<MolarVolume<T>> for i32 where T: NumLike+From<i32> {
4387 type Output = Concentration<T>;
4388 fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4389 Concentration{molpm3: T::from(self) / rhs.m3_per_mol}
4390 }
4391}
4392impl<T> core::ops::Div<MolarVolume<T>> for &i32 where T: NumLike+From<i32> {
4394 type Output = Concentration<T>;
4395 fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4396 Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol}
4397 }
4398}
4399impl<T> core::ops::Div<&MolarVolume<T>> for i32 where T: NumLike+From<i32> {
4401 type Output = Concentration<T>;
4402 fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4403 Concentration{molpm3: T::from(self) / rhs.m3_per_mol.clone()}
4404 }
4405}
4406impl<T> core::ops::Div<&MolarVolume<T>> for &i32 where T: NumLike+From<i32> {
4408 type Output = Concentration<T>;
4409 fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4410 Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol.clone()}
4411 }
4412}
4413
4414#[cfg(feature="num-bigfloat")]
4417impl<T> core::ops::Div<MolarVolume<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
4418 type Output = Concentration<T>;
4419 fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4420 Concentration{molpm3: T::from(self) / rhs.m3_per_mol}
4421 }
4422}
4423#[cfg(feature="num-bigfloat")]
4425impl<T> core::ops::Div<MolarVolume<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
4426 type Output = Concentration<T>;
4427 fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4428 Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol}
4429 }
4430}
4431#[cfg(feature="num-bigfloat")]
4433impl<T> core::ops::Div<&MolarVolume<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
4434 type Output = Concentration<T>;
4435 fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4436 Concentration{molpm3: T::from(self) / rhs.m3_per_mol.clone()}
4437 }
4438}
4439#[cfg(feature="num-bigfloat")]
4441impl<T> core::ops::Div<&MolarVolume<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
4442 type Output = Concentration<T>;
4443 fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4444 Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol.clone()}
4445 }
4446}
4447
4448#[cfg(feature="num-complex")]
4451impl<T> core::ops::Div<MolarVolume<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
4452 type Output = Concentration<T>;
4453 fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4454 Concentration{molpm3: T::from(self) / rhs.m3_per_mol}
4455 }
4456}
4457#[cfg(feature="num-complex")]
4459impl<T> core::ops::Div<MolarVolume<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
4460 type Output = Concentration<T>;
4461 fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4462 Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol}
4463 }
4464}
4465#[cfg(feature="num-complex")]
4467impl<T> core::ops::Div<&MolarVolume<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
4468 type Output = Concentration<T>;
4469 fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4470 Concentration{molpm3: T::from(self) / rhs.m3_per_mol.clone()}
4471 }
4472}
4473#[cfg(feature="num-complex")]
4475impl<T> core::ops::Div<&MolarVolume<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
4476 type Output = Concentration<T>;
4477 fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4478 Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol.clone()}
4479 }
4480}
4481
4482#[cfg(feature="num-complex")]
4485impl<T> core::ops::Div<MolarVolume<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
4486 type Output = Concentration<T>;
4487 fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4488 Concentration{molpm3: T::from(self) / rhs.m3_per_mol}
4489 }
4490}
4491#[cfg(feature="num-complex")]
4493impl<T> core::ops::Div<MolarVolume<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
4494 type Output = Concentration<T>;
4495 fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4496 Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol}
4497 }
4498}
4499#[cfg(feature="num-complex")]
4501impl<T> core::ops::Div<&MolarVolume<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
4502 type Output = Concentration<T>;
4503 fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4504 Concentration{molpm3: T::from(self) / rhs.m3_per_mol.clone()}
4505 }
4506}
4507#[cfg(feature="num-complex")]
4509impl<T> core::ops::Div<&MolarVolume<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
4510 type Output = Concentration<T>;
4511 fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4512 Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol.clone()}
4513 }
4514}
4515
4516#[derive(UnitStruct, Debug, Clone)]
4518#[cfg_attr(feature="serde", derive(Serialize, Deserialize))]
4519pub struct SpecificHeatCapacity<T: NumLike>{
4520 pub J_per_kgK: T
4522}
4523
4524impl<T> SpecificHeatCapacity<T> where T: NumLike {
4525
4526 pub fn unit_name() -> &'static str { "joules per kilogram per kelvin" }
4528
4529 pub fn unit_symbol() -> &'static str { "J/kg·K" }
4531
4532 pub fn from_joules_per_kilogram_kelvin(joules_per_kilogram_kelvin: T) -> Self { SpecificHeatCapacity{J_per_kgK: joules_per_kilogram_kelvin} }
4537
4538 pub fn to_joules_per_kilogram_kelvin(&self) -> T { self.J_per_kgK.clone() }
4540
4541 pub fn from_J_per_kgK(J_per_kgK: T) -> Self { SpecificHeatCapacity{J_per_kgK: J_per_kgK} }
4546
4547 pub fn to_J_per_kgK(&self) -> T { self.J_per_kgK.clone() }
4549
4550}
4551
4552impl<T> fmt::Display for SpecificHeatCapacity<T> where T: NumLike {
4553 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
4554 write!(f, "{} {}", &self.J_per_kgK, Self::unit_symbol())
4555 }
4556}
4557
4558impl<T> SpecificHeatCapacity<T> where T: NumLike+From<f64> {
4559
4560 pub fn to_joules_per_gram_kelvin(&self) -> T {
4564 return self.J_per_kgK.clone() * T::from(0.001_f64);
4565 }
4566
4567 pub fn from_joules_per_gram_kelvin(joules_per_gram_kelvin: T) -> Self {
4574 SpecificHeatCapacity{J_per_kgK: joules_per_gram_kelvin * T::from(1000.0_f64)}
4575 }
4576
4577 pub fn to_J_per_gK(&self) -> T {
4581 return self.J_per_kgK.clone() * T::from(0.001_f64);
4582 }
4583
4584 pub fn from_J_per_gK(J_per_gK: T) -> Self {
4591 SpecificHeatCapacity{J_per_kgK: J_per_gK * T::from(1000.0_f64)}
4592 }
4593
4594}
4595
4596
4597#[cfg(feature="num-bigfloat")]
4599impl core::ops::Mul<SpecificHeatCapacity<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
4600 type Output = SpecificHeatCapacity<num_bigfloat::BigFloat>;
4601 fn mul(self, rhs: SpecificHeatCapacity<num_bigfloat::BigFloat>) -> Self::Output {
4602 SpecificHeatCapacity{J_per_kgK: self * rhs.J_per_kgK}
4603 }
4604}
4605#[cfg(feature="num-bigfloat")]
4607impl core::ops::Mul<SpecificHeatCapacity<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
4608 type Output = SpecificHeatCapacity<num_bigfloat::BigFloat>;
4609 fn mul(self, rhs: SpecificHeatCapacity<num_bigfloat::BigFloat>) -> Self::Output {
4610 SpecificHeatCapacity{J_per_kgK: self.clone() * rhs.J_per_kgK}
4611 }
4612}
4613#[cfg(feature="num-bigfloat")]
4615impl core::ops::Mul<&SpecificHeatCapacity<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
4616 type Output = SpecificHeatCapacity<num_bigfloat::BigFloat>;
4617 fn mul(self, rhs: &SpecificHeatCapacity<num_bigfloat::BigFloat>) -> Self::Output {
4618 SpecificHeatCapacity{J_per_kgK: self * rhs.J_per_kgK.clone()}
4619 }
4620}
4621#[cfg(feature="num-bigfloat")]
4623impl core::ops::Mul<&SpecificHeatCapacity<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
4624 type Output = SpecificHeatCapacity<num_bigfloat::BigFloat>;
4625 fn mul(self, rhs: &SpecificHeatCapacity<num_bigfloat::BigFloat>) -> Self::Output {
4626 SpecificHeatCapacity{J_per_kgK: self.clone() * rhs.J_per_kgK.clone()}
4627 }
4628}
4629
4630#[cfg(feature="num-complex")]
4632impl core::ops::Mul<SpecificHeatCapacity<num_complex::Complex32>> for num_complex::Complex32 {
4633 type Output = SpecificHeatCapacity<num_complex::Complex32>;
4634 fn mul(self, rhs: SpecificHeatCapacity<num_complex::Complex32>) -> Self::Output {
4635 SpecificHeatCapacity{J_per_kgK: self * rhs.J_per_kgK}
4636 }
4637}
4638#[cfg(feature="num-complex")]
4640impl core::ops::Mul<SpecificHeatCapacity<num_complex::Complex32>> for &num_complex::Complex32 {
4641 type Output = SpecificHeatCapacity<num_complex::Complex32>;
4642 fn mul(self, rhs: SpecificHeatCapacity<num_complex::Complex32>) -> Self::Output {
4643 SpecificHeatCapacity{J_per_kgK: self.clone() * rhs.J_per_kgK}
4644 }
4645}
4646#[cfg(feature="num-complex")]
4648impl core::ops::Mul<&SpecificHeatCapacity<num_complex::Complex32>> for num_complex::Complex32 {
4649 type Output = SpecificHeatCapacity<num_complex::Complex32>;
4650 fn mul(self, rhs: &SpecificHeatCapacity<num_complex::Complex32>) -> Self::Output {
4651 SpecificHeatCapacity{J_per_kgK: self * rhs.J_per_kgK.clone()}
4652 }
4653}
4654#[cfg(feature="num-complex")]
4656impl core::ops::Mul<&SpecificHeatCapacity<num_complex::Complex32>> for &num_complex::Complex32 {
4657 type Output = SpecificHeatCapacity<num_complex::Complex32>;
4658 fn mul(self, rhs: &SpecificHeatCapacity<num_complex::Complex32>) -> Self::Output {
4659 SpecificHeatCapacity{J_per_kgK: self.clone() * rhs.J_per_kgK.clone()}
4660 }
4661}
4662
4663#[cfg(feature="num-complex")]
4665impl core::ops::Mul<SpecificHeatCapacity<num_complex::Complex64>> for num_complex::Complex64 {
4666 type Output = SpecificHeatCapacity<num_complex::Complex64>;
4667 fn mul(self, rhs: SpecificHeatCapacity<num_complex::Complex64>) -> Self::Output {
4668 SpecificHeatCapacity{J_per_kgK: self * rhs.J_per_kgK}
4669 }
4670}
4671#[cfg(feature="num-complex")]
4673impl core::ops::Mul<SpecificHeatCapacity<num_complex::Complex64>> for &num_complex::Complex64 {
4674 type Output = SpecificHeatCapacity<num_complex::Complex64>;
4675 fn mul(self, rhs: SpecificHeatCapacity<num_complex::Complex64>) -> Self::Output {
4676 SpecificHeatCapacity{J_per_kgK: self.clone() * rhs.J_per_kgK}
4677 }
4678}
4679#[cfg(feature="num-complex")]
4681impl core::ops::Mul<&SpecificHeatCapacity<num_complex::Complex64>> for num_complex::Complex64 {
4682 type Output = SpecificHeatCapacity<num_complex::Complex64>;
4683 fn mul(self, rhs: &SpecificHeatCapacity<num_complex::Complex64>) -> Self::Output {
4684 SpecificHeatCapacity{J_per_kgK: self * rhs.J_per_kgK.clone()}
4685 }
4686}
4687#[cfg(feature="num-complex")]
4689impl core::ops::Mul<&SpecificHeatCapacity<num_complex::Complex64>> for &num_complex::Complex64 {
4690 type Output = SpecificHeatCapacity<num_complex::Complex64>;
4691 fn mul(self, rhs: &SpecificHeatCapacity<num_complex::Complex64>) -> Self::Output {
4692 SpecificHeatCapacity{J_per_kgK: self.clone() * rhs.J_per_kgK.clone()}
4693 }
4694}
4695
4696
4697
4698#[cfg(feature = "uom")]
4700impl<T> Into<uom::si::f32::SpecificHeatCapacity> for SpecificHeatCapacity<T> where T: NumLike+Into<f32> {
4701 fn into(self) -> uom::si::f32::SpecificHeatCapacity {
4702 uom::si::f32::SpecificHeatCapacity::new::<uom::si::specific_heat_capacity::joule_per_kilogram_kelvin>(self.J_per_kgK.into())
4703 }
4704}
4705
4706#[cfg(feature = "uom")]
4708impl<T> From<uom::si::f32::SpecificHeatCapacity> for SpecificHeatCapacity<T> where T: NumLike+From<f32> {
4709 fn from(src: uom::si::f32::SpecificHeatCapacity) -> Self {
4710 SpecificHeatCapacity{J_per_kgK: T::from(src.value)}
4711 }
4712}
4713
4714#[cfg(feature = "uom")]
4716impl<T> Into<uom::si::f64::SpecificHeatCapacity> for SpecificHeatCapacity<T> where T: NumLike+Into<f64> {
4717 fn into(self) -> uom::si::f64::SpecificHeatCapacity {
4718 uom::si::f64::SpecificHeatCapacity::new::<uom::si::specific_heat_capacity::joule_per_kilogram_kelvin>(self.J_per_kgK.into())
4719 }
4720}
4721
4722#[cfg(feature = "uom")]
4724impl<T> From<uom::si::f64::SpecificHeatCapacity> for SpecificHeatCapacity<T> where T: NumLike+From<f64> {
4725 fn from(src: uom::si::f64::SpecificHeatCapacity) -> Self {
4726 SpecificHeatCapacity{J_per_kgK: T::from(src.value)}
4727 }
4728}
4729
4730
4731impl<T> core::ops::Mul<InverseAbsorbedDose<T>> for SpecificHeatCapacity<T> where T: NumLike {
4734 type Output = InverseTemperature<T>;
4735 fn mul(self, rhs: InverseAbsorbedDose<T>) -> Self::Output {
4736 InverseTemperature{per_K: self.J_per_kgK * rhs.per_Gy}
4737 }
4738}
4739impl<T> core::ops::Mul<InverseAbsorbedDose<T>> for &SpecificHeatCapacity<T> where T: NumLike {
4741 type Output = InverseTemperature<T>;
4742 fn mul(self, rhs: InverseAbsorbedDose<T>) -> Self::Output {
4743 InverseTemperature{per_K: self.J_per_kgK.clone() * rhs.per_Gy}
4744 }
4745}
4746impl<T> core::ops::Mul<&InverseAbsorbedDose<T>> for SpecificHeatCapacity<T> where T: NumLike {
4748 type Output = InverseTemperature<T>;
4749 fn mul(self, rhs: &InverseAbsorbedDose<T>) -> Self::Output {
4750 InverseTemperature{per_K: self.J_per_kgK * rhs.per_Gy.clone()}
4751 }
4752}
4753impl<T> core::ops::Mul<&InverseAbsorbedDose<T>> for &SpecificHeatCapacity<T> where T: NumLike {
4755 type Output = InverseTemperature<T>;
4756 fn mul(self, rhs: &InverseAbsorbedDose<T>) -> Self::Output {
4757 InverseTemperature{per_K: self.J_per_kgK.clone() * rhs.per_Gy.clone()}
4758 }
4759}
4760
4761impl<T> core::ops::Mul<InverseDoseEquivalent<T>> for SpecificHeatCapacity<T> where T: NumLike {
4764 type Output = InverseTemperature<T>;
4765 fn mul(self, rhs: InverseDoseEquivalent<T>) -> Self::Output {
4766 InverseTemperature{per_K: self.J_per_kgK * rhs.per_Sv}
4767 }
4768}
4769impl<T> core::ops::Mul<InverseDoseEquivalent<T>> for &SpecificHeatCapacity<T> where T: NumLike {
4771 type Output = InverseTemperature<T>;
4772 fn mul(self, rhs: InverseDoseEquivalent<T>) -> Self::Output {
4773 InverseTemperature{per_K: self.J_per_kgK.clone() * rhs.per_Sv}
4774 }
4775}
4776impl<T> core::ops::Mul<&InverseDoseEquivalent<T>> for SpecificHeatCapacity<T> where T: NumLike {
4778 type Output = InverseTemperature<T>;
4779 fn mul(self, rhs: &InverseDoseEquivalent<T>) -> Self::Output {
4780 InverseTemperature{per_K: self.J_per_kgK * rhs.per_Sv.clone()}
4781 }
4782}
4783impl<T> core::ops::Mul<&InverseDoseEquivalent<T>> for &SpecificHeatCapacity<T> where T: NumLike {
4785 type Output = InverseTemperature<T>;
4786 fn mul(self, rhs: &InverseDoseEquivalent<T>) -> Self::Output {
4787 InverseTemperature{per_K: self.J_per_kgK.clone() * rhs.per_Sv.clone()}
4788 }
4789}
4790
4791impl<T> core::ops::Div<SpecificHeatCapacity<T>> for f64 where T: NumLike+From<f64> {
4794 type Output = InverseSpecificHeatCapacity<T>;
4795 fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4796 InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK}
4797 }
4798}
4799impl<T> core::ops::Div<SpecificHeatCapacity<T>> for &f64 where T: NumLike+From<f64> {
4801 type Output = InverseSpecificHeatCapacity<T>;
4802 fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4803 InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK}
4804 }
4805}
4806impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for f64 where T: NumLike+From<f64> {
4808 type Output = InverseSpecificHeatCapacity<T>;
4809 fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4810 InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK.clone()}
4811 }
4812}
4813impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for &f64 where T: NumLike+From<f64> {
4815 type Output = InverseSpecificHeatCapacity<T>;
4816 fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4817 InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK.clone()}
4818 }
4819}
4820
4821impl<T> core::ops::Div<SpecificHeatCapacity<T>> for f32 where T: NumLike+From<f32> {
4824 type Output = InverseSpecificHeatCapacity<T>;
4825 fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4826 InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK}
4827 }
4828}
4829impl<T> core::ops::Div<SpecificHeatCapacity<T>> for &f32 where T: NumLike+From<f32> {
4831 type Output = InverseSpecificHeatCapacity<T>;
4832 fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4833 InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK}
4834 }
4835}
4836impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for f32 where T: NumLike+From<f32> {
4838 type Output = InverseSpecificHeatCapacity<T>;
4839 fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4840 InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK.clone()}
4841 }
4842}
4843impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for &f32 where T: NumLike+From<f32> {
4845 type Output = InverseSpecificHeatCapacity<T>;
4846 fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4847 InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK.clone()}
4848 }
4849}
4850
4851impl<T> core::ops::Div<SpecificHeatCapacity<T>> for i64 where T: NumLike+From<i64> {
4854 type Output = InverseSpecificHeatCapacity<T>;
4855 fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4856 InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK}
4857 }
4858}
4859impl<T> core::ops::Div<SpecificHeatCapacity<T>> for &i64 where T: NumLike+From<i64> {
4861 type Output = InverseSpecificHeatCapacity<T>;
4862 fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4863 InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK}
4864 }
4865}
4866impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for i64 where T: NumLike+From<i64> {
4868 type Output = InverseSpecificHeatCapacity<T>;
4869 fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4870 InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK.clone()}
4871 }
4872}
4873impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for &i64 where T: NumLike+From<i64> {
4875 type Output = InverseSpecificHeatCapacity<T>;
4876 fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4877 InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK.clone()}
4878 }
4879}
4880
4881impl<T> core::ops::Div<SpecificHeatCapacity<T>> for i32 where T: NumLike+From<i32> {
4884 type Output = InverseSpecificHeatCapacity<T>;
4885 fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4886 InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK}
4887 }
4888}
4889impl<T> core::ops::Div<SpecificHeatCapacity<T>> for &i32 where T: NumLike+From<i32> {
4891 type Output = InverseSpecificHeatCapacity<T>;
4892 fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4893 InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK}
4894 }
4895}
4896impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for i32 where T: NumLike+From<i32> {
4898 type Output = InverseSpecificHeatCapacity<T>;
4899 fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4900 InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK.clone()}
4901 }
4902}
4903impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for &i32 where T: NumLike+From<i32> {
4905 type Output = InverseSpecificHeatCapacity<T>;
4906 fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4907 InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK.clone()}
4908 }
4909}
4910
4911#[cfg(feature="num-bigfloat")]
4914impl<T> core::ops::Div<SpecificHeatCapacity<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
4915 type Output = InverseSpecificHeatCapacity<T>;
4916 fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4917 InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK}
4918 }
4919}
4920#[cfg(feature="num-bigfloat")]
4922impl<T> core::ops::Div<SpecificHeatCapacity<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
4923 type Output = InverseSpecificHeatCapacity<T>;
4924 fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4925 InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK}
4926 }
4927}
4928#[cfg(feature="num-bigfloat")]
4930impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
4931 type Output = InverseSpecificHeatCapacity<T>;
4932 fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4933 InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK.clone()}
4934 }
4935}
4936#[cfg(feature="num-bigfloat")]
4938impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
4939 type Output = InverseSpecificHeatCapacity<T>;
4940 fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4941 InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK.clone()}
4942 }
4943}
4944
4945#[cfg(feature="num-complex")]
4948impl<T> core::ops::Div<SpecificHeatCapacity<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
4949 type Output = InverseSpecificHeatCapacity<T>;
4950 fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4951 InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK}
4952 }
4953}
4954#[cfg(feature="num-complex")]
4956impl<T> core::ops::Div<SpecificHeatCapacity<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
4957 type Output = InverseSpecificHeatCapacity<T>;
4958 fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4959 InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK}
4960 }
4961}
4962#[cfg(feature="num-complex")]
4964impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
4965 type Output = InverseSpecificHeatCapacity<T>;
4966 fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4967 InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK.clone()}
4968 }
4969}
4970#[cfg(feature="num-complex")]
4972impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
4973 type Output = InverseSpecificHeatCapacity<T>;
4974 fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4975 InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK.clone()}
4976 }
4977}
4978
4979#[cfg(feature="num-complex")]
4982impl<T> core::ops::Div<SpecificHeatCapacity<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
4983 type Output = InverseSpecificHeatCapacity<T>;
4984 fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4985 InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK}
4986 }
4987}
4988#[cfg(feature="num-complex")]
4990impl<T> core::ops::Div<SpecificHeatCapacity<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
4991 type Output = InverseSpecificHeatCapacity<T>;
4992 fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4993 InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK}
4994 }
4995}
4996#[cfg(feature="num-complex")]
4998impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
4999 type Output = InverseSpecificHeatCapacity<T>;
5000 fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
5001 InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK.clone()}
5002 }
5003}
5004#[cfg(feature="num-complex")]
5006impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
5007 type Output = InverseSpecificHeatCapacity<T>;
5008 fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
5009 InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK.clone()}
5010 }
5011}
5012
5013
5014