conspire/fem/
mod.rs

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