use crate::PhysicsError;
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
pub struct ElectronDensity<R: deep_causality_algebra::RealField>(R);
impl<R: deep_causality_algebra::RealField> Default for ElectronDensity<R> {
fn default() -> Self {
Self(R::zero())
}
}
impl<R: deep_causality_algebra::RealField> ElectronDensity<R> {
pub fn new(val: R) -> Result<Self, PhysicsError> {
if !val.is_finite() {
return Err(PhysicsError::PhysicalInvariantBroken(
"Electron density must be finite".into(),
));
}
if val < R::zero() {
return Err(PhysicsError::PhysicalInvariantBroken(
"Electron density cannot be negative".into(),
));
}
Ok(Self(val))
}
pub fn new_unchecked(val: R) -> Self {
Self(val)
}
pub fn value(&self) -> R {
self.0
}
}
impl<R: deep_causality_algebra::RealField + Into<f64>> From<ElectronDensity<R>> for f64 {
fn from(val: ElectronDensity<R>) -> Self {
val.0.into()
}
}
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
pub struct IonizationFraction<R: deep_causality_algebra::RealField>(R);
impl<R: deep_causality_algebra::RealField> Default for IonizationFraction<R> {
fn default() -> Self {
Self(R::zero())
}
}
impl<R: deep_causality_algebra::RealField> IonizationFraction<R> {
pub fn new(val: R) -> Result<Self, PhysicsError> {
if !val.is_finite() {
return Err(PhysicsError::NormalizationError(
"Ionization fraction must be finite".into(),
));
}
if val < R::zero() || val > R::one() {
return Err(PhysicsError::NormalizationError(
"Ionization fraction must lie in [0, 1]".into(),
));
}
Ok(Self(val))
}
pub fn new_unchecked(val: R) -> Self {
Self(val)
}
pub fn value(&self) -> R {
self.0
}
}
impl<R: deep_causality_algebra::RealField + Into<f64>> From<IonizationFraction<R>> for f64 {
fn from(val: IonizationFraction<R>) -> Self {
val.0.into()
}
}
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
pub struct ElectronTemperature<R: deep_causality_algebra::RealField>(R);
impl<R: deep_causality_algebra::RealField> Default for ElectronTemperature<R> {
fn default() -> Self {
Self(R::zero())
}
}
impl<R: deep_causality_algebra::RealField> ElectronTemperature<R> {
pub fn new(val: R) -> Result<Self, PhysicsError> {
if !val.is_finite() {
return Err(PhysicsError::PhysicalInvariantBroken(
"Electron temperature must be finite".into(),
));
}
if val < R::zero() {
return Err(PhysicsError::ZeroKelvinViolation());
}
Ok(Self(val))
}
pub fn new_unchecked(val: R) -> Self {
Self(val)
}
pub fn value(&self) -> R {
self.0
}
}
impl<R: deep_causality_algebra::RealField + Into<f64>> From<ElectronTemperature<R>> for f64 {
fn from(val: ElectronTemperature<R>) -> Self {
val.0.into()
}
}
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
pub struct VibrationalTemperature<R: deep_causality_algebra::RealField>(R);
impl<R: deep_causality_algebra::RealField> Default for VibrationalTemperature<R> {
fn default() -> Self {
Self(R::zero())
}
}
impl<R: deep_causality_algebra::RealField> VibrationalTemperature<R> {
pub fn new(val: R) -> Result<Self, PhysicsError> {
if !val.is_finite() {
return Err(PhysicsError::PhysicalInvariantBroken(
"Vibrational temperature must be finite".into(),
));
}
if val < R::zero() {
return Err(PhysicsError::ZeroKelvinViolation());
}
Ok(Self(val))
}
pub fn new_unchecked(val: R) -> Self {
Self(val)
}
pub fn value(&self) -> R {
self.0
}
}
impl<R: deep_causality_algebra::RealField + Into<f64>> From<VibrationalTemperature<R>> for f64 {
fn from(val: VibrationalTemperature<R>) -> Self {
val.0.into()
}
}
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
pub struct MassFraction<R: deep_causality_algebra::RealField>(R);
impl<R: deep_causality_algebra::RealField> Default for MassFraction<R> {
fn default() -> Self {
Self(R::zero())
}
}
impl<R: deep_causality_algebra::RealField> MassFraction<R> {
pub fn new(val: R) -> Result<Self, PhysicsError> {
if !val.is_finite() {
return Err(PhysicsError::NormalizationError(
"Mass fraction must be finite".into(),
));
}
if val < R::zero() || val > R::one() {
return Err(PhysicsError::NormalizationError(
"Mass fraction must lie in [0, 1]".into(),
));
}
Ok(Self(val))
}
pub fn new_unchecked(val: R) -> Self {
Self(val)
}
pub fn value(&self) -> R {
self.0
}
}
impl<R: deep_causality_algebra::RealField + Into<f64>> From<MassFraction<R>> for f64 {
fn from(val: MassFraction<R>) -> Self {
val.0.into()
}
}
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
pub struct ReactionRate<R: deep_causality_algebra::RealField>(R);
impl<R: deep_causality_algebra::RealField> Default for ReactionRate<R> {
fn default() -> Self {
Self(R::zero())
}
}
impl<R: deep_causality_algebra::RealField> ReactionRate<R> {
pub fn new(val: R) -> Result<Self, PhysicsError> {
if !val.is_finite() {
return Err(PhysicsError::PhysicalInvariantBroken(
"Reaction rate must be finite".into(),
));
}
if val < R::zero() {
return Err(PhysicsError::PhysicalInvariantBroken(
"Reaction rate cannot be negative".into(),
));
}
Ok(Self(val))
}
pub fn new_unchecked(val: R) -> Self {
Self(val)
}
pub fn value(&self) -> R {
self.0
}
}
impl<R: deep_causality_algebra::RealField + Into<f64>> From<ReactionRate<R>> for f64 {
fn from(val: ReactionRate<R>) -> Self {
val.0.into()
}
}
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
pub struct EquilibriumConstant<R: deep_causality_algebra::RealField>(R);
impl<R: deep_causality_algebra::RealField> Default for EquilibriumConstant<R> {
fn default() -> Self {
Self(R::zero())
}
}
impl<R: deep_causality_algebra::RealField> EquilibriumConstant<R> {
pub fn new(val: R) -> Result<Self, PhysicsError> {
if !val.is_finite() {
return Err(PhysicsError::PhysicalInvariantBroken(
"Equilibrium constant must be finite".into(),
));
}
if val < R::zero() {
return Err(PhysicsError::PhysicalInvariantBroken(
"Equilibrium constant cannot be negative".into(),
));
}
Ok(Self(val))
}
pub fn new_unchecked(val: R) -> Self {
Self(val)
}
pub fn value(&self) -> R {
self.0
}
}
impl<R: deep_causality_algebra::RealField + Into<f64>> From<EquilibriumConstant<R>> for f64 {
fn from(val: EquilibriumConstant<R>) -> Self {
val.0.into()
}
}
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
pub struct DissociationFraction<R: deep_causality_algebra::RealField>(R);
impl<R: deep_causality_algebra::RealField> Default for DissociationFraction<R> {
fn default() -> Self {
Self(R::zero())
}
}
impl<R: deep_causality_algebra::RealField> DissociationFraction<R> {
pub fn new(val: R) -> Result<Self, PhysicsError> {
if !val.is_finite() {
return Err(PhysicsError::NormalizationError(
"Dissociation fraction must be finite".into(),
));
}
if val < R::zero() || val > R::one() {
return Err(PhysicsError::NormalizationError(
"Dissociation fraction must lie in [0, 1]".into(),
));
}
Ok(Self(val))
}
pub fn new_unchecked(val: R) -> Self {
Self(val)
}
pub fn value(&self) -> R {
self.0
}
}
impl<R: deep_causality_algebra::RealField + Into<f64>> From<DissociationFraction<R>> for f64 {
fn from(val: DissociationFraction<R>) -> Self {
val.0.into()
}
}