conspire/constitutive/hybrid/elastic/multiplicative/
mod.rs

1mod elastic;
2mod viscoplastic;
3
4use crate::{
5    constitutive::{
6        fluid::viscoplastic::Viscoplastic, hybrid::Multiplicative, solid::elastic::Elastic,
7    },
8    math::Tensor,
9};
10use std::{marker::PhantomData, ops::Deref};
11
12/// A hybrid elastic constitutive model based on the multiplicative decomposition.
13#[derive(Clone, Debug)]
14pub struct ElasticMultiplicative<C1, C2>
15where
16    C1: Elastic,
17    C2: Elastic,
18{
19    inner: Multiplicative<C1, C2>,
20}
21
22impl<C1, C2> Deref for ElasticMultiplicative<C1, C2>
23where
24    C1: Elastic,
25    C2: Elastic,
26{
27    type Target = Multiplicative<C1, C2>;
28    fn deref(&self) -> &Self::Target {
29        &self.inner
30    }
31}
32
33impl<C1, C2> From<(C1, C2)> for ElasticMultiplicative<C1, C2>
34where
35    C1: Elastic,
36    C2: Elastic,
37{
38    fn from((constitutive_model_1, constitutive_model_2): (C1, C2)) -> Self {
39        Self {
40            inner: Multiplicative(constitutive_model_1, constitutive_model_2),
41        }
42    }
43}
44
45/// A hybrid elastic-viscoplastic constitutive model based on the multiplicative decomposition.
46#[derive(Clone, Debug)]
47pub struct ElasticMultiplicativeViscoplastic<C1, C2, Y2>
48where
49    C1: Elastic,
50    C2: Viscoplastic<Y2>,
51    Y2: Tensor,
52{
53    inner: Multiplicative<C1, C2>,
54    dummy: PhantomData<Y2>,
55}
56
57impl<C1, C2, Y2> Deref for ElasticMultiplicativeViscoplastic<C1, C2, Y2>
58where
59    C1: Elastic,
60    C2: Viscoplastic<Y2>,
61    Y2: Tensor,
62{
63    type Target = Multiplicative<C1, C2>;
64    fn deref(&self) -> &Self::Target {
65        &self.inner
66    }
67}
68
69impl<C1, C2, Y2> From<(C1, C2)> for ElasticMultiplicativeViscoplastic<C1, C2, Y2>
70where
71    C1: Elastic,
72    C2: Viscoplastic<Y2>,
73    Y2: Tensor,
74{
75    fn from((constitutive_model_1, constitutive_model_2): (C1, C2)) -> Self {
76        Self {
77            inner: Multiplicative(constitutive_model_1, constitutive_model_2),
78            dummy: PhantomData,
79        }
80    }
81}