model.ocean_solution

class OceanSolution(model.solution.Solution):

Implement all the calculations required for solutions in the Ocean sector.

OceanSolution(configuration_file_name: str)

Read configuration file.

def set_up_area_units(self, unit_adoption: model.new_unit_adoption.NewUnitAdoption) -> None:

Set up functional units. Can be land area, ocean area, units adopted.

def load_scenario(self, scenario_name: str) -> None:

Read the scenario inputs file. Load the pds scenario, ref scenario and set up the unit adoption.

def get_scenario_names(self):

Find all scenario names configure in the scenario inputs file.

def get_loaded_scenario_name(self):

Return the name of the loaded scenario.

def get_adoption_unit_increase_pds_vs_ref_final_year(self) -> float:

Return the difference between the units adopted in the pds scenario and the reference scenario for the final year of the reporting period.

def get_adoption_unit_increase_pds_final_year(self) -> float:

Return the functional units adopted in the pds scenario only, for the final year of the reporting period.

def get_global_percent_adoption_base_year(self) -> float:

Return the world current adoption as a percentage of the total functional units adopted for the base year.

def get_percent_adoption_start_year(self) -> float:

Return the functional units adopted for the start year as a percentage of the total area (or total addressable market if appropriate) for the start year of the reporting period.

def get_percent_adoption_end_year(self) -> float:

Return the functional units adopted for the final year as a percentage of the total area (or total addressable market if appropriate) for the final year of the reporting period.

def get_annual_world_first_cost_series(self) -> pandas.core.series.Series:

Calculates the annual cumulative first cost of the implementation of global units by multiplying global units (including any replacement units) installed by install cost per unit. Both PDS, Reference and conventional scenarios are calculated.

def get_marginal_first_cost(self) -> float:

Return the Marginal First Cost for the emissions reduction calculated for the study period.

The Marginal First Cost is the increase in first costs for the emissions reduction calculated for the study period. This reduction may be partly due to implementation units installed after the base year but before the study period, and hence the first costs of these units should be counted. It is the Cumulative First Cost of the PDS minus the Cumulative First Cost of the Reference Scenario(REF) or the increase in installation costs of the PDS over the REF for the study period. (US$2014 bn).

def get_cumulative_first_cost_solution(self) -> float:

Return the Cumulative First Cost for the solution.

The Cumulative First Cost is the total cost of installations that provide the emissions reduction calculated. As this includes implementation units installed prior to the start of the study period, we include the first costs of all units from the base year to the final year of analysis (inclusive) in US$2014 bn.

def get_operating_cost_series(self) -> pandas.core.series.Series:

Return the time series of the contribution of each new set of SOLUTION implementation units installed over the lifetime of the units.

Calculated only for new or replacement units installed during the analysis period. Fixed and Variable costs that are constant or changing over time are included.

def get_operating_cost(self) -> float:

Return the operating cost (or operating savings) of all implementation units (end year minus start year of study period). (US$2014 bn)

def get_lifetime_operating_savings(self) -> float:

Return the sum of all operating cost (or operating savings) of all implementation units across the study period. (US$2014 bn)

def get_lifetime_cashflow_npv_single_series( self, purchase_year: int, discount_rate: float, solution_only: Optional[bool] = False) -> pandas.core.series.Series:

Return the discounted cashflows time series (PDS relative to the Reference Scenario - first cost and operating cost) for the full lifetime of a single implementation unit.

def get_lifetime_cashflow_npv_single(self, purchase_year: Optional[int] = None) -> float:

Return the sum of the net present value of all cashflows (PDS relative to the Reference Scenario - first cost and operating cost) for the full lifetime of a single implementation unit. ($US2014 bn)

def get_lifetime_cashflow_npv_series(self) -> pandas.core.series.Series:

Return the timeseries of all discounted cashflows (first cost and operating savings) for the full lifetime of all implementation units adopted during study period.

def get_lifetime_cashflow_npv_all(self) -> float:

Return the sum of all discounted cashflows (first cost and operating savings) for the full lifetime of all implementation units adopted during study period. (US$2014 bn)

def get_payback_period_solution_only(self, purchase_year: Optional[int] = None) -> int:

Return the length of time taken to recover all investments costs where cashflows are NOT discounted.

If a decision maker is considering an outright investment in the solution technology, he would want to know the payback of the solution in the absence of any conventional comparator. Some payback analysis calls for discounting cashflows, others do not.

def get_payback_period_solution_only_npv(self, purchase_year: Optional[int] = None) -> int:

Return the length of time taken to recover all investments costs where cashflows ARE discounted.

If a decision maker is considering an outright investment in the solution technology, he would want to know the payback of the solution in the absence of any conventional comparator. Some payback analysis calls for discounting cashflows, others do not.

def get_payback_period_solution_vs_conventional(self, purchase_year: Optional[int] = None) -> int:

Return the length of time taken to recover all investments costs (above and beyond the conventional technology costs) where cashflows are NOT discounted.

If a decision maker is comparing two projects, one with the conventional technology,and another with the solution technology, she would want to know the relative payback. Some Payback analysis calls for discounting cashflows, others do not.

def get_payback_period_solution_vs_conventional_npv(self, purchase_year: Optional[int] = None) -> int:

Return the length of time taken to recover all investments costs (above and beyond the conventional technology costs) where cashflows ARE discounted.

If a decision maker is comparing two projects, one with the conventional technology,and another with the solution technology, she would want to know the relative payback. Some Payback analysis calls for discounting cashflows, others do not.

def get_abatement_cost(self) -> float:

Return the discounted lifetime cost of the solution.

This is calculated as PDS - REF, including First Costs and Operating Savings, but only for those years of the analysis, divided by the total emissions reduction during those years.

def get_net_profit_margin_series(self) -> pandas.core.series.Series:

Return the time series of Net Profit Margin of all implementation units across the study period.

def get_net_profit_margin(self) -> float:

Return the Net Profit Margin of all implementation units during the study period only (value at end minus value at start).

def get_lifetime_profit_margin(self) -> float:

Return the Net Profit Margin for the full lifetime (to 2139) of all implementation units in use during study period.

Note that this may include units adopted prior to the start year, and may extend past the end year.

def get_emissions_reduction_series(self) -> pandas.core.series.Series:

Return the time series of reduced emissions.

Annual CO2 reductions by region and year are calculated by adding reduced emissions derived from the electric grid, the replaced emissions derived from clean renewables, the net direct emissions derived from non-electric/non-fuel consumption, and the reduced emissions derived from fuel efficiency, and then subtracting the net indirect emissions. Most solutions will not use all of the defined factors.

The emissions values used are from the regional future grid BAU CO2 emission intensity values (by year) from the AMPERE 3 MESSAGE Base model used in the IPCC 5th Assessment Report WG3.

def get_total_emissions_reduction(self):

Return the sum of all emissions reduced in the PDS Scenario versus the REF Scenario over the study period. (Gt CO2)

def get_max_annual_emissions_reduction(self) -> float:

Return the maximum reduction of all years in the reporting period

def get_emissions_reduction_final_year(self):

Return the reduction in the final year

def get_carbon_sequestration_series(self):

Return a time series of the sequestration amount for each year in the reporting period

def get_total_co2_sequestered(self) -> float:

The total CO2-eq sequestered in the PDS but not in the REF Scenario.

def get_max_annual_co2_sequestered(self) -> float:

Return the highest rate of sequestration during the period of analysis.

def get_co2_sequestered_final_year(self) -> float:

Return CO2 Sequestered in the final year of the reporting period.

def get_change_in_ppm_equivalent_series(self) -> pandas.core.series.Series:

Return the time series of reduced PPM of CO2 equivalent for each year in the reporting period.

Each yearly reduction in CO2 (in million metric ton - MMT) is modeled as a discrete avoided pulse. A Simplified atmospheric lifetime function for CO2 is taken from Myhrvald and Caldeira (2012) based on the Bern Carbon Cycle model. Atmospheric tons of CO2 are converted to parts per million CO2 based on the molar mass of CO2 and the moles of atmosphere. CO2-eq emissions are treated as CO2 for simplicity and due to the lack of detailed information on emissions of other GHGs. If these other GHGs are a significant part of overall reductions, this model may not be appropriate.

def get_change_in_ppm_equivalent(self) -> float:

Return the CO2 atmospheric concentration change (in parts-per-million) estimated as a result of the PDS scenario compared to the REF scenario, in the final year of the reporting period only.

def get_change_in_ppm_equivalent_final_year(self) -> float:

Return the CO2 atmospheric concentration change (in Parts-per-Million) estimated as a result of the PDS scenario compared to the REF scenario, in the final year minus the penultimate year.

def get_reduced_area_degradation(self) -> float:

Return the expected reduction in land/ocean degradation (of solution land/ocean type) as a result of the adoption of the solution over study period.

def get_carbon_under_protection_final_year(self) -> float:

"Calculate the sum of the increase in adoption in the final year and the degraded area under protection for the solution in the final year. Return this sum multiplied by the carbon storage in the protected area type.

def get_co2_under_protection_final_year(self) -> float:

Return the carbon under protection in the final year multiplied by the carbon-to-co2 ratio (3.664).

def key_results(self) -> dict:

Define key results for ocean scenarios.