Skip to main content

conspire/constitutive/chemical/diffusion/fick/
mod.rs

1#[cfg(test)]
2mod test;
3
4use crate::{
5    constitutive::{ConstitutiveError, chemical::Chemical, diffusion::Diffusion},
6    math::{IDENTITY_00, Quantity, Tensor},
7    mechanics::{ConcentrationGradient, MolarFlux, MolarFluxTangent},
8    units::{Diffusivity, MolarFlowRate, MolarFlowRateConcentrationDensity},
9};
10
11#[doc = include_str!("doc.md")]
12#[derive(Clone, Debug)]
13pub struct Fick {
14    /// The diffusivity $`D`$.
15    pub diffusivity: Quantity<Diffusivity>,
16}
17
18impl Chemical for Fick {}
19
20impl Diffusion for Fick {
21    type Balance = MolarFlowRate;
22    #[doc = include_str!("potential.md")]
23    fn potential(
24        &self,
25        concentration_gradient: &ConcentrationGradient,
26    ) -> Result<Quantity<MolarFlowRateConcentrationDensity>, ConstitutiveError> {
27        Ok(concentration_gradient.norm_squared() * self.diffusivity * 0.5)
28    }
29    #[doc = include_str!("molar_flux.md")]
30    fn flux(
31        &self,
32        concentration_gradient: &ConcentrationGradient,
33    ) -> Result<MolarFlux, ConstitutiveError> {
34        Ok(concentration_gradient * -self.diffusivity)
35    }
36    #[doc = include_str!("molar_flux_tangent.md")]
37    fn tangent(
38        &self,
39        _concentration_gradient: &ConcentrationGradient,
40    ) -> Result<MolarFluxTangent, ConstitutiveError> {
41        Ok(IDENTITY_00 * -self.diffusivity)
42    }
43}