コード例 #1
0
class Rotor(object):
    def __init__(self, mode_source_file, root_length=0):
        # Modal element using data from Bladed model
        print "Loading modes from '%s'..." % mode_source_file
        self.modes = ModalRepresentation.from_Bladed(mode_source_file)

        self.bearing = Hinge('bearing', [0,0,1])
        self.offset  = RigidConnection('offset', [root_length, 0, 0])
        self.blade   = ModalElement('blade', self.modes)
        self.bearing.add_leaf(self.offset)
        self.offset.add_leaf(self.blade)
        self.system = System(self.bearing)

        # Prescribed DOF accelerations
        self.system.prescribe(self.bearing.istrain, vel=0.0, acc=0.0) # constant spin speed

    def simulate(self, qm0, spin=10.0, t1=1.5, dt=0.01):
        # reset
        self.system.q [:] = 0.0
        self.system.qd[:] = 0.0

        # initial conditions
        self.system.q[self.blade.istrain] = qm0 # initial modal amplitudes
        self.system.prescribe(self.bearing.istrain, vel=spin, acc=0.0) #acc=spin/t1)

        # setup integrator
        self.integ = Integrator(self.system, ('pos','vel'))
        self.integ.add_output(dynamics.LoadOutput(self.bearing.iprox))
        self.integ.add_output(dynamics.LoadOutput(self.blade.iprox))
        self.integ.add_output(dynamics.LoadOutput(self.blade.iprox, local=True))
        self.integ.add_output(dynamics.CustomOutput(
            lambda s: self.blade.station_positions()[-1], label="Tip pos"))
        self.integ.add_output(dynamics.CustomOutput(
            lambda s: self.blade.quad_stress, label="Quad stress"))
        
        # simulate
        self.t,self.y = self.integ.integrate(t1, dt)
        return self.t, self.y
    
    def lin(self, qm0, spin=10.0):
        # reset
        self.system.q [:] = 0.0
        self.system.qd[:] = 0.0

        # initial conditions
        self.system.q[self.blade.istrain] = qm0 # initial modal amplitudes
        self.system.prescribe(self.bearing.istrain, vel=spin, acc=0.0) # constant speed
        
        linsys = linearisation.LinearisedSystem(self.system, qm0)
        return linsys

    def ani(self, vs=1):
        l = 40
        return dynvis.anim(self.system, self.t, self.y,
                           (0,vs), (-l,l), (-l,l), velocities=False, only_free=True)
コード例 #2
0
class Rotor(object):
    def __init__(self, mode_source_file, root_length=0):
        # Modal element using data from Bladed model
        print "Loading modes from '%s'..." % mode_source_file
        self.modes = ModalRepresentation.from_Bladed(mode_source_file)

        self.bearing = Hinge('bearing', [0, 0, 1])
        self.offset = RigidConnection('offset', [root_length, 0, 0])
        self.blade = ModalElement('blade', self.modes)
        self.bearing.add_leaf(self.offset)
        self.offset.add_leaf(self.blade)
        self.system = System(self.bearing)

        # Prescribed DOF accelerations
        self.system.prescribe(self.bearing.istrain, vel=0.0,
                              acc=0.0)  # constant spin speed

    def simulate(self, qm0, spin=10.0, t1=1.5, dt=0.01):
        # reset
        self.system.q[:] = 0.0
        self.system.qd[:] = 0.0

        # initial conditions
        self.system.q[self.blade.istrain] = qm0  # initial modal amplitudes
        self.system.prescribe(self.bearing.istrain, vel=spin,
                              acc=0.0)  #acc=spin/t1)

        # setup integrator
        self.integ = Integrator(self.system, ('pos', 'vel'))
        self.integ.add_output(dynamics.LoadOutput(self.bearing.iprox))
        self.integ.add_output(dynamics.LoadOutput(self.blade.iprox))
        self.integ.add_output(dynamics.LoadOutput(self.blade.iprox,
                                                  local=True))
        self.integ.add_output(
            dynamics.CustomOutput(lambda s: self.blade.station_positions()[-1],
                                  label="Tip pos"))
        self.integ.add_output(
            dynamics.CustomOutput(lambda s: self.blade.quad_stress,
                                  label="Quad stress"))

        # simulate
        self.t, self.y = self.integ.integrate(t1, dt)
        return self.t, self.y

    def lin(self, qm0, spin=10.0):
        # reset
        self.system.q[:] = 0.0
        self.system.qd[:] = 0.0

        # initial conditions
        self.system.q[self.blade.istrain] = qm0  # initial modal amplitudes
        self.system.prescribe(self.bearing.istrain, vel=spin,
                              acc=0.0)  # constant speed

        linsys = linearisation.LinearisedSystem(self.system, qm0)
        return linsys

    def ani(self, vs=1):
        l = 40
        return dynvis.anim(self.system,
                           self.t,
                           self.y, (0, vs), (-l, l), (-l, l),
                           velocities=False,
                           only_free=True)
コード例 #3
0
acc_period = 0.1
yaw_time1 = 3.0
yaw_time2 = 6.0
dvyaw = 10 * np.pi/180
system.prescribe(yaw.istrain,
    acc=lambda t: (t>=yaw_time1 and t<(yaw_time1+acc_period)) and  dvyaw/acc_period or 0 +\
                  (t>yaw_time2 and t<=(yaw_time2+acc_period)) and -dvyaw/acc_period or 0)
system.find_equilibrium()

integ = Integrator(system, ())
integ.add_position_output(yaw.istrain, 'yaw position')
integ.add_velocity_output(yaw.istrain, 'yaw velocity')
integ.add_acceleration_output(yaw.istrain, 'yaw acceleration')
integ.add_acceleration_output(el.imult)
integ.add_force_output(bearing.idist, "root load")
integ.add_custom_output(lambda s: el.station_positions()[-1], 'tip pos')
integ.add_custom_output(lambda s: el.modes.X(el.xstrain)[-1,1:3], 'tip defl')
integ.add_custom_output(lambda s: el.quad_forces, 'quad_forces')
integ.add_custom_output(lambda s: el.quad_stress, 'quad_stress')

# Load Bladed data for comparison
import pybladed.data
brun = pybladed.data.BladedRun(bladedpath)
bladed_defl = np.c_[
    brun.get('blade 1 x-deflection;4'),
    brun.get('blade 1 y-deflection;4'),
    brun.get('blade 1 x-position;4'),
    brun.get('blade 1 y-position;4'),
    brun.get('blade 1 z-position;4'),
    brun.get('rotor azimuth'),
    brun.get('nacelle yaw displacement'),
コード例 #4
0
acc_period = 0.1
yaw_time1 = 3.0
yaw_time2 = 6.0
dvyaw = 10 * np.pi / 180
system.prescribe(yaw.istrain,
    acc=lambda t: (t>=yaw_time1 and t<(yaw_time1+acc_period)) and  dvyaw/acc_period or 0 +\
                  (t>yaw_time2 and t<=(yaw_time2+acc_period)) and -dvyaw/acc_period or 0)
system.find_equilibrium()

integ = Integrator(system, ())
integ.add_position_output(yaw.istrain, 'yaw position')
integ.add_velocity_output(yaw.istrain, 'yaw velocity')
integ.add_acceleration_output(yaw.istrain, 'yaw acceleration')
integ.add_acceleration_output(el.imult)
integ.add_force_output(bearing.idist, "root load")
integ.add_custom_output(lambda s: el.station_positions()[-1], 'tip pos')
integ.add_custom_output(lambda s: el.modes.X(el.xstrain)[-1, 1:3], 'tip defl')
integ.add_custom_output(lambda s: el.quad_forces, 'quad_forces')
integ.add_custom_output(lambda s: el.quad_stress, 'quad_stress')

# Load Bladed data for comparison
import pybladed.data
brun = pybladed.data.BladedRun(bladedpath)
bladed_defl = np.c_[brun.get('blade 1 x-deflection;4'),
                    brun.get('blade 1 y-deflection;4'),
                    brun.get('blade 1 x-position;4'),
                    brun.get('blade 1 y-position;4'),
                    brun.get('blade 1 z-position;4'),
                    brun.get('rotor azimuth'),
                    brun.get('nacelle yaw displacement'),
                    brun.get('blade 1 root Fz'),