def setUp(self):

        self.turbine = Turbine_CostsSE()
    
        self.turbine.blade_mass = 17650.67  # inline with the windpact estimates
        self.turbine.hub_mass = 31644.5
        self.turbine.pitch_system_mass = 17004.0
        self.turbine.spinner_mass = 1810.5
        self.turbine.low_speed_shaft_mass = 31257.3
        #bearingsMass = 9731.41
        self.turbine.main_bearing_mass = 9731.41 / 2
        self.turbine.second_bearing_mass = 9731.41 / 2
        self.turbine.gearbox_mass = 30237.60
        self.turbine.high_speed_side_mass = 1492.45
        self.turbine.generator_mass = 16699.85
        self.turbine.bedplate_mass = 93090.6
        self.turbine.yaw_system_mass = 11878.24
        self.turbine.tower_mass = 434559.0
        self.turbine.machine_rating = 5000.0
        self.turbine.advanced = True
        self.turbine.blade_number = 3
        self.turbine.drivetrain_design = 'geared'
        self.turbine.crane = True
        self.turbine.offshore = True
        self.turbine.year = 2010
        self.turbine.month =  12
class TestTurbine_CostSE(unittest.TestCase):

    def setUp(self):

        self.turbine = Turbine_CostsSE()
    
        self.turbine.blade_mass = 17650.67  # inline with the windpact estimates
        self.turbine.hub_mass = 31644.5
        self.turbine.pitch_system_mass = 17004.0
        self.turbine.spinner_mass = 1810.5
        self.turbine.low_speed_shaft_mass = 31257.3
        #bearingsMass = 9731.41
        self.turbine.main_bearing_mass = 9731.41 / 2
        self.turbine.second_bearing_mass = 9731.41 / 2
        self.turbine.gearbox_mass = 30237.60
        self.turbine.high_speed_side_mass = 1492.45
        self.turbine.generator_mass = 16699.85
        self.turbine.bedplate_mass = 93090.6
        self.turbine.yaw_system_mass = 11878.24
        self.turbine.tower_mass = 434559.0
        self.turbine.machine_rating = 5000.0
        self.turbine.advanced = True
        self.turbine.blade_number = 3
        self.turbine.drivetrain_design = 'geared'
        self.turbine.crane = True
        self.turbine.offshore = True
        self.turbine.year = 2010
        self.turbine.month =  12

    def test_functionality(self):
    
        self.turbine.run()
        
        self.assertEqual(round(self.turbine.turbine_cost,2), 6153564.42) 
예제 #3
0
def configure_lcoe_with_turb_costs(assembly):
    """
    tcc_a inputs:
        advanced_blade = Bool
        offshore = Bool
        assemblyCostMultiplier = Float
        overheadCostMultiplier = Float
        profitMultiplier = Float
        transportMultiplier = Float
    """

    assembly.replace('tcc_a', Turbine_CostsSE())

    assembly.add('advanced_blade', Bool(True, iotype='in', desc='advanced (True) or traditional (False) blade design'))
    assembly.add('offshore', Bool(iotype='in', desc='flag for offshore site'))
    assembly.add('assemblyCostMultiplier',Float(0.0, iotype='in', desc='multiplier for assembly cost in manufacturing'))
    assembly.add('overheadCostMultiplier', Float(0.0, iotype='in', desc='multiplier for overhead'))
    assembly.add('profitMultiplier', Float(0.0, iotype='in', desc='multiplier for profit markup'))
    assembly.add('transportMultiplier', Float(0.0, iotype='in', desc='multiplier for transport costs'))

    # connections to turbine costs
    assembly.connect('rotor.mass_one_blade', 'tcc_a.blade_mass')
    assembly.connect('hub.hub_mass', 'tcc_a.hub_mass')
    assembly.connect('hub.pitch_system_mass', 'tcc_a.pitch_system_mass')
    assembly.connect('hub.spinner_mass', 'tcc_a.spinner_mass')
    assembly.connect('nacelle.low_speed_shaft_mass', 'tcc_a.low_speed_shaft_mass')
    assembly.connect('nacelle.main_bearing_mass', 'tcc_a.main_bearing_mass')
    assembly.connect('nacelle.second_bearing_mass', 'tcc_a.second_bearing_mass')
    assembly.connect('nacelle.gearbox_mass', 'tcc_a.gearbox_mass')
    assembly.connect('nacelle.high_speed_side_mass', 'tcc_a.high_speed_side_mass')
    assembly.connect('nacelle.generator_mass', 'tcc_a.generator_mass')
    assembly.connect('nacelle.bedplate_mass', 'tcc_a.bedplate_mass')
    assembly.connect('nacelle.yaw_system_mass', 'tcc_a.yaw_system_mass')
    assembly.connect('jacket.Twrouts.mass', 'tcc_a.tower_mass') # jacket input
    assembly.connect('rotor.control.ratedPower', 'tcc_a.machine_rating')
    assembly.connect('rotor.nBlades', 'tcc_a.blade_number')
    assembly.connect('nacelle.crane', 'tcc_a.crane')
    assembly.connect('year', 'tcc_a.year')
    assembly.connect('month', 'tcc_a.month')
    assembly.connect('nacelle.drivetrain_design', 'tcc_a.drivetrain_design')
    assembly.connect('advanced_blade','tcc_a.advanced_blade')
    assembly.connect('offshore','tcc_a.offshore')
    assembly.connect('assemblyCostMultiplier','tcc_a.assemblyCostMultiplier')
    assembly.connect('overheadCostMultiplier','tcc_a.overheadCostMultiplier')
    assembly.connect('profitMultiplier','tcc_a.profitMultiplier')
    assembly.connect('transportMultiplier','tcc_a.transportMultiplier')
예제 #4
0
# 1 ---------

# A simple test of turbine_costsse model
from turbine_costsse.turbine_costsse import Turbine_CostsSE

turbine = Turbine_CostsSE()

# 1 ---------
# 2 ---------

# NREL 5 MW turbine component masses based on Sunderland model approach

# Rotor
turbine.blade_mass = 17650.67  # inline with the windpact estimates
turbine.hub_mass = 31644.5
turbine.pitch_system_mass = 17004.0
turbine.spinner_mass = 1810.5

# Drivetrain and Nacelle
turbine.low_speed_shaft_mass = 31257.3
#bearingsMass = 9731.41
turbine.main_bearing_mass = 9731.41 / 2
turbine.second_bearing_mass = 9731.41 / 2
turbine.gearbox_mass = 30237.60
turbine.high_speed_side_mass = 1492.45
turbine.generator_mass = 16699.85
turbine.bedplate_mass = 93090.6
turbine.yaw_system_mass = 11878.24

# Tower
turbine.tower_mass = 434559.0
예제 #5
0
    def configure(self):
        """
        tcc_a inputs:
            advanced_blade = Bool
            offshore = Bool
            assemblyCostMultiplier = Float
            overheadCostMultiplier = Float
            profitMultiplier = Float
            transportMultiplier = Float
        aep inputs:
            array_losses = Float
            other_losses = Float
        fin inputs:
            fixed_charge_rate = Float
            construction_finance_rate = Float
            tax_rate = Float
            discount_rate = Float
            construction_time = Float
        bos inputs:
            bos_multiplier = Float
        inputs:
            sea_depth
            year
            month
            project lifetime
        if csm opex additional inputs:
            availability = Float()
        if openwind opex additional inputs:
            power_curve 
            rpm 
            ct 
        if with_landbos additional inputs:
            voltage
            distInter
            terrain
            layout
            soil
        """

        # configure base assembly
        configure_extended_financial_analysis(self)

        # putting replace statements here for now; TODO - openmdao bug
        # replace BOS with either CSM or landbos
        if self.with_landbos:
            self.replace('bos_a', NREL_Land_BOSSE())
        else:
            self.replace('bos_a', bos_csm_assembly())
        self.replace('tcc_a', Turbine_CostsSE())
        if self.with_ecn_opex:
            self.replace('opex_a', opex_ecn_assembly(ecn_file))
        else:
            self.replace('opex_a', opex_csm_assembly())
        self.replace('aep_a', aep_weibull_assembly())
        self.replace('fin_a', fin_csm_assembly())

        # add TurbineSE assembly
        configure_turbine(self, self.with_new_nacelle, self.flexible_blade,
                          self.with_3pt_drive)

        # replace TCC with turbine_costs
        configure_lcoe_with_turb_costs(self)

        # replace BOS with either CSM or landbos
        if self.with_landbos:
            configure_lcoe_with_landbos(self)
        else:
            configure_lcoe_with_csm_bos(self)

        # replace AEP with weibull AEP (TODO: option for basic aep)
        configure_lcoe_with_weibull_aep(self)

        # replace OPEX with CSM or ECN opex and add AEP
        if self.with_ecn_opex:
            configure_lcoe_with_ecn_opex(self, ecn_file)
            self.connect(
                'opex_a.availability', 'aep_a.availability'
            )  # connecting here due to aep / opex reversal depending on model
        else:
            configure_lcoe_with_csm_opex(self)
            self.add(
                'availability',
                Float(
                    0.94,
                    iotype='in',
                    desc='average annual availbility of wind turbines at plant'
                ))
            self.connect(
                'availability', 'aep_a.availability'
            )  # connecting here due to aep / opex reversal depending on model

        # replace Finance with CSM Finance
        configure_lcoe_with_csm_fin(self)
예제 #6
0
# 1 ---------

# A simple test of turbine_costsse model
from turbine_costsse.turbine_costsse import Turbine_CostsSE

turbine = Turbine_CostsSE()

# 1 ---------
# 2 ---------

# NREL 5 MW turbine component masses based on Sunderland model approach

# Rotor
turbine.blade_mass = 17650.67  # inline with the windpact estimates
turbine.hub_mass = 31644.5
turbine.pitch_system_mass = 17004.0
turbine.spinner_mass = 1810.5

# Drivetrain and Nacelle
turbine.low_speed_shaft_mass = 31257.3
#bearingsMass = 9731.41
turbine.main_bearing_mass = 9731.41 / 2
turbine.second_bearing_mass = 9731.41 / 2
turbine.gearbox_mass = 30237.60
turbine.high_speed_side_mass = 1492.45
turbine.generator_mass = 16699.85
turbine.bedplate_mass = 93090.6
turbine.yaw_system_mass = 11878.24

# Tower
turbine.tower_mass = 434559.0