conspire/fem/
mod.rs

1//! Finite element library.
2
3mod block;
4
5pub use block::{
6    ElasticFiniteElementBlock, ElasticHyperviscousFiniteElementBlock, ElementBlock,
7    FiniteElementBlock, FiniteElementBlockError, FiniteElementBlockMethods, FirstOrderMinimize,
8    FirstOrderRoot, HyperelasticFiniteElementBlock, HyperviscoelasticFiniteElementBlock,
9    SecondOrderMinimize, SurfaceFiniteElementBlock, ViscoelasticFiniteElementBlock,
10    ZerothOrderRoot,
11    element::{
12        ElasticFiniteElement, FiniteElement, FiniteElementError, FiniteElementMethods,
13        HyperelasticFiniteElement, HyperviscoelasticFiniteElement, SurfaceFiniteElement,
14        ViscoelasticFiniteElement,
15        composite::tetrahedron::Tetrahedron as CompositeTetrahedron,
16        linear::{
17            hexahedron::Hexahedron as LinearHexahedron,
18            tetrahedron::Tetrahedron as LinearTetrahedron, triangle::Triangle as LinearTriangle,
19        },
20    },
21};
22
23use crate::{
24    constitutive::{
25        ConstitutiveError,
26        solid::{
27            elastic::Elastic, elastic_hyperviscous::ElasticHyperviscous,
28            hyperelastic::Hyperelastic, hyperviscoelastic::Hyperviscoelastic,
29            viscoelastic::Viscoelastic,
30        },
31    },
32    math::{
33        ContractSecondFourthIndicesWithFirstIndicesOf, Tensor, TensorRank1, TensorRank1List,
34        TensorRank1List2D, TensorRank1Vec, TensorRank1Vec2D, TensorRank2, TensorRank2List,
35        TensorRank2List2D, TensorRank2Vec2D,
36    },
37    mechanics::{
38        Coordinates, CurrentCoordinates, DeformationGradient, DeformationGradientList,
39        DeformationGradientRate, DeformationGradientRateList,
40        FirstPiolaKirchhoffRateTangentStiffnesses, FirstPiolaKirchhoffStresses,
41        FirstPiolaKirchhoffTangentStiffnesses, Forces, ReferenceCoordinates, Scalar, Scalars,
42        Stiffnesses, Vectors, Vectors2D,
43    },
44};
45
46pub type Connectivity<const N: usize> = Vec<[usize; N]>;
47pub type ReferenceNodalCoordinatesBlock = TensorRank1Vec<3, 0>;
48pub type NodalCoordinatesBlock = TensorRank1Vec<3, 1>;
49pub type NodalVelocitiesBlock = TensorRank1Vec<3, 1>;
50pub type NodalForcesBlock = TensorRank1Vec<3, 1>;
51pub type NodalStiffnessesBlock = TensorRank2Vec2D<3, 1, 1>;
52
53pub type NodalCoordinatesHistory = TensorRank1Vec2D<3, 1>;
54pub type NodalVelocitiesHistory = TensorRank1Vec2D<3, 1>;
55
56type Bases<const I: usize, const P: usize> = TensorRank1List2D<3, I, 2, P>;
57type GradientVectors<const G: usize, const N: usize> = Vectors2D<0, N, G>;
58type NodalCoordinates<const D: usize> = CurrentCoordinates<D>;
59type NodalForces<const D: usize> = Forces<D>;
60type NodalStiffnesses<const D: usize> = Stiffnesses<D>;
61type NodalVelocities<const D: usize> = CurrentCoordinates<D>;
62type Normals<const P: usize> = Vectors<1, P>;
63type NormalGradients<const O: usize, const P: usize> = TensorRank2List2D<3, 1, 1, O, P>;
64type NormalRates<const P: usize> = Vectors<1, P>;
65type NormalizedProjectionMatrix<const Q: usize> = TensorRank2<Q, 9, 9>;
66type ParametricGradientOperators<const P: usize> = TensorRank2List<3, 0, 9, P>;
67type ProjectionMatrix<const Q: usize> = TensorRank2<Q, 9, 9>;
68type ReferenceNodalCoordinates<const D: usize> = ReferenceCoordinates<D>;
69type ReferenceNormals<const P: usize> = Vectors<0, P>;
70#[cfg(test)]
71type ShapeFunctions<const Q: usize> = TensorRank1<Q, 9>;
72type ShapeFunctionsGradients<const M: usize, const Q: usize> = TensorRank1List<M, 9, Q>;
73type ShapeFunctionIntegrals<const P: usize, const Q: usize> = TensorRank1List<Q, 9, P>;
74type ShapeFunctionIntegralsProducts<const P: usize, const Q: usize> = TensorRank2List<Q, 9, 9, P>;
75type ShapeFunctionsAtIntegrationPoints<const G: usize, const Q: usize> = TensorRank1List<Q, 9, G>;
76type StandardGradientOperators<const M: usize, const O: usize, const P: usize> =
77    TensorRank1List2D<M, 9, O, P>;
78type StandardGradientOperatorsTransposed<const M: usize, const O: usize, const P: usize> =
79    TensorRank1List2D<M, 9, P, O>;