def configure(self): # select components self.add('tower_RNA', Tower_RNA()) self.add('spar', Spar()) self.add('mooring', Mooring()) # workflow self.driver.workflow.add(['tower_RNA', 'mooring', 'spar']) # connect inputs self.connect('tower_base_outer_diameter', 'tower_RNA.base_outer_diameter') self.connect('tower_top_outer_diameter', 'tower_RNA.top_outer_diameter') self.connect('tower_length', 'tower_RNA.length') self.connect('air_density', ['tower_RNA.air_density', 'spar.air_density']) self.connect( 'wind_reference_speed', ['tower_RNA.wind_reference_speed', 'spar.wind_reference_speed']) self.connect( 'wind_reference_height', ['tower_RNA.wind_reference_height', 'spar.wind_reference_height']) self.connect('gust_factor', ['tower_RNA.gust_factor', 'spar.gust_factor']) self.connect('alpha', ['tower_RNA.alpha', 'spar.alpha']) self.connect('spar_elevations', [ 'tower_RNA.spar_elevations', 'mooring.spar_elevations', 'spar.elevations' ]) self.connect('example_turbine_size', 'tower_RNA.example_turbine_size') self.connect('rotor_diameter', 'tower_RNA.rotor_diameter') self.connect('RNA_center_of_gravity_x', [ 'tower_RNA.RNA_center_of_gravity_x', 'spar.RNA_center_of_gravity_x' ]) self.connect('RNA_center_of_gravity_y', 'tower_RNA.RNA_center_of_gravity_y') self.connect('cut_out_speed', 'tower_RNA.cut_out_speed') self.connect('tower_mass', ['tower_RNA.tower_mass', 'spar.tower_mass']) self.connect('RNA_mass', ['tower_RNA.RNA_mass', 'spar.RNA_mass']) self.connect('fairlead_depth', 'mooring.fairlead_depth') self.connect('scope_ratio', 'mooring.scope_ratio') self.connect('pretension_percent', 'mooring.pretension_percent') self.connect('mooring_diameter', 'mooring.mooring_diameter') self.connect('number_of_mooring_lines', 'mooring.number_of_mooring_lines') self.connect('water_depth', ['mooring.water_depth', 'spar.water_depth']) self.connect('mooring_type', 'mooring.mooring_type') self.connect('anchor_type', 'mooring.anchor_type') self.connect('fairlead_offset_from_shell', 'mooring.fairlead_offset_from_shell') self.connect('user_MBL', 'mooring.user_MBL') self.connect('user_WML', 'mooring.user_WML') self.connect('user_AE_storm', 'mooring.user_AE_storm') self.connect('user_MCPL', 'mooring.user_MCPL') self.connect('user_anchor_cost', 'mooring.user_anchor_cost') self.connect('misc_cost_factor', 'mooring.misc_cost_factor') self.connect('number_of_discretizations', 'mooring.number_of_discretizations') self.connect('spar_outer_diameter', ['mooring.spar_outer_diameter', 'spar.outer_diameter']) self.connect('water_density', ['mooring.water_density', 'spar.water_density']) self.connect('wall_thickness', 'spar.wall_thickness') self.connect('number_of_rings', 'spar.number_of_rings') self.connect('neutral_axis', 'spar.neutral_axis') #self.connect('stiffener_curve_fit','spar.stiffener_curve_fit') self.connect('stiffener_index', 'spar.stiffener_index') self.connect('number_of_sections', 'spar.number_of_sections') self.connect('bulk_head', 'spar.bulk_head') self.connect('straight_col_cost', 'spar.straight_col_cost') self.connect('tapered_col_cost', 'spar.tapered_col_cost') self.connect('outfitting_cost', 'spar.outfitting_cost') self.connect('ballast_cost', 'spar.ballast_cost') self.connect('gravity', 'spar.gravity') self.connect('load_condition', 'spar.load_condition') self.connect('significant_wave_height', 'spar.significant_wave_height') self.connect('significant_wave_period', 'spar.significant_wave_period') self.connect('material_density', 'spar.material_density') self.connect('E', 'spar.E') self.connect('nu', 'spar.nu') self.connect('yield_stress', 'spar.yield_stress') self.connect('shell_mass_factor', 'spar.shell_mass_factor') self.connect('bulkhead_mass_factor', 'spar.bulkhead_mass_factor') self.connect('ring_mass_factor', 'spar.ring_mass_factor') self.connect('outfitting_factor', 'spar.outfitting_factor') self.connect('spar_mass_factor', 'spar.spar_mass_factor') self.connect('permanent_ballast_height', 'spar.permanent_ballast_height') self.connect('fixed_ballast_height', 'spar.fixed_ballast_height') self.connect('permanent_ballast_density', 'spar.permanent_ballast_density') self.connect('fixed_ballast_density', 'spar.fixed_ballast_density') self.connect('offset_amplification_factor', 'spar.offset_amplification_factor') # connect outputs to inputs self.connect('tower_RNA.RNA_keel_to_CG', 'spar.RNA_keel_to_CG') self.connect('tower_RNA.tower_center_of_gravity', 'spar.tower_center_of_gravity') self.connect('tower_RNA.tower_wind_force', 'spar.tower_wind_force') self.connect('tower_RNA.RNA_wind_force', 'spar.RNA_wind_force') self.connect('mooring.mooring_total_cost', 'spar.mooring_total_cost') self.connect('mooring.mooring_keel_to_CG', 'spar.mooring_keel_to_CG') self.connect('mooring.mooring_vertical_load', 'spar.mooring_vertical_load') self.connect('mooring.mooring_horizontal_stiffness', 'spar.mooring_horizontal_stiffness') self.connect('mooring.mooring_vertical_stiffness', 'spar.mooring_vertical_stiffness') self.connect('mooring.sum_forces_x', 'spar.sum_forces_x') self.connect('mooring.offset_x', 'spar.offset_x') self.connect('mooring.damaged_mooring', 'spar.damaged_mooring') self.connect('mooring.intact_mooring', 'spar.intact_mooring') self.connect('mooring.mooring_mass', 'spar.mooring_mass')
def configure(self): """Select component instances.""" self.add('tower_RNA', Tower_RNA()) self.add('spar', Spar()) self.add('mooring', Mooring()) """Define iteration hierarchy.""" self.driver.workflow.add(['tower_RNA', 'mooring', 'spar']) """Create a variable in the assembly and connects it to an internal component variable. If the variable is used again in a different component instance, then it is manually connected.""" self.create_passthrough('tower_RNA.base_outer_diameter', 'tower_base_outer_diameter') self.create_passthrough('tower_RNA.top_outer_diameter', 'tower_top_outer_diameter') self.create_passthrough('tower_RNA.length', 'tower_length') self.create_passthrough('tower_RNA.example_turbine_size', 'example_turbine_size') self.create_passthrough('tower_RNA.RNA_center_of_gravity_y', 'RNA_center_of_gravity_y') self.create_passthrough('spar.wall_thickness', 'wall_thickness') self.create_passthrough('tower_RNA.rotor_diameter', 'rotor_diameter') self.create_passthrough('tower_RNA.cut_out_speed', 'cut_out_speed') self.create_passthrough('tower_RNA.air_density', 'air_density') self.connect('air_density', 'spar.air_density') self.create_passthrough('spar.wind_reference_speed', 'wind_reference_speed') self.connect('wind_reference_speed', 'tower_RNA.wind_reference_speed') self.create_passthrough('spar.wind_reference_height', 'wind_reference_height') self.connect('wind_reference_height', 'tower_RNA.wind_reference_height') self.create_passthrough('spar.gust_factor', 'gust_factor') self.connect('gust_factor', 'tower_RNA.gust_factor') self.create_passthrough('spar.alpha', 'alpha') self.connect('alpha', 'tower_RNA.alpha') self.create_passthrough('spar.RNA_center_of_gravity_x', 'RNA_center_of_gravity_x') self.connect('RNA_center_of_gravity_x', 'tower_RNA.RNA_center_of_gravity_x') self.create_passthrough('spar.tower_mass', 'tower_mass') self.connect('tower_mass', 'tower_RNA.tower_mass') self.create_passthrough('spar.RNA_mass', 'RNA_mass') self.connect('RNA_mass', 'tower_RNA.RNA_mass') self.create_passthrough('spar.stiffener_index', 'stiffener_index') self.create_passthrough('spar.number_of_sections', 'number_of_sections') self.create_passthrough('spar.bulk_head', 'bulk_head') self.create_passthrough('spar.number_of_rings', 'number_of_rings') self.create_passthrough('spar.neutral_axis', 'neutral_axis') self.create_passthrough('spar.straight_col_cost', 'straight_col_cost') self.create_passthrough('spar.tapered_col_cost', 'tapered_col_cost') self.create_passthrough('spar.outfitting_cost', 'outfitting_cost') self.create_passthrough('spar.ballast_cost', 'ballast_cost') self.create_passthrough('spar.gravity', 'gravity') self.create_passthrough('spar.load_condition', 'load_condition') self.create_passthrough('spar.significant_wave_height', 'significant_wave_height') self.create_passthrough('spar.significant_wave_period', 'significant_wave_period') self.create_passthrough('spar.material_density', 'material_density') self.create_passthrough('spar.E', 'E') self.create_passthrough('spar.nu', 'nu') self.create_passthrough('spar.yield_stress', 'yield_stress') self.create_passthrough('spar.shell_mass_factor', 'shell_mass_factor') self.create_passthrough('spar.bulkhead_mass_factor', 'bulkhead_mass_factor') self.create_passthrough('spar.ring_mass_factor', 'ring_mass_factor') self.create_passthrough('spar.outfitting_factor', 'outfitting_factor') self.create_passthrough('spar.spar_mass_factor', 'spar_mass_factor') self.create_passthrough('spar.permanent_ballast_height', 'permanent_ballast_height') self.create_passthrough('spar.fixed_ballast_height', 'fixed_ballast_height') self.create_passthrough('spar.permanent_ballast_density', 'permanent_ballast_density') self.create_passthrough('spar.fixed_ballast_density', 'fixed_ballast_density') self.create_passthrough('spar.offset_amplification_factor', 'offset_amplification_factor') self.create_passthrough('spar.water_density', 'water_density') self.create_passthrough('spar.elevations', 'spar_elevations') self.create_passthrough('spar.outer_diameter', 'spar_outer_diameter') self.create_passthrough('spar.water_depth', 'water_depth') # self.create_passthrough('spar.stiffener_curve_fit', 'stiffener_curve_fit') #mooring connections self.create_passthrough('mooring.fairlead_depth', 'fairlead_depth') self.connect('spar_elevations', ['tower_RNA.spar_elevations', 'mooring.spar_elevations']) self.connect('spar_outer_diameter', 'mooring.spar_outer_diameter') self.create_passthrough('mooring.scope_ratio', 'scope_ratio') self.create_passthrough('mooring.pretension_percent', 'pretension_percent') self.create_passthrough('mooring.mooring_diameter', 'mooring_diameter') self.create_passthrough('mooring.number_of_mooring_lines', 'number_of_mooring_lines') self.connect('water_depth', 'mooring.water_depth') self.create_passthrough('mooring.mooring_type', 'mooring_type') self.create_passthrough('mooring.anchor_type', 'anchor_type') self.create_passthrough('mooring.fairlead_offset_from_shell', 'fairlead_offset_from_shell') self.create_passthrough('mooring.user_MBL', 'user_MBL') self.create_passthrough('mooring.user_WML', 'user_WML') self.create_passthrough('mooring.user_AE_storm', 'user_AE_storm') self.create_passthrough('mooring.user_MCPL', 'user_MCPL') self.create_passthrough('mooring.user_anchor_cost', 'user_anchor_cost') self.create_passthrough('mooring.misc_cost_factor', 'misc_cost_factor') self.create_passthrough('mooring.number_of_discretizations', 'number_of_discretizations') self.connect('water_density', 'mooring.water_density') """Connect outputs to inputs.""" self.connect('tower_RNA.RNA_keel_to_CG', 'spar.RNA_keel_to_CG') self.connect('tower_RNA.tower_center_of_gravity', 'spar.tower_center_of_gravity') self.connect('tower_RNA.tower_wind_force', 'spar.tower_wind_force') self.connect('tower_RNA.RNA_wind_force', 'spar.RNA_wind_force') #mooring connections self.connect('mooring.mooring_total_cost', 'spar.mooring_total_cost') self.connect('mooring.mooring_keel_to_CG', 'spar.mooring_keel_to_CG') self.connect('mooring.mooring_vertical_load', 'spar.mooring_vertical_load') self.connect('mooring.mooring_horizontal_stiffness', 'spar.mooring_horizontal_stiffness') self.connect('mooring.mooring_vertical_stiffness', 'spar.mooring_vertical_stiffness') self.connect('mooring.sum_forces_x', 'spar.sum_forces_x') self.connect('mooring.offset_x', 'spar.offset_x') self.connect('mooring.damaged_mooring', 'spar.damaged_mooring') self.connect('mooring.intact_mooring', 'spar.intact_mooring') self.connect('mooring.mooring_mass', 'spar.mooring_mass')
def configure(self): if OPTIMIZE: self.add('driver', COBYLAdriver()) self.driver.maxfun = 20 # select components self.add('tower_RNA', Tower_RNA()) self.add('spar', Spar()) self.add('mooring', Mooring()) # workflow self.driver.workflow.add(['tower_RNA', 'mooring', 'spar']) # connect inputs self.connect('tower_base_outer_diameter', 'tower_RNA.base_outer_diameter') self.connect('tower_top_outer_diameter', 'tower_RNA.top_outer_diameter') self.connect('tower_length', 'tower_RNA.length') self.connect('air_density', ['tower_RNA.air_density', 'spar.air_density']) self.connect( 'wind_reference_speed', ['tower_RNA.wind_reference_speed', 'spar.wind_reference_speed']) self.connect( 'wind_reference_height', ['tower_RNA.wind_reference_height', 'spar.wind_reference_height']) self.connect('gust_factor', ['tower_RNA.gust_factor', 'spar.gust_factor']) self.connect('alpha', ['tower_RNA.alpha', 'spar.alpha']) self.connect('spar_elevations', [ 'tower_RNA.spar_elevations', 'mooring.spar_elevations', 'spar.elevations' ]) self.connect('example_turbine_size', 'tower_RNA.example_turbine_size') self.connect('rotor_diameter', 'tower_RNA.rotor_diameter') self.connect('RNA_center_of_gravity_x', [ 'tower_RNA.RNA_center_of_gravity_x', 'spar.RNA_center_of_gravity_x' ]) self.connect('RNA_center_of_gravity_y', 'tower_RNA.RNA_center_of_gravity_y') self.connect('cut_out_speed', 'tower_RNA.cut_out_speed') self.connect('tower_mass', ['tower_RNA.tower_mass', 'spar.tower_mass']) self.connect('RNA_mass', ['tower_RNA.RNA_mass', 'spar.RNA_mass']) self.connect('fairlead_depth', 'mooring.fairlead_depth') self.connect('scope_ratio', 'mooring.scope_ratio') self.connect('pretension_percent', 'mooring.pretension_percent') self.connect('mooring_diameter', 'mooring.mooring_diameter') self.connect('number_of_mooring_lines', 'mooring.number_of_mooring_lines') self.connect('water_depth', ['mooring.water_depth', 'spar.water_depth']) self.connect('mooring_type', 'mooring.mooring_type') self.connect('anchor_type', 'mooring.anchor_type') self.connect('fairlead_offset_from_shell', 'mooring.fairlead_offset_from_shell') self.connect('user_MBL', 'mooring.user_MBL') self.connect('user_WML', 'mooring.user_WML') self.connect('user_AE_storm', 'mooring.user_AE_storm') self.connect('user_MCPL', 'mooring.user_MCPL') self.connect('user_anchor_cost', 'mooring.user_anchor_cost') self.connect('misc_cost_factor', 'mooring.misc_cost_factor') self.connect('number_of_discretizations', 'mooring.number_of_discretizations') self.connect('spar_outer_diameter', ['mooring.spar_outer_diameter', 'spar.outer_diameter']) self.connect('water_density', ['mooring.water_density', 'spar.water_density']) self.connect('wall_thickness', 'spar.wall_thickness') self.connect('number_of_rings', 'spar.number_of_rings') self.connect('neutral_axis', 'spar.neutral_axis') #self.connect('stiffener_curve_fit','spar.stiffener_curve_fit') self.connect('stiffener_index', 'spar.stiffener_index') self.connect('number_of_sections', 'spar.number_of_sections') self.connect('bulk_head', 'spar.bulk_head') self.connect('straight_col_cost', 'spar.straight_col_cost') self.connect('tapered_col_cost', 'spar.tapered_col_cost') self.connect('outfitting_cost', 'spar.outfitting_cost') self.connect('ballast_cost', 'spar.ballast_cost') self.connect('gravity', 'spar.gravity') self.connect('load_condition', 'spar.load_condition') self.connect('significant_wave_height', 'spar.significant_wave_height') self.connect('significant_wave_period', 'spar.significant_wave_period') self.connect('material_density', 'spar.material_density') self.connect('E', 'spar.E') self.connect('nu', 'spar.nu') self.connect('yield_stress', 'spar.yield_stress') self.connect('shell_mass_factor', 'spar.shell_mass_factor') self.connect('bulkhead_mass_factor', 'spar.bulkhead_mass_factor') self.connect('ring_mass_factor', 'spar.ring_mass_factor') self.connect('outfitting_factor', 'spar.outfitting_factor') self.connect('spar_mass_factor', 'spar.spar_mass_factor') self.connect('permanent_ballast_height', 'spar.permanent_ballast_height') self.connect('fixed_ballast_height', 'spar.fixed_ballast_height') self.connect('permanent_ballast_density', 'spar.permanent_ballast_density') self.connect('fixed_ballast_density', 'spar.fixed_ballast_density') self.connect('offset_amplification_factor', 'spar.offset_amplification_factor') # connect outputs to inputs self.connect('tower_RNA.RNA_keel_to_CG', 'spar.RNA_keel_to_CG') self.connect('tower_RNA.tower_center_of_gravity', 'spar.tower_center_of_gravity') self.connect('tower_RNA.tower_wind_force', 'spar.tower_wind_force') self.connect('tower_RNA.RNA_wind_force', 'spar.RNA_wind_force') self.connect('mooring.mooring_total_cost', 'spar.mooring_total_cost') self.connect('mooring.mooring_keel_to_CG', 'spar.mooring_keel_to_CG') self.connect('mooring.mooring_vertical_load', 'spar.mooring_vertical_load') self.connect('mooring.mooring_horizontal_stiffness', 'spar.mooring_horizontal_stiffness') self.connect('mooring.mooring_vertical_stiffness', 'spar.mooring_vertical_stiffness') self.connect('mooring.sum_forces_x', 'spar.sum_forces_x') self.connect('mooring.offset_x', 'spar.offset_x') self.connect('mooring.damaged_mooring', 'spar.damaged_mooring') self.connect('mooring.intact_mooring', 'spar.intact_mooring') self.connect('mooring.mooring_mass', 'spar.mooring_mass') if OPTIMIZE: # objective self.driver.add_objective('spar.spar_mass') # design variables self.driver.add_parameter('neutral_axis', low=10., high=41.9, scaler=0.01) #self.driver.add_parameter('number_of_rings[0]',low=1,high=5) self.driver.add_parameter('number_of_rings[1]', low=1, high=10) self.driver.add_parameter('number_of_rings[2]', low=1, high=10) self.driver.add_parameter('number_of_rings[3]', low=1, high=50) self.driver.add_parameter('wall_thickness[0]', low=1., high=10., scaler=0.01) self.driver.add_parameter('wall_thickness[1]', low=1., high=10., scaler=0.01) self.driver.add_parameter('wall_thickness[2]', low=1., high=10., scaler=0.01) self.driver.add_parameter('wall_thickness[3]', low=10., high=100., scaler=0.001) self.driver.add_parameter('scope_ratio', low=15., high=45., scaler=0.1) self.driver.add_parameter('pretension_percent', low=2.5, high=10.) self.driver.add_parameter('mooring_diameter', low=30., high=100., scaler=0.001) self.driver.add_parameter('fixed_ballast_height', low=30., high=100., scaler=0.1) self.driver.add_parameter('permanent_ballast_height', low=30., high=100., scaler=0.1) # Constraints self.driver.add_constraint('spar.water_ballast_height < 7.5') self.driver.add_constraint('spar.water_ballast_height > 5.5') self.driver.add_constraint('spar.flange_compactness < 1.') self.driver.add_constraint('spar.web_compactness < 1.') self.driver.add_constraint('spar.VAL[0] < 0.99') self.driver.add_constraint('spar.VAL[1] < 0.99') self.driver.add_constraint('spar.VAL[2] < 0.99') self.driver.add_constraint('spar.VAL[3] < 0.99') self.driver.add_constraint('spar.VAG[0] < 0.99') self.driver.add_constraint('spar.VAG[1] < 0.99') self.driver.add_constraint('spar.VAG[2] < 0.99') self.driver.add_constraint('spar.VAG[3] < 0.99') self.driver.add_constraint('spar.VEL[0] < 0.99') self.driver.add_constraint('spar.VEL[1] < 0.99') self.driver.add_constraint('spar.VEL[2] < 0.99') self.driver.add_constraint('spar.VEL[3] < 0.99') self.driver.add_constraint('spar.VEG[0] < 0.99') self.driver.add_constraint('spar.VEG[1] < 0.99') self.driver.add_constraint('spar.VEG[2] < 0.99') self.driver.add_constraint('spar.VEG[3] < 0.99') self.driver.add_constraint('spar.platform_stability_check < 1.') self.driver.add_constraint('spar.heel_angle <= 6.') self.driver.add_constraint('spar.min_offset_unity < 1.0') self.driver.add_constraint('spar.max_offset_unity < 1.0')
def configure(self): """Creates a new Assembly containing a chain of Tower_RNA, Spar and Mooring components, as well as a constained optimizer.""" """Create optimizer instance.""" self.add('driver', COBYLAdriver()) self.driver.maxfun = 100000 """Select component instances.""" self.add('tower_RNA', Tower_RNA()) self.add('spar', Spar()) self.add('mooring', Mooring()) """Define iteration hierarchy.""" self.driver.workflow.add(['tower_RNA', 'mooring', 'spar']) """Create a variable in the assembly and connects it to an internal component variable. If the variable is used again in a different component instance, then it is manually connected.""" self.create_passthrough('tower_RNA.base_outer_diameter', 'tower_base_outer_diameter') self.create_passthrough('tower_RNA.top_outer_diameter', 'tower_top_outer_diameter') self.create_passthrough('tower_RNA.length', 'tower_length') self.create_passthrough('tower_RNA.example_turbine_size', 'example_turbine_size') self.create_passthrough('tower_RNA.RNA_center_of_gravity_y', 'RNA_center_of_gravity_y') self.create_passthrough('spar.wall_thickness', 'wall_thickness') self.create_passthrough('tower_RNA.rotor_diameter', 'rotor_diameter') self.create_passthrough('tower_RNA.cut_out_speed', 'cut_out_speed') self.create_passthrough('tower_RNA.air_density', 'air_density') self.connect('air_density', 'spar.air_density') self.create_passthrough('spar.wind_reference_speed', 'wind_reference_speed') self.connect('wind_reference_speed', 'tower_RNA.wind_reference_speed') self.create_passthrough('spar.wind_reference_height', 'wind_reference_height') self.connect('wind_reference_height', 'tower_RNA.wind_reference_height') self.create_passthrough('spar.gust_factor', 'gust_factor') self.connect('gust_factor', 'tower_RNA.gust_factor') self.create_passthrough('spar.alpha', 'alpha') self.connect('alpha', 'tower_RNA.alpha') self.create_passthrough('spar.RNA_center_of_gravity_x', 'RNA_center_of_gravity_x') self.connect('RNA_center_of_gravity_x', 'tower_RNA.RNA_center_of_gravity_x') self.create_passthrough('spar.tower_mass', 'tower_mass') self.connect('tower_mass', 'tower_RNA.tower_mass') self.create_passthrough('spar.RNA_mass', 'RNA_mass') self.connect('RNA_mass', 'tower_RNA.RNA_mass') self.create_passthrough('spar.stiffener_index', 'stiffener_index') self.create_passthrough('spar.number_of_sections', 'number_of_sections') self.create_passthrough('spar.bulk_head', 'bulk_head') self.create_passthrough('spar.number_of_rings', 'number_of_rings') self.create_passthrough('spar.neutral_axis', 'neutral_axis') self.create_passthrough('spar.straight_col_cost', 'straight_col_cost') self.create_passthrough('spar.tapered_col_cost', 'tapered_col_cost') self.create_passthrough('spar.outfitting_cost', 'outfitting_cost') self.create_passthrough('spar.ballast_cost', 'ballast_cost') self.create_passthrough('spar.gravity', 'gravity') self.create_passthrough('spar.load_condition', 'load_condition') self.create_passthrough('spar.significant_wave_height', 'significant_wave_height') self.create_passthrough('spar.significant_wave_period', 'significant_wave_period') self.create_passthrough('spar.material_density', 'material_density') self.create_passthrough('spar.E', 'E') self.create_passthrough('spar.nu', 'nu') self.create_passthrough('spar.yield_stress', 'yield_stress') self.create_passthrough('spar.shell_mass_factor', 'shell_mass_factor') self.create_passthrough('spar.bulkhead_mass_factor', 'bulkhead_mass_factor') self.create_passthrough('spar.ring_mass_factor', 'ring_mass_factor') self.create_passthrough('spar.outfitting_factor', 'outfitting_factor') self.create_passthrough('spar.spar_mass_factor', 'spar_mass_factor') self.create_passthrough('spar.permanent_ballast_height', 'permanent_ballast_height') self.create_passthrough('spar.fixed_ballast_height', 'fixed_ballast_height') self.create_passthrough('spar.permanent_ballast_density', 'permanent_ballast_density') self.create_passthrough('spar.fixed_ballast_density', 'fixed_ballast_density') self.create_passthrough('spar.offset_amplification_factor', 'offset_amplification_factor') self.create_passthrough('spar.water_density', 'water_density') self.create_passthrough('spar.elevations', 'spar_elevations') self.create_passthrough('spar.outer_diameter', 'spar_outer_diameter') self.create_passthrough('spar.water_depth', 'water_depth') # self.create_passthrough('spar.stiffener_curve_fit', 'stiffener_curve_fit') #mooring connections self.create_passthrough('mooring.fairlead_depth', 'fairlead_depth') self.connect('spar_elevations', ['tower_RNA.spar_elevations', 'mooring.spar_elevations']) self.connect('spar_outer_diameter', 'mooring.spar_outer_diameter') self.create_passthrough('mooring.scope_ratio', 'scope_ratio') self.create_passthrough('mooring.pretension_percent', 'pretension_percent') self.create_passthrough('mooring.mooring_diameter', 'mooring_diameter') self.create_passthrough('mooring.number_of_mooring_lines', 'number_of_mooring_lines') self.connect('water_depth', 'mooring.water_depth') self.create_passthrough('mooring.mooring_type', 'mooring_type') self.create_passthrough('mooring.anchor_type', 'anchor_type') self.create_passthrough('mooring.fairlead_offset_from_shell', 'fairlead_offset_from_shell') self.create_passthrough('mooring.user_MBL', 'user_MBL') self.create_passthrough('mooring.user_WML', 'user_WML') self.create_passthrough('mooring.user_AE_storm', 'user_AE_storm') self.create_passthrough('mooring.user_MCPL', 'user_MCPL') self.create_passthrough('mooring.user_anchor_cost', 'user_anchor_cost') self.create_passthrough('mooring.misc_cost_factor', 'misc_cost_factor') self.create_passthrough('mooring.number_of_discretizations', 'number_of_discretizations') self.connect('water_density', 'mooring.water_density') """Connect outputs to inputs.""" self.connect('tower_RNA.RNA_keel_to_CG', 'spar.RNA_keel_to_CG') self.connect('tower_RNA.tower_center_of_gravity', 'spar.tower_center_of_gravity') self.connect('tower_RNA.tower_wind_force', 'spar.tower_wind_force') self.connect('tower_RNA.RNA_wind_force', 'spar.RNA_wind_force') #mooring connections self.connect('mooring.mooring_total_cost', 'spar.mooring_total_cost') self.connect('mooring.mooring_keel_to_CG', 'spar.mooring_keel_to_CG') self.connect('mooring.mooring_vertical_load', 'spar.mooring_vertical_load') self.connect('mooring.mooring_horizontal_stiffness', 'spar.mooring_horizontal_stiffness') self.connect('mooring.mooring_vertical_stiffness', 'spar.mooring_vertical_stiffness') self.connect('mooring.sum_forces_x', 'spar.sum_forces_x') self.connect('mooring.offset_x', 'spar.offset_x') self.connect('mooring.damaged_mooring', 'spar.damaged_mooring') self.connect('mooring.intact_mooring', 'spar.intact_mooring') self.connect('mooring.mooring_mass', 'spar.mooring_mass') """Design variables by adding a range of validity for certain variables.""" self.driver.add_parameter('neutral_axis', low=10., high=41.9, scaler=0.01) #self.driver.add_parameter('number_of_rings[0]',low=1,high=5) self.driver.add_parameter('number_of_rings[1]', low=1, high=10) self.driver.add_parameter('number_of_rings[2]', low=1, high=10) self.driver.add_parameter('number_of_rings[3]', low=1, high=50) self.driver.add_parameter('wall_thickness[0]', low=1., high=10., scaler=0.01) self.driver.add_parameter('wall_thickness[1]', low=1., high=10., scaler=0.01) self.driver.add_parameter('wall_thickness[2]', low=1., high=10., scaler=0.01) self.driver.add_parameter('wall_thickness[3]', low=10., high=100., scaler=0.001) self.driver.add_parameter('scope_ratio', low=15., high=45., scaler=0.1) self.driver.add_parameter('pretension_percent', low=2.5, high=10.) self.driver.add_parameter('mooring_diameter', low=30., high=100., scaler=0.001) self.driver.add_parameter('fixed_ballast_height', low=30., high=100., scaler=0.1) self.driver.add_parameter('permanent_ballast_height', low=30., high=100., scaler=0.1) """Specify objective function (what you want to minimize).""" self.driver.add_objective('spar.spar_mass', name='spar mass') """Add constraints to the driver.""" self.driver.add_constraint('spar.water_ballast_height < 7.5') self.driver.add_constraint('spar.water_ballast_height > 5.5') self.driver.add_constraint('spar.flange_compactness < 1.') self.driver.add_constraint('spar.web_compactness < 1.') self.driver.add_constraint('spar.VAL[0] < 0.99') self.driver.add_constraint('spar.VAL[1] < 0.99') self.driver.add_constraint('spar.VAL[2] < 0.99') self.driver.add_constraint('spar.VAL[3] < 0.99') self.driver.add_constraint('spar.VAG[0] < 0.99') self.driver.add_constraint('spar.VAG[1] < 0.99') self.driver.add_constraint('spar.VAG[2] < 0.99') self.driver.add_constraint('spar.VAG[3] < 0.99') self.driver.add_constraint('spar.VEL[0] < 0.99') self.driver.add_constraint('spar.VEL[1] < 0.99') self.driver.add_constraint('spar.VEL[2] < 0.99') self.driver.add_constraint('spar.VEL[3] < 0.99') self.driver.add_constraint('spar.VEG[0] < 0.99') self.driver.add_constraint('spar.VEG[1] < 0.99') self.driver.add_constraint('spar.VEG[2] < 0.99') self.driver.add_constraint('spar.VEG[3] < 0.99') self.driver.add_constraint('spar.platform_stability_check < 1.') self.driver.add_constraint('spar.heel_angle <= 6.') self.driver.add_constraint('spar.min_offset_unity < 1.0') self.driver.add_constraint('spar.max_offset_unity < 1.0')