conspire/constitutive/hybrid/elastic/multiplicative/
mod.rs1mod 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#[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#[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}