Skip to content

Commit 583e71a

Browse files
committed
remove some allocs in massPropertiesComputation.jl
1 parent 3632076 commit 583e71a

File tree

1 file changed

+20
-19
lines changed

1 file changed

+20
-19
lines changed

src/Composition/massPropertiesComputation.jl

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -74,28 +74,29 @@ end
7474

7575
# function computeInertiaTensorForTwoBodies!(massPropParent, massPropObj, obj; add=true)
7676
function addOrSubtractMassPropertiesOfChildToRoot!(obj_root::Object3D{F}, obj_child::Object3D{F}; add=true)::Nothing where F <: Modia3D.VarFloatType
77-
massProperties_child = obj_child.feature.massProperties
77+
solid::Shapes.Solid{F} = obj_child.feature
78+
massProperties_child = solid.massProperties
7879

79-
R_child = obj_child.R_rel
80-
r_child = obj_child.r_rel
81-
m_child = massProperties_child.m
82-
rCM_child = massProperties_child.rCM
83-
I_child = massProperties_child.I
80+
R_child::SMatrix{3,3,F,9}= obj_child.R_rel
81+
r_child::SVector{3,F} = obj_child.r_rel
82+
m_child::F = massProperties_child.m
83+
rCM_child::SVector{3,F} = massProperties_child.rCM
84+
I_child::SMatrix{3,3,F,9}= massProperties_child.I
8485

85-
m_root = obj_root.m
86-
rCM_root = obj_root.r_CM
87-
I_root = obj_root.I_CM
86+
m_root::F = obj_root.m
87+
rCM_root::SVector{3,F} = obj_root.r_CM
88+
I_root::SMatrix{3,3,F,9}= obj_root.I_CM
8889

8990
# transform childs center of mass to parents coordinate system
90-
rCM_child_new::SVector{3,F} = r_child + R_child' * rCM_child
91+
rCM_child_new::SVector{3,F} = SVector{3,F}(r_child + R_child' * rCM_child)
9192

9293
# I_child_steiner: I_child needs to be transformed to parents coordinate system
9394
# I_root_steiner: I_root needs to be transformed to parents coordinate system
9495
# (no need of rotation matrices)
95-
I_child_steiner::SMatrix{3,3,F,9} = Modia3D.NullRotation(F) * I_child * Modia3D.NullRotation(F)' +
96-
m_child * Modia3D.skew(rCM_child_new)' * Modia3D.skew(rCM_child_new)
97-
I_root_steiner::SMatrix{3,3,F,9} = I_root +
98-
m_root * Modia3D.skew(rCM_root)' * Modia3D.skew(rCM_root)
96+
I_child_steiner::SMatrix{3,3,F,9} = SMatrix{3,3,F,9}(Modia3D.NullRotation(F) * I_child * Modia3D.NullRotation(F)' +
97+
m_child * Modia3D.skew(rCM_child_new)' * Modia3D.skew(rCM_child_new) )
98+
I_root_steiner::SMatrix{3,3,F,9} = SMatrix{3,3,F,9}(I_root +
99+
m_root * Modia3D.skew(rCM_root)' * Modia3D.skew(rCM_root) )
99100

100101
if add
101102
# ----------- adding mass properties (parent + child) ----------------------
@@ -104,17 +105,16 @@ function addOrSubtractMassPropertiesOfChildToRoot!(obj_root::Object3D{F}, obj_ch
104105

105106
# common center of mass (parent + child)
106107
@assert(m > 0.0)
107-
rCM::SVector{3,F} = (m_root * rCM_root + m_child * rCM_child_new)/m
108+
rCM::SVector{3,F} = SVector{3,F}((m_root * rCM_root + m_child * rCM_child_new)/m)
108109

109110
# I: substract new common mass multiplied with skew matrices of
110111
# center of mass from the sum of I_root_steiner and I_child_steiner
111-
I::SMatrix{3,3,F,9} = I_root_steiner + I_child_steiner - m * Modia3D.skew(rCM)' * Modia3D.skew(rCM)
112+
I::SMatrix{3,3,F,9} = SMatrix{3,3,F,9}(I_root_steiner + I_child_steiner - m * Modia3D.skew(rCM)' * Modia3D.skew(rCM) )
112113

113114
# Assign to obj_root
114115
obj_root.m = m
115116
obj_root.r_CM = rCM
116117
obj_root.I_CM = I
117-
return nothing
118118

119119
#= # other way to compute inertia tensor
120120
a1 = rCM_new - rCM_child_new
@@ -143,5 +143,6 @@ function addOrSubtractMassPropertiesOfChildToRoot!(obj_root::Object3D{F}, obj_ch
143143
obj_root.m = m
144144
obj_root.r_CM = rCM
145145
obj_root.I_CM = I
146-
return nothing
147-
end; end
146+
end
147+
return nothing
148+
end

0 commit comments

Comments
 (0)