Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions idaes/core/base/costing_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,14 @@
# This plays with some private attributes - most are necessary
# pylint: disable=protected-access

import json
import os

from functools import partial

import pyomo.environ as pyo
from pyomo.common.config import ConfigBlock, ConfigValue
from pyomo.common.fileutils import this_file_dir
from pyomo.util.calc_var_value import calculate_variable_from_constraint
from pyomo.contrib.fbbt.fbbt import compute_bounds_on_expr

Expand Down Expand Up @@ -98,6 +102,41 @@ def register_idaes_currency_units():
)


def load_location_factor():
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
def load_location_factor():
def load_location_factors():

"""
Estimate the cost of constructing the same plant in different global locations using location factors.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Estimate the cost of constructing the same plant in different global locations using location factors.
Estimate the cost of constructing the same plant in different regions using location factors.


This method uses a location (or investment site) factor to adjust the total permanent investment (TPI)
based on regional differences in labor costs, workforce efficiency, local regulations and customs,
union status, and other local economic conditions.

Reference:
Seider, Warren D., et al. *Product and Process Design Principles: Synthesis, Analysis, and Evaluation.*
John Wiley & Sons, 2016.

The conversion equation is given by:

.. math::
C_{TPI, corrected} = F_{ISF} \times C_{TPI}

where:
- :math:`C` represents cost,
- :math:`F` represents a factor,
- :math:`TPI` is the total plant investment, and
- :math:`ISF` is the investment site factor (i.e., location factor).

Location factors for 139 countries are sourced from Compass International (2017):
https://www.compassinternational.net/wp-content/uploads/2017/01/Worldwide-Industrial.pdf

Note: For some countries, multiple city-specific location factors are provided.
The benchmark location is Washington, D.C., USA.
"""
directory = this_file_dir()
with open(os.path.join(directory, "location_factors.json"), "r") as file:
location_factors = json.load(file)
return location_factors


class DefaultCostingComponents(StrEnum):
"""
Costing components Enum
Expand Down Expand Up @@ -169,6 +208,9 @@ def build(self):
self.base_currency = None
self.base_period = pyo.units.year

# Set the location factor
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Set the location factor
# Set the location factor, default U.S. Washington DC, location_factor = 1.00

self.location_factor = ("United States", "Washington DC")

# Register unit mapping
self._costing_methods_map = {}
self._build_costing_methods_map()
Expand Down
Loading
Loading