sciforge-core 0.0.4

Shared engineering primitives: materials, fasteners, fluids, propulsion taxonomies, std components.
Documentation
use crate::moleculars::Material;
use sciforge_hub::prelude::constants::physics::electrodynamics::superconductor;

impl Material {
    pub fn critical_temperature_k(&self) -> Option<f64> {
        superconductor::by_formula(self.formula).map(|s| s.critical_temperature_k)
    }

    pub fn critical_field_t(&self) -> Option<f64> {
        superconductor::by_formula(self.formula).map(|s| s.critical_field_t)
    }

    pub fn critical_current_density_a_m2(&self) -> Option<f64> {
        superconductor::by_formula(self.formula).map(|s| s.critical_current_density_a_m2)
    }

    pub fn superconductor_kind(&self) -> Option<&'static str> {
        superconductor::by_formula(self.formula).map(|s| s.kind)
    }

    pub fn is_superconductor(&self) -> bool {
        superconductor::by_formula(self.formula).is_some()
    }

    pub fn is_superconducting_at(&self, temperature_k: f64, field_t: f64) -> Option<bool> {
        let s = superconductor::by_formula(self.formula)?;
        Some(temperature_k < s.critical_temperature_k && field_t < s.critical_field_t)
    }

    pub fn critical_current_a(&self, area_m2: f64) -> Option<f64> {
        self.critical_current_density_a_m2().map(|jc| jc * area_m2)
    }

    pub fn temperature_dependent_critical_field_t(&self, temperature_k: f64) -> Option<f64> {
        let s = superconductor::by_formula(self.formula)?;
        let ratio = (temperature_k / s.critical_temperature_k).powi(2);
        if ratio >= 1.0 {
            Some(0.0)
        } else {
            Some(s.critical_field_t * (1.0 - ratio))
        }
    }
}