From 620036ca954ad437a2c0e7dd0af5809f01c55a79 Mon Sep 17 00:00:00 2001 From: kurbansitterley Date: Sat, 22 Nov 2025 15:42:45 -0700 Subject: [PATCH 1/6] initial intro section --- docs/technical_reference/costing/costing_base.rst | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/technical_reference/costing/costing_base.rst b/docs/technical_reference/costing/costing_base.rst index 1babe9db64..c4bb3031a3 100644 --- a/docs/technical_reference/costing/costing_base.rst +++ b/docs/technical_reference/costing/costing_base.rst @@ -360,6 +360,18 @@ The total variable operating cost is the sum of the total variable operating cos Aggregate Metrics ------------------ +Built in methods can be used to add variables and constraints for common aggregate metrics used in WaterTAP technoeconomic analyses. +The following metrics can be added to the WaterTAPCostingBlockData class by calling the respective method. + +.. csv-table:: + :header: "Method", "Description" + :widths: 20, 80 + + "``add_LCOW``", "Adds Levelized Cost of Water (LCOW) variable and constraint" + "``add_specific_energy_consumption``", "Adds specific energy consumption variable and constraint" + "``add_specific_electrical_carbon_intensity``", "Adds specific electrical carbon intensity variable and constraint" + "``add_annual_water_production``", "Adds annual water production variable and constraint" + Levelized Cost of Water (LCOW) ++++++++++++++++++++++++++++++ From 55db7665683e4e4d82070eaba70e566b3c50d7f8 Mon Sep 17 00:00:00 2001 From: kurbansitterley Date: Sun, 23 Nov 2025 14:22:07 -0700 Subject: [PATCH 2/6] document LCOW breakdowns --- .../costing/costing_base.rst | 71 ++++++++++++++++--- 1 file changed, 63 insertions(+), 8 deletions(-) diff --git a/docs/technical_reference/costing/costing_base.rst b/docs/technical_reference/costing/costing_base.rst index c4bb3031a3..dfd4a74c9b 100644 --- a/docs/technical_reference/costing/costing_base.rst +++ b/docs/technical_reference/costing/costing_base.rst @@ -56,7 +56,8 @@ The WaterTAP Costing Framework extends the functionality of the `IDAES Process C ) -2. The method ``register_flow_type`` will create a new Expression if a costing component is not already defined *and* the costing component is not constant. The default behavior in IDAES is to always create a new Var. This allows the user to specify intermediate values in ``register_flow_type``. +2. The method ``register_flow_type`` will create a new Expression if a costing component is not already defined *and* the costing component is not constant. +The default behavior in IDAES is to always create a new Var. This allows the user to specify intermediate values in ``register_flow_type``. .. testcode:: @@ -360,17 +361,28 @@ The total variable operating cost is the sum of the total variable operating cos Aggregate Metrics ------------------ -Built in methods can be used to add variables and constraints for common aggregate metrics used in WaterTAP technoeconomic analyses. -The following metrics can be added to the WaterTAPCostingBlockData class by calling the respective method. +Built in methods can be used to add expressions for common aggregate metrics used in technoeconomic analyses of water systems. +The following metrics can be added to the costing block by calling the respective method: .. csv-table:: - :header: "Method", "Description" + :header: "Method", "Default Expression Name", "Description" :widths: 20, 80 - "``add_LCOW``", "Adds Levelized Cost of Water (LCOW) variable and constraint" - "``add_specific_energy_consumption``", "Adds specific energy consumption variable and constraint" - "``add_specific_electrical_carbon_intensity``", "Adds specific electrical carbon intensity variable and constraint" - "``add_annual_water_production``", "Adds annual water production variable and constraint" + "``add_LCOW``", "``LCOW``", "Adds Levelized Cost of Water (LCOW) variable and constraint" + "``add_specific_energy_consumption``", "``specific_energy_consumption``", "Adds specific energy consumption variable and constraint" + "``add_specific_electrical_carbon_intensity``", "``specific_electrical_carbon_intensity``", "Adds specific electrical carbon intensity variable and constraint" + "``add_annual_water_production``", "``annual_water_production``", "Adds annual water production variable and constraint" + +Each of these methods requires the user pass a volumetric flow rate :math:`Q` (with units of volume per time) to be used as the basis for the calculation. +Users can optionally provide custom names for the created expression via the `name` keyword argument. For example, creating an expression called ``SEC`` on ``m.fs.costing`` +based on ``flow_rate`` would be: + +.. code-block:: python + + m.fs.costing.add_specific_energy_consumption( + flow_rate, + name="SEC", + ) Levelized Cost of Water (LCOW) ++++++++++++++++++++++++++++++ @@ -381,6 +393,49 @@ For a given volumetric flow :math:`Q`, the LCOW, :math:`LCOW_{Q}` is calculated LCOW_{Q} = \frac{f_{crf} C_{ca,tot} + C_{op,tot}}{f_{util} Q} +In addition to creating the LCOW expression at the system level, the ``add_LCOW`` method will create the following indexed expressions +to further break down the cost components contributing to the LCOW: + +.. csv-table:: + :header: "Description", "Default Expression Name", "Index", "Equation" + + "Direct capital expenditure by flowsheet component", "``LCOW_component_direct_capex``", "Unit model flowsheet name", ":math:`\frac{f_{crf} C_{dir,u}}{f_{util} Q}`" + "Indirect capital expenditure by flowsheet component", "``LCOW_component_indirect_capex``", "Unit model flowsheet name", ":math:`\frac{f_{crf} C_{indir,u}}{f_{util} Q}`" + "Fixed operating expenditure by flowsheet component", "``LCOW_component_fixed_opex``", "Unit model flowsheet name", ":math:`\frac{f_{crf} C_{fop,u}}{f_{util} Q}`" + "Variable operating expenditure by flowsheet component", "``LCOW_component_variable_opex``", "Unit model flowsheet name _or_ flow name", ":math:`\frac{f_{crf} C_{vop,u}}{f_{util} Q}`" + "Aggregate direct capital expenditure by unit type", "``LCOW_aggregate_direct_capex``", "Unit model class name", ":math:`\frac{f_{crf} \sum C_{dir,u}}{f_{util} Q}`" + "Aggregate indirect capital expenditure by unit type", "``LCOW_aggregate_indirect_capex``", "Unit model class name", ":math:`\frac{f_{crf} \sum C_{indir,u}}{f_{util} Q}`" + "Aggregate fixed operating expenditure by unit type", "``LCOW_aggregate_fixed_opex``", "Unit model class name", ":math:`\frac{f_{crf} \sum C_{fop,u}}{f_{util} Q}`" + "Aggregate variable operating expenditure by unit type", "``LCOW_aggregate_variable_opex``", "Unit model class name _or_ flow name", ":math:`\frac{f_{crf} \sum C_{vop,u}}{f_{util} Q}`" + +Note, the difference between the "component" and "aggregate" expressions is that the component expressions break down costs by individual unit model instances, +while the aggregate expressions sum costs by unit model class (e.g., Mixer, Pump, RO Unit, etc.). So, if there are multiple pumps on the flowsheet, the individual contributions +to LCOW from each pump would be available in the ``LCOW_component_*`` expressions, while the total contribution from all pumps would be available as ``LCOW_aggregate_*`` expressions. +The ``LCOW_component_*`` expressions are indexed by the unit model flowsheet name. This is the name that is assigned when the unit model +is added to the flowsheet. For example, if you add a unit model as ``m.fs.unit1 = MyUnitModel()``, the name used in the LCOW component expressions will be ``fs.unit1``. +The indexes for the ``LCOW_aggregate_*`` expressions are by unit model class name, which is the string representation of the class used to define the unit model. + +Importantly, both ``LCOW_component_variable_opex`` and ``LCOW_aggregate_variable_opex`` expressions are also indexed by flow name for registered flows. +Energy (e.g., ``electricity``) and material (e.g., ``naocl``, ``caustic``) flows registered with the costing package will have their variable operating costs +broken out in these expressions. This allows the user to see the contribution of individual flow costs to the overall LCOW. + +For a example of the breakdowns presented by each of these expressions, consider a flowsheet that has two pump units (``m.fs.pump1``, ``m.fs.pump2``) and one chemical addition +unit (``m.fs.chem_add``), and has registered ``electricity`` and ``anti_scalant`` flows. The user adds the LCOW via ``m.fs.costing.add_LCOW(flow_rate)``. The following indexes would be available: + +* ``LCOW_component_direct_capex``: ``fs.pump1``, ``fs.pump2``, ``fs.chem_add`` +* ``LCOW_component_indirect_capex``: ``fs.pump1``, ``fs.pump2``, ``fs.chem_add`` +* ``LCOW_component_fixed_opex``: ``fs.pump1``, ``fs.pump2``, ``fs.chem_add`` +* ``LCOW_component_variable_opex``: ``fs.pump1``, ``fs.pump2``, ``fs.chem_add``, ``electricity``, ``anti_scalant`` +* ``LCOW_aggregate_direct_capex``: ``Pump``, ``ChemicalAdditionZO`` +* ``LCOW_aggregate_indirect_capex``: ``Pump``, ``ChemicalAdditionZO`` +* ``LCOW_aggregate_fixed_opex``: ``Pump``, ``ChemicalAdditionZO`` +* ``LCOW_aggregate_variable_opex``: ``Pump``, ``ChemicalAdditionZO``, ``electricity``, ``anti_scalant`` + +Importantly, the contribution of ``electricity`` and ``anti_scalant`` flows to the LCOW is found as both an individual contribution as as part of the individual unit model breakdown. For example, ``electricity`` is counted both in +``LCOW_component_variable_opex['electricity']`` as well as part of the ``LCOW_component_variable_opex`` for each of the unit models that contribute electricity flow (e.g. ``LCOW_component_variable_opex['fs.pump1']`` includes the electricity cost for pump1). +Similarly, ``electricity`` is counted both as ``LCOW_aggregate_variable_opex['electricity']`` as well as part of the ``LCOW_aggregate_variable_opex['Pump']``. For this reason, the system LCOW +is the summatio nof all indexes in any of the component or aggregate expressions _except_ those indexed by flow. + Specific Energy Consumption +++++++++++++++++++++++++++ From 3d507f8134d33a82babdf1e35c2737a76f6397ba Mon Sep 17 00:00:00 2001 From: kurbansitterley Date: Sun, 23 Nov 2025 14:48:48 -0700 Subject: [PATCH 3/6] few corrections and improvements --- .../costing/costing_base.rst | 42 ++++++++++--------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/docs/technical_reference/costing/costing_base.rst b/docs/technical_reference/costing/costing_base.rst index dfd4a74c9b..fcc6b9883d 100644 --- a/docs/technical_reference/costing/costing_base.rst +++ b/docs/technical_reference/costing/costing_base.rst @@ -366,9 +366,8 @@ The following metrics can be added to the costing block by calling the respectiv .. csv-table:: :header: "Method", "Default Expression Name", "Description" - :widths: 20, 80 - "``add_LCOW``", "``LCOW``", "Adds Levelized Cost of Water (LCOW) variable and constraint" + "``add_LCOW``", "``LCOW``", "Adds LCOW variable and constraint" "``add_specific_energy_consumption``", "``specific_energy_consumption``", "Adds specific energy consumption variable and constraint" "``add_specific_electrical_carbon_intensity``", "``specific_electrical_carbon_intensity``", "Adds specific electrical carbon intensity variable and constraint" "``add_annual_water_production``", "``annual_water_production``", "Adds annual water production variable and constraint" @@ -397,18 +396,23 @@ In addition to creating the LCOW expression at the system level, the ``add_LCOW` to further break down the cost components contributing to the LCOW: .. csv-table:: - :header: "Description", "Default Expression Name", "Index", "Equation" - - "Direct capital expenditure by flowsheet component", "``LCOW_component_direct_capex``", "Unit model flowsheet name", ":math:`\frac{f_{crf} C_{dir,u}}{f_{util} Q}`" - "Indirect capital expenditure by flowsheet component", "``LCOW_component_indirect_capex``", "Unit model flowsheet name", ":math:`\frac{f_{crf} C_{indir,u}}{f_{util} Q}`" - "Fixed operating expenditure by flowsheet component", "``LCOW_component_fixed_opex``", "Unit model flowsheet name", ":math:`\frac{f_{crf} C_{fop,u}}{f_{util} Q}`" - "Variable operating expenditure by flowsheet component", "``LCOW_component_variable_opex``", "Unit model flowsheet name _or_ flow name", ":math:`\frac{f_{crf} C_{vop,u}}{f_{util} Q}`" - "Aggregate direct capital expenditure by unit type", "``LCOW_aggregate_direct_capex``", "Unit model class name", ":math:`\frac{f_{crf} \sum C_{dir,u}}{f_{util} Q}`" - "Aggregate indirect capital expenditure by unit type", "``LCOW_aggregate_indirect_capex``", "Unit model class name", ":math:`\frac{f_{crf} \sum C_{indir,u}}{f_{util} Q}`" - "Aggregate fixed operating expenditure by unit type", "``LCOW_aggregate_fixed_opex``", "Unit model class name", ":math:`\frac{f_{crf} \sum C_{fop,u}}{f_{util} Q}`" - "Aggregate variable operating expenditure by unit type", "``LCOW_aggregate_variable_opex``", "Unit model class name _or_ flow name", ":math:`\frac{f_{crf} \sum C_{vop,u}}{f_{util} Q}`" - -Note, the difference between the "component" and "aggregate" expressions is that the component expressions break down costs by individual unit model instances, + :header: "Description", "Default Expression Name :sup:`1`", "Index", "Equation :sup:`2`" + + "Direct capital expenditure by flowsheet component", "``LCOW_component_direct_capex``", "Unit model flowsheet name ", ":math:`\cfrac{f_{crf} C_{dir,i}}{f_{util} Q}`" + "Indirect capital expenditure by flowsheet component", "``LCOW_component_indirect_capex``", "Unit model flowsheet name", ":math:`\cfrac{f_{crf} C_{indir,i}}{f_{util} Q}`" + "Fixed operating expenditure by flowsheet component", "``LCOW_component_fixed_opex``", "Unit model flowsheet name", ":math:`\cfrac{f_{crf} C_{fop,i}}{f_{util} Q}`" + "Variable operating expenditure by flowsheet component", "``LCOW_component_variable_opex``", "Unit model flowsheet name *or* flow name", ":math:`\cfrac{f_{crf} C_{vop,i}}{f_{util} Q}`" + "Aggregate direct capital expenditure by unit type", "``LCOW_aggregate_direct_capex``", "Unit model class name", ":math:`\cfrac{f_{crf} \sum C_{dir,u}}{f_{util} Q}`" + "Aggregate indirect capital expenditure by unit type", "``LCOW_aggregate_indirect_capex``", "Unit model class name", ":math:`\cfrac{f_{crf} \sum C_{indir,u}}{f_{util} Q}`" + "Aggregate fixed operating expenditure by unit type", "``LCOW_aggregate_fixed_opex``", "Unit model class name", ":math:`\cfrac{f_{crf} \sum C_{fop,u}}{f_{util} Q}`" + "Aggregate variable operating expenditure by unit type", "``LCOW_aggregate_variable_opex``", "Unit model class name *or* flow name", ":math:`\cfrac{f_{crf} \sum C_{vop,u}}{f_{util} Q}`" + +.. note:: + :sup:`1` The default expression names prepend the method argument `name` to the extended variable name; e.g., ``add_LCOW(flow_rate, name="MyLCOW")``, will result in ``MyLCOW_component_direct_capex``. + + :sup:`2` The index :math:`i` refers to individual unit model instances on the flowsheet, while :math:`u` refers to unit model classes. + +Note, the difference between the "component" and "aggregate" expressions: the component expressions break down costs by individual unit model instances, while the aggregate expressions sum costs by unit model class (e.g., Mixer, Pump, RO Unit, etc.). So, if there are multiple pumps on the flowsheet, the individual contributions to LCOW from each pump would be available in the ``LCOW_component_*`` expressions, while the total contribution from all pumps would be available as ``LCOW_aggregate_*`` expressions. The ``LCOW_component_*`` expressions are indexed by the unit model flowsheet name. This is the name that is assigned when the unit model @@ -419,8 +423,8 @@ Importantly, both ``LCOW_component_variable_opex`` and ``LCOW_aggregate_variable Energy (e.g., ``electricity``) and material (e.g., ``naocl``, ``caustic``) flows registered with the costing package will have their variable operating costs broken out in these expressions. This allows the user to see the contribution of individual flow costs to the overall LCOW. -For a example of the breakdowns presented by each of these expressions, consider a flowsheet that has two pump units (``m.fs.pump1``, ``m.fs.pump2``) and one chemical addition -unit (``m.fs.chem_add``), and has registered ``electricity`` and ``anti_scalant`` flows. The user adds the LCOW via ``m.fs.costing.add_LCOW(flow_rate)``. The following indexes would be available: +For an example of the breakdowns presented by each of these expressions, consider a flowsheet that has two pump units (``m.fs.pump1``, ``m.fs.pump2``) and one chemical addition +unit (``m.fs.chem_add``), and has registered ``electricity`` and ``anti_scalant`` flows. The user adds the LCOW via ``m.fs.costing.add_LCOW(flow_rate)``. The following expressions and indexes would be available on ``m.fs.costing``: * ``LCOW_component_direct_capex``: ``fs.pump1``, ``fs.pump2``, ``fs.chem_add`` * ``LCOW_component_indirect_capex``: ``fs.pump1``, ``fs.pump2``, ``fs.chem_add`` @@ -431,10 +435,10 @@ unit (``m.fs.chem_add``), and has registered ``electricity`` and ``anti_scalant` * ``LCOW_aggregate_fixed_opex``: ``Pump``, ``ChemicalAdditionZO`` * ``LCOW_aggregate_variable_opex``: ``Pump``, ``ChemicalAdditionZO``, ``electricity``, ``anti_scalant`` -Importantly, the contribution of ``electricity`` and ``anti_scalant`` flows to the LCOW is found as both an individual contribution as as part of the individual unit model breakdown. For example, ``electricity`` is counted both in -``LCOW_component_variable_opex['electricity']`` as well as part of the ``LCOW_component_variable_opex`` for each of the unit models that contribute electricity flow (e.g. ``LCOW_component_variable_opex['fs.pump1']`` includes the electricity cost for pump1). +Importantly, the contribution of flows to the LCOW is found as both an individual contribution to individual unit model breakdownd *and* as separate entries. For example, ``electricity`` is counted both in +``LCOW_component_variable_opex['electricity']`` as well as part of the ``LCOW_component_variable_opex`` for each of the unit models that contribute electricity flow (e.g., ``LCOW_component_variable_opex['fs.pump1']`` includes the electricity cost for pump1). Similarly, ``electricity`` is counted both as ``LCOW_aggregate_variable_opex['electricity']`` as well as part of the ``LCOW_aggregate_variable_opex['Pump']``. For this reason, the system LCOW -is the summatio nof all indexes in any of the component or aggregate expressions _except_ those indexed by flow. +is the summation of all indexes in any of the component or aggregate expressions *except* those indexed by flow. Specific Energy Consumption +++++++++++++++++++++++++++ From 12c81980df9d12f3df5dfd30bb535b8737d15036 Mon Sep 17 00:00:00 2001 From: kurbansitterley Date: Thu, 4 Dec 2025 16:26:53 -0700 Subject: [PATCH 4/6] fix typo --- watertap/costing/watertap_costing_package.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/watertap/costing/watertap_costing_package.py b/watertap/costing/watertap_costing_package.py index 37e367f27d..6b0245f463 100644 --- a/watertap/costing/watertap_costing_package.py +++ b/watertap/costing/watertap_costing_package.py @@ -314,7 +314,7 @@ def add_annual_water_production(self, flow_rate, name="annual_water_production") Args: flow_rate - flow rate of water (volumetric) to be used in calculating annual water production - name (optional) - name for the annual water productionvariable + name (optional) - name for the annual water production Expression (default: annual_water_production) """ self.add_component( From 9112f2eaf7cf4ad99bb323723144a97d332111cf Mon Sep 17 00:00:00 2001 From: kurbansitterley Date: Thu, 4 Dec 2025 16:27:19 -0700 Subject: [PATCH 5/6] add SEC and carbon intensity breakdown section --- .../costing/costing_base.rst | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/docs/technical_reference/costing/costing_base.rst b/docs/technical_reference/costing/costing_base.rst index fcc6b9883d..b13f153ee4 100644 --- a/docs/technical_reference/costing/costing_base.rst +++ b/docs/technical_reference/costing/costing_base.rst @@ -417,7 +417,7 @@ while the aggregate expressions sum costs by unit model class (e.g., Mixer, Pump to LCOW from each pump would be available in the ``LCOW_component_*`` expressions, while the total contribution from all pumps would be available as ``LCOW_aggregate_*`` expressions. The ``LCOW_component_*`` expressions are indexed by the unit model flowsheet name. This is the name that is assigned when the unit model is added to the flowsheet. For example, if you add a unit model as ``m.fs.unit1 = MyUnitModel()``, the name used in the LCOW component expressions will be ``fs.unit1``. -The indexes for the ``LCOW_aggregate_*`` expressions are by unit model class name, which is the string representation of the class used to define the unit model. +The indexes for the ``LCOW_aggregate_*`` expressions are by unit model class name, which is the string representation of the class used to define the unit model (e.g., "ReverseOsmosis0D", "Pump"). Importantly, both ``LCOW_component_variable_opex`` and ``LCOW_aggregate_variable_opex`` expressions are also indexed by flow name for registered flows. Energy (e.g., ``electricity``) and material (e.g., ``naocl``, ``caustic``) flows registered with the costing package will have their variable operating costs @@ -435,7 +435,7 @@ unit (``m.fs.chem_add``), and has registered ``electricity`` and ``anti_scalant` * ``LCOW_aggregate_fixed_opex``: ``Pump``, ``ChemicalAdditionZO`` * ``LCOW_aggregate_variable_opex``: ``Pump``, ``ChemicalAdditionZO``, ``electricity``, ``anti_scalant`` -Importantly, the contribution of flows to the LCOW is found as both an individual contribution to individual unit model breakdownd *and* as separate entries. For example, ``electricity`` is counted both in +The contribution of flows to the LCOW is found as both an individual contribution to individual unit model breakdown *and* as separate entries. For example, ``electricity`` is counted both in ``LCOW_component_variable_opex['electricity']`` as well as part of the ``LCOW_component_variable_opex`` for each of the unit models that contribute electricity flow (e.g., ``LCOW_component_variable_opex['fs.pump1']`` includes the electricity cost for pump1). Similarly, ``electricity`` is counted both as ``LCOW_aggregate_variable_opex['electricity']`` as well as part of the ``LCOW_aggregate_variable_opex['Pump']``. For this reason, the system LCOW is the summation of all indexes in any of the component or aggregate expressions *except* those indexed by flow. @@ -449,6 +449,15 @@ For a given volumetric flow `Q`, the specific energy consumption, :math:`E_{spec E_{spec,Q} = \frac{C_{el,tot}}{Q} +Additionally, the specific energy consumption will be broken down by unit model. An expression is created with ``_component`` prepended to the name provided by the user (or ``specific_energy_consumption`` by default). +This expression is indexed by unit model flowsheet name and is calculated as + + .. math:: + + E^{component}_{spec,Q,i} = \frac{C_{el,i}}{Q} + +For a flowsheet with two pump units (``m.fs.pump1``, ``m.fs.pump2``), calling ``m.fs.costing.add_specific_energy_consumption(flow_rate, name="SEC")`` would create ``m.fs.costing.SEC`` and ``m.fs.costing.SEC_component`` indexed by ``fs.pump1`` and ``fs.pump2``. + Specific Electrical Carbon Intensity ++++++++++++++++++++++++++++++++++++ @@ -458,6 +467,15 @@ For a given volumetric flow `Q`, the specific electrical carbon intensity, :math E^{C}_{spec,Q} = \frac{f_{eci} C_{el,tot}}{Q} +Additionally, the specific electrical carbon intensity will be broken down by unit model. An expression is created with ``_component`` prepended to the name provided by the user (or ``specific_electrical_carbon_intensity`` by default). +This expression is indexed by unit model flowsheet name and is calculated as + + .. math:: + + E^{C}_{spec,Q,i} = \frac{f_{eci} C_{el,i}}{Q} + +For a flowsheet with two pump units (``m.fs.pump1``, ``m.fs.pump2``), calling ``m.fs.costing.add_specific_electrical_carbon_intensity(flow_rate, name="SECI")`` would create ``m.fs.costing.SECI`` and ``m.fs.costing.SECI_component`` indexed by ``fs.pump1`` and ``fs.pump2``. + Annual Water Production +++++++++++++++++++++++ From 561336b46ebfbdabfa039edc6aee42434d960b51 Mon Sep 17 00:00:00 2001 From: kurbansitterley Date: Thu, 4 Dec 2025 16:34:58 -0700 Subject: [PATCH 6/6] small mod --- docs/technical_reference/costing/costing_base.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/technical_reference/costing/costing_base.rst b/docs/technical_reference/costing/costing_base.rst index b13f153ee4..10e5498beb 100644 --- a/docs/technical_reference/costing/costing_base.rst +++ b/docs/technical_reference/costing/costing_base.rst @@ -413,7 +413,7 @@ to further break down the cost components contributing to the LCOW: :sup:`2` The index :math:`i` refers to individual unit model instances on the flowsheet, while :math:`u` refers to unit model classes. Note, the difference between the "component" and "aggregate" expressions: the component expressions break down costs by individual unit model instances, -while the aggregate expressions sum costs by unit model class (e.g., Mixer, Pump, RO Unit, etc.). So, if there are multiple pumps on the flowsheet, the individual contributions +while the aggregate expressions sum costs by unit model class (e.g., Mixer, Pump, ReverseOsmosis0D, etc.). So, if there are multiple pumps on the flowsheet, the individual contributions to LCOW from each pump would be available in the ``LCOW_component_*`` expressions, while the total contribution from all pumps would be available as ``LCOW_aggregate_*`` expressions. The ``LCOW_component_*`` expressions are indexed by the unit model flowsheet name. This is the name that is assigned when the unit model is added to the flowsheet. For example, if you add a unit model as ``m.fs.unit1 = MyUnitModel()``, the name used in the LCOW component expressions will be ``fs.unit1``. @@ -472,7 +472,7 @@ This expression is indexed by unit model flowsheet name and is calculated as .. math:: - E^{C}_{spec,Q,i} = \frac{f_{eci} C_{el,i}}{Q} + E^{C,comp}_{spec,Q,i} = \frac{f_{eci} C_{el,i}}{Q} For a flowsheet with two pump units (``m.fs.pump1``, ``m.fs.pump2``), calling ``m.fs.costing.add_specific_electrical_carbon_intensity(flow_rate, name="SECI")`` would create ``m.fs.costing.SECI`` and ``m.fs.costing.SECI_component`` indexed by ``fs.pump1`` and ``fs.pump2``.