def run_hopp_calc(Site, scenario_description, bos_details, total_hybrid_plant_capacity_mw, solar_size_mw, wind_size_mw, nameplate_mw, interconnection_size_mw, load_resource_from_file, ppa_price, results_dir): """ run_hopp_calc Establishes sizing models, creates a wind or solar farm based on the desired sizes, and runs SAM model calculations for the specified inputs. save_outputs contains a dictionary of all results for the hopp calculation. :param scenario_description: Project scenario - 'greenfield' or 'solar addition'. :param bos_details: contains bos details including type of analysis to conduct (cost/mw, json lookup, HybridBOSSE). :param total_hybrid_plant_capacity_mw: capacity in MW of hybrid plant. :param solar_size_mw: capacity in MW of solar component of plant. :param wind_size_mw: capacity in MW of wind component of plant. :param nameplate_mw: nameplate capacity of total plant. :param interconnection_size_mw: interconnection size in MW. :param load_resource_from_file: flag determining whether resource is loaded directly from file or through interpolation routine. :param ppa_price: PPA price in USD($) :return: collection of outputs from SAM and hybrid-specific calculations (includes e.g. AEP, IRR, LCOE), plus wind and solar filenames used (save_outputs) """ # Get resource data if load_resource_from_file: pass else: Site[ 'resource_filename_solar'] = "" # Unsetting resource filename to force API download of wind resource Site[ 'resource_filename_wind'] = "" # Unsetting resource filename to force API download of solar resource site = SiteInfo(Site, solar_resource_file=sample_site['resource_filename_solar'], wind_resource_file=sample_site['resource_filename_wind']) #TODO: Incorporate this in SiteInfo # if 'roll_tz' in Site.keys(): # site.solar_resource.roll_timezone(Site['roll_tz'], Site['roll_tz']) # Set up technology and cost model info technologies = { 'solar': solar_size_mw, # mw system capacity 'wind': wind_size_mw, # mw system capacity 'grid': interconnection_size_mw } # mw interconnect # Create model hybrid_plant = HybridSimulation(technologies, site, interconnect_kw=interconnection_size_mw * 1000) hybrid_plant.setup_cost_calculator( create_cost_calculator(interconnection_size_mw, bos_details['BOSSource'], scenario_description)) hybrid_plant.ppa_price = ppa_price hybrid_plant.discount_rate = 6.4 hybrid_plant.solar.system_capacity_kw = solar_size_mw * 1000 hybrid_plant.wind.system_capacity_by_num_turbines(wind_size_mw * 1000) actual_solar_pct = hybrid_plant.solar.system_capacity_kw / \ (hybrid_plant.solar.system_capacity_kw + hybrid_plant.wind.system_capacity_kw) logger.info("Run with solar percent {}".format(actual_solar_pct)) hybrid_plant.simulate() outputs = hybrid_plant.hybrid_outputs() for k, v in outputs.items(): outputs[k] = [v] return outputs, site.wind_resource.filename, site.solar_resource.filename
def run_hopp_calc(Site, scenario_description, bos_details, total_hybrid_plant_capacity_mw, solar_size_mw, wind_size_mw, nameplate_mw, interconnection_size_mw, load_resource_from_file, ppa_price, results_dir): """ run_hopp_calc Establishes sizing models, creates a wind or solar farm based on the desired sizes, and runs SAM model calculations for the specified inputs. save_outputs contains a dictionary of all results for the hopp calculation. :param scenario_description: Project scenario - 'greenfield' or 'solar addition'. :param bos_details: contains bos details including type of analysis to conduct (cost/mw, json lookup, HybridBOSSE). :param total_hybrid_plant_capacity_mw: capacity in MW of hybrid plant. :param solar_size_mw: capacity in MW of solar component of plant. :param wind_size_mw: capacity in MW of wind component of plant. :param nameplate_mw: nameplate capacity of total plant. :param interconnection_size_mw: interconnection size in MW. :param load_resource_from_file: flag determining whether resource is loaded directly from file or through interpolation routine. :param ppa_price: PPA price in USD($) :return: collection of outputs from SAM and hybrid-specific calculations (includes e.g. AEP, IRR, LCOE), plus wind and solar filenames used (save_outputs) """ # Get resource data # sample_site['lat'] = Site['Lat'] # sample_site['lon'] = Site['Lon'] # # site = SiteInfo(sample_site, solar_resource_file=Site['resource_filename_solar'], # # wind_resource_file=Site['resource_filename_wind']) if load_resource_from_file: pass else: Site['resource_filename_solar'] = "" # Unsetting resource filename to force API download of wind resource Site['resource_filename_wind'] = "" # Unsetting resource filename to force API download of solar resource site = SiteInfo(Site) if 'roll_tz' in Site.keys(): site.solar_resource.roll_timezone(Site['roll_tz'], Site['roll_tz']) # Set up technology and cost model info technologies = {'solar': solar_size_mw, # mw system capacity 'wind': wind_size_mw # mw system capacity } # Create model hybrid_plant = HybridSimulation(technologies, site, interconnect_kw=interconnection_size_mw * 1000) # hybrid_plant.setup_cost_calculator(create_cost_calculator(bos_cost_source='boslookup', interconnection_mw=interconnection_size_mw)) hybrid_plant.setup_cost_calculator(create_cost_calculator(bos_cost_source=bos_details['BOSSource'], interconnection_mw=interconnection_size_mw, modify_costs=bos_details['Modify Costs'], cost_reductions=bos_details, wind_installed_cost_mw=1696000, solar_installed_cost_mw=1088600, storage_installed_cost_mw=0, storage_installed_cost_mwh=0, )) hybrid_plant.ppa_price = ppa_price hybrid_plant.discount_rate = 6.4 hybrid_plant.solar.system_capacity_kw = solar_size_mw * 1000 hybrid_plant.wind.rotor_diameter = 100 # Modify Wind Turbine Coordinates Nx = 8 Ny = 5 spacing = hybrid_plant.wind.row_spacing turbine_x = np.linspace(0, (Nx * spacing) - spacing, Nx) turbine_y = np.linspace(0, (Ny * spacing) - spacing, Ny) turbX = np.zeros(Nx * Ny) turbY = np.zeros(Nx * Ny) count = 0 for i in range(Nx): for j in range(Ny): turbX[count] = turbine_x[i] turbY[count] = turbine_y[j] count = count + 1 hybrid_plant.wind.modify_coordinates(list(turbX), list(turbY)) hybrid_plant.wind.system_capacity_by_num_turbines(wind_size_mw * 1000) actual_solar_pct = hybrid_plant.solar.system_capacity_kw / \ (hybrid_plant.solar.system_capacity_kw + hybrid_plant.wind.system_capacity_kw) logger.info("Run with solar percent {}".format(actual_solar_pct)) hybrid_plant.simulate() outputs = hybrid_plant.hybrid_outputs() for k, v in outputs.items(): outputs[k] = [v] return outputs, site.wind_resource.filename, site.solar_resource.filename