def test_prescribe_free(self): s = System() j = FreeJoint('joint') s.add_leaf(j) s.setup() s.time = 3.54 # Initially all 6 joint motions are free self.assertEqual(len(s.q.dofs), 6) # Prescribing joint to be fixed results in no dofs s.prescribe(j) self.assertEqual(len(s.q.dofs), 0) # Freeing joint results in 6 dofs again s.free(j) self.assertEqual(len(s.q.dofs), 6) # Prescribing 2 of joint motions leaves 4 dofs s.prescribe(j, lambda t: t, [0, 2]) self.assertEqual(len(s.q.dofs), 4) # Prescribing another joint motions leaves 3 dofs s.prescribe(j, 2.0, part=3) self.assertEqual(len(s.q.dofs), 3) # Check accelerations are applied to qdd assert_aae(s.qdd[j.istrain], 0) s.apply_prescribed_accelerations() assert_aae(s.qdd[j.istrain], [3.54, 0, 3.54, 2.0, 0, 0]) # Freeing joint results in 6 dofs again s.free(j) self.assertEqual(len(s.q.dofs), 6)