def test_simple_prescribed_integration(self): s = System() h = Hinge('hinge', [0, 1, 0]) s.add_leaf(h) s.setup() s.prescribe(h) w = h.vstrain[0] = 0.97 # rad/s integ = Integrator(s) t, y = integ.integrate(9.0, 0.1) # Check time vector and shape of result assert_array_equal(t, np.arange(0, 9.0, 0.1)) self.assertEqual(len(y), 1) self.assertEqual(y[0].shape, (len(t), 1)) # Result should be y = wt, but wrapped to [0, 2pi) assert_aae(y[0][:, 0], (w * t) % (2 * np.pi)) # Check asking for velocity and acceleration works h.xstrain[0] = s.time = 0.0 # reset integ = Integrator(s, ('pos', 'vel', 'acc')) t, y = integ.integrate(1.0, 0.1) assert_array_equal(t, np.arange(0, 1.0, 0.1)) self.assertEqual(len(y), 3) for yy in y: self.assertEqual(yy.shape, (len(t), 1)) assert_aae(y[0][:, 0], w * t) assert_aae(y[1][:, 0], w) assert_aae(y[2][:, 0], 0)
def simulate(self, xpivot=0.0, vpivot=0.0, t1=10, dt=0.05): # reset self.system.q[:] = 0.0 self.system.qd[:] = 0.0 # initial conditions self.system.q[self.pivot.istrain][0] = xpivot # initial elevation #self.system.qd[self.pivot.istrain][0] = vpivot # initial elevation spd self.system.qd[self.axis.istrain][0] = self.spin # constant spin speed # simulate integ = Integrator(self.system, ('pos', 'vel')) integ.integrate(t1, dt, nprint=None) return integ
def simulate(system): # Set initial conditions system.q[system.elements['hinge'].istrain][0] = 0.3 # Integrate integ = Integrator(system, ('pos','vel','acc')) t, y = integ.integrate(5, 0.01, nprint=None) return integ
def simulate(system): # Set initial conditions system.q[system.elements['hinge'].istrain][0] = 0.3 # Integrate integ = Integrator(system, ('pos', 'vel', 'acc')) t, y = integ.integrate(5, 0.01, nprint=None) return integ
def test_callback(self): s = System() s.setup() # Exponential decay: qd = -A q def callback(system, ti, q_struct, q_other): self.assertIs(system, s) self.assertEqual(len(q_other), 1) return -q_other integ = Integrator(s) t, y = integ.integrate(9.0, 0.1, extra_states=np.ones(1), callback=callback) # Check time vector and shape of result assert_array_equal(t, np.arange(0, 9.0, 0.1)) self.assertEqual(len(y), 1) self.assertEqual(y[0].shape, (len(t), 1)) assert_aae(y[0][:, 0], np.exp(-t))
def integrate(system, callback=None): integ = Integrator(system) t, y = integ.integrate(10, 0.5, nprint=None, callback=callback) return y[0]
def integrate(system, callback=None): # dopri5 gives exact result for step response integ = Integrator(system, method='dopri5') t, y = integ.integrate(10, 0.5, nprint=None, callback=callback) return t, y[0]