conspire/fem/
mod.rs

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