Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
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
Ejemplo n.º 3
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
    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]
Ejemplo n.º 8
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]
def integrate(system, callback=None):
    integ = Integrator(system)
    t, y = integ.integrate(10, 0.5, nprint=None, callback=callback)
    return y[0]
Ejemplo n.º 10
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]