(self, fl)
return FR
Form the generalized active force.

        Computes the vector of the generalized active force vector.
        Used to compute E.o.M. in the form Fr + Fr* = 0.

        Parameters
        ==========

        fl : list
            Takes in a list of (Point, Vector) or (ReferenceFrame, Vector)
            tuples which represent the force at a point or torque on a frame.
Form the generalized active force.
Form the generalized active force .
def _form_fr(self, fl):
        """Form the generalized active force.

        Computes the vector of the generalized active force vector.
        Used to compute E.o.M. in the form Fr + Fr* = 0.

        Parameters
        ==========

        fl : list
            Takes in a list of (Point, Vector) or (ReferenceFrame, Vector)
            tuples which represent the force at a point or torque on a frame.

        """

        if not hasattr(fl, '__iter__'):
            raise TypeError('Force pairs must be supplied in an iterable.')

        N = self._inertial
        self._forcelist = fl[:]
        u = self._u
        o = len(u)  # number of gen. speeds
        b = len(fl)  # number of forces

        FR = zeros(o, 1)

        # pull out relevant velocities for constructing partial velocities
        vel_list = []
        f_list = []
        for i in fl:
            if isinstance(i[0], ReferenceFrame):
                vel_list += [i[0].ang_vel_in(N)]
            elif isinstance(i[0], Point):
                vel_list += [i[0].vel(N)]
            else:
                raise TypeError('First entry in pair must be point or frame.')
            f_list += [i[1]]
        partials = self._partial_velocity(vel_list, u, N)

        # Fill Fr with dot product of partial velocities and forces
        for i in range(o):
            for j in range(b):
                FR[i] += partials[j][i] & f_list[j]

        # In case there are dependent speeds
        m = len(self._udep)  # number of dependent speeds
        if m != 0:
            p = o - m
            FRtilde = FR[:p, 0]
            FRold = FR[p:o, 0]
            FRtilde += self._Ars.T * FRold
            FR = FRtilde

        self._fr = FR
        return FR
def _form_fr ( self , fl ) : if not hasattr ( fl , '__iter__' ) : raise TypeError ( 'Force pairs must be supplied in an iterable.' ) N = self . _inertial self . _forcelist = fl [ : ] u = self . _u o = len ( u ) # number of gen. speeds b = len ( fl ) # number of forces FR = zeros ( o , 1 ) # pull out relevant velocities for constructing partial velocities vel_list = [ ] f_list = [ ] for i in fl : if isinstance ( i [ 0 ] , ReferenceFrame ) : vel_list += [ i [ 0 ] . ang_vel_in ( N ) ] elif isinstance ( i [ 0 ] , Point ) : vel_list += [ i [ 0 ] . vel ( N ) ] else : raise TypeError ( 'First entry in pair must be point or frame.' ) f_list += [ i [ 1 ] ] partials = self . _partial_velocity ( vel_list , u , N ) # Fill Fr with dot product of partial velocities and forces for i in range ( o ) : for j in range ( b ) : FR [ i ] += partials [ j ] [ i ] & f_list [ j ] # In case there are dependent speeds m = len ( self . _udep ) # number of dependent speeds if m != 0 : p = o - m FRtilde = FR [ : p , 0 ] FRold = FR [ p : o , 0 ] FRtilde += self . _Ars . T * FRold FR = FRtilde self . _fr = FR return FR