diff --git a/.gitignore b/.gitignore index 5ccd7a2b..7cf1ec9e 100644 --- a/.gitignore +++ b/.gitignore @@ -88,6 +88,7 @@ nosetests.xml *.iml *.komodoproject .idea +.junie .project .pydevproject .vscode @@ -124,6 +125,9 @@ src/geophires_docs/fervo_project_red-2026_graph-data-extraction.xcf /Useful sites for Sphinx docstrings.txt /.github/workflows/workflows.7z tmp.patch +project-structure.txt +geophires-aliases.sh +*message.txt # Mypy Cache .mypy_cache/ diff --git a/README.rst b/README.rst index 26ec2530..5a4df29d 100644 --- a/README.rst +++ b/README.rst @@ -384,6 +384,10 @@ Example-specific web interface deeplinks are listed in the Link column. - `example_SAM-single-owner-PPA-9_cooling.txt `__ - `.out `__ - `link `__ + * - SAM Single Owner PPA: S-DAC + - `S-DAC-GT-2.txt `__ + - `.out `__ + - `link `__ .. raw:: html diff --git a/src/geophires_x/Economics.py b/src/geophires_x/Economics.py index 071733c4..09e4a83e 100644 --- a/src/geophires_x/Economics.py +++ b/src/geophires_x/Economics.py @@ -2901,6 +2901,27 @@ def Calculate(self, model: Model) -> None: if self.DoSDACGTCalculations.value: model.sdacgteconomics.Calculate(model) + # Consolidate S-DAC-GT CAPEX and OPEX into the main plant ledgers + max_carbon_capacity_tonnes = np.max(model.sdacgteconomics.CarbonExtractedAnnually.value) + sdac_overnight_capex_musd = ( + model.sdacgteconomics.CAPEX.value * model.sdacgteconomics.CAPEX_mult.value * max_carbon_capacity_tonnes) / 1_000_000.0 + self.CCap.value += sdac_overnight_capex_musd + + avg_carbon_extracted_tonnes = np.average(model.sdacgteconomics.CarbonExtractedAnnually.value) + sdac_annual_opex_usd = ( + model.sdacgteconomics.OPEX.value + model.sdacgteconomics.storage.value + model.sdacgteconomics.transport.value) * avg_carbon_extracted_tonnes + + if model.sdacgteconomics.sorbent_replacement_frequency.value > 0: + max_carbon_capacity_tonnes = np.max(model.sdacgteconomics.CarbonExtractedAnnually.value) + replacements_per_lifetime = int( + model.surfaceplant.plant_lifetime.value / model.sdacgteconomics.sorbent_replacement_frequency.value) + annualized_replacement_usd = ( + max_carbon_capacity_tonnes * model.sdacgteconomics.sorbent_replacement_cost.value * replacements_per_lifetime) / model.surfaceplant.plant_lifetime.value + sdac_annual_opex_usd += annualized_replacement_usd + + sdac_annual_opex_musd = sdac_annual_opex_usd / 1_000_000.0 + self.Coam.value += sdac_annual_opex_musd + self.calculate_cashflow(model) # Calculate more financial values using numpy financials @@ -3723,6 +3744,13 @@ def calculate_cashflow(self, model: Model) -> None: self.TotalRevenue.value[i] = self.TotalRevenue.value[i] + self.CarbonRevenue.value[i] #self.TotalCummRevenue.value[i] = self.TotalCummRevenue.value[i] + self.CarbonCummCashFlow.value[i] + if self.DoSDACGTCalculations.value: + for i in range(model.surfaceplant.construction_years.value, + model.surfaceplant.plant_lifetime.value + model.surfaceplant.construction_years.value, + 1): + sdac_index = i - model.surfaceplant.construction_years.value + self.TotalRevenue.value[i] += (model.sdacgteconomics.CarbonRevenue.value[sdac_index] / 1_000_000.0) + # for the sake of display, insert zeros at the beginning of the pricing arrays for i in range(0, model.surfaceplant.construction_years.value, 1): self.ElecPrice.value.insert(0, 0.0) diff --git a/src/geophires_x/EconomicsS_DAC_GT.py b/src/geophires_x/EconomicsS_DAC_GT.py index 78cf9a5c..c44b5789 100644 --- a/src/geophires_x/EconomicsS_DAC_GT.py +++ b/src/geophires_x/EconomicsS_DAC_GT.py @@ -1,7 +1,7 @@ import sys import os import numpy as np -from geophires_x.Parameter import floatParameter, OutputParameter, ReadParameter +from geophires_x.Parameter import floatParameter, OutputParameter, ReadParameter, intParameter from geophires_x.Units import * from geophires_x.OptionList import EndUseOptions import geophires_x.Model as Model @@ -219,6 +219,56 @@ def __init__(self, model: Model): ErrMessage="assume default Percent Energy Devoted To Process (50%)", ToolTipText="Percent Energy Devoted To Process (%)" ) + self.carbon_credit_price = self.ParameterDict[self.carbon_credit_price.Name] = floatParameter( + "S-DAC-GT Carbon Credit Price", + value=180.0, + DefaultValue=180.0, + Min=0.0, + Max=1000.0, + UnitType=Units.COSTPERMASS, + PreferredUnits=CostPerMassUnit.DOLLARSPERTONNE, + CurrentUnits=CostPerMassUnit.DOLLARSPERTONNE, + ErrMessage="assume default Carbon Credit Price (180 USD per tonne CO2)", + ToolTipText="Carbon Credit or Market Price (USD per tonne CO2)" + ) + + self.carbon_credit_duration = self.ParameterDict[self.carbon_credit_duration.Name] = floatParameter( + "S-DAC-GT Carbon Credit Duration", + value=12.0, + DefaultValue=12.0, + Min=0.0, + Max=100.0, + UnitType=Units.TIME, + PreferredUnits=TimeUnit.YEAR, + CurrentUnits=TimeUnit.YEAR, + ErrMessage="assume default Carbon Credit Duration (12 years)", + ToolTipText="Duration for which the carbon credit can be claimed (e.g., 12 years for US 45Q)" + ) + + self.sorbent_replacement_frequency = self.ParameterDict[self.sorbent_replacement_frequency.Name] = intParameter( + "S-DAC-GT Sorbent Replacement Frequency", + value=0, + DefaultValue=0, + AllowableRange=list(range(1, 101, 1)), + UnitType=Units.TIME, + PreferredUnits=TimeUnit.YEAR, + CurrentUnits=TimeUnit.YEAR, + ErrMessage="assume default Sorbent Replacement Frequency (0 years - no discrete replacement)", + ToolTipText="Frequency of solid sorbent replacement in years (0 disables step-function replacement costs)" + ) + + self.sorbent_replacement_cost = self.ParameterDict[self.sorbent_replacement_cost.Name] = floatParameter( + "S-DAC-GT Sorbent Replacement Cost", + value=0.0, + DefaultValue=0.0, + Min=0.0, + Max=1000.0, + UnitType=Units.COSTPERMASS, + PreferredUnits=CostPerMassUnit.DOLLARSPERTONNE, + CurrentUnits=CostPerMassUnit.DOLLARSPERTONNE, + ErrMessage="assume default Sorbent Replacement Cost (0 USD per tonne CO2)", + ToolTipText="Cost to replace solid sorbent (USD per tonne CO2 capacity)" + ) # local variable initiation # Capital Recovery Rate or Fixed Charge Factor - set initially for definitions @@ -335,6 +385,21 @@ def __init__(self, model: Model): PreferredUnits=CostPerMassUnit.DOLLARSPERTONNE, CurrentUnits=CostPerMassUnit.DOLLARSPERTONNE ) + self.CarbonRevenue = OutputParameter( + Name="Annual Carbon Revenue", + UnitType=Units.CURRENCYFREQUENCY, + PreferredUnits=CurrencyFrequencyUnit.DOLLARSPERYEAR, + CurrentUnits=CurrencyFrequencyUnit.DOLLARSPERYEAR + ) + self.OutputParameterDict[self.CarbonRevenue.Name] = self.CarbonRevenue + + self.CarbonCummCashFlow = OutputParameter( + Name="Cumulative Carbon Revenue", + UnitType=Units.CURRENCY, + PreferredUnits=CurrencyUnit.DOLLARS, + CurrentUnits=CurrencyUnit.DOLLARS + ) + self.OutputParameterDict[self.CarbonCummCashFlow.Name] = self.CarbonCummCashFlow model.logger.info(f"Complete {str(__class__)}: {sys._getframe().f_code.co_name}") @@ -483,6 +548,13 @@ def range_check(self) -> tuple: storage_max) return True, error_message + if not (self.carbon_credit_duration.Min + <= self.carbon_credit_duration.value + <= self.carbon_credit_duration.Max): + error_message = "S-DAC-GT ERROR: Carbon Credit Duration should be between {} and {}".format( + self.carbon_credit_duration.Min, self.carbon_credit_duration.Max) + return True, error_message + return False, "" def geo_therm_cost(self, power_cost: float, CAPEX_mult: float, OPEX_mult: float, depth: float, @@ -599,12 +671,13 @@ def Calculate(self, model: Model) -> None: # Convert from $/McF to $/kWh_th, but don't change any parameters value directly - it will throw off the rehydration NG_price = self.NG_price.value / self.NG_EnergyDensity.value NG_totalcost = self.therm.value * NG_price - self.LCOH.value, self.kWh_e_per_kWh_th.value = self.geo_therm_cost(model.surfaceplant.electricity_cost_to_buy.value, - self.CAPEX_mult.value, self.OPEX_mult.value, - model.reserv.depth.value * 3280.84, - np.average(model.wellbores.ProducedTemperature.value), - model.wellbores.Tinj.value, - model.wellbores.nprod.value * model.wellbores.prodwellflowrate.value) + self.LCOH.value, self.kWh_e_per_kWh_th.value = self.geo_therm_cost( + model.surfaceplant.electricity_cost_to_buy.value, + self.CAPEX_mult.value, self.OPEX_mult.value, + model.reserv.depth.value * 3280.84, + np.average(model.wellbores.ProducedTemperature.value), + model.wellbores.Tinj.value, + model.wellbores.nprod.value * model.wellbores.prodwellflowrate.value) geothermal_totalcost = self.LCOH.value * self.therm.value co2_power = self.elec.value / 1000 * self.power_co2intensity.value co2_elec_heat = self.therm.value / 1000 * self.power_co2intensity.value @@ -621,7 +694,8 @@ def Calculate(self, model: Model) -> None: # calculate the net impact of S-DAC-GT on the annual production of the model avg_first_law_eff = np.average(model.surfaceplant.FirstLawEfficiency.value) - self.tot_heat_energy_consumed_per_tonne.value = (self.elec.value / avg_first_law_eff) + self.therm.value # kWh_th/tonne + self.tot_heat_energy_consumed_per_tonne.value = ( + self.elec.value / avg_first_law_eff) + self.therm.value # kWh_th/tonne self.tot_cost_per_tonne.value = CAPEX + self.OPEX.value + self.storage.value + self.transport.value # USD/tonne self.percent_thermal_energy_going_to_heat.value = self.therm.value / self.tot_heat_energy_consumed_per_tonne.value @@ -637,18 +711,35 @@ def Calculate(self, model: Model) -> None: # That then gives us the revenue, since we have a carbon price model # We can also get annual cash flow from it. for i in range(0, model.surfaceplant.plant_lifetime.value, 1): - self.CarbonExtractedAnnually.value[i] = (self.EnergySplit.value * model.surfaceplant.HeatkWhExtracted.value[i]) / self.tot_heat_energy_consumed_per_tonne.value + self.CarbonExtractedAnnually.value[i] = (self.EnergySplit.value * model.surfaceplant.HeatkWhExtracted.value[ + i]) / self.tot_heat_energy_consumed_per_tonne.value if i == 0: self.S_DAC_GTCummCarbonExtracted.value[i] = self.CarbonExtractedAnnually.value[i] else: - self.S_DAC_GTCummCarbonExtracted.value[i] = self.S_DAC_GTCummCarbonExtracted.value[i - 1] + self.CarbonExtractedAnnually.value[i] + self.S_DAC_GTCummCarbonExtracted.value[i] = self.S_DAC_GTCummCarbonExtracted.value[i - 1] + \ + self.CarbonExtractedAnnually.value[i] self.CarbonExtractedTotal.value = self.CarbonExtractedTotal.value + self.CarbonExtractedAnnually.value[i] self.S_DAC_GTAnnualCost.value[i] = self.CarbonExtractedAnnually.value[i] * self.tot_cost_per_tonne.value if i == 0: self.S_DAC_GTCummCashFlow.value[i] = self.S_DAC_GTAnnualCost.value[i] else: - self.S_DAC_GTCummCashFlow.value[i] = self.S_DAC_GTCummCashFlow.value[i - 1] + self.S_DAC_GTAnnualCost.value[i] - self.CummCostPerTonne.value[i] = self.S_DAC_GTCummCashFlow.value[i] / self.S_DAC_GTCummCarbonExtracted.value[i] + self.S_DAC_GTCummCashFlow.value[i] = self.S_DAC_GTCummCashFlow.value[i - 1] + \ + self.S_DAC_GTAnnualCost.value[i] + self.CummCostPerTonne.value[i] = self.S_DAC_GTCummCashFlow.value[i] / \ + self.S_DAC_GTCummCarbonExtracted.value[i] + + max_carbon_capacity_tonnes = np.max(self.CarbonExtractedAnnually.value) + self.AnnualOPEX_USD = [0.0] * model.surfaceplant.plant_lifetime.value + for i in range(0, model.surfaceplant.plant_lifetime.value, 1): + base_opex = self.CarbonExtractedAnnually.value[i] * ( + self.OPEX.value + self.storage.value + self.transport.value) + replacement_cost = 0.0 + operational_year = i + 1 + if self.sorbent_replacement_frequency.value > 0 and ( + operational_year % self.sorbent_replacement_frequency.value) == 0: + replacement_cost = max_carbon_capacity_tonnes * self.sorbent_replacement_cost.value + + self.AnnualOPEX_USD[i] = base_opex + replacement_cost # We need to update the heat and electricity generated because we have consumed # some (all) of it to do the capture, so when they get used in the final economic calculation (below), @@ -657,28 +748,31 @@ def Calculate(self, model: Model) -> None: if model.surfaceplant.enduse_option.value is not EndUseOptions.HEAT: # all these end-use options have an electricity generation component model.surfaceplant.TotalkWhProduced.value[i] = model.surfaceplant.TotalkWhProduced.value[i] - ( - self.CarbonExtractedAnnually.value[i] * self.elec.value) + self.CarbonExtractedAnnually.value[i] * self.elec.value) model.surfaceplant.NetkWhProduced.value[i] = model.surfaceplant.NetkWhProduced.value[i] - ( - self.CarbonExtractedAnnually.value[i] * self.elec.value) + self.CarbonExtractedAnnually.value[i] * self.elec.value) if model.surfaceplant.enduse_option.value is not EndUseOptions.ELECTRICITY: model.surfaceplant.HeatkWhProduced.value[i] = model.surfaceplant.HeatkWhProduced.value[i] - ( - self.CarbonExtractedAnnually.value[i] * self.therm.value) + self.CarbonExtractedAnnually.value[i] * self.therm.value) else: # all the end-use option of direct-use only component model.surfaceplant.HeatkWhProduced.value[i] = (model.surfaceplant.HeatkWhProduced.value[i] - - (self.CarbonExtractedAnnually.value[i] * self.therm.value)) - - # FIXME TODO https://github.com/NREL/GEOPHIRES-X/issues/341?title=S-DAC+does+not+calculate+carbon+revenue - # Build a revenue generation model for the carbon capture, assuming the capture is being sequestered and that - # there is some sort of credit involved for doing that sequestering - # note that there may already be values in the CarbonRevenue array, so we need to - # add to them, not just set them. If there isn't values, there, the array will be filed with zeros, so adding won't be a problem - #total_duration = model.surfaceplant.plant_lifetime.value - #for i in range(0, total_duration, 1): - # model.sdacgteconomics.CarbonRevenue.value[i] = (model.sdacgteconomics.CarbonRevenue.value[i] + - # (self.CarbonExtractedAnnually.value[i] * model.economics.CarbonPrice.value[i])) - # if i > 0: - # model.economics.CarbonCummCashFlow.value[i] = model.economics.CarbonCummCashFlow.value[i - 1] + model.economics.CarbonRevenue.value[i] + (self.CarbonExtractedAnnually.value[ + i] * self.therm.value)) + + # Calculate Carbon Revenue based on S-DAC-GT specific credit price and duration + self.CarbonRevenue.value = [0.0] * model.surfaceplant.plant_lifetime.value + self.CarbonCummCashFlow.value = [0.0] * model.surfaceplant.plant_lifetime.value + for i in range(0, model.surfaceplant.plant_lifetime.value, 1): + # Enforce the parameterized statutory limit for tax credits + applicable_price = self.carbon_credit_price.value if i < self.carbon_credit_duration.value else 0.0 + + self.CarbonRevenue.value[i] = self.CarbonExtractedAnnually.value[i] * applicable_price + if i == 0: + self.CarbonCummCashFlow.value[i] = self.CarbonRevenue.value[i] + else: + self.CarbonCummCashFlow.value[i] = self.CarbonCummCashFlow.value[i - 1] + \ + self.CarbonRevenue.value[i] self._calculate_derived_outputs(model) - model.logger.info(f'Complete {str(__class__)}: {sys._getframe().f_code.co_name}') + model.logger.info(f'Complete {str(__class__)}: {sys._getframe().f_code.co_name}') \ No newline at end of file diff --git a/src/geophires_x/EconomicsSam.py b/src/geophires_x/EconomicsSam.py index aca41ff1..901a2019 100644 --- a/src/geophires_x/EconomicsSam.py +++ b/src/geophires_x/EconomicsSam.py @@ -588,6 +588,13 @@ def _get_utility_rate_parameters(m: Model) -> dict[str, Any]: max_total_kWh_produced = np.max(m.surfaceplant.TotalkWhProduced.quantity().to(convertible_unit('kWh')).magnitude) + if econ.DoSDACGTCalculations.value: + # Restore the true gross maximum before S-DAC in-place mutation decremented it + sdac_elec_consumption_kwh = ( + np.max(m.sdacgteconomics.CarbonExtractedAnnually.value) * m.sdacgteconomics.elec.value + ) + max_total_kWh_produced += sdac_elec_consumption_kwh + net_kwh_produced_series: Iterable | float | int = ( m.surfaceplant.NetkWhProduced.quantity().to(convertible_unit('kWh')).magnitude ) @@ -651,8 +658,36 @@ def _get_single_owner_parameters(model: Model) -> dict[str, Any]: royalty_supplemental_payments_by_year_usd = econ.get_royalty_supplemental_payments_schedule_usd(model)[ _pre_revenue_years_count(model) : ] + + sdac_average_opex_usd = 0.0 + sdac_opex_by_year_usd = [0.0] * model.surfaceplant.plant_lifetime.value + if econ.DoSDACGTCalculations.value: + sdac_opex_by_year_usd = model.sdacgteconomics.AnnualOPEX_USD + avg_carbon_extracted_tonnes = np.average(model.sdacgteconomics.CarbonExtractedAnnually.value) + sdac_average_opex_usd = ( + model.sdacgteconomics.OPEX.value + + model.sdacgteconomics.storage.value + + model.sdacgteconomics.transport.value + ) * avg_carbon_extracted_tonnes + if model.sdacgteconomics.sorbent_replacement_frequency.value > 0: + max_carbon_capacity_tonnes = np.max(model.sdacgteconomics.CarbonExtractedAnnually.value) + replacements_per_lifetime = int( + model.surfaceplant.plant_lifetime.value / model.sdacgteconomics.sorbent_replacement_frequency.value + ) + annualized_replacement_usd = ( + max_carbon_capacity_tonnes + * model.sdacgteconomics.sorbent_replacement_cost.value + * replacements_per_lifetime + ) / model.surfaceplant.plant_lifetime.value + sdac_average_opex_usd += annualized_replacement_usd + + opex_base_without_sdac_usd = opex_base_usd - sdac_average_opex_usd for year_index in range(model.surfaceplant.plant_lifetime.value): - opex_by_year_usd.append(opex_base_usd + royalty_supplemental_payments_by_year_usd[year_index]) + opex_by_year_usd.append( + opex_base_without_sdac_usd + + royalty_supplemental_payments_by_year_usd[year_index] + + sdac_opex_by_year_usd[year_index] + ) if model.surfaceplant.enduse_option.value == EndUseOptions.HEAT: # For pure direct-use, pumping is a grid purchase. @@ -678,15 +713,59 @@ def _get_single_owner_parameters(model: Model) -> dict[str, Any]: ret['federal_tax_rate'], ret['state_tax_rate'] = _get_fed_and_state_tax_rates(econ.CTR.value) geophires_itc_tenths = Decimal(econ.RITC.value) - ret['itc_fed_percent'] = [float(geophires_itc_tenths * Decimal(100))] - if econ.PTCElec.Provided: - ret['ptc_fed_amount'] = [econ.PTCElec.quantity().to(convertible_unit('USD/kWh')).magnitude] + if econ.DoSDACGTCalculations.value and geophires_itc_tenths > 0: + # Shield DAC CAPEX from ITC to prevent unlawful MACRS basis reduction + max_carbon_capacity_tonnes = max(model.sdacgteconomics.CarbonExtractedAnnually.value) + sdac_capex_usd = ( + model.sdacgteconomics.CAPEX.value * model.sdacgteconomics.CAPEX_mult.value * max_carbon_capacity_tonnes + ) + + # Geothermal eligible basis = Total Installed Cost - DAC CAPEX + eligible_geothermal_basis_usd = ret['total_installed_cost'] - sdac_capex_usd + itc_fed_amount_usd = float(Decimal(eligible_geothermal_basis_usd) * geophires_itc_tenths) - ret['ptc_fed_term'] = econ.PTCDuration.quantity().to(convertible_unit('yr')).magnitude + ret['itc_fed_percent'] = [0.0] # Disable percentage-based ITC on the whole project + ret['itc_fed_amount'] = [itc_fed_amount_usd] # Inject fixed ITC amount for geothermal only + else: + ret['itc_fed_percent'] = [float(geophires_itc_tenths * Decimal(100))] - if econ.PTCInflationAdjusted.value: - ret['ptc_fed_escal'] = _pct(econ.RINFL) + # Build a year-by-year schedule for the Federal Production Tax Credit + ptc_fed_amount_schedule = [0.0] * model.surfaceplant.plant_lifetime.value + + # 1. Base Electricity PTC + if econ.PTCElec.Provided: + base_ptc_rate = econ.PTCElec.quantity().to(convertible_unit('USD/kWh')).magnitude + ptc_term = int(econ.PTCDuration.quantity().to(convertible_unit('yr')).magnitude) + for i in range(min(ptc_term, model.surfaceplant.plant_lifetime.value)): + escalation = (1.0 + _pct(econ.RINFL) / 100.0) ** i if econ.PTCInflationAdjusted.value else 1.0 + ptc_fed_amount_schedule[i] = base_ptc_rate * escalation + + # 2. S-DAC 45Q Equivalent (Mapped as Non-Taxable PBI to avoid MACRS/Exclusivity issues) + if econ.DoSDACGTCalculations.value: + pbi_oth_amount_schedule = [0.0] * model.surfaceplant.plant_lifetime.value + + for i in range(model.surfaceplant.plant_lifetime.value): + # The statutory duration cutoff (e.g., 12 years) is already handled inside EconomicsS_DAC_GT.py + # so CarbonRevenue will naturally be 0.0 for years > 12. + sdac_revenue_usd = model.sdacgteconomics.CarbonRevenue.value[i] + net_kwh_produced = model.surfaceplant.NetkWhProduced.value[i] + + # Convert absolute S-DAC revenue (USD) into an equivalent USD/kWh PBI rate for SAM + if net_kwh_produced > 0: + pbi_oth_amount_schedule[i] = sdac_revenue_usd / net_kwh_produced + + if any(rate > 0.0 for rate in pbi_oth_amount_schedule): + ret['pbi_oth_amount'] = pbi_oth_amount_schedule + ret['pbi_oth_term'] = model.surfaceplant.plant_lifetime.value + ret['pbi_oth_tax_fed'] = 0.0 # Strictly exclude from Federal taxable gross income + ret['pbi_oth_tax_sta'] = 0.0 # Strictly exclude from State taxable gross income + + # Inject the combined array into SAM + if any(rate > 0.0 for rate in ptc_fed_amount_schedule): + ret['ptc_fed_amount'] = ptc_fed_amount_schedule + ret['ptc_fed_term'] = model.surfaceplant.plant_lifetime.value + ret['ptc_fed_escal'] = 0.0 # Escalation is already manually calculated in the array above # 'Property Tax Rate' geophires_ptr_tenths = Decimal(econ.PTR.value) diff --git a/src/geophires_x/OutputsS_DAC_GT.py b/src/geophires_x/OutputsS_DAC_GT.py index ba283858..b12fef9c 100644 --- a/src/geophires_x/OutputsS_DAC_GT.py +++ b/src/geophires_x/OutputsS_DAC_GT.py @@ -81,21 +81,26 @@ def PrintOutputs(self, model) -> tuple: model.sdacgteconomics.S_DAC_GTCummCashFlow.value sdac_df[f'Cum. Cost Per Tonne ({model.sdacgteconomics.CummCostPerTonne.PreferredUnits.value})|:,.2f'] = \ model.sdacgteconomics.CummCostPerTonne.value + sdac_df[f'Carbon Revenue ({model.sdacgteconomics.CarbonRevenue.PreferredUnits.value})|:,.2f'] = \ + model.sdacgteconomics.CarbonRevenue.value + sdac_df[f'Cum. Carbon Revenue ({model.sdacgteconomics.CarbonCummCashFlow.PreferredUnits.value})|:,.2f'] = \ + model.sdacgteconomics.CarbonCummCashFlow.value f.write(NL) f.write(" **********************" + NL) f.write(" * S-DAC-GT PROFILE *" + NL) f.write(" **********************" + NL) - f.write("Year Carbon Cumm. Carbon S-DAC-GT S-DAC-GT Cumm. Cumm. Cost" + NL) - f.write("Since Captured Captured Annual Cost Cash Flow Cost Per Tonne" + NL) + f.write("Year Carbon Cumm. Carbon S-DAC-GT S-DAC-GT Cumm. Cumm. Cost Annual Carbon" + NL) + f.write("Since Captured Captured Annual Cost Cash Flow Cost Per Tonne Revenue" + NL) f.write("Start ("+model.sdacgteconomics.CarbonExtractedAnnually.PreferredUnits.value + ") ("+model.sdacgteconomics.S_DAC_GTCummCarbonExtracted.PreferredUnits.value + ") ("+model.sdacgteconomics.S_DAC_GTAnnualCost.PreferredUnits.value + ") ("+model.sdacgteconomics.S_DAC_GTCummCashFlow.PreferredUnits.value + - ") ("+model.sdacgteconomics.CummCostPerTonne.PreferredUnits.value + ")" +NL) + ") ("+model.sdacgteconomics.CummCostPerTonne.PreferredUnits.value + + ") (" + model.sdacgteconomics.CarbonRevenue.PreferredUnits.value + ")" + NL) i = 0 for i in range(0, model.surfaceplant.plant_lifetime.value, 1): - f.write(f" {i+1:3.0f} {model.sdacgteconomics.CarbonExtractedAnnually.value[i]:,.2f} {model.sdacgteconomics.S_DAC_GTCummCarbonExtracted.value[i]:,.2f} {model.sdacgteconomics.S_DAC_GTAnnualCost.value[i]:,.2f} {model.sdacgteconomics.S_DAC_GTCummCashFlow.value[i]:,.2f} {model.sdacgteconomics.CummCostPerTonne.value[i]:.2f}" + NL) + f.write(f" {i+1:3.0f} {model.sdacgteconomics.CarbonExtractedAnnually.value[i]:,.2f} {model.sdacgteconomics.S_DAC_GTCummCarbonExtracted.value[i]:,.2f} {model.sdacgteconomics.S_DAC_GTAnnualCost.value[i]:,.2f} {model.sdacgteconomics.S_DAC_GTCummCashFlow.value[i]:,.2f} {model.sdacgteconomics.CummCostPerTonne.value[i]:.2f} {model.sdacgteconomics.CarbonRevenue.value[i]:,.2f}" + NL) i = i + 1 except BaseException as ex: @@ -106,9 +111,9 @@ def PrintOutputs(self, model) -> tuple: print(msg) model.logger.critical(str(ex)) model.logger.critical(msg) - raise RuntimeError(msg, e) + raise RuntimeError(msg, ex) model.logger.info(f'Complete {str(__class__)}: {__name__}') sdac_df = sdac_df.reset_index() - return sdac_df, sdac_results + return sdac_df, sdac_results \ No newline at end of file diff --git a/src/geophires_x_client/geophires_x_result.py b/src/geophires_x_client/geophires_x_result.py index 7ed141cc..e139d3ba 100644 --- a/src/geophires_x_client/geophires_x_result.py +++ b/src/geophires_x_client/geophires_x_result.py @@ -804,6 +804,7 @@ def extract_table_header(lines: list) -> list: 'S-DAC-GT Annual Cost (USD/yr)', 'S-DAC-GT Cumm. Cash Flow (USD)', 'Cumm. Cost Per Tonne (USD/tonne)', + 'Annual Carbon Revenue (USD/yr)', ] try: diff --git a/tests/examples/S-DAC-GT-2.out b/tests/examples/S-DAC-GT-2.out new file mode 100644 index 00000000..c600d4ff --- /dev/null +++ b/tests/examples/S-DAC-GT-2.out @@ -0,0 +1,517 @@ + ***************** + ***CASE REPORT*** + ***************** + +Simulation Metadata +---------------------- + GEOPHIRES Version: 3.13.8 + Simulation Date: 2026-05-20 + Simulation Time: 10:04 + Calculation Time: 0.206 sec + + ***SUMMARY OF RESULTS*** + + End-Use Option: Cogeneration Topping Cycle, Heat sales considered as extra income + Average Net Electricity Production: 19.62 MW + Average Direct-Use Heat Production: 13.19 MW + Electricity breakeven price: 11.49 cents/kWh + Direct-Use heat breakeven price (LCOH): 0.00 USD/MMBTU + Total CAPEX: 214.79 MUSD + Electricity CAPEX ($/kWe): 9447 USD/kW + Heat CAPEX ($/kWth): 1184 USD/kW + Number of production wells: 3 + Number of injection wells: 3 + Flowrate per production well: 70.0 kg/sec + Well depth: 3.1 kilometer + Geothermal gradient: 70 degC/km + + + ***ECONOMIC PARAMETERS*** + + Economic Model = SAM Single Owner PPA + Real Discount Rate: 7.00 % + Nominal Discount Rate: 9.14 % + WACC: 6.37 % + Project lifetime: 30 yr + Capacity factor: 90.0 % + Project NPV: -63.80 MUSD + After-tax IRR: -8.21 % + Project VIR=PI=PIR: 0.50 + Project MOIC: -0.67 + Project Payback Period: N/A + CHP: Percent cost allocation for electrical plant: 92.25 % + + ***ENGINEERING PARAMETERS*** + + Number of Production Wells: 3 + Number of Injection Wells: 3 + Well depth: 3.1 kilometer + Water loss rate: 2.0 % + Pump efficiency: 80.0 % + Injection temperature: 70.0 degC + User-provided production well temperature drop + Constant production well temperature drop: 5.0 degC + Flowrate per production well: 70.0 kg/sec + Injection well casing ID: 8.500 in + Production well casing ID: 8.500 in + Number of times redrilling: 0 + Power plant type: Double-Flash + + + ***RESOURCE CHARACTERISTICS*** + + Maximum reservoir temperature: 400.0 degC + Number of segments: 1 + Geothermal gradient: 70 degC/km + + + ***RESERVOIR PARAMETERS*** + + Reservoir Model = Single Fracture m/A Thermal Drawdown Model + m/A Drawdown Parameter: 0.00002 1/year + Bottom-hole temperature: 232.00 degC + Reservoir volume calculated with fracture separation and number of fractures as input + Number of fractures: 12 + Fracture separation: 80.00 meter + Reservoir volume: 176000000 m**3 + Reservoir hydrostatic pressure: 29019.48 kPa + Plant outlet pressure: 100.00 kPa + Injectivity Index: 5.00 kg/sec/bar + Reservoir density: 2700.00 kg/m**3 + Reservoir thermal conductivity: 3.00 W/m/K + Reservoir heat capacity: 1000.00 J/kg/K + + + ***RESERVOIR SIMULATION RESULTS*** + + Maximum Production Temperature: 227.0 degC + Average Production Temperature: 220.6 degC + Minimum Production Temperature: 207.6 degC + Initial Production Temperature: 227.0 degC + Average Reservoir Heat Extraction: 133.05 MW + Wellbore Heat Transmission Model = Constant Temperature Drop: 5.0 degC + Average Injection Well Pump Pressure Drop: 687.0 kPa + + + ***CAPITAL COSTS (M$)*** + + Exploration costs: 4.42 MUSD + Drilling and completion costs: 25.55 MUSD + Drilling and completion costs per well: 4.26 MUSD + Stimulation costs: 4.53 MUSD + Surface power plant costs: 64.90 MUSD + of which Electrical Plant Cost: 59.87 MUSD + of which Heat Plant Cost: 5.03 MUSD + Field gathering system costs: 3.16 MUSD + Total surface equipment costs: 68.06 MUSD + Overnight Capital Cost: 210.58 MUSD + Inflation costs during construction: 4.21 MUSD + Total CAPEX: 214.79 MUSD + + + ***OPERATING AND MAINTENANCE COSTS (M$/yr)*** + + Wellfield maintenance costs: 0.74 MUSD/yr + Power plant maintenance costs: 2.34 MUSD/yr + Water costs: 0.11 MUSD/yr + Total operating and maintenance costs: 8.90 MUSD/yr + + + ***SURFACE EQUIPMENT SIMULATION RESULTS*** + Initial geofluid availability: 0.23 MW/(kg/s) + Maximum Total Electricity Generation: 21.16 MW + Average Total Electricity Generation: 19.80 MW + Minimum Total Electricity Generation: 17.14 MW + Initial Total Electricity Generation: 21.16 MW + Maximum Net Electricity Generation: 20.98 MW + Average Net Electricity Generation: 19.62 MW + Minimum Net Electricity Generation: 16.96 MW + Initial Net Electricity Generation: 20.98 MW + Average Annual Total Electricity Generation: 87.28 GWh + Average Annual Net Electricity Generation: 85.81 GWh + Initial pumping power/net installed power: 0.89 % + Maximum Net Heat Production: 14.05 MW + Average Net Heat Production: 13.19 MW + Minimum Net Heat Production: 11.35 MW + Initial Net Heat Production: 14.05 MW + Average Annual Heat Production: -4.76 GWh + Average Pumping Power: 0.19 MW + Heat to Power Conversion Efficiency: 16.55 % + + ************************************************************ + * HEATING, COOLING AND/OR ELECTRICITY PRODUCTION PROFILE * + ************************************************************ + YEAR THERMAL GEOFLUID PUMP NET NET FIRST LAW + DRAWDOWN TEMPERATURE POWER POWER HEAT EFFICIENCY + (deg C) (MW) (MW) (MW) (%) + 0 1.0000 227.00 0.1857 20.9750 14.0539 17.0370 + 1 1.0000 227.00 0.1857 20.9750 14.0539 17.0370 + 2 1.0000 227.00 0.1857 20.9750 14.0539 17.0370 + 3 1.0000 227.00 0.1857 20.9750 14.0538 17.0369 + 4 1.0000 227.00 0.1857 20.9743 14.0534 17.0367 + 5 0.9999 226.98 0.1857 20.9700 14.0509 17.0352 + 6 0.9996 226.92 0.1857 20.9566 14.0432 17.0306 + 7 0.9991 226.79 0.1857 20.9285 14.0268 17.0209 + 8 0.9981 226.57 0.1857 20.8811 13.9992 17.0046 + 9 0.9967 226.26 0.1857 20.8121 13.9588 16.9807 + 10 0.9949 225.84 0.1857 20.7210 13.9051 16.9492 + 11 0.9926 225.32 0.1857 20.6087 13.8385 16.9102 + 12 0.9899 224.71 0.1857 20.4769 13.7597 16.8643 + 13 0.9869 224.02 0.1857 20.3281 13.6697 16.8122 + 14 0.9835 223.26 0.1857 20.1645 13.5697 16.7546 + 15 0.9799 222.44 0.1857 19.9885 13.4608 16.6925 + 16 0.9761 221.57 0.1857 19.8026 13.3442 16.6264 + 17 0.9720 220.65 0.1857 19.6086 13.2209 16.5571 + 18 0.9678 219.70 0.1857 19.4085 13.0919 16.4852 + 19 0.9635 218.72 0.1857 19.2038 12.9580 16.4111 + 20 0.9591 217.72 0.1857 18.9961 12.8200 16.3355 + 21 0.9547 216.71 0.1857 18.7865 12.6787 16.2587 + 22 0.9501 215.68 0.1857 18.5760 12.5345 16.1810 + 23 0.9456 214.65 0.1857 18.3655 12.3881 16.1028 + 24 0.9410 213.61 0.1857 18.1557 12.2399 16.0244 + 25 0.9365 212.58 0.1857 17.9472 12.0904 15.9459 + 26 0.9319 211.54 0.1857 17.7406 11.9398 15.8675 + 27 0.9274 210.51 0.1857 17.5362 11.7886 15.7894 + 28 0.9229 209.49 0.1857 17.3344 11.6370 15.7118 + 29 0.9184 208.47 0.1857 17.1353 11.4853 15.6347 + + + ******************************************************************* + * ANNUAL HEATING, COOLING AND/OR ELECTRICITY PRODUCTION PROFILE * + ******************************************************************* + YEAR HEAT ELECTRICITY HEAT RESERVOIR PERCENTAGE OF + PROVIDED PROVIDED EXTRACTED HEAT CONTENT TOTAL HEAT MINED + (GWh/year) (GWh/year) (GWh/year) (10^15 J) (%) + 1 -2.5 93.6 1093.75 73.04 5.11 + 2 -2.5 93.6 1093.75 69.11 10.23 + 3 -2.5 93.6 1093.75 65.17 15.34 + 4 -2.5 93.6 1093.74 61.23 20.46 + 5 -2.5 93.6 1093.67 57.30 25.57 + 6 -2.6 93.6 1093.41 53.36 30.69 + 7 -2.6 93.4 1092.76 49.42 35.80 + 8 -2.6 93.2 1091.57 45.50 40.90 + 9 -2.7 92.9 1089.72 41.57 46.00 + 10 -2.8 92.4 1087.17 37.66 51.08 + 11 -3.0 91.8 1083.91 33.76 56.15 + 12 -3.1 91.1 1079.99 29.87 61.20 + 13 -3.3 90.3 1075.47 26.00 66.23 + 14 -3.5 89.4 1070.41 22.14 71.24 + 15 -3.8 88.4 1064.89 18.31 76.22 + 16 -4.1 87.4 1058.98 14.50 81.17 + 17 -4.4 86.3 1052.73 10.71 86.09 + 18 -4.7 85.2 1046.22 6.94 90.98 + 19 -5.0 84.0 1039.50 3.20 95.84 + 20 -5.4 82.8 1032.60 -0.52 100.67 + 21 -5.8 81.7 1025.58 -4.21 105.47 + 22 -6.2 80.5 1018.47 -7.88 110.23 + 23 -6.6 79.3 1011.30 -11.52 114.96 + 24 -7.0 78.1 1004.09 -15.13 119.66 + 25 -7.4 76.9 996.87 -18.72 124.32 + 26 -7.8 75.8 989.66 -22.28 128.95 + 27 -8.3 74.6 982.47 -25.82 133.54 + 28 -8.7 73.5 975.32 -29.33 138.10 + 29 -9.2 72.4 968.21 -32.82 142.63 + 30 -9.6 71.3 961.52 -36.28 147.13 + + *************************** + * SAM CASH FLOW PROFILE * + *************************** +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Year 0 Year 1 Year 2 Year 3 Year 4 Year 5 Year 6 Year 7 Year 8 Year 9 Year 10 Year 11 Year 12 Year 13 Year 14 Year 15 Year 16 Year 17 Year 18 Year 19 Year 20 Year 21 Year 22 Year 23 Year 24 Year 25 Year 26 Year 27 Year 28 Year 29 Year 30 +CONSTRUCTION +Capital expenditure schedule [construction] (%) 100.0 +Overnight capital expenditure [construction] ($) -210,575,751 +plus: +Inflation cost [construction] ($) -4,211,515 +plus: +Royalty supplemental payments [construction] ($) 0 +equals: +Nominal capital expenditure [construction] ($) -214,787,267 + +Issuance of equity [construction] ($) 107,393,633 +Issuance of debt [construction] ($) 107,393,633 +Debt balance [construction] ($) 107,393,633 +Debt interest payment [construction] ($) 0 + +Installed cost [construction] ($) -214,787,267 +After-tax net cash flow [construction] ($) -107,393,633 + +ENERGY +Electricity to grid (kWh) 0.0 93,616,277 93,616,277 93,616,237 93,614,757 93,602,181 93,553,835 93,436,136 93,218,785 92,882,117 92,418,275 91,829,057 91,122,869 90,311,987 89,410,462 88,432,708 87,392,608 86,303,005 85,175,464 84,020,183 82,846,027 81,660,605 80,470,381 79,280,797 78,096,396 76,920,935 75,757,496 74,608,577 73,476,180 72,361,886 71,321,030 +Electricity from grid (kWh) 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +Electricity to grid net (kWh) 0.0 93,616,277 93,616,277 93,616,237 93,614,757 93,602,181 93,553,835 93,436,136 93,218,785 92,882,117 92,418,275 91,829,057 91,122,869 90,311,987 89,410,462 88,432,708 87,392,608 86,303,005 85,175,464 84,020,183 82,846,027 81,660,605 80,470,381 79,280,797 78,096,396 76,920,935 75,757,496 74,608,577 73,476,180 72,361,886 71,321,030 + +REVENUE +PPA price (cents/kWh) 0.0 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 5.50 +PPA revenue ($) 0 5,148,895 5,148,895 5,148,893 5,148,812 5,148,120 5,145,461 5,138,987 5,127,033 5,108,516 5,083,005 5,050,598 5,011,758 4,967,159 4,917,575 4,863,799 4,806,593 4,746,665 4,684,650 4,621,110 4,556,531 4,491,333 4,425,871 4,360,444 4,295,302 4,230,651 4,166,662 4,103,472 4,041,190 3,979,904 3,922,657 +Curtailment payment revenue ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Capacity payment revenue ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Salvage value ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 107,393,633 +Total revenue ($) 0 5,148,895 5,148,895 5,148,893 5,148,812 5,148,120 5,145,461 5,138,987 5,127,033 5,108,516 5,083,005 5,050,598 5,011,758 4,967,159 4,917,575 4,863,799 4,806,593 4,746,665 4,684,650 4,621,110 4,556,531 4,491,333 4,425,871 4,360,444 4,295,302 4,230,651 4,166,662 4,103,472 4,041,190 3,979,904 111,316,290 + +Property tax net assessed value ($) 0 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 214,787,267 + +OPERATING EXPENSES +O&M fixed expense ($) 0 9,142,614 9,142,614 9,142,612 9,142,568 9,142,194 9,140,753 9,137,245 9,130,758 9,120,693 9,106,789 9,089,066 9,067,732 9,043,111 9,015,579 8,985,528 8,953,337 8,919,362 8,883,927 8,847,323 8,809,803 8,771,593 8,732,885 8,693,845 8,654,618 8,615,325 8,576,069 8,536,939 8,498,007 8,459,336 8,422,884 +O&M production-based expense ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +O&M capacity-based expense ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Fuel expense ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Electricity purchase ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Property tax expense ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Insurance expense ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Total operating expenses ($) 0 9,142,614 9,142,614 9,142,612 9,142,568 9,142,194 9,140,753 9,137,245 9,130,758 9,120,693 9,106,789 9,089,066 9,067,732 9,043,111 9,015,579 8,985,528 8,953,337 8,919,362 8,883,927 8,847,323 8,809,803 8,771,593 8,732,885 8,693,845 8,654,618 8,615,325 8,576,069 8,536,939 8,498,007 8,459,336 8,422,884 + +EBITDA ($) 0 -3,993,718 -3,993,718 -3,993,719 -3,993,757 -3,994,074 -3,995,292 -3,998,257 -4,003,725 -4,012,177 -4,023,784 -4,038,468 -4,055,974 -4,075,952 -4,098,004 -4,121,729 -4,146,743 -4,172,697 -4,199,277 -4,226,212 -4,253,272 -4,280,259 -4,307,014 -4,333,402 -4,359,316 -4,384,674 -4,409,407 -4,433,467 -4,456,817 -4,479,432 102,893,406 + +OPERATING ACTIVITIES +EBITDA ($) 0 -3,993,718 -3,993,718 -3,993,719 -3,993,757 -3,994,074 -3,995,292 -3,998,257 -4,003,725 -4,012,177 -4,023,784 -4,038,468 -4,055,974 -4,075,952 -4,098,004 -4,121,729 -4,146,743 -4,172,697 -4,199,277 -4,226,212 -4,253,272 -4,280,259 -4,307,014 -4,333,402 -4,359,316 -4,384,674 -4,409,407 -4,433,467 -4,456,817 -4,479,432 102,893,406 +Interest earned on reserves ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +plus PBI if not available for debt service: +Federal PBI income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +State PBI income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Utility PBI income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Other PBI income ($) 0 14,099,544 14,099,544 14,099,542 14,099,437 14,098,550 14,095,139 14,086,829 14,071,467 14,047,628 14,014,697 13,972,720 13,922,194 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Debt interest payment ($) 0 5,369,682 5,288,860 5,203,998 5,114,892 5,021,331 4,923,092 4,819,941 4,711,633 4,597,909 4,478,499 4,353,119 4,221,469 4,083,237 3,938,093 3,785,692 3,625,672 3,457,650 3,281,227 3,095,983 2,901,476 2,697,244 2,482,801 2,257,636 2,021,212 1,772,967 1,512,310 1,238,620 951,246 649,502 332,672 +Cash flow from operating activities ($) 0 4,736,144 4,816,966 4,901,825 4,990,788 5,083,145 5,176,754 5,268,630 5,356,108 5,437,542 5,512,414 5,581,134 5,644,750 -8,159,189 -8,036,097 -7,907,421 -7,772,415 -7,630,346 -7,480,503 -7,322,195 -7,154,748 -6,977,504 -6,789,815 -6,591,037 -6,380,529 -6,157,641 -5,921,717 -5,672,087 -5,408,063 -5,128,935 102,560,734 + +INVESTING ACTIVITIES +Total installed cost ($) -214,787,267 +Debt closing costs ($) 0 +Debt up-front fee ($) 0 +minus: +Total IBI income ($) 0 +Total CBI income ($) 0 +equals: +Purchase of property ($) -214,787,267 +plus: +Reserve (increase)/decrease debt service ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserve (increase)/decrease working capital ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserve (increase)/decrease receivables ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserve (increase)/decrease major equipment 1 ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserve (increase)/decrease major equipment 2 ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserve (increase)/decrease major equipment 3 ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserve capital spending major equipment 1 ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserve capital spending major equipment 2 ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserve capital spending major equipment 3 ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +equals: +Cash flow from investing activities ($) -214,787,267 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +FINANCING ACTIVITIES +Issuance of equity ($) 107,393,633 +Size of debt ($) 107,393,633 +minus: +Debt principal payment ($) 0 1,616,428 1,697,250 1,782,112 1,871,218 1,964,779 2,063,018 2,166,169 2,274,477 2,388,201 2,507,611 2,632,991 2,764,641 2,902,873 3,048,017 3,200,417 3,360,438 3,528,460 3,704,883 3,890,127 4,084,634 4,288,865 4,503,309 4,728,474 4,964,898 5,213,143 5,473,800 5,747,490 6,034,864 6,336,608 6,653,438 +equals: +Cash flow from financing activities ($) 214,787,267 -1,616,428 -1,697,250 -1,782,112 -1,871,218 -1,964,779 -2,063,018 -2,166,169 -2,274,477 -2,388,201 -2,507,611 -2,632,991 -2,764,641 -2,902,873 -3,048,017 -3,200,417 -3,360,438 -3,528,460 -3,704,883 -3,890,127 -4,084,634 -4,288,865 -4,503,309 -4,728,474 -4,964,898 -5,213,143 -5,473,800 -5,747,490 -6,034,864 -6,336,608 -6,653,438 + +PROJECT RETURNS +Pre-tax Cash Flow: +Cash flow from operating activities ($) 0 4,736,144 4,816,966 4,901,825 4,990,788 5,083,145 5,176,754 5,268,630 5,356,108 5,437,542 5,512,414 5,581,134 5,644,750 -8,159,189 -8,036,097 -7,907,421 -7,772,415 -7,630,346 -7,480,503 -7,322,195 -7,154,748 -6,977,504 -6,789,815 -6,591,037 -6,380,529 -6,157,641 -5,921,717 -5,672,087 -5,408,063 -5,128,935 102,560,734 +Cash flow from investing activities ($) -214,787,267 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Cash flow from financing activities ($) 214,787,267 -1,616,428 -1,697,250 -1,782,112 -1,871,218 -1,964,779 -2,063,018 -2,166,169 -2,274,477 -2,388,201 -2,507,611 -2,632,991 -2,764,641 -2,902,873 -3,048,017 -3,200,417 -3,360,438 -3,528,460 -3,704,883 -3,890,127 -4,084,634 -4,288,865 -4,503,309 -4,728,474 -4,964,898 -5,213,143 -5,473,800 -5,747,490 -6,034,864 -6,336,608 -6,653,438 +Total pre-tax cash flow ($) 0 3,119,716 3,119,716 3,119,712 3,119,571 3,118,366 3,113,736 3,102,462 3,081,631 3,049,341 3,004,803 2,948,143 2,880,109 -11,062,062 -11,084,114 -11,107,839 -11,132,853 -11,158,807 -11,185,387 -11,212,322 -11,239,382 -11,266,369 -11,293,124 -11,319,511 -11,345,426 -11,370,784 -11,395,517 -11,419,577 -11,442,927 -11,465,542 95,907,296 + +Pre-tax Returns: +Issuance of equity ($) 107,393,633 +Total pre-tax cash flow ($) 0 3,119,716 3,119,716 3,119,712 3,119,571 3,118,366 3,113,736 3,102,462 3,081,631 3,049,341 3,004,803 2,948,143 2,880,109 -11,062,062 -11,084,114 -11,107,839 -11,132,853 -11,158,807 -11,185,387 -11,212,322 -11,239,382 -11,266,369 -11,293,124 -11,319,511 -11,345,426 -11,370,784 -11,395,517 -11,419,577 -11,442,927 -11,465,542 95,907,296 +Total pre-tax returns ($) -107,393,633 3,119,716 3,119,716 3,119,712 3,119,571 3,118,366 3,113,736 3,102,462 3,081,631 3,049,341 3,004,803 2,948,143 2,880,109 -11,062,062 -11,084,114 -11,107,839 -11,132,853 -11,158,807 -11,185,387 -11,212,322 -11,239,382 -11,266,369 -11,293,124 -11,319,511 -11,345,426 -11,370,784 -11,395,517 -11,419,577 -11,442,927 -11,465,542 95,907,296 + +After-tax Returns: +Total pre-tax returns ($) -107,393,633 3,119,716 3,119,716 3,119,712 3,119,571 3,118,366 3,113,736 3,102,462 3,081,631 3,049,341 3,004,803 2,948,143 2,880,109 -11,062,062 -11,084,114 -11,107,839 -11,132,853 -11,158,807 -11,185,387 -11,212,322 -11,239,382 -11,266,369 -11,293,124 -11,319,511 -11,345,426 -11,370,784 -11,395,517 -11,419,577 -11,442,927 -11,465,542 95,907,296 +Federal ITC total income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Federal PTC income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Federal tax benefit (liability) ($) 0 2,815,492 3,826,193 3,809,976 3,792,955 3,775,136 3,756,596 3,737,450 3,717,797 3,697,680 3,677,079 3,655,924 3,634,112 3,611,513 3,587,991 3,563,401 3,537,601 3,510,452 3,481,817 3,451,564 3,419,565 2,359,547 1,297,534 1,259,547 1,219,319 1,176,725 1,131,640 1,083,936 1,033,481 980,139 -19,599,356 +State ITC total income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +State PTC income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +State tax benefit (liability) ($) 0 1,325,977 1,801,975 1,794,337 1,786,321 1,777,929 1,769,197 1,760,181 1,750,925 1,741,450 1,731,748 1,721,785 1,711,513 1,700,870 1,689,791 1,678,211 1,666,060 1,653,274 1,639,788 1,625,540 1,610,470 1,111,247 611,083 593,193 574,248 554,188 532,955 510,488 486,726 461,604 -9,230,466 +Total after-tax returns ($) -107,393,633 7,261,185 8,747,884 8,724,026 8,698,847 8,671,432 8,639,529 8,600,092 8,550,354 8,488,471 8,413,630 8,325,853 8,225,734 -5,749,679 -5,806,332 -5,866,228 -5,929,192 -5,995,081 -6,063,782 -6,135,218 -6,209,347 -7,795,576 -9,384,507 -9,466,771 -9,551,860 -9,639,871 -9,730,922 -9,825,153 -9,922,721 -10,023,799 67,077,473 + +After-tax net cash flow ($) -107,393,633 7,261,185 8,747,884 8,724,026 8,698,847 8,671,432 8,639,529 8,600,092 8,550,354 8,488,471 8,413,630 8,325,853 8,225,734 -5,749,679 -5,806,332 -5,866,228 -5,929,192 -5,995,081 -6,063,782 -6,135,218 -6,209,347 -7,795,576 -9,384,507 -9,466,771 -9,551,860 -9,639,871 -9,730,922 -9,825,153 -9,922,721 -10,023,799 67,077,473 +After-tax cumulative IRR (%) NaN -93.24 -67.88 -47.81 -34.02 -24.51 -17.75 -12.81 -9.11 -6.27 -4.05 -2.29 -0.88 -1.85 -3.09 -4.89 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN -8.21 +After-tax cumulative NPV ($) -107,393,633 -100,740,541 -93,396,499 -86,685,841 -80,554,918 -74,955,136 -69,843,189 -65,180,726 -60,933,430 -57,069,992 -53,561,311 -50,380,006 -47,500,173 -49,344,561 -51,051,141 -52,630,932 -54,093,959 -55,449,360 -56,705,484 -57,869,972 -58,949,831 -60,192,013 -61,562,152 -62,828,552 -63,999,326 -65,081,937 -66,083,254 -67,009,599 -67,866,795 -68,660,205 -63,795,481 + +AFTER-TAX LCOE AND PPA PRICE +Annual costs ($) -107,393,633 2,112,290 3,598,989 3,575,133 3,550,035 3,523,312 3,494,068 3,461,105 3,423,320 3,379,955 3,330,625 3,275,255 3,213,976 -10,716,838 -10,723,907 -10,730,027 -10,735,786 -10,741,746 -10,748,433 -10,756,328 -10,765,879 -12,286,909 -13,810,378 -13,827,215 -13,847,162 -13,870,522 -13,897,585 -13,928,625 -13,963,911 -14,003,703 63,154,817 +PPA revenue ($) 0 5,148,895 5,148,895 5,148,893 5,148,812 5,148,120 5,145,461 5,138,987 5,127,033 5,108,516 5,083,005 5,050,598 5,011,758 4,967,159 4,917,575 4,863,799 4,806,593 4,746,665 4,684,650 4,621,110 4,556,531 4,491,333 4,425,871 4,360,444 4,295,302 4,230,651 4,166,662 4,103,472 4,041,190 3,979,904 3,922,657 +Electricity to grid (kWh) 0 93,616,277 93,616,277 93,616,237 93,614,757 93,602,181 93,553,835 93,436,136 93,218,785 92,882,117 92,418,275 91,829,057 91,122,869 90,311,987 89,410,462 88,432,708 87,392,608 86,303,005 85,175,464 84,020,183 82,846,027 81,660,605 80,470,381 79,280,797 78,096,396 76,920,935 75,757,496 74,608,577 73,476,180 72,361,886 71,321,030 + +Present value of annual costs ($) 114,215,156 + +Present value of annual energy costs ($) 105,366,211 +Present value of annual energy nominal (kWh) 916,721,372 +LCOE Levelized cost of energy nominal (cents/kWh) 11.49 + +Present value of PPA revenue ($) 50,419,674 +Present value of annual energy nominal (kWh) 916,721,372 +LPPA Levelized PPA price nominal (cents/kWh) 5.50 + +PROJECT STATE INCOME TAXES +EBITDA ($) 0 -3,993,718 -3,993,718 -3,993,719 -3,993,757 -3,994,074 -3,995,292 -3,998,257 -4,003,725 -4,012,177 -4,023,784 -4,038,468 -4,055,974 -4,075,952 -4,098,004 -4,121,729 -4,146,743 -4,172,697 -4,199,277 -4,226,212 -4,253,272 -4,280,259 -4,307,014 -4,333,402 -4,359,316 -4,384,674 -4,409,407 -4,433,467 -4,456,817 -4,479,432 102,893,406 +State taxable PBI income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Interest earned on reserves ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +State taxable IBI income ($) 0 +State taxable CBI income ($) 0 +minus: +Debt interest payment ($) 0 5,369,682 5,288,860 5,203,998 5,114,892 5,021,331 4,923,092 4,819,941 4,711,633 4,597,909 4,478,499 4,353,119 4,221,469 4,083,237 3,938,093 3,785,692 3,625,672 3,457,650 3,281,227 3,095,983 2,901,476 2,697,244 2,482,801 2,257,636 2,021,212 1,772,967 1,512,310 1,238,620 951,246 649,502 332,672 +Total state tax depreciation ($) 0 5,369,682 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 5,369,682 0 0 0 0 0 0 0 0 0 +equals: +State taxable income ($) 0 -14,733,082 -20,021,942 -19,937,080 -19,848,012 -19,754,768 -19,657,748 -19,557,562 -19,454,722 -19,349,449 -19,241,647 -19,130,949 -19,016,807 -18,898,552 -18,775,461 -18,646,785 -18,511,778 -18,369,710 -18,219,867 -18,061,558 -17,894,111 -12,347,186 -6,789,815 -6,591,037 -6,380,529 -6,157,641 -5,921,717 -5,672,087 -5,408,063 -5,128,935 102,560,734 + +State income tax rate (frac) 0.0 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 0.09 +State tax benefit (liability) ($) 0 1,325,977 1,801,975 1,794,337 1,786,321 1,777,929 1,769,197 1,760,181 1,750,925 1,741,450 1,731,748 1,721,785 1,711,513 1,700,870 1,689,791 1,678,211 1,666,060 1,653,274 1,639,788 1,625,540 1,610,470 1,111,247 611,083 593,193 574,248 554,188 532,955 510,488 486,726 461,604 -9,230,466 + +PROJECT FEDERAL INCOME TAXES +EBITDA ($) 0 -3,993,718 -3,993,718 -3,993,719 -3,993,757 -3,994,074 -3,995,292 -3,998,257 -4,003,725 -4,012,177 -4,023,784 -4,038,468 -4,055,974 -4,075,952 -4,098,004 -4,121,729 -4,146,743 -4,172,697 -4,199,277 -4,226,212 -4,253,272 -4,280,259 -4,307,014 -4,333,402 -4,359,316 -4,384,674 -4,409,407 -4,433,467 -4,456,817 -4,479,432 102,893,406 +Interest earned on reserves ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +State tax benefit (liability) ($) 0 1,325,977 1,801,975 1,794,337 1,786,321 1,777,929 1,769,197 1,760,181 1,750,925 1,741,450 1,731,748 1,721,785 1,711,513 1,700,870 1,689,791 1,678,211 1,666,060 1,653,274 1,639,788 1,625,540 1,610,470 1,111,247 611,083 593,193 574,248 554,188 532,955 510,488 486,726 461,604 -9,230,466 +State ITC total income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +State PTC income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Federal taxable IBI income ($) 0 +Federal taxable CBI income ($) 0 +Federal taxable PBI income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +minus: +Debt interest payment ($) 0 5,369,682 5,288,860 5,203,998 5,114,892 5,021,331 4,923,092 4,819,941 4,711,633 4,597,909 4,478,499 4,353,119 4,221,469 4,083,237 3,938,093 3,785,692 3,625,672 3,457,650 3,281,227 3,095,983 2,901,476 2,697,244 2,482,801 2,257,636 2,021,212 1,772,967 1,512,310 1,238,620 951,246 649,502 332,672 +Total federal tax depreciation ($) 0 5,369,682 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 10,739,363 5,369,682 0 0 0 0 0 0 0 0 0 +equals: +Federal taxable income ($) 0 -13,407,104 -18,219,967 -18,142,743 -18,061,691 -17,976,839 -17,888,551 -17,797,381 -17,703,797 -17,607,999 -17,509,898 -17,409,164 -17,305,294 -17,197,683 -17,085,669 -16,968,574 -16,845,718 -16,716,436 -16,580,079 -16,436,018 -16,283,641 -11,235,939 -6,178,731 -5,997,844 -5,806,281 -5,603,453 -5,388,763 -5,161,599 -4,921,337 -4,667,331 93,330,268 + +Federal income tax rate (frac) 0.0 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 +Federal tax benefit (liability) ($) 0 2,815,492 3,826,193 3,809,976 3,792,955 3,775,136 3,756,596 3,737,450 3,717,797 3,697,680 3,677,079 3,655,924 3,634,112 3,611,513 3,587,991 3,563,401 3,537,601 3,510,452 3,481,817 3,451,564 3,419,565 2,359,547 1,297,534 1,259,547 1,219,319 1,176,725 1,131,640 1,083,936 1,033,481 980,139 -19,599,356 + +CASH INCENTIVES +Federal IBI income ($) 0 +State IBI income ($) 0 +Utility IBI income ($) 0 +Other IBI income ($) 0 +Total IBI income ($) 0 + +Federal CBI income ($) 0 +State CBI income ($) 0 +Utility CBI income ($) 0 +Other CBI income ($) 0 +Total CBI income ($) 0 + +Federal PBI income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +State PBI income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Utility PBI income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Other PBI income ($) 0 14,099,544 14,099,544 14,099,542 14,099,437 14,098,550 14,095,139 14,086,829 14,071,467 14,047,628 14,014,697 13,972,720 13,922,194 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Total PBI income ($) 0 14,099,544 14,099,544 14,099,542 14,099,437 14,098,550 14,095,139 14,086,829 14,071,467 14,047,628 14,014,697 13,972,720 13,922,194 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +TAX CREDITS +Federal PTC income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +State PTC income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +Federal ITC amount income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Federal ITC percent income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Federal ITC total income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +State ITC amount income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +State ITC percent income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +State ITC total income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +DEBT REPAYMENT +Debt balance ($) 107,393,633 105,777,205 104,079,955 102,297,843 100,426,625 98,461,847 96,398,829 94,232,660 91,958,183 89,569,983 87,062,372 84,429,380 81,664,740 78,761,867 75,713,850 72,513,432 69,152,994 65,624,534 61,919,651 58,029,523 53,944,889 49,656,024 45,152,715 40,424,241 35,459,343 30,246,200 24,772,400 19,024,910 12,990,046 6,653,438 0 +Debt interest payment ($) 0 5,369,682 5,288,860 5,203,998 5,114,892 5,021,331 4,923,092 4,819,941 4,711,633 4,597,909 4,478,499 4,353,119 4,221,469 4,083,237 3,938,093 3,785,692 3,625,672 3,457,650 3,281,227 3,095,983 2,901,476 2,697,244 2,482,801 2,257,636 2,021,212 1,772,967 1,512,310 1,238,620 951,246 649,502 332,672 +Debt principal payment ($) 0 1,616,428 1,697,250 1,782,112 1,871,218 1,964,779 2,063,018 2,166,169 2,274,477 2,388,201 2,507,611 2,632,991 2,764,641 2,902,873 3,048,017 3,200,417 3,360,438 3,528,460 3,704,883 3,890,127 4,084,634 4,288,865 4,503,309 4,728,474 4,964,898 5,213,143 5,473,800 5,747,490 6,034,864 6,336,608 6,653,438 +Debt total payment ($) 0 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 + +DSCR (DEBT FRACTION) +EBITDA ($) 0 -3,993,718 -3,993,718 -3,993,719 -3,993,757 -3,994,074 -3,995,292 -3,998,257 -4,003,725 -4,012,177 -4,023,784 -4,038,468 -4,055,974 -4,075,952 -4,098,004 -4,121,729 -4,146,743 -4,172,697 -4,199,277 -4,226,212 -4,253,272 -4,280,259 -4,307,014 -4,333,402 -4,359,316 -4,384,674 -4,409,407 -4,433,467 -4,456,817 -4,479,432 102,893,406 +minus: +Reserves major equipment 1 funding ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserves major equipment 2 funding ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserves major equipment 3 funding ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserves receivables funding ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +equals: +Cash available for debt service (CAFDS) ($) 0 -3,993,718 -3,993,718 -3,993,719 -3,993,757 -3,994,074 -3,995,292 -3,998,257 -4,003,725 -4,012,177 -4,023,784 -4,038,468 -4,055,974 -4,075,952 -4,098,004 -4,121,729 -4,146,743 -4,172,697 -4,199,277 -4,226,212 -4,253,272 -4,280,259 -4,307,014 -4,333,402 -4,359,316 -4,384,674 -4,409,407 -4,433,467 -4,456,817 -4,479,432 102,893,406 +Debt total payment ($) 0 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 6,986,110 +DSCR (pre-tax) 0.0 -0.57 -0.57 -0.57 -0.57 -0.57 -0.57 -0.57 -0.57 -0.57 -0.58 -0.58 -0.58 -0.58 -0.59 -0.59 -0.59 -0.60 -0.60 -0.60 -0.61 -0.61 -0.62 -0.62 -0.62 -0.63 -0.63 -0.63 -0.64 -0.64 14.73 + +RESERVES +Reserves working capital funding ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserves working capital disbursement ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserves working capital balance ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +Reserves debt service funding ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserves debt service disbursement ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserves debt service balance ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +Reserves receivables funding ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserves receivables disbursement ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserves receivables balance ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +Reserves major equipment 1 funding ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserves major equipment 1 disbursement ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserves major equipment 1 balance ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +Reserves major equipment 2 funding ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserves major equipment 2 disbursement ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserves major equipment 2 balance ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +Reserves major equipment 3 funding ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserves major equipment 3 disbursement ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Reserves major equipment 3 balance ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +Reserves total reserves balance ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Interest on reserves (%/year) 1.75 +Interest earned on reserves ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + + + ***S-DAC-GT ECONOMICS*** + + + S-DAC-GT Report: Levelized Cost of Direct Air Capture (LCOD) + LCOD using grid-based electricity only: 387.69 USD/tonne + LCOD using natural gas only: 312.00 USD/tonne + LCOD using geothermal energy only: 288.87 USD/tonne + + S-DAC-GT Report: CO2 Intensity of process (percent of CO2 mitigated that is emitted by S-DAC process) + CO2 Intensity using grid-based electricity only: 94.52 % + CO2 Intensity using natural gas only: 64.85 % + CO2 Intensity using geothermal energy only: 36.91 % + + Geothermal LCOH: 0.0017 USD/kWh + Geothermal Ratio (electricity vs heat): 20.7259 % + Percent Energy Devoted To Process: 50.0000 % + + Total Tonnes of CO2 Captured: 2,253,170.17 tonne + Total Cost of Capture: 500,842,063.38 USD + + + ********************** + * S-DAC-GT PROFILE * + ********************** +Year Carbon Cumm. Carbon S-DAC-GT S-DAC-GT Cumm. Cumm. Cost Annual Carbon +Since Captured Captured Annual Cost Cash Flow Cost Per Tonne Revenue +Start (tonne/yr) (tonne) (USD/yr) (USD) (USD/tonne) (USD/yr) + 1 78,330.80 78,330.80 17,411,627.98 17,411,627.98 222.28 14,099,544.46 + 2 78,330.80 156,661.61 17,411,627.98 34,823,255.96 222.28 14,099,544.46 + 3 78,330.79 234,992.39 17,411,624.49 52,234,880.45 222.28 14,099,541.64 + 4 78,330.21 313,322.60 17,411,495.60 69,646,376.05 222.28 14,099,437.26 + 5 78,325.28 391,647.88 17,410,399.97 87,056,776.02 222.28 14,098,550.05 + 6 78,306.33 469,954.20 17,406,187.21 104,462,963.23 222.28 14,095,138.65 + 7 78,260.16 548,214.36 17,395,925.55 121,858,888.78 222.28 14,086,828.98 + 8 78,174.81 626,389.18 17,376,954.53 139,235,843.31 222.28 14,071,466.68 + 9 78,042.38 704,431.56 17,347,515.71 156,583,359.02 222.28 14,047,627.79 + 10 77,859.43 782,290.99 17,306,849.76 173,890,208.78 222.28 14,014,697.42 + 11 77,626.22 859,917.21 17,255,012.02 191,145,220.80 222.28 13,972,720.38 + 12 77,345.52 937,262.73 17,192,616.14 208,337,836.94 222.28 13,922,193.60 + 13 77,021.56 1,014,284.29 17,120,605.40 225,458,442.34 222.28 0.00 + 14 76,659.30 1,090,943.59 17,040,081.18 242,498,523.53 222.28 0.00 + 15 76,263.89 1,167,207.48 16,952,186.81 259,450,710.33 222.28 0.00 + 16 75,840.32 1,243,047.80 16,858,034.91 276,308,745.24 222.28 0.00 + 17 75,393.28 1,318,441.08 16,758,665.93 293,067,411.17 222.28 0.00 + 18 74,927.04 1,393,368.11 16,655,027.43 309,722,438.60 222.28 0.00 + 19 74,445.39 1,467,813.51 16,547,966.62 326,270,405.23 222.28 0.00 + 20 73,951.72 1,541,765.22 16,438,231.02 342,708,636.25 222.28 0.00 + 21 73,448.95 1,615,214.17 16,326,473.66 359,035,109.91 222.28 0.00 + 22 72,939.63 1,688,153.81 16,213,260.66 375,248,370.57 222.28 0.00 + 23 72,425.96 1,760,579.76 16,099,079.76 391,347,450.33 222.28 0.00 + 24 71,909.81 1,832,489.57 15,984,349.02 407,331,799.35 222.28 0.00 + 25 71,392.80 1,903,882.37 15,869,425.07 423,201,224.42 222.28 0.00 + 26 70,876.27 1,974,758.64 15,754,610.85 438,955,835.27 222.28 0.00 + 27 70,361.40 2,045,120.04 15,640,162.58 454,595,997.86 222.28 0.00 + 28 69,849.14 2,114,969.18 15,526,295.96 470,122,293.82 222.28 0.00 + 29 69,340.31 2,184,309.49 15,413,191.67 485,535,485.49 222.28 0.00 + 30 68,860.68 2,253,170.17 15,306,577.89 500,842,063.38 222.28 0.00 diff --git a/tests/examples/S-DAC-GT-2.txt b/tests/examples/S-DAC-GT-2.txt new file mode 100644 index 00000000..277e029d --- /dev/null +++ b/tests/examples/S-DAC-GT-2.txt @@ -0,0 +1,51 @@ +# Geothermal Combined Heat and Power Problem using a Thermal Drawdown Reservoir Model and SAM Economic Model and +# Solid Sorbent Direct Air Capture powered by geothermal +# Based on Example 3 description: This example problem considers an EGS reservoir at 3.1km depth. +# The heat is used in a combined heat and power topping cycle model with double flash as +# topping cycle and electricity considered as the main product. + +Do S-DAC-GT Calculations, True + +***Subsurface technical parameters*** +************************************* +Reservoir Model,3, ---m/A Single Fracture Thermal Drawdown +Reservoir Depth,3.1, ---[km] +Number of Segments,1, ---[-] +Maximum Temperature,400, ---[deg.C] +Drawdown Parameter,.00002, ---[kg/s/m2] +Gradient 1,70, ---[deg.C/km] +Number of Production Wells,3, ---[-] +Number of Injection Wells,3, ---[-] +Production Well Diameter,8.5, ---[inch] +Injection Well Diameter,8.5, ---[inch] +Ramey Production Wellbore Model,0, ---Should be 0 (disabled) or 1 (enabled) +Production Flow Rate per Well,70, ---[kg/s] +Reservoir Volume Option,1, ---Should be 1 2 3 or 4. See manual for details. +Fracture Shape,1, ---Should be 1 2 3 or 4 +Fracture Area,200000, ---[m2] +Number of Fractures,12, ---[-] +Fracture Separation,80, ---[m] +Injectivity Index,5, ---[kg/s/bar] +Water Loss Fraction,0.02, ---[-] + +***Surface Technical Parameters*** +********************************** + +End-Use Option,31, ---CHP Topping Cycle with electricity as the main product +Power Plant Type,4, ---Double-Flash +Circulation Pump Efficiency,.80, ---[-] + +***Financial Parameters*** +************************** + +Economic Model, 5, -- SAM Single Owner PPA ---BICYCLE Levelized Cost Model +Inflated Equity Interest Rate,.08, ---[-] Required for BICYCLE model +Combined Income Tax Rate,.3, ---[-] Required for BICYCLE model +Gross Revenue Tax Rate,0, ---[-] Required for BICYCLE model +S-DAC-GT Carbon Credit Price, 180.0, ---[USD/tonne CO2] 45Q tax credit rate or voluntary market price + +***Simulation Parameters*** +*************************** + +Print Output to Console,1, ---Should be 1 (to print) or 0 (to not print) +Time steps per year,10, ---[-] diff --git a/tests/examples/S-DAC-GT.out b/tests/examples/S-DAC-GT.out index 75170830..3ecead04 100644 --- a/tests/examples/S-DAC-GT.out +++ b/tests/examples/S-DAC-GT.out @@ -4,18 +4,18 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.12.1 - Simulation Date: 2026-04-07 - Simulation Time: 10:46 - Calculation Time: 0.135 sec + GEOPHIRES Version: 3.13.8 + Simulation Date: 2026-05-19 + Simulation Time: 13:57 + Calculation Time: 0.137 sec ***SUMMARY OF RESULTS*** End-Use Option: Cogeneration Topping Cycle, Heat sales considered as extra income Average Net Electricity Production: 19.62 MW Average Direct-Use Heat Production: 13.19 MW - Electricity breakeven price: 10.68 cents/kWh - Direct-Use heat breakeven price (LCOH): -56.08 USD/MMBTU + Electricity breakeven price: 24.39 cents/kWh + Direct-Use heat breakeven price (LCOH): -128.08 USD/MMBTU Number of production wells: 3 Number of injection wells: 3 Flowrate per production well: 70.0 kg/sec @@ -29,11 +29,11 @@ Simulation Metadata Accrued financing during construction: 0.00 % Project lifetime: 30 yr Capacity factor: 90.0 % - Project NPV: -82.17 MUSD - Project IRR: -5.86 % - Project VIR=PI=PIR: 0.20 - Project MOIC: -0.30 - Project Payback Period: N/A + Project NPV: -89.80 MUSD + Project IRR: 1.99 % + Project VIR=PI=PIR: 0.57 + Project MOIC: 0.14 + Project Payback Period: 22.52 yr CHP: Percent cost allocation for electrical plant: 92.25 % ***ENGINEERING PARAMETERS*** @@ -99,7 +99,7 @@ Simulation Metadata of which Heat Plant Cost: 5.03 MUSD Field gathering system costs: 3.16 MUSD Total surface equipment costs: 68.06 MUSD - Total capital costs: 102.56 MUSD + Total capital costs: 210.58 MUSD ***OPERATING AND MAINTENANCE COSTS (M$/yr)*** @@ -107,7 +107,7 @@ Simulation Metadata Wellfield maintenance costs: 0.74 MUSD/yr Power plant maintenance costs: 2.34 MUSD/yr Water costs: 0.11 MUSD/yr - Total operating and maintenance costs: 3.19 MUSD/yr + Total operating and maintenance costs: 8.90 MUSD/yr ***SURFACE EQUIPMENT SIMULATION RESULTS*** @@ -214,37 +214,37 @@ Year Electricity | Heat | Since Price Ann. Rev. Cumm. Rev. | Price Ann. Rev. Cumm. Rev. | Price Ann. Rev. Cumm. Rev. | Price Ann. Rev. Cumm. Rev. | OPEX Net Rev. Net Cashflow Start (cents/kWh)(MUSD/yr) (MUSD) |(cents/kWh) (MUSD/yr) (MUSD) |(cents/kWh) (MUSD/yr) (MUSD) |(USD/lb) (MUSD/yr) (MUSD) |(MUSD/yr) (MUSD/yr) (MUSD) ________________________________________________________________________________________________________________________________________________________________________________________ - 0 0.00 0.00 0.00 | 0.00 0.00 0.00 | 0.00 0.00 0.00 | 0.00 0.00 0.00 | 0.00 -102.56 -102.56 - 1 5.50 5.15 5.15 | 2.50 -0.06 -0.06 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.90 -100.66 - 2 5.50 5.15 10.30 | 2.50 -0.06 -0.13 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.90 -98.77 - 3 5.50 5.15 15.45 | 2.50 -0.06 -0.19 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.90 -96.87 - 4 5.50 5.15 20.60 | 2.50 -0.06 -0.25 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.90 -94.97 - 5 5.50 5.15 25.74 | 2.50 -0.06 -0.32 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.89 -93.08 - 6 5.50 5.15 30.89 | 2.50 -0.06 -0.38 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.89 -91.19 - 7 5.50 5.14 36.03 | 2.50 -0.06 -0.45 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.88 -89.30 - 8 5.50 5.13 41.16 | 2.50 -0.07 -0.51 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.87 -87.43 - 9 5.50 5.11 46.26 | 2.50 -0.07 -0.58 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.85 -85.58 - 10 5.50 5.08 51.35 | 2.50 -0.07 -0.65 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.82 -83.76 - 11 5.50 5.05 56.40 | 2.50 -0.07 -0.72 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.79 -81.97 - 12 5.50 5.01 61.41 | 2.50 -0.08 -0.80 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.74 -80.22 - 13 5.50 4.97 66.38 | 2.50 -0.08 -0.89 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.69 -78.53 - 14 5.50 4.92 71.29 | 2.50 -0.09 -0.97 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.64 -76.89 - 15 5.50 4.86 76.16 | 2.50 -0.09 -1.07 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.58 -75.31 - 16 5.50 4.81 80.96 | 2.50 -0.10 -1.17 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.52 -73.80 - 17 5.50 4.75 85.71 | 2.50 -0.11 -1.28 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.45 -72.35 - 18 5.50 4.68 90.40 | 2.50 -0.12 -1.40 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.38 -70.97 - 19 5.50 4.62 95.02 | 2.50 -0.13 -1.52 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.31 -69.66 - 20 5.50 4.56 99.57 | 2.50 -0.13 -1.66 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.23 -68.43 - 21 5.50 4.49 104.06 | 2.50 -0.14 -1.80 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.16 -67.27 - 22 5.50 4.43 108.49 | 2.50 -0.15 -1.96 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.08 -66.19 - 23 5.50 4.36 112.85 | 2.50 -0.16 -2.12 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 1.01 -65.18 - 24 5.50 4.30 117.15 | 2.50 -0.17 -2.29 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 0.93 -64.25 - 25 5.50 4.23 121.38 | 2.50 -0.18 -2.48 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 0.86 -63.40 - 26 5.50 4.17 125.54 | 2.50 -0.20 -2.67 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 0.78 -62.61 - 27 5.50 4.10 129.65 | 2.50 -0.21 -2.88 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 0.71 -61.91 - 28 5.50 4.04 133.69 | 2.50 -0.22 -3.10 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 0.63 -61.27 - 29 5.50 3.98 137.67 | 2.50 -0.23 -3.33 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 0.56 -60.71 - 30 5.50 3.92 141.59 | 2.50 -0.24 -3.57 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 3.19 0.49 -60.22 + 0 0.00 0.00 0.00 | 0.00 0.00 0.00 | 0.00 0.00 0.00 | 0.00 0.00 0.00 | 0.00 -210.58 -210.58 + 1 5.50 5.15 5.15 | 2.50 -0.06 -0.06 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 10.29 -200.29 + 2 5.50 5.15 10.30 | 2.50 -0.06 -0.13 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 10.29 -190.00 + 3 5.50 5.15 15.45 | 2.50 -0.06 -0.19 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 10.29 -179.71 + 4 5.50 5.15 20.60 | 2.50 -0.06 -0.25 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 10.29 -169.43 + 5 5.50 5.15 25.74 | 2.50 -0.06 -0.32 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 10.29 -159.14 + 6 5.50 5.15 30.89 | 2.50 -0.06 -0.38 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 10.28 -148.86 + 7 5.50 5.14 36.03 | 2.50 -0.06 -0.45 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 10.26 -138.60 + 8 5.50 5.13 41.16 | 2.50 -0.07 -0.51 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 10.24 -128.36 + 9 5.50 5.11 46.26 | 2.50 -0.07 -0.58 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 10.19 -118.17 + 10 5.50 5.08 51.35 | 2.50 -0.07 -0.65 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 10.13 -108.04 + 11 5.50 5.05 56.40 | 2.50 -0.07 -0.72 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 10.05 -97.99 + 12 5.50 5.01 61.41 | 2.50 -0.08 -0.80 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 9.96 -88.03 + 13 5.50 4.97 66.38 | 2.50 -0.08 -0.89 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 9.85 -78.18 + 14 5.50 4.92 71.29 | 2.50 -0.09 -0.97 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 9.73 -68.45 + 15 5.50 4.86 76.16 | 2.50 -0.09 -1.07 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 9.60 -58.85 + 16 5.50 4.81 80.96 | 2.50 -0.10 -1.17 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 9.46 -49.39 + 17 5.50 4.75 85.71 | 2.50 -0.11 -1.28 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 9.31 -40.08 + 18 5.50 4.68 90.40 | 2.50 -0.12 -1.40 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 9.16 -30.93 + 19 5.50 4.62 95.02 | 2.50 -0.13 -1.52 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 9.00 -21.93 + 20 5.50 4.56 99.57 | 2.50 -0.13 -1.66 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 8.84 -13.09 + 21 5.50 4.49 104.06 | 2.50 -0.14 -1.80 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 8.67 -4.42 + 22 5.50 4.43 108.49 | 2.50 -0.15 -1.96 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 8.50 4.08 + 23 5.50 4.36 112.85 | 2.50 -0.16 -2.12 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 8.34 12.42 + 24 5.50 4.30 117.15 | 2.50 -0.17 -2.29 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 8.17 20.58 + 25 5.50 4.23 121.38 | 2.50 -0.18 -2.48 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 8.00 28.58 + 26 5.50 4.17 125.54 | 2.50 -0.20 -2.67 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 7.83 36.42 + 27 5.50 4.10 129.65 | 2.50 -0.21 -2.88 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 7.66 44.08 + 28 5.50 4.04 133.69 | 2.50 -0.22 -3.10 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 7.50 51.58 + 29 5.50 3.98 137.67 | 2.50 -0.23 -3.33 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 7.33 58.91 + 30 5.50 3.92 141.59 | 2.50 -0.24 -3.57 | 2.50 0.00 0.00 | 0.00 0.00 0.00 | 8.90 7.18 66.09 @@ -272,36 +272,36 @@ ________________________________________________________________________________ ********************** * S-DAC-GT PROFILE * ********************** -Year Carbon Cumm. Carbon S-DAC-GT S-DAC-GT Cumm. Cumm. Cost -Since Captured Captured Annual Cost Cash Flow Cost Per Tonne -Start (tonne/yr) (tonne) (USD/yr) (USD) (USD/tonne) - 1 78,330.80 78,330.80 17,411,627.98 17,411,627.98 222.28 - 2 78,330.80 156,661.61 17,411,627.98 34,823,255.96 222.28 - 3 78,330.79 234,992.39 17,411,624.49 52,234,880.45 222.28 - 4 78,330.21 313,322.60 17,411,495.60 69,646,376.05 222.28 - 5 78,325.28 391,647.88 17,410,399.97 87,056,776.02 222.28 - 6 78,306.33 469,954.20 17,406,187.21 104,462,963.23 222.28 - 7 78,260.16 548,214.36 17,395,925.55 121,858,888.78 222.28 - 8 78,174.81 626,389.18 17,376,954.53 139,235,843.31 222.28 - 9 78,042.38 704,431.56 17,347,515.71 156,583,359.02 222.28 - 10 77,859.43 782,290.99 17,306,849.76 173,890,208.78 222.28 - 11 77,626.22 859,917.21 17,255,012.02 191,145,220.80 222.28 - 12 77,345.52 937,262.73 17,192,616.14 208,337,836.94 222.28 - 13 77,021.56 1,014,284.29 17,120,605.40 225,458,442.34 222.28 - 14 76,659.30 1,090,943.59 17,040,081.18 242,498,523.53 222.28 - 15 76,263.89 1,167,207.48 16,952,186.81 259,450,710.33 222.28 - 16 75,840.32 1,243,047.80 16,858,034.91 276,308,745.24 222.28 - 17 75,393.28 1,318,441.08 16,758,665.93 293,067,411.17 222.28 - 18 74,927.04 1,393,368.11 16,655,027.43 309,722,438.60 222.28 - 19 74,445.39 1,467,813.51 16,547,966.62 326,270,405.23 222.28 - 20 73,951.72 1,541,765.22 16,438,231.02 342,708,636.25 222.28 - 21 73,448.95 1,615,214.17 16,326,473.66 359,035,109.91 222.28 - 22 72,939.63 1,688,153.81 16,213,260.66 375,248,370.57 222.28 - 23 72,425.96 1,760,579.76 16,099,079.76 391,347,450.33 222.28 - 24 71,909.81 1,832,489.57 15,984,349.02 407,331,799.35 222.28 - 25 71,392.80 1,903,882.37 15,869,425.07 423,201,224.42 222.28 - 26 70,876.27 1,974,758.64 15,754,610.85 438,955,835.27 222.28 - 27 70,361.40 2,045,120.04 15,640,162.58 454,595,997.86 222.28 - 28 69,849.14 2,114,969.18 15,526,295.96 470,122,293.82 222.28 - 29 69,340.31 2,184,309.49 15,413,191.67 485,535,485.49 222.28 - 30 68,860.68 2,253,170.17 15,306,577.89 500,842,063.38 222.28 +Year Carbon Cumm. Carbon S-DAC-GT S-DAC-GT Cumm. Cumm. Cost Annual Carbon +Since Captured Captured Annual Cost Cash Flow Cost Per Tonne Revenue +Start (tonne/yr) (tonne) (USD/yr) (USD) (USD/tonne) (USD/yr) + 1 78,330.80 78,330.80 17,411,627.98 17,411,627.98 222.28 14,099,544.46 + 2 78,330.80 156,661.61 17,411,627.98 34,823,255.96 222.28 14,099,544.46 + 3 78,330.79 234,992.39 17,411,624.49 52,234,880.45 222.28 14,099,541.64 + 4 78,330.21 313,322.60 17,411,495.60 69,646,376.05 222.28 14,099,437.26 + 5 78,325.28 391,647.88 17,410,399.97 87,056,776.02 222.28 14,098,550.05 + 6 78,306.33 469,954.20 17,406,187.21 104,462,963.23 222.28 14,095,138.65 + 7 78,260.16 548,214.36 17,395,925.55 121,858,888.78 222.28 14,086,828.98 + 8 78,174.81 626,389.18 17,376,954.53 139,235,843.31 222.28 14,071,466.68 + 9 78,042.38 704,431.56 17,347,515.71 156,583,359.02 222.28 14,047,627.79 + 10 77,859.43 782,290.99 17,306,849.76 173,890,208.78 222.28 14,014,697.42 + 11 77,626.22 859,917.21 17,255,012.02 191,145,220.80 222.28 13,972,720.38 + 12 77,345.52 937,262.73 17,192,616.14 208,337,836.94 222.28 13,922,193.60 + 13 77,021.56 1,014,284.29 17,120,605.40 225,458,442.34 222.28 13,863,880.93 + 14 76,659.30 1,090,943.59 17,040,081.18 242,498,523.53 222.28 13,798,674.23 + 15 76,263.89 1,167,207.48 16,952,186.81 259,450,710.33 222.28 13,727,499.34 + 16 75,840.32 1,243,047.80 16,858,034.91 276,308,745.24 222.28 13,651,257.25 + 17 75,393.28 1,318,441.08 16,758,665.93 293,067,411.17 222.28 13,570,790.49 + 18 74,927.04 1,393,368.11 16,655,027.43 309,722,438.60 222.28 13,486,866.37 + 19 74,445.39 1,467,813.51 16,547,966.62 326,270,405.23 222.28 13,400,170.93 + 20 73,951.72 1,541,765.22 16,438,231.02 342,708,636.25 222.28 13,311,309.51 + 21 73,448.95 1,615,214.17 16,326,473.66 359,035,109.91 222.28 13,220,810.92 + 22 72,939.63 1,688,153.81 16,213,260.66 375,248,370.57 222.28 13,129,133.58 + 23 72,425.96 1,760,579.76 16,099,079.76 391,347,450.33 222.28 13,036,672.46 + 24 71,909.81 1,832,489.57 15,984,349.02 407,331,799.35 222.28 12,943,766.08 + 25 71,392.80 1,903,882.37 15,869,425.07 423,201,224.42 222.28 12,850,703.25 + 26 70,876.27 1,974,758.64 15,754,610.85 438,955,835.27 222.28 12,757,729.29 + 27 70,361.40 2,045,120.04 15,640,162.58 454,595,997.86 222.28 12,665,051.65 + 28 69,849.14 2,114,969.18 15,526,295.96 470,122,293.82 222.28 12,572,845.02 + 29 69,340.31 2,184,309.49 15,413,191.67 485,535,485.49 222.28 12,481,255.72 + 30 68,860.68 2,253,170.17 15,306,577.89 500,842,063.38 222.28 12,394,922.28 diff --git a/tests/examples/S-DAC-GT.txt b/tests/examples/S-DAC-GT.txt index 9cf16ec8..8c589269 100644 --- a/tests/examples/S-DAC-GT.txt +++ b/tests/examples/S-DAC-GT.txt @@ -43,6 +43,7 @@ Economic Model,3, ---BICYCLE Levelized Cost Model Inflated Equity Interest Rate,.08, ---[-] Required for BICYCLE model Combined Income Tax Rate,.3, ---[-] Required for BICYCLE model Gross Revenue Tax Rate,0, ---[-] Required for BICYCLE model +S-DAC-GT Carbon Credit Price, 180.0, ---[USD/tonne CO2] 45Q tax credit rate or voluntary market price ***Simulation Parameters*** *************************** diff --git a/tests/test_geophires_x_client.py b/tests/test_geophires_x_client.py index f3f8fa87..25e26e5b 100644 --- a/tests/test_geophires_x_client.py +++ b/tests/test_geophires_x_client.py @@ -590,18 +590,19 @@ def test_parse_sdacgt_profile(self): 'S-DAC-GT Annual Cost (USD/yr)', 'S-DAC-GT Cumm. Cash Flow (USD)', 'Cumm. Cost Per Tonne (USD/tonne)', + 'Annual Carbon Revenue (USD/yr)', ], ) # Values below need to be synchronized if S-DAC-GT example output values change. - self.assertEqual([1, 78330.8, 78330.8, 17411627.98, 17411627.98, 222.28], sdacgt_profile[1]) + self.assertEqual([1, 78330.8, 78330.8, 17411627.98, 17411627.98, 222.28, 14099544.46], sdacgt_profile[1]) self.assertEqual( - [15, 76263.89, 1167207.48, 16952186.81, 259450710.33, 222.28], + [15, 76263.89, 1167207.48, 16952186.81, 259450710.33, 222.28, 13727499.34], sdacgt_profile[15], ) - self.assertEqual([30, 68860.68, 2253170.17, 15306577.89, 500842063.38, 222.28], sdacgt_profile[30]) + self.assertEqual([30, 68860.68, 2253170.17, 15306577.89, 500842063.38, 222.28, 12394922.28], sdacgt_profile[30]) def test_parse_economic_model(self): result = GeophiresXResult(self._get_test_file_path('examples/example3.out'))