# Metric('Co-product credit', get_coproduct_credit, 'USD/yr'), Metric('Ethanol production', get_ethanol_production, 'kg/hr'), Metric('Steam demand', get_steam_demand, 'kg/hr'), Metric('Excess electricity', get_excess_electricity, 'MW'), Metric('Cooling duty', cooling_duty_biorefinery(), 'KJ/hr'), Metric('H2SO4 input', get_acid_innput, 'kg/hr'), Metric('Lime_input', get_lime_input, 'kg/hr'), Metric('Polymer_input', get_polymer_input, 'kg/hr'), Metric('Yeast_input', get_yeast_input, 'kg/hr'), Metric('Makeup_water', get_makeup_water, 'kg/hr'), Metric('Biomass goes to combustion', get_combusted_mass, 'kg/hr'), Metric('Share of total biomass goes to combustion', get_combusted_biomass_ratio, '100&') ] sugarcane_model = Model(sugarcane_sys, metrics) sugarcane_model.load_default_parameters(sugar_cane, operating_days=False) param = sugarcane_model.parameter # Fermentation efficiency fermentation = R301 baseline = fermentation.efficiency @param(element=fermentation, distribution=triang(baseline), baseline=baseline, kind='coupled') def set_fermentation_efficiency(efficiency): fermentation.efficiency = efficiency
metrics.extend( (Metric('Sum', get_system_utility_cost, '10^6 $/yr', 'Utility cost'), Metric('Check', check_utility_cost, '10^6 $/yr', 'Utility cost'))) # To see if TEA converges well for each simulation get_NPV = lambda: lactic_tea.NPV metrics.extend((Metric('Net present value', get_NPV, '$', 'TEA'), )) # %% # ============================================================================= # Construct base model # ============================================================================= model_full = Model(lactic_sys, metrics) param = model_full.parameter def baseline_uniform(baseline, ratio): return shape.Uniform(baseline * (1 - ratio), baseline * (1 + ratio)) # ============================================================================= # TEA parameters # ============================================================================= U101 = system.U101 D = baseline_uniform(2205, 0.1)
factor = tea._annual_factor/1000 electricity_generated = -BT._power_utility.rate * factor consumed_electricity = sum([i.rate for i in power_utils]) * factor excess_electricity[0] = electricity_generated - consumed_electricity return consumed_electricity get_excess_electricity = lambda: excess_electricity[0] metrics = (Metric('Internal rate of return', sc.sugarcane_tea.solve_IRR, '%'), Metric('Ethanol production cost', get_prodcost, 'USD/yr'), Metric('Fixed capital investment', get_FCI, 'USD'), Metric('Ethanol production', get_prod, 'kg/hr'), Metric('Steam', get_steam, 'MT/yr'), Metric('Consumed electricity', get_consumed_electricity, 'MWhr/yr'), Metric('Excess electricity', get_excess_electricity, 'MWhr/yr')) sugarcane_model = Model(sc.sugarcane_sys, metrics, skip=False) sugarcane_model.load_default_parameters(sc.system.Sugar_cane) param = sugarcane_model.parameter # Fermentation efficiency fermentation = sc.system.P24 @param(element=fermentation, distribution=triang(fermentation.efficiency), kind='coupled') def set_fermentation_efficiency(efficiency): fermentation.efficiency= efficiency # Boiler efficiency BT = sc.system.BT @param(element=BT, distribution=triang(BT.boiler_efficiency)) def set_boiler_efficiency(boiler_efficiency): BT.boiler_efficiency = boiler_efficiency
return lambda: sum([i.duty for i in cooling_utilities]) def installation_cost_function(tea): return lambda: tea.installation_cost for i, tea in enumerate(areas, 1): Area = f'Area {i}00' metrics.extend( (Metric('Electricity', electricity_rate_function(tea), 'MW', Area), Metric('Cooling duty', cooling_duty_function(tea), 'MMkcal/hr', Area), Metric('Installation cost', installation_cost_function(tea), '10^6 USD', Area))) cornstover_model = Model(cornstover_sys, metrics) cornstover_model.load_default_parameters(cornstover, operating_days=False) param = cornstover_model.parameter # Add saccharification as a parameter saccharification_reaction = R301.saccharification[2] X = tools.bounded_triang(saccharification_reaction.X, addition=0.05) @param(element=R301, kind='coupled', distribution=X) def set_saccharification_conversion(saccharification_conversion): saccharification_reaction.X = saccharification_conversion # Add ethanol conversion as a parameter ethanol_reaction = R301.cofermentation[0]
metrics_by_name = {i.name: i for i in metrics} # %% Create model and populate parameters #: [float] Plant size process specification in ton / yr plant_size_ = lc.lipidcane.F_mass * lc.lipidcane_tea.operating_days * 24 / 907.185 constant_lipid_content = False def load_specifications(): # Plant size lc.lipidcane.F_mass = plant_size_ / (lc.lipidcane_tea.operating_days * 24 / 907.185) model = Model(lc.lipidcane_sys, metrics, load_specifications) param = model.parameter lipid_content = 100. * lc.utils.get_lipid_fraction() @param(units='dry wt. %', distribution=triang(lipid_content), baseline=lipid_content) def set_lipic_content(lipid_content): if constant_lipid_content: return lc.utils.set_lipid_fraction(lipid_content / 100.) @param(units='ton/yr', distribution=triang(plant_size_), baseline=plant_size_) def set_plant_size(plant_size): global plant_size_
return consumed_electricity def get_excess_electricity(): return excess_electricity[0] metrics = (Metric('Internal rate of return', lc.lipidcane_tea.solve_IRR), Metric('Biodiesel production cost', get_biodiesel_prodcost, 'USD/yr'), Metric('Ethanol production cost', get_etoh_prodcost, 'USD/yr'), Metric('Fixed capital investment', get_FCI, 'USD'), Metric('Biodiesel production', get_biodiesel_prod, 'kg/hr'), Metric('Ethanol production', get_etoh_prod, 'kg/hr'), Metric('Steam', get_steam, 'MT/yr'), Metric('Consumed electricity', get_consumed_electricity, 'MWhr/yr'), Metric('Excess electricity', get_excess_electricity, 'MWhr/yr')) lipidcane_model = Model(lc_sys, metrics) lipidcane_model.load_default_parameters(lipid_cane) param = lipidcane_model.parameter # Lipid extraction rate Mill = lc.system.U201 baseline = Mill.isplit['Lipid'] @param(element=Mill, distribution=triang(baseline), baseline=baseline, kind='coupled') def set_lipid_extraction_rate(lipid_extraction_rate): Mill.isplit['Lipid'] = lipid_extraction_rate # Transesterification efficiency (both tanks) R401 = lc.system.R401