#[cfg(test)]
pub mod test;
use crate::math::{
tensor_rank_1_zero, TensorRank0, TensorRank0List, TensorRank1, TensorRank1List,
TensorRank1List2D, TensorRank2, TensorRank2List, TensorRank2List2D, TensorRank3, TensorRank4,
TensorRank4List,
};
pub const IDENTITY: TensorRank2<3, 1, 1> = TensorRank2([
TensorRank1([1.0, 0.0, 0.0]),
TensorRank1([0.0, 1.0, 0.0]),
TensorRank1([0.0, 0.0, 1.0]),
]);
pub const IDENTITY_00: TensorRank2<3, 0, 0> = TensorRank2([
TensorRank1([1.0, 0.0, 0.0]),
TensorRank1([0.0, 1.0, 0.0]),
TensorRank1([0.0, 0.0, 1.0]),
]);
pub const IDENTITY_10: TensorRank2<3, 1, 0> = TensorRank2([
TensorRank1([1.0, 0.0, 0.0]),
TensorRank1([0.0, 1.0, 0.0]),
TensorRank1([0.0, 0.0, 1.0]),
]);
pub const IDENTITY_1010: TensorRank4<3, 1, 0, 1, 0> = TensorRank4([
TensorRank3([
TensorRank2([
TensorRank1([1.0, 0.0, 0.0]),
TensorRank1([0.0, 0.0, 0.0]),
TensorRank1([0.0, 0.0, 0.0]),
]),
TensorRank2([
TensorRank1([0.0, 1.0, 0.0]),
TensorRank1([0.0, 0.0, 0.0]),
TensorRank1([0.0, 0.0, 0.0]),
]),
TensorRank2([
TensorRank1([0.0, 0.0, 1.0]),
TensorRank1([0.0, 0.0, 0.0]),
TensorRank1([0.0, 0.0, 0.0]),
]),
]),
TensorRank3([
TensorRank2([
TensorRank1([0.0, 0.0, 0.0]),
TensorRank1([1.0, 0.0, 0.0]),
TensorRank1([0.0, 0.0, 0.0]),
]),
TensorRank2([
TensorRank1([0.0, 0.0, 0.0]),
TensorRank1([0.0, 1.0, 0.0]),
TensorRank1([0.0, 0.0, 0.0]),
]),
TensorRank2([
TensorRank1([0.0, 0.0, 0.0]),
TensorRank1([0.0, 0.0, 1.0]),
TensorRank1([0.0, 0.0, 0.0]),
]),
]),
TensorRank3([
TensorRank2([
TensorRank1([0.0, 0.0, 0.0]),
TensorRank1([0.0, 0.0, 0.0]),
TensorRank1([1.0, 0.0, 0.0]),
]),
TensorRank2([
TensorRank1([0.0, 0.0, 0.0]),
TensorRank1([0.0, 0.0, 0.0]),
TensorRank1([0.0, 1.0, 0.0]),
]),
TensorRank2([
TensorRank1([0.0, 0.0, 0.0]),
TensorRank1([0.0, 0.0, 0.0]),
TensorRank1([0.0, 0.0, 1.0]),
]),
]),
]);
pub const LEVI_CIVITA: TensorRank3<3, 1, 1, 1> = TensorRank3([
TensorRank2([
TensorRank1([0.0, 0.0, 0.0]),
TensorRank1([0.0, 0.0, 1.0]),
TensorRank1([0.0, -1.0, 0.0]),
]),
TensorRank2([
TensorRank1([0.0, 0.0, -1.0]),
TensorRank1([0.0, 0.0, 0.0]),
TensorRank1([1.0, 0.0, 0.0]),
]),
TensorRank2([
TensorRank1([0.0, 1.0, 0.0]),
TensorRank1([-1.0, 0.0, 0.0]),
TensorRank1([0.0, 0.0, 0.0]),
]),
]);
pub const ZERO: TensorRank2<3, 1, 1> = TensorRank2([
tensor_rank_1_zero(),
tensor_rank_1_zero(),
tensor_rank_1_zero(),
]);
pub const ZERO_10: TensorRank2<3, 1, 0> = TensorRank2([
tensor_rank_1_zero(),
tensor_rank_1_zero(),
tensor_rank_1_zero(),
]);
pub const ZERO_VECTOR: TensorRank1<3, 1> = tensor_rank_1_zero();
pub type CauchyStress = TensorRank2<3, 1, 1>;
pub type CauchyStresses<const W: usize> = TensorRank2List<3, 1, 1, W>;
pub type CauchyTangentStiffness = TensorRank4<3, 1, 1, 1, 0>;
pub type CauchyRateTangentStiffness = TensorRank4<3, 1, 1, 1, 0>;
pub type Coordinates<const I: usize, const W: usize> = TensorRank1List<3, I, W>;
pub type CurrentCoordinate = TensorRank1<3, 1>;
pub type CurrentCoordinates<const W: usize> = TensorRank1List<3, 1, W>;
pub type CurrentVelocity = TensorRank1<3, 1>;
pub type DeformationGradient = TensorRank2<3, 1, 0>;
pub type DeformationGradientElastic = TensorRank2<3, 1, 2>;
pub type DeformationGradientGeneral<const I: usize, const J: usize> = TensorRank2<3, I, J>;
pub type DeformationGradientPlastic = TensorRank2<3, 2, 0>;
pub type DeformationGradientRate = TensorRank2<3, 1, 0>;
pub type DeformationGradientRatePlastic = TensorRank2<3, 2, 0>;
pub type DeformationGradients<const W: usize> = TensorRank2List<3, 1, 0, W>;
pub type DeformationGradientss<const W: usize, const X: usize> = TensorRank2List2D<3, 1, 0, W, X>;
pub type DeformationGradientRates<const W: usize> = TensorRank2List<3, 1, 0, W>;
pub type Displacement = TensorRank1<3, 1>;
pub type FirstPiolaKirchoffStress = TensorRank2<3, 1, 0>;
pub type FirstPiolaKirchoffStresses<const W: usize> = TensorRank2List<3, 1, 0, W>;
pub type FirstPiolaKirchoffTangentStiffness = TensorRank4<3, 1, 0, 1, 0>;
pub type FirstPiolaKirchoffTangentStiffnesses<const W: usize> = TensorRank4List<3, 1, 0, 1, 0, W>;
pub type FirstPiolaKirchoffRateTangentStiffness = TensorRank4<3, 1, 0, 1, 0>;
pub type FirstPiolaKirchoffRateTangentStiffnesses<const W: usize> =
TensorRank4List<3, 1, 0, 1, 0, W>;
pub type Force = TensorRank1<3, 1>;
pub type Forces<const W: usize> = TensorRank1List<3, 1, W>;
pub type FrameSpin = TensorRank2<3, 1, 1>;
pub type HeatFlux = TensorRank1<3, 1>;
pub type LeftCauchyGreenDeformation = TensorRank2<3, 1, 1>;
pub type MandelStress = TensorRank2<3, 2, 2>;
pub type Normal = TensorRank1<3, 1>;
pub type ReferenceCoordinate = TensorRank1<3, 0>;
pub type ReferenceCoordinates<const W: usize> = TensorRank1List<3, 0, W>;
pub type RightCauchyGreenDeformation = TensorRank2<3, 0, 0>;
pub type RotationCurrentConfiguration = TensorRank2<3, 1, 1>;
pub type RotationRateCurrentConfiguration = TensorRank2<3, 1, 1>;
pub type RotationReferenceConfiguration = TensorRank2<3, 0, 0>;
pub type Scalar = TensorRank0;
pub type Scalars<const W: usize> = TensorRank0List<W>;
pub type SecondPiolaKirchoffStress = TensorRank2<3, 0, 0>;
pub type SecondPiolaKirchoffTangentStiffness = TensorRank4<3, 0, 0, 1, 0>;
pub type SecondPiolaKirchoffRateTangentStiffness = TensorRank4<3, 0, 0, 1, 0>;
pub type Stiffness = TensorRank2<3, 1, 1>;
pub type Stiffnesses<const W: usize> = TensorRank2List2D<3, 1, 1, W, W>;
pub type StretchingRate = TensorRank2<3, 1, 1>;
pub type StretchingRatePlastic = TensorRank2<3, 2, 2>;
pub type TemperatureGradient = TensorRank1<3, 1>;
pub type Traction = TensorRank1<3, 1>;
pub type Vector<const I: usize> = TensorRank1<3, I>;
pub type Vectors<const I: usize, const W: usize> = TensorRank1List<3, I, W>;
pub type Vectors2D<const I: usize, const W: usize, const X: usize> = TensorRank1List2D<3, I, W, X>;