Skip to content

Commit 16a86ef

Browse files
committed
Use macros to write constructors
1 parent 7ff891b commit 16a86ef

File tree

1 file changed

+19
-17
lines changed

1 file changed

+19
-17
lines changed

src/types.jl

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -24,44 +24,46 @@ const ElasticConstantsMatrix{T} = ElasticConstants{T,2}
2424
struct TensorStress{T} <: Stress{T,2}
2525
data::MMatrix{3,3,T,9}
2626
end
27-
TensorStress(data::AbstractMatrix{T}) where {T} = TensorStress{T}(MMatrix{3,3}(data))
28-
TensorStress(values...) = TensorStress(SymmetricSecondOrderTensor{3}(values...))
2927
struct TensorStrain{T} <: Strain{T,2}
3028
data::MMatrix{3,3,T,9}
3129
end
32-
TensorStrain(data::AbstractMatrix{T}) where {T} = TensorStrain{T}(MMatrix{3,3}(data))
33-
TensorStrain(values...) = TensorStrain(SymmetricSecondOrderTensor{3}(values...))
3430
struct StiffnessTensor{T} <: Stiffness{T,4}
3531
data::SymmetricFourthOrderTensor{3,T}
3632
end
37-
StiffnessTensor(data::AbstractArray{T,4}) where {T} =
38-
StiffnessTensor{T}(SymmetricFourthOrderTensor{3}(data))
3933
struct ComplianceTensor{T} <: Compliance{T,4}
4034
data::SymmetricFourthOrderTensor{3,T}
4135
end
42-
ComplianceTensor(data::AbstractArray{T,4}) where {T} =
43-
ComplianceTensor{T}(SymmetricFourthOrderTensor{3}(data))
4436
struct EngineeringStress{T} <: Stress{T,1}
4537
data::MVector{6,T}
4638
end
47-
EngineeringStress(data::AbstractVector) = EngineeringStress(MVector{6}(data))
48-
EngineeringStress(values...) = EngineeringStress(MVector{6}(values...))
4939
struct EngineeringStrain{T} <: Strain{T,1}
5040
data::MVector{6,T}
5141
end
52-
EngineeringStrain(data::AbstractVector) = EngineeringStrain(MVector{6}(data))
53-
EngineeringStrain(values...) = EngineeringStrain(MVector{6}(values...))
5442
struct StiffnessMatrix{T} <: Stiffness{T,2}
5543
data::MMatrix{6,6,T,36}
5644
end
57-
StiffnessMatrix(data::AbstractMatrix{T}) where {T} = StiffnessMatrix{T}(MMatrix{6,6}(data))
58-
StiffnessMatrix(values...) = StiffnessMatrix(SymmetricSecondOrderTensor{6}(values...))
5945
struct ComplianceMatrix{T} <: Compliance{T,2}
6046
data::MMatrix{6,6,T,36}
6147
end
62-
ComplianceMatrix(data::AbstractMatrix{T}) where {T} =
63-
ComplianceMatrix{T}(MMatrix{6,6}(data))
64-
ComplianceMatrix(values...) = ComplianceMatrix(SymmetricSecondOrderTensor{6}(values...))
48+
49+
# Constructors
50+
for T in (:EngineeringStress, :EngineeringStrain)
51+
@eval begin
52+
$T(data::AbstractVector) = $T(MVector{6}(data))
53+
$T(values...) = $T(vec(values))
54+
end
55+
end
56+
for (T, N) in
57+
zip((:TensorStress, :TensorStrain, :StiffnessMatrix, :ComplianceMatrix), (3, 3, 6, 6))
58+
@eval begin
59+
$T(data::AbstractMatrix{S}) where {S} = $T{S}(MMatrix{$N,$N}(data))
60+
$T(values...) = $T(SymmetricSecondOrderTensor{$N}(values...))
61+
end
62+
end
63+
for T in (:StiffnessTensor, :ComplianceTensor)
64+
@eval $T(data::AbstractArray{S,4}) where {S} =
65+
$T{S}(SymmetricFourthOrderTensor{3}(data))
66+
end
6567

6668
Base.size(::Type{<:TensorVariable}) = (3, 3)
6769
Base.size(::Type{<:ElasticConstantsTensor}) = (3, 3, 3, 3)

0 commit comments

Comments
 (0)