Source code for ard.cost.approximate_turbine_spacing

import openmdao.api as om


[docs] class SpacingApproximations(om.ExplicitComponent): """ OpenMDAO component to calculate approximations for turbine spacing based on the total length of cables and the number of wind turbines. Inputs ------ total_length_cables : float Total length of cables in meters. Outputs ------- primary_turbine_spacing_diameters : float Approximation of spacing between turbines in diameters for use in cost estimation using LandBOSSE. secondary_spacing_diameters : float Approximation of spacing between rows of turbines in diameters for use in cost estimation using LandBOSSE. Options ------- modeling_options : dict Dictionary of modeling options including at least ["farm"]["N_turbines"] and ["turbine"]["geometry"]["diameter_rotor"] """
[docs] def initialize(self): """Initialize the component and declare options.""" self.options.declare( "modeling_options", types=dict, desc="Ard modeling options" )
[docs] def setup(self): """Set up the inputs and outputs.""" self.add_input( "total_length_cables", val=0.0, units="m", desc="Total cable length" ) self.add_output( "primary_turbine_spacing_diameters", val=0.0, units=None, desc="Turbine spacing", ) self.add_output( "secondary_turbine_spacing_diameters", val=0.0, units=None, desc="Row spacing", )
[docs] def setup_partials(self): """Declare partial derivatives.""" N_turbines = self.options["modeling_options"]["layout"]["N_turbines"] rotor_diameter_m = self.options["modeling_options"]["windIO_plant"][ "wind_farm" ]["turbine"]["rotor_diameter"] # Partial derivative of primary_turbine_spacing_diameters w.r.t. total_length_cables are constant const_partial = 1.0 / (rotor_diameter_m * N_turbines) self.declare_partials( "primary_turbine_spacing_diameters", "total_length_cables", val=const_partial, ) self.declare_partials( "secondary_turbine_spacing_diameters", "total_length_cables", val=const_partial, )
[docs] def compute(self, inputs, outputs): """Compute the turbine spacing.""" total_length_cables = inputs["total_length_cables"] N_turbines = self.options["modeling_options"]["layout"]["N_turbines"] rotor_diameter_m = self.options["modeling_options"]["windIO_plant"][ "wind_farm" ]["turbine"]["rotor_diameter"] # Calculate turbine and row spacing outputs["primary_turbine_spacing_diameters"] = total_length_cables / ( rotor_diameter_m * N_turbines ) outputs["secondary_turbine_spacing_diameters"] = total_length_cables / ( rotor_diameter_m * N_turbines )
[docs] def compute_partials(self, inputs, partials): "partials are constant, so no calculations needed here" pass