@@ -90,15 +90,15 @@ mutable struct MultibodyData{F <: Modia3D.VarFloatType, TimeType}
9090 # Define hidden model states and copy initial values into eqInfo
9191 path = obj. path * " ."
9292 w_init = freeMotion. wResolvedInParent ? Modia3D. resolve1 (freeMotion. rot, freeMotion. w, rotation123= freeMotion. isrot123) : freeMotion. w
93- freeMotion. ix_hidden_r = Modia. newHiddenState ! (partiallyInstantiatedModel, path* " translation" , path* " der(translation)" , freeMotion. r)
94- freeMotion. ix_hidden_v = Modia. newHiddenState ! (partiallyInstantiatedModel, path* " velocity" , path* " der(velocity)" , freeMotion. v)
95- freeMotion. ix_hidden_rot = Modia. newHiddenState ! (partiallyInstantiatedModel, path* " rotation" , path* " der(rotation)" , freeMotion. rot)
96- freeMotion. ix_hidden_w = Modia. newHiddenState ! (partiallyInstantiatedModel, path* " angularVelocity" , path* " der(angularVelocity)" , w_init)
97- freeMotion. iextra_isrot123 = Modia. newExtraResult ! (partiallyInstantiatedModel, path* " rotation123" , freeMotion. isrot123)
98- freeMotion. ix_rot = Modia. getStateStartIndexFromHiddenStateStartIndex (partiallyInstantiatedModel,freeMotion. ix_hidden_rot )
93+ freeMotion. ix_segmented_r = Modia. new_x_segmented_variable ! (partiallyInstantiatedModel, path* " translation" , path* " der(translation)" , freeMotion. r)
94+ freeMotion. ix_segmented_v = Modia. new_x_segmented_variable ! (partiallyInstantiatedModel, path* " velocity" , path* " der(velocity)" , freeMotion. v)
95+ freeMotion. ix_segmented_rot = Modia. new_x_segmented_variable ! (partiallyInstantiatedModel, path* " rotation" , path* " der(rotation)" , freeMotion. rot)
96+ freeMotion. ix_segmented_w = Modia. new_x_segmented_variable ! (partiallyInstantiatedModel, path* " angularVelocity" , path* " der(angularVelocity)" , w_init)
97+ freeMotion. iextra_isrot123 = Modia. new_w_segmented_variable ! (partiallyInstantiatedModel, path* " rotation123" , freeMotion. isrot123)
98+ freeMotion. ix_rot = Modia. get_x_startIndex_from_x_segmented_startIndex (partiallyInstantiatedModel,freeMotion. ix_segmented_rot )
9999
100100 # Define event indicator to monitor changing sequence of rotation angles
101- freeMotion. iz_rot2 = Modia. newZeroCrossings (partiallyInstantiatedModel, 1 )
101+ freeMotion. iz_rot2 = Modia. new_z_segmented_variable! (partiallyInstantiatedModel, 1 )
102102 end
103103
104104 for obj in scene. treeForComputation
@@ -631,15 +631,15 @@ singularitySafetyMargin(ang) = abs(rem2pi(ang, RoundNearest)) - 1.5 # is negati
631631
632632
633633"""
634- change_rotSequence!(instantiatedModel, freeMotion::FreeMotion, x::AbstractVector, x_hidden ::AbstractVector)
634+ change_rotSequence!(instantiatedModel, freeMotion::FreeMotion, x::AbstractVector, x_segmented ::AbstractVector)
635635
636636Change rotation sequence of `freeMotion.rot` from `x-axis, y-axis, z-axis` to `x-axis, z-axis, y-axis` or visa versa:
637637
638- - If `freeMotion.isrot123 = true` , set `freeMotion.isrot123 = false` and `x[..] = x_hidden [..] = rot132fromR(Rfromrot123(freeMotion.rot))`
638+ - If `freeMotion.isrot123 = true` , set `freeMotion.isrot123 = false` and `x[..] = x_segmented [..] = rot132fromR(Rfromrot123(freeMotion.rot))`
639639
640- - If `freeMotion.isrot123 = false`, set `freeMotion.isrot123 = true` and `x[..] = x_hidden [..] = rot123fromR(Rfromrot132(freeMotion.rot))`
640+ - If `freeMotion.isrot123 = false`, set `freeMotion.isrot123 = true` and `x[..] = x_segmented [..] = rot123fromR(Rfromrot132(freeMotion.rot))`
641641"""
642- function change_rotSequence! (m:: Modia.SimulationModel , freeMotion:: FreeMotion , x:: AbstractVector , x_hidden :: AbstractVector ):: Nothing
642+ function change_rotSequence! (m:: Modia.SimulationModel , freeMotion:: FreeMotion , x:: AbstractVector , x_segmented :: AbstractVector ):: Nothing
643643 if freeMotion. isrot123
644644 freeMotion. rot = rot132fromR (Rfromrot123 (freeMotion. rot))
645645 freeMotion. isrot123 = false
@@ -650,10 +650,10 @@ function change_rotSequence!(m::Modia.SimulationModel, freeMotion::FreeMotion, x
650650 Modia. addExtraResult! (m, freeMotion. iextra_isrot123, freeMotion. isrot123)
651651
652652 # Change x-vector
653- startIndex = freeMotion. ix_hidden_rot
654- x_hidden [startIndex ] = freeMotion. rot[1 ]
655- x_hidden [startIndex+ 1 ] = freeMotion. rot[2 ]
656- x_hidden [startIndex+ 2 ] = freeMotion. rot[3 ]
653+ startIndex = freeMotion. ix_segmented_rot
654+ x_segmented [startIndex ] = freeMotion. rot[1 ]
655+ x_segmented [startIndex+ 1 ] = freeMotion. rot[2 ]
656+ x_segmented [startIndex+ 2 ] = freeMotion. rot[3 ]
657657
658658 startIndex = freeMotion. ix_rot
659659 x[startIndex] = freeMotion. rot[1 ]
@@ -679,42 +679,42 @@ end
679679"""
680680 setStatesHiddenJoints!(instantiatedModel::Modia.SimulationModel, mbs::MultibodyData, x)
681681
682- Copy states from the hidden state vector instantiatedModel.x_hidden to the hidden joints into the corresponding Object3Ds
683- and copy some state derivatives into instantiatedModel.der_x_hidden .
682+ Copy states from the hidden state vector instantiatedModel.x_segmented to the hidden joints into the corresponding Object3Ds
683+ and copy some state derivatives into instantiatedModel.der_x_segmented .
684684"""
685685function setStatesHiddenJoints! (m:: Modia.SimulationModel{F,TimeType} , mbs:: MultibodyData{F,TimeType} , _x):: Nothing where {F,TimeType}
686- x_hidden = m. x_hidden
687- der_x_hidden = m. der_x_hidden
686+ x_segmented = m. x_segmented
687+ der_x_segmented = m. der_x_segmented
688688 j1:: Int = 0
689689 j2:: Int = 0
690690 j3:: Int = 0
691691 j4:: Int = 0
692692 for obj in mbs. hiddenJointObjects
693- # Copy x_hidden states into freeMotion states
693+ # Copy x_segmented states into freeMotion states
694694 freeMotion = mbs. freeMotion[obj. jointIndex]
695- j1 = freeMotion. ix_hidden_r ; freeMotion. r = SVector {3,F} (x_hidden [j1], x_hidden [j1+ 1 ], x_hidden [j1+ 2 ])
696- j2 = freeMotion. ix_hidden_rot ; freeMotion. rot = SVector {3,F} (x_hidden [j2], x_hidden [j2+ 1 ], x_hidden [j2+ 2 ])
697- j3 = freeMotion. ix_hidden_v ; freeMotion. v = SVector {3,F} (x_hidden [j3], x_hidden [j3+ 1 ], x_hidden [j3+ 2 ])
698- j4 = freeMotion. ix_hidden_w ; freeMotion. w = SVector {3,F} (x_hidden [j4], x_hidden [j4+ 1 ], x_hidden [j4+ 2 ])
695+ j1 = freeMotion. ix_segmented_r ; freeMotion. r = SVector {3,F} (x_segmented [j1], x_segmented [j1+ 1 ], x_segmented [j1+ 2 ])
696+ j2 = freeMotion. ix_segmented_rot ; freeMotion. rot = SVector {3,F} (x_segmented [j2], x_segmented [j2+ 1 ], x_segmented [j2+ 2 ])
697+ j3 = freeMotion. ix_segmented_v ; freeMotion. v = SVector {3,F} (x_segmented [j3], x_segmented [j3+ 1 ], x_segmented [j3+ 2 ])
698+ j4 = freeMotion. ix_segmented_w ; freeMotion. w = SVector {3,F} (x_segmented [j4], x_segmented [j4+ 1 ], x_segmented [j4+ 2 ])
699699 if freeMotion. wResolvedInParent
700700 freeMotion. w = Modia3D. resolve2 (freeMotion. rot, freeMotion. w, rotation123 = freeMotion. isrot123)
701701 end
702702
703703 # der(r) = v
704- der_x_hidden [j1] = freeMotion. v[1 ]
705- der_x_hidden [j1+ 1 ] = freeMotion. v[2 ]
706- der_x_hidden [j1+ 2 ] = freeMotion. v[3 ]
704+ der_x_segmented [j1] = freeMotion. v[1 ]
705+ der_x_segmented [j1+ 1 ] = freeMotion. v[2 ]
706+ der_x_segmented [j1+ 2 ] = freeMotion. v[3 ]
707707
708708 if Modia. positive (m, freeMotion. iz_rot2, singularitySafetyMargin (freeMotion. rot[2 ]), freeMotion. str_rot2, nothing )
709709 # freeMotion.rot[2] mapped to range -pi .. pi is either >= 1.5 or <= -1.5 (so comes close to singular position pi/2 = 1.57...)
710- change_rotSequence! (m, freeMotion, _x, x_hidden )
710+ change_rotSequence! (m, freeMotion, _x, x_segmented )
711711 end
712712
713713 # der(rot) = J123or132(rot,isrot123) * w
714714 der_rot = J123or132 (freeMotion. rot, freeMotion. isrot123)* freeMotion. w
715- der_x_hidden [j2] = der_rot[1 ]
716- der_x_hidden [j2+ 1 ] = der_rot[2 ]
717- der_x_hidden [j2+ 2 ] = der_rot[3 ]
715+ der_x_segmented [j2] = der_rot[1 ]
716+ der_x_segmented [j2+ 1 ] = der_rot[2 ]
717+ der_x_segmented [j2+ 2 ] = der_rot[3 ]
718718 end
719719 return nothing
720720end
@@ -785,24 +785,24 @@ end
785785"""
786786 setHiddenStatesDerivatives!(instantiatedModel, mbs)
787787
788- Copy derivatives of hidden states to instantiatedModel.der_x_hidden
788+ Copy derivatives of hidden states to instantiatedModel.der_x_segmented
789789"""
790790function setHiddenStatesDerivatives! (m:: Modia.SimulationModel{F,TimeType} , mbs:: MultibodyData{F,TimeType} ):: Nothing where {F,TimeType}
791791 for obj in mbs. hiddenJointObjects
792792 freeMotion = mbs. freeMotion[obj. jointIndex]
793793
794- j1 = freeMotion. ix_hidden_v
795- m. der_x_hidden [j1 ] = freeMotion. a[1 ]
796- m. der_x_hidden [j1+ 1 ] = freeMotion. a[2 ]
797- m. der_x_hidden [j1+ 2 ] = freeMotion. a[3 ]
794+ j1 = freeMotion. ix_segmented_v
795+ m. der_x_segmented [j1 ] = freeMotion. a[1 ]
796+ m. der_x_segmented [j1+ 1 ] = freeMotion. a[2 ]
797+ m. der_x_segmented [j1+ 2 ] = freeMotion. a[3 ]
798798
799- j2 = freeMotion. ix_hidden_w
799+ j2 = freeMotion. ix_segmented_w
800800 z = freeMotion. wResolvedInParent ? Modia3D. resolve1 (obj. R_rel, freeMotion. z) : freeMotion. z
801- m. der_x_hidden [j2 ] = z[1 ]
802- m. der_x_hidden [j2+ 1 ] = z[2 ]
803- m. der_x_hidden [j2+ 2 ] = z[3 ]
801+ m. der_x_segmented [j2 ] = z[1 ]
802+ m. der_x_segmented [j2+ 1 ] = z[2 ]
803+ m. der_x_segmented [j2+ 2 ] = z[3 ]
804804
805- # println(" j1=$j1, j2=$j2, freeMotion.a[2] = ", freeMotion.a[2], ", m.der_x_hidden = ", m.der_x_hidden )
805+ # println(" j1=$j1, j2=$j2, freeMotion.a[2] = ", freeMotion.a[2], ", m.der_x_segmented = ", m.der_x_segmented )
806806 end
807807 return nothing
808808end
0 commit comments