From b38e0f3cbd33e03182f463fba5ca6ec90ea2a2dd Mon Sep 17 00:00:00 2001 From: Darice L Guittet Date: Wed, 13 Mar 2024 13:20:30 -0600 Subject: [PATCH 01/22] Hybrids in PySAM (#162) * add tests for updated PySSC * add hybrids * update hybrids and add tests * remove set_data_ptr * update ctypes and PySSC * add yml for github actions CI * update yml * update yml * update yml * update yml * update yml * update yml * update yml * update yml * remove hybrid_sandbox --- .github/workflows/test_pkg.yml | 53 + docs/lists/configs.rst | 336 ++--- docs/lists/models.rst | 8 + docs/modules/Battery.rst | 6 + docs/modules/Fuelcell.rst | 6 + docs/modules/GenericSystem.rst | 8 + docs/modules/Grid.rst | 6 + docs/modules/HostDeveloper.rst | 14 + docs/modules/Hybrid.rst | 35 + docs/modules/HybridSteps.rst | 35 + docs/modules/Pvsamv1.rst | 94 ++ docs/modules/Pvwattsv8.rst | 12 +- docs/modules/Singleowner.rst | 14 +- docs/modules/Utilityrate5.rst | 6 + docs/modules/Windpower.rst | 8 +- files/Hybrids/BatteryHybrid.py | 55 + files/Hybrids/BatteryHybrid.pyi | 552 +++++++ files/Hybrids/FuelCellHybrid.py | 61 + files/Hybrids/FuelCellHybrid.pyi | 160 +++ files/Hybrids/GenericSystemHybrid.py | 8 + files/Hybrids/GenericSystemHybrid.pyi | 126 ++ files/Hybrids/HybridBase.py | 208 +++ files/Hybrids/HybridBase.pyi | 9 + files/Hybrids/HybridSystem.py | 159 +++ files/Hybrids/PVHybrid.py | 8 + files/Hybrids/PVHybrid.pyi | 1580 +++++++++++++++++++++ files/Hybrids/PVWattsHybrid.py | 8 + files/Hybrids/PVWattsHybrid.pyi | 221 +++ files/Hybrids/WindHybrid.py | 8 + files/Hybrids/WindHybrid.pyi | 220 +++ files/Hybrids/__init__.py | 8 + files/PySSC.py | 52 +- modules/Battery.c | 326 ++++- modules/BatteryStateful.c | 4 +- modules/Battwatts.c | 4 +- modules/Belpe.c | 4 +- modules/Biomass.c | 4 +- modules/Cashloan.c | 60 +- modules/CbConstructionFinancing.c | 4 +- modules/CbEmpiricalHceHeatLoss.c | 4 +- modules/CbMsptSystemCosts.c | 4 +- modules/Communitysolar.c | 62 +- modules/CspDsgLfUi.c | 4 +- modules/CspSubcomponent.c | 4 +- modules/Equpartflip.c | 60 +- modules/EtesElectricResistance.c | 4 +- modules/EtesPtes.c | 4 +- modules/FresnelPhysical.c | 4 +- modules/FresnelPhysicalIph.c | 4 +- modules/Fuelcell.c | 416 +++++- modules/GenericSystem.c | 356 ++++- modules/Geothermal.c | 4 +- modules/GeothermalCosts.c | 4 +- modules/Grid.c | 311 +++- modules/Hcpv.c | 4 +- modules/HostDeveloper.c | 239 +++- modules/Hybrid.c | 4 +- modules/HybridSteps.c | 4 +- modules/Iec61853interp.c | 4 +- modules/Iec61853par.c | 4 +- modules/InvCecCg.c | 4 +- modules/IphToLcoefcr.c | 4 +- modules/Ippppa.c | 58 +- modules/Irradproc.c | 4 +- modules/Layoutarea.c | 4 +- modules/Lcoefcr.c | 4 +- modules/LcoefcrDesign.c | 4 +- modules/Levpartflip.c | 62 +- modules/LinearFresnelDsgIph.c | 4 +- modules/Merchantplant.c | 62 +- modules/MhkCosts.c | 4 +- modules/MhkTidal.c | 4 +- modules/MhkWave.c | 4 +- modules/MsptIph.c | 4 +- modules/MsptSfAndRecIsolated.c | 4 +- modules/PtesDesignPoint.c | 4 +- modules/Pv6parmod.c | 4 +- modules/PvGetShadeLossMpp.c | 4 +- modules/Pvsamv1.c | 491 ++++++- modules/Pvsandiainv.c | 4 +- modules/Pvwattsv5.c | 4 +- modules/Pvwattsv51ts.c | 4 +- modules/Pvwattsv7.c | 4 +- modules/Pvwattsv8.c | 313 +++- modules/Saleleaseback.c | 60 +- modules/Sco2AirCooler.c | 4 +- modules/Sco2CompCurves.c | 4 +- modules/Sco2CspSystem.c | 4 +- modules/Sco2CspUdPcTables.c | 4 +- modules/Singlediode.c | 4 +- modules/Singlediodeparams.c | 4 +- modules/Singleowner.c | 633 ++++++++- modules/SixParsolve.c | 4 +- modules/Snowmodel.c | 19 +- modules/Solarpilot.c | 4 +- modules/Swh.c | 4 +- modules/TcsMSLF.c | 4 +- modules/TcsgenericSolar.c | 4 +- modules/TcslinearFresnel.c | 4 +- modules/TcsmoltenSalt.c | 4 +- modules/TcstroughEmpirical.c | 4 +- modules/TcstroughPhysical.c | 4 +- modules/TestUdPowerCycle.c | 4 +- modules/Thermalrate.c | 4 +- modules/Thirdpartyownership.c | 4 +- modules/TidalFileReader.c | 19 +- modules/Timeseq.c | 4 +- modules/TroughPhysical.c | 69 +- modules/TroughPhysicalCspSolver.c | 4 +- modules/TroughPhysicalIph.c | 28 +- modules/TroughPhysicalProcessHeat.c | 4 +- modules/UiTesCalcs.c | 4 +- modules/UiUdpcChecks.c | 4 +- modules/UserHtfComparison.c | 4 +- modules/Utilityrate.c | 4 +- modules/Utilityrate2.c | 4 +- modules/Utilityrate3.c | 4 +- modules/Utilityrate4.c | 4 +- modules/Utilityrate5.c | 311 +++- modules/Utilityrateforecast.c | 4 +- modules/WaveFileReader.c | 19 +- modules/Wfcheck.c | 4 +- modules/Wfcsvconv.c | 4 +- modules/Wfreader.c | 4 +- modules/WindFileReader.c | 4 +- modules/WindObos.c | 4 +- modules/Windbos.c | 4 +- modules/Windcsm.c | 4 +- modules/Windpower.c | 313 +++- setup.py | 18 +- src/PySAM_utils.h | 3 - stubs/stubs/Battery.pyi | 29 + stubs/stubs/BatteryStateful.pyi | 3 + stubs/stubs/Battwatts.pyi | 3 + stubs/stubs/Belpe.pyi | 3 + stubs/stubs/Biomass.pyi | 3 + stubs/stubs/Cashloan.pyi | 3 + stubs/stubs/CbConstructionFinancing.pyi | 3 + stubs/stubs/CbEmpiricalHceHeatLoss.pyi | 3 + stubs/stubs/CbMsptSystemCosts.pyi | 3 + stubs/stubs/Communitysolar.pyi | 3 + stubs/stubs/CspDsgLfUi.pyi | 3 + stubs/stubs/CspSubcomponent.pyi | 3 + stubs/stubs/Equpartflip.pyi | 3 + stubs/stubs/EtesElectricResistance.pyi | 3 + stubs/stubs/EtesPtes.pyi | 3 + stubs/stubs/FresnelPhysical.pyi | 3 + stubs/stubs/FresnelPhysicalIph.pyi | 3 + stubs/stubs/Fuelcell.pyi | 35 + stubs/stubs/GenericSystem.pyi | 31 + stubs/stubs/Geothermal.pyi | 3 + stubs/stubs/GeothermalCosts.pyi | 3 + stubs/stubs/Grid.pyi | 28 + stubs/stubs/Hcpv.pyi | 3 + stubs/stubs/HostDeveloper.pyi | 18 + stubs/stubs/Hybrid.pyi | 3 + stubs/stubs/HybridSteps.pyi | 3 + stubs/stubs/Iec61853interp.pyi | 3 + stubs/stubs/Iec61853par.pyi | 3 + stubs/stubs/InvCecCg.pyi | 3 + stubs/stubs/IphToLcoefcr.pyi | 3 + stubs/stubs/Ippppa.pyi | 3 + stubs/stubs/Irradproc.pyi | 3 + stubs/stubs/Layoutarea.pyi | 3 + stubs/stubs/Lcoefcr.pyi | 3 + stubs/stubs/LcoefcrDesign.pyi | 3 + stubs/stubs/Levpartflip.pyi | 3 + stubs/stubs/LinearFresnelDsgIph.pyi | 3 + stubs/stubs/Merchantplant.pyi | 3 + stubs/stubs/MhkCosts.pyi | 3 + stubs/stubs/MhkTidal.pyi | 3 + stubs/stubs/MhkWave.pyi | 3 + stubs/stubs/MsptIph.pyi | 3 + stubs/stubs/MsptSfAndRecIsolated.pyi | 3 + stubs/stubs/PtesDesignPoint.pyi | 3 + stubs/stubs/Pv6parmod.pyi | 3 + stubs/stubs/PvGetShadeLossMpp.pyi | 3 + stubs/stubs/Pvsamv1.pyi | 32 + stubs/stubs/Pvsandiainv.pyi | 3 + stubs/stubs/Pvwattsv5.pyi | 3 + stubs/stubs/Pvwattsv51ts.pyi | 3 + stubs/stubs/Pvwattsv7.pyi | 3 + stubs/stubs/Pvwattsv8.pyi | 28 + stubs/stubs/Saleleaseback.pyi | 3 + stubs/stubs/Sco2AirCooler.pyi | 3 + stubs/stubs/Sco2CompCurves.pyi | 3 + stubs/stubs/Sco2CspSystem.pyi | 3 + stubs/stubs/Sco2CspUdPcTables.pyi | 3 + stubs/stubs/Singlediode.pyi | 3 + stubs/stubs/Singlediodeparams.pyi | 3 + stubs/stubs/Singleowner.pyi | 44 + stubs/stubs/SixParsolve.pyi | 3 + stubs/stubs/Snowmodel.pyi | 4 + stubs/stubs/Solarpilot.pyi | 3 + stubs/stubs/Swh.pyi | 3 + stubs/stubs/TcsMSLF.pyi | 3 + stubs/stubs/TcsgenericSolar.pyi | 3 + stubs/stubs/TcslinearFresnel.pyi | 3 + stubs/stubs/TcsmoltenSalt.pyi | 3 + stubs/stubs/TcstroughEmpirical.pyi | 3 + stubs/stubs/TcstroughPhysical.pyi | 3 + stubs/stubs/TestUdPowerCycle.pyi | 3 + stubs/stubs/Thermalrate.pyi | 3 + stubs/stubs/Thirdpartyownership.pyi | 3 + stubs/stubs/TidalFileReader.pyi | 4 +- stubs/stubs/Timeseq.pyi | 3 + stubs/stubs/TroughPhysical.pyi | 8 +- stubs/stubs/TroughPhysicalCspSolver.pyi | 3 + stubs/stubs/TroughPhysicalIph.pyi | 5 +- stubs/stubs/TroughPhysicalProcessHeat.pyi | 3 + stubs/stubs/UiTesCalcs.pyi | 3 + stubs/stubs/UiUdpcChecks.pyi | 3 + stubs/stubs/UserHtfComparison.pyi | 3 + stubs/stubs/Utilityrate.pyi | 3 + stubs/stubs/Utilityrate2.pyi | 3 + stubs/stubs/Utilityrate3.pyi | 3 + stubs/stubs/Utilityrate4.pyi | 3 + stubs/stubs/Utilityrate5.pyi | 28 + stubs/stubs/Utilityrateforecast.pyi | 3 + stubs/stubs/WaveFileReader.pyi | 4 +- stubs/stubs/Wfcheck.pyi | 3 + stubs/stubs/Wfcsvconv.pyi | 3 + stubs/stubs/Wfreader.pyi | 3 + stubs/stubs/WindFileReader.pyi | 3 + stubs/stubs/WindObos.pyi | 3 + stubs/stubs/Windbos.pyi | 3 + stubs/stubs/Windcsm.pyi | 3 + stubs/stubs/Windpower.pyi | 28 + tests/test_hybrid.py | 101 ++ tests/test_pysam_all.py | 4 +- 230 files changed, 8564 insertions(+), 805 deletions(-) create mode 100644 .github/workflows/test_pkg.yml create mode 100644 docs/modules/Hybrid.rst create mode 100644 docs/modules/HybridSteps.rst create mode 100644 files/Hybrids/BatteryHybrid.py create mode 100644 files/Hybrids/BatteryHybrid.pyi create mode 100644 files/Hybrids/FuelCellHybrid.py create mode 100644 files/Hybrids/FuelCellHybrid.pyi create mode 100644 files/Hybrids/GenericSystemHybrid.py create mode 100644 files/Hybrids/GenericSystemHybrid.pyi create mode 100644 files/Hybrids/HybridBase.py create mode 100644 files/Hybrids/HybridBase.pyi create mode 100644 files/Hybrids/HybridSystem.py create mode 100644 files/Hybrids/PVHybrid.py create mode 100644 files/Hybrids/PVHybrid.pyi create mode 100644 files/Hybrids/PVWattsHybrid.py create mode 100644 files/Hybrids/PVWattsHybrid.pyi create mode 100644 files/Hybrids/WindHybrid.py create mode 100644 files/Hybrids/WindHybrid.pyi create mode 100644 files/Hybrids/__init__.py create mode 100644 tests/test_hybrid.py diff --git a/.github/workflows/test_pkg.yml b/.github/workflows/test_pkg.yml new file mode 100644 index 00000000..44442fc3 --- /dev/null +++ b/.github/workflows/test_pkg.yml @@ -0,0 +1,53 @@ +name: Test Package + +on: [ push ] + +jobs: + build: + + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macOS-latest] + python-version: [ '3.8', '3.9', '3.10', '3.11', '3.12' ] + + env: + SAMNTDIR: ${{ github.workspace }}/../SAM + + name: ${{ matrix.os }} ${{ matrix.python-version }} + steps: + - name: Checkout Repo + uses: actions/checkout@v3 + + - uses: actions/checkout@v3 + - name: Checkout SAM + run: | + cd .. + git config --global url.https://github.com/.insteadOf git://github.com/ + git clone https://github.com/NREL/SAM.git + ls + pwd + ls ${{ env.SAMNTDIR }} + ls ${{ env.SAMNTDIR }}/api/api_autogen/library/defaults + + - uses: actions/checkout@v3 + - name: Setup conda + uses: s-weigand/setup-conda@v1 + with: + update-conda: true + python-version: ${{ matrix.python-version }} + conda-channels: anaconda, conda-forge + - run: conda --version + - run: which python + + - name: Install NREL-PySAM + run: | + pip install -r requirements.txt + pip install -r tests/requirements.txt + conda install -c nrel nrel-pysam + + - name: Unit tests + run: | + pwd + ls ${{ env.SAMNTDIR }}/api/api_autogen/library/defaults + pytest tests/test_pysam_all.py \ No newline at end of file diff --git a/docs/lists/configs.rst b/docs/lists/configs.rst index e6ccea1d..be41597c 100644 --- a/docs/lists/configs.rst +++ b/docs/lists/configs.rst @@ -1,5 +1,5 @@ Biomass Combustion -- LCOE Calculator (FCR Method) ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Biomass combustion for electricity generation. Calculate LCOE using fixed charge rate method. @@ -8,7 +8,7 @@ Biomass Combustion -- LCOE Calculator (FCR Method) :doc:`../modules/Biomass`, :doc:`../modules/Grid`, :doc:`../modules/Lcoefcr` Biomass Combustion -- Merchant Plant ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Biomass combustion for electricity generation. Merchant plant with constant DSCR and ancillary services revenue, reserve accounts and depreciation allocations. @@ -17,7 +17,7 @@ Biomass Combustion -- Merchant Plant :doc:`../modules/Biomass`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Merchantplant` Biomass Combustion -- No Financial Model ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Biomass combustion for electricity generation. Run the performance model with no financial model. @@ -26,7 +26,7 @@ Biomass Combustion -- No Financial Model :doc:`../modules/Biomass`, :doc:`../modules/Grid` Biomass Combustion -- Partnership Flip with Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Biomass combustion for electricity generation. Developer/investor partnership flip PPA structure with debt. @@ -35,7 +35,7 @@ Biomass Combustion -- Partnership Flip with Debt :doc:`../modules/Biomass`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Levpartflip` Biomass Combustion -- Partnership Flip without Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Biomass combustion for electricity generation. Developer/investor partnership flip PPA structure without debt. @@ -44,7 +44,7 @@ Biomass Combustion -- Partnership Flip without Debt :doc:`../modules/Biomass`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Equpartflip` Biomass Combustion -- Sale Leaseback ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Biomass combustion for electricity generation. Sale leaseback partnership PPA structure. @@ -53,7 +53,7 @@ Biomass Combustion -- Sale Leaseback :doc:`../modules/Biomass`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Saleleaseback` Biomass Combustion -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Biomass combustion for electricity generation. Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -62,7 +62,7 @@ Biomass Combustion -- Single Owner :doc:`../modules/Biomass`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Singleowner` Detailed PV Model -- Commercial Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using detailed photovoltaic model with separate module and inverter component models. Renewable energy system displaces commercial building electric load. @@ -71,7 +71,7 @@ Detailed PV Model -- Commercial Owner :doc:`../modules/Pvsamv1`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Cashloan` Detailed PV Model -- LCOE Calculator (FCR Method) ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using detailed photovoltaic model with separate module and inverter component models. Calculate LCOE using fixed charge rate method. @@ -80,7 +80,7 @@ Detailed PV Model -- LCOE Calculator (FCR Method) :doc:`../modules/Pvsamv1`, :doc:`../modules/Grid`, :doc:`../modules/Lcoefcr` Detailed PV Model -- Merchant Plant ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using detailed photovoltaic model with separate module and inverter component models. Merchant plant with constant DSCR and ancillary services revenue, reserve accounts and depreciation allocations. @@ -89,7 +89,7 @@ Detailed PV Model -- Merchant Plant :doc:`../modules/Pvsamv1`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Merchantplant` Detailed PV Model -- No Financial Model ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using detailed photovoltaic model with separate module and inverter component models. Run the performance model with no financial model. @@ -98,7 +98,7 @@ Detailed PV Model -- No Financial Model :doc:`../modules/Pvsamv1`, :doc:`../modules/Grid` Detailed PV Model -- Partnership Flip with Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using detailed photovoltaic model with separate module and inverter component models. Developer/investor partnership flip PPA structure with debt. @@ -107,7 +107,7 @@ Detailed PV Model -- Partnership Flip with Debt :doc:`../modules/Pvsamv1`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Levpartflip` Detailed PV Model -- Partnership Flip without Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using detailed photovoltaic model with separate module and inverter component models. Developer/investor partnership flip PPA structure without debt. @@ -116,7 +116,7 @@ Detailed PV Model -- Partnership Flip without Debt :doc:`../modules/Pvsamv1`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Equpartflip` Detailed PV Model -- Residential Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using detailed photovoltaic model with separate module and inverter component models. Renewable energy system displaces residential home electric load. @@ -125,7 +125,7 @@ Detailed PV Model -- Residential Owner :doc:`../modules/Belpe`, :doc:`../modules/Pvsamv1`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Cashloan` Detailed PV Model -- Sale Leaseback ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using detailed photovoltaic model with separate module and inverter component models. Sale leaseback partnership PPA structure. @@ -134,7 +134,7 @@ Detailed PV Model -- Sale Leaseback :doc:`../modules/Pvsamv1`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Saleleaseback` Detailed PV Model -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using detailed photovoltaic model with separate module and inverter component models. Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -143,7 +143,7 @@ Detailed PV Model -- Single Owner :doc:`../modules/Pvsamv1`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Singleowner` Detailed PV Model -- Third Party - Host / Developer ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using detailed photovoltaic model with separate module and inverter component models. Third party ownershop from host and developer perspective for PPA. @@ -152,7 +152,7 @@ Detailed PV Model -- Third Party - Host / Developer :doc:`../modules/Pvsamv1`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/HostDeveloper` Detailed PV Model -- Third Party Owner - Host ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using detailed photovoltaic model with separate module and inverter component models. Third party ownership from host perspective for PPA or lease agreement. @@ -161,7 +161,7 @@ Detailed PV Model -- Third Party Owner - Host :doc:`../modules/Belpe`, :doc:`../modules/Pvsamv1`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Thirdpartyownership` Detailed PV-Battery -- Commercial Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Detailed photovoltaic model with battery storage. Renewable energy system displaces commercial building electric load. @@ -170,7 +170,7 @@ Detailed PV-Battery -- Commercial Owner :doc:`../modules/Pvsamv1`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Cashloan` Detailed PV-Battery -- Merchant Plant ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Detailed photovoltaic model with battery storage. Merchant plant with constant DSCR and ancillary services revenue, reserve accounts and depreciation allocations. @@ -179,7 +179,7 @@ Detailed PV-Battery -- Merchant Plant :doc:`../modules/Pvsamv1`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Merchantplant` Detailed PV-Battery -- Partnership Flip with Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Detailed photovoltaic model with battery storage. Developer/investor partnership flip PPA structure with debt. @@ -188,7 +188,7 @@ Detailed PV-Battery -- Partnership Flip with Debt :doc:`../modules/Pvsamv1`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Levpartflip` Detailed PV-Battery -- Partnership Flip without Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Detailed photovoltaic model with battery storage. Developer/investor partnership flip PPA structure without debt. @@ -197,7 +197,7 @@ Detailed PV-Battery -- Partnership Flip without Debt :doc:`../modules/Pvsamv1`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Equpartflip` Detailed PV-Battery -- Residential Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Detailed photovoltaic model with battery storage. Renewable energy system displaces residential home electric load. @@ -206,7 +206,7 @@ Detailed PV-Battery -- Residential Owner :doc:`../modules/Belpe`, :doc:`../modules/Pvsamv1`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Cashloan` Detailed PV-Battery -- Sale Leaseback ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Detailed photovoltaic model with battery storage. Sale leaseback partnership PPA structure. @@ -215,7 +215,7 @@ Detailed PV-Battery -- Sale Leaseback :doc:`../modules/Pvsamv1`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Saleleaseback` Detailed PV-Battery -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Detailed photovoltaic model with battery storage. Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -224,7 +224,7 @@ Detailed PV-Battery -- Single Owner :doc:`../modules/Pvsamv1`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Singleowner` Detailed PV-Battery -- Third Party - Host / Developer ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Detailed photovoltaic model with battery storage. Third party ownershop from host and developer perspective for PPA. @@ -233,7 +233,7 @@ Detailed PV-Battery -- Third Party - Host / Developer :doc:`../modules/Pvsamv1`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/HostDeveloper` Detailed PV-Battery -- Third Party Owner - Host ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Detailed photovoltaic model with battery storage. Third party ownership from host perspective for PPA or lease agreement. @@ -242,7 +242,7 @@ Detailed PV-Battery -- Third Party Owner - Host :doc:`../modules/Belpe`, :doc:`../modules/Pvsamv1`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Thirdpartyownership` Electric Thermal Energy Storage -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Electric thermal energy storage. Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -251,7 +251,7 @@ Electric Thermal Energy Storage -- Single Owner :doc:`../modules/EtesElectricResistance`, :doc:`../modules/Singleowner` Fuel Cell - PV - Battery -- Commercial Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Fuel cell with photovoltaic system and optional electric battery for commercial building or PPA project applications. Renewable energy system displaces commercial building electric load. @@ -260,7 +260,7 @@ Fuel Cell - PV - Battery -- Commercial Owner :doc:`../modules/Pvwattsv8`, :doc:`../modules/Fuelcell`, :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Thermalrate`, :doc:`../modules/Cashloan` Fuel Cell - PV - Battery -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Fuel cell with photovoltaic system and optional electric battery for commercial building or PPA project applications. Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -269,7 +269,7 @@ Fuel Cell - PV - Battery -- Single Owner :doc:`../modules/Pvwattsv8`, :doc:`../modules/Fuelcell`, :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Thermalrate`, :doc:`../modules/Singleowner` Generic PVWatts Wind FuelCell Battery Hybrid -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Hybrid power system with PVWatts and wind power generation and battery storage). Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -278,16 +278,16 @@ Generic PVWatts Wind FuelCell Battery Hybrid -- Single Owner :doc:`../modules/GenericSystem`, :doc:`../modules/Pvwattsv8`, :doc:`../modules/Windpower`, :doc:`../modules/Fuelcell`, :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Singleowner` Generic PVWatts Wind FuelCell Battery Hybrid -- Third Party - Host / Developer --------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- - Hybrid power system with PVWatts and wind power generation and battery storage. Third party ownershop from host and developer perspective for PPA. + Hybrid power system with PVWatts and wind power generation and battery storage). Third party ownershop from host and developer perspective for PPA. Configuration name for defaults: *"GenericPVWattsWindFuelCellBatteryHybridHostDeveloper"* :doc:`../modules/GenericSystem`, :doc:`../modules/Pvwattsv8`, :doc:`../modules/Windpower`, :doc:`../modules/Fuelcell`, :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/HostDeveloper` Generic Solar Model -- Commercial Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP power system with solar field modeled using a table of optical efficiency values. Renewable energy system displaces commercial building electric load. @@ -296,7 +296,7 @@ Generic Solar Model -- Commercial Owner :doc:`../modules/TcsgenericSolar`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Cashloan` Generic Solar Model -- LCOE Calculator (FCR Method) ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP power system with solar field modeled using a table of optical efficiency values. Calculate LCOE using fixed charge rate method. @@ -305,7 +305,7 @@ Generic Solar Model -- LCOE Calculator (FCR Method) :doc:`../modules/TcsgenericSolar`, :doc:`../modules/Grid`, :doc:`../modules/Lcoefcr` Generic Solar Model -- Merchant Plant ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP power system with solar field modeled using a table of optical efficiency values. Merchant plant with constant DSCR and ancillary services revenue, reserve accounts and depreciation allocations. @@ -314,7 +314,7 @@ Generic Solar Model -- Merchant Plant :doc:`../modules/TcsgenericSolar`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Merchantplant` Generic Solar Model -- No Financial Model ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP power system with solar field modeled using a table of optical efficiency values. Run the performance model with no financial model. @@ -323,7 +323,7 @@ Generic Solar Model -- No Financial Model :doc:`../modules/TcsgenericSolar`, :doc:`../modules/Grid` Generic Solar Model -- Partnership Flip with Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP power system with solar field modeled using a table of optical efficiency values. Developer/investor partnership flip PPA structure with debt. @@ -332,7 +332,7 @@ Generic Solar Model -- Partnership Flip with Debt :doc:`../modules/TcsgenericSolar`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Levpartflip` Generic Solar Model -- Partnership Flip without Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP power system with solar field modeled using a table of optical efficiency values. Developer/investor partnership flip PPA structure without debt. @@ -341,7 +341,7 @@ Generic Solar Model -- Partnership Flip without Debt :doc:`../modules/TcsgenericSolar`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Equpartflip` Generic Solar Model -- Sale Leaseback ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP power system with solar field modeled using a table of optical efficiency values. Sale leaseback partnership PPA structure. @@ -350,7 +350,7 @@ Generic Solar Model -- Sale Leaseback :doc:`../modules/TcsgenericSolar`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Saleleaseback` Generic Solar Model -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP power system with solar field modeled using a table of optical efficiency values. Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -359,7 +359,7 @@ Generic Solar Model -- Single Owner :doc:`../modules/TcsgenericSolar`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Singleowner` Generic System -- Commercial Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Basic power system model using either capacity, capacity factor, and heat rate, or an hourly power generation profile as input. Renewable energy system displaces commercial building electric load. @@ -368,7 +368,7 @@ Generic System -- Commercial Owner :doc:`../modules/GenericSystem`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Cashloan` Generic System -- LCOE Calculator (FCR Method) ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Basic power system model using either capacity, capacity factor, and heat rate, or an hourly power generation profile as input. Calculate LCOE using fixed charge rate method. @@ -377,7 +377,7 @@ Generic System -- LCOE Calculator (FCR Method) :doc:`../modules/GenericSystem`, :doc:`../modules/Grid`, :doc:`../modules/Lcoefcr` Generic System -- Merchant Plant ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Basic power system model using either capacity, capacity factor, and heat rate, or an hourly power generation profile as input. Merchant plant with constant DSCR and ancillary services revenue, reserve accounts and depreciation allocations. @@ -386,7 +386,7 @@ Generic System -- Merchant Plant :doc:`../modules/GenericSystem`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Merchantplant` Generic System -- No Financial Model ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Basic power system model using either capacity, capacity factor, and heat rate, or an hourly power generation profile as input. Run the performance model with no financial model. @@ -395,7 +395,7 @@ Generic System -- No Financial Model :doc:`../modules/GenericSystem`, :doc:`../modules/Grid` Generic System -- Partnership Flip with Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Basic power system model using either capacity, capacity factor, and heat rate, or an hourly power generation profile as input. Developer/investor partnership flip PPA structure with debt. @@ -404,7 +404,7 @@ Generic System -- Partnership Flip with Debt :doc:`../modules/GenericSystem`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Levpartflip` Generic System -- Partnership Flip without Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Basic power system model using either capacity, capacity factor, and heat rate, or an hourly power generation profile as input. Developer/investor partnership flip PPA structure without debt. @@ -413,7 +413,7 @@ Generic System -- Partnership Flip without Debt :doc:`../modules/GenericSystem`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Equpartflip` Generic System -- Residential Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Basic power system model using either capacity, capacity factor, and heat rate, or an hourly power generation profile as input. Renewable energy system displaces residential home electric load. @@ -422,7 +422,7 @@ Generic System -- Residential Owner :doc:`../modules/GenericSystem`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Cashloan` Generic System -- Sale Leaseback ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Basic power system model using either capacity, capacity factor, and heat rate, or an hourly power generation profile as input. Sale leaseback partnership PPA structure. @@ -431,7 +431,7 @@ Generic System -- Sale Leaseback :doc:`../modules/GenericSystem`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Saleleaseback` Generic System -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Basic power system model using either capacity, capacity factor, and heat rate, or an hourly power generation profile as input. Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -440,7 +440,7 @@ Generic System -- Single Owner :doc:`../modules/GenericSystem`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Singleowner` Generic System -- Third Party - Host / Developer ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Basic power system model using either capacity, capacity factor, and heat rate, or an hourly power generation profile as input. Third party ownershop from host and developer perspective for PPA. @@ -449,7 +449,7 @@ Generic System -- Third Party - Host / Developer :doc:`../modules/GenericSystem`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/HostDeveloper` Generic System -- Third Party Owner - Host ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Basic power system model using either capacity, capacity factor, and heat rate, or an hourly power generation profile as input. Third party ownership from host perspective for PPA or lease agreement. @@ -458,7 +458,7 @@ Generic System -- Third Party Owner - Host :doc:`../modules/GenericSystem`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Thirdpartyownership` Generic System-Battery -- Commercial Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Generic system model with battery storage. Renewable energy system displaces commercial building electric load. @@ -467,7 +467,7 @@ Generic System-Battery -- Commercial Owner :doc:`../modules/GenericSystem`, :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Cashloan` Generic System-Battery -- Merchant Plant ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Generic system model with battery storage. Merchant plant with constant DSCR and ancillary services revenue, reserve accounts and depreciation allocations. @@ -476,7 +476,7 @@ Generic System-Battery -- Merchant Plant :doc:`../modules/GenericSystem`, :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Merchantplant` Generic System-Battery -- Partnership Flip with Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Generic system model with battery storage. Developer/investor partnership flip PPA structure with debt. @@ -485,7 +485,7 @@ Generic System-Battery -- Partnership Flip with Debt :doc:`../modules/GenericSystem`, :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Levpartflip` Generic System-Battery -- Partnership Flip without Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Generic system model with battery storage. Developer/investor partnership flip PPA structure without debt. @@ -494,7 +494,7 @@ Generic System-Battery -- Partnership Flip without Debt :doc:`../modules/GenericSystem`, :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Equpartflip` Generic System-Battery -- Residential Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Generic system model with battery storage. Renewable energy system displaces residential home electric load. @@ -503,7 +503,7 @@ Generic System-Battery -- Residential Owner :doc:`../modules/GenericSystem`, :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Cashloan` Generic System-Battery -- Sale Leaseback ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Generic system model with battery storage. Sale leaseback partnership PPA structure. @@ -512,7 +512,7 @@ Generic System-Battery -- Sale Leaseback :doc:`../modules/GenericSystem`, :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Saleleaseback` Generic System-Battery -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Generic system model with battery storage. Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -521,7 +521,7 @@ Generic System-Battery -- Single Owner :doc:`../modules/GenericSystem`, :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Singleowner` Generic System-Battery -- Third Party - Host / Developer ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Generic system model with battery storage. Third party ownershop from host and developer perspective for PPA. @@ -530,7 +530,7 @@ Generic System-Battery -- Third Party - Host / Developer :doc:`../modules/GenericSystem`, :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/HostDeveloper` Generic System-Battery -- Third Party Owner - Host ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Generic system model with battery storage. Third party ownership from host perspective for PPA or lease agreement. @@ -539,7 +539,7 @@ Generic System-Battery -- Third Party Owner - Host :doc:`../modules/GenericSystem`, :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Thirdpartyownership` Geothermal -- LCOE Calculator (FCR Method) ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Geothermal power model for hydrothermal and EGS systems with flash or binary conversion. Calculate LCOE using fixed charge rate method. @@ -548,7 +548,7 @@ Geothermal -- LCOE Calculator (FCR Method) :doc:`../modules/Geothermal`, :doc:`../modules/Grid`, :doc:`../modules/Lcoefcr` Geothermal -- Merchant Plant ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Geothermal power model for hydrothermal and EGS systems with flash or binary conversion. Merchant plant with constant DSCR and ancillary services revenue, reserve accounts and depreciation allocations. @@ -557,7 +557,7 @@ Geothermal -- Merchant Plant :doc:`../modules/Geothermal`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Merchantplant` Geothermal -- No Financial Model ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Geothermal power model for hydrothermal and EGS systems with flash or binary conversion. Run the performance model with no financial model. @@ -566,7 +566,7 @@ Geothermal -- No Financial Model :doc:`../modules/Geothermal`, :doc:`../modules/Grid` Geothermal -- Partnership Flip with Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Geothermal power model for hydrothermal and EGS systems with flash or binary conversion. Developer/investor partnership flip PPA structure with debt. @@ -575,7 +575,7 @@ Geothermal -- Partnership Flip with Debt :doc:`../modules/Geothermal`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Levpartflip` Geothermal -- Partnership Flip without Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Geothermal power model for hydrothermal and EGS systems with flash or binary conversion. Developer/investor partnership flip PPA structure without debt. @@ -584,7 +584,7 @@ Geothermal -- Partnership Flip without Debt :doc:`../modules/Geothermal`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Equpartflip` Geothermal -- Sale Leaseback ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Geothermal power model for hydrothermal and EGS systems with flash or binary conversion. Sale leaseback partnership PPA structure. @@ -593,7 +593,7 @@ Geothermal -- Sale Leaseback :doc:`../modules/Geothermal`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Saleleaseback` Geothermal -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Geothermal power model for hydrothermal and EGS systems with flash or binary conversion. Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -602,7 +602,7 @@ Geothermal -- Single Owner :doc:`../modules/Geothermal`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Singleowner` High Concentration PV -- LCOE Calculator (FCR Method) ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Concentrating photovoltaic system with a high concentration photovoltaic module model and separate inverter model. Calculate LCOE using fixed charge rate method. @@ -611,7 +611,7 @@ High Concentration PV -- LCOE Calculator (FCR Method) :doc:`../modules/Hcpv`, :doc:`../modules/Grid`, :doc:`../modules/Lcoefcr` High Concentration PV -- Merchant Plant ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Concentrating photovoltaic system with a high concentration photovoltaic module model and separate inverter model. Merchant plant with constant DSCR and ancillary services revenue, reserve accounts and depreciation allocations. @@ -620,7 +620,7 @@ High Concentration PV -- Merchant Plant :doc:`../modules/Hcpv`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Merchantplant` High Concentration PV -- No Financial Model ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Concentrating photovoltaic system with a high concentration photovoltaic module model and separate inverter model. Run the performance model with no financial model. @@ -629,7 +629,7 @@ High Concentration PV -- No Financial Model :doc:`../modules/Hcpv`, :doc:`../modules/Grid` High Concentration PV -- Partnership Flip with Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Concentrating photovoltaic system with a high concentration photovoltaic module model and separate inverter model. Developer/investor partnership flip PPA structure with debt. @@ -638,7 +638,7 @@ High Concentration PV -- Partnership Flip with Debt :doc:`../modules/Hcpv`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Levpartflip` High Concentration PV -- Partnership Flip without Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Concentrating photovoltaic system with a high concentration photovoltaic module model and separate inverter model. Developer/investor partnership flip PPA structure without debt. @@ -647,7 +647,7 @@ High Concentration PV -- Partnership Flip without Debt :doc:`../modules/Hcpv`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Equpartflip` High Concentration PV -- Sale Leaseback ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Concentrating photovoltaic system with a high concentration photovoltaic module model and separate inverter model. Sale leaseback partnership PPA structure. @@ -656,7 +656,7 @@ High Concentration PV -- Sale Leaseback :doc:`../modules/Hcpv`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Saleleaseback` High Concentration PV -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Concentrating photovoltaic system with a high concentration photovoltaic module model and separate inverter model. Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -665,7 +665,7 @@ High Concentration PV -- Single Owner :doc:`../modules/Hcpv`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Singleowner` Linear Direct Steam -- ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Industrial process heat linear Fresnel collector system. . @@ -674,7 +674,7 @@ Linear Direct Steam -- :doc:`../modules/LinearFresnelDsgIph`, :doc:`../modules/IphToLcoefcr`, :doc:`../modules/Lcoefcr` Linear Direct Steam -- No Financial Model ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Industrial process heat linear Fresnel collector system. Run the performance model with no financial model. @@ -683,7 +683,7 @@ Linear Direct Steam -- No Financial Model :doc:`../modules/LinearFresnelDsgIph` Linear Fresnel Direct Steam -- Commercial Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP power system that uses long small mirrors to line focus sunlight on fixed receiver tubes mounted above them.. Renewable energy system displaces commercial building electric load. @@ -692,7 +692,7 @@ Linear Fresnel Direct Steam -- Commercial Owner :doc:`../modules/TcslinearFresnel`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Cashloan` Linear Fresnel Direct Steam -- LCOE Calculator (FCR Method) ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP power system that uses long small mirrors to line focus sunlight on fixed receiver tubes mounted above them.. Calculate LCOE using fixed charge rate method. @@ -701,7 +701,7 @@ Linear Fresnel Direct Steam -- LCOE Calculator (FCR Method) :doc:`../modules/TcslinearFresnel`, :doc:`../modules/Grid`, :doc:`../modules/Lcoefcr` Linear Fresnel Direct Steam -- Merchant Plant ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP power system that uses long small mirrors to line focus sunlight on fixed receiver tubes mounted above them.. Merchant plant with constant DSCR and ancillary services revenue, reserve accounts and depreciation allocations. @@ -710,7 +710,7 @@ Linear Fresnel Direct Steam -- Merchant Plant :doc:`../modules/TcslinearFresnel`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Merchantplant` Linear Fresnel Direct Steam -- No Financial Model ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP power system that uses long small mirrors to line focus sunlight on fixed receiver tubes mounted above them.. Run the performance model with no financial model. @@ -719,7 +719,7 @@ Linear Fresnel Direct Steam -- No Financial Model :doc:`../modules/TcslinearFresnel`, :doc:`../modules/Grid` Linear Fresnel Direct Steam -- Partnership Flip with Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP power system that uses long small mirrors to line focus sunlight on fixed receiver tubes mounted above them.. Developer/investor partnership flip PPA structure with debt. @@ -728,7 +728,7 @@ Linear Fresnel Direct Steam -- Partnership Flip with Debt :doc:`../modules/TcslinearFresnel`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Levpartflip` Linear Fresnel Direct Steam -- Partnership Flip without Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP power system that uses long small mirrors to line focus sunlight on fixed receiver tubes mounted above them.. Developer/investor partnership flip PPA structure without debt. @@ -737,7 +737,7 @@ Linear Fresnel Direct Steam -- Partnership Flip without Debt :doc:`../modules/TcslinearFresnel`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Equpartflip` Linear Fresnel Direct Steam -- Sale Leaseback ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP power system that uses long small mirrors to line focus sunlight on fixed receiver tubes mounted above them.. Sale leaseback partnership PPA structure. @@ -746,7 +746,7 @@ Linear Fresnel Direct Steam -- Sale Leaseback :doc:`../modules/TcslinearFresnel`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Saleleaseback` Linear Fresnel Direct Steam -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP power system that uses long small mirrors to line focus sunlight on fixed receiver tubes mounted above them.. Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -755,7 +755,7 @@ Linear Fresnel Direct Steam -- Single Owner :doc:`../modules/TcslinearFresnel`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Singleowner` Linear Fresnel Molten Salt -- Merchant Plant ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP power system that uses long small mirrors to line focus sunlight on fixed receiver tubes mounted above them.. Merchant plant with constant DSCR and ancillary services revenue, reserve accounts and depreciation allocations. @@ -764,7 +764,7 @@ Linear Fresnel Molten Salt -- Merchant Plant :doc:`../modules/FresnelPhysical`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Merchantplant` Linear Fresnel Molten Salt -- Partnership Flip with Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP power system that uses long small mirrors to line focus sunlight on fixed receiver tubes mounted above them.. Developer/investor partnership flip PPA structure with debt. @@ -773,7 +773,7 @@ Linear Fresnel Molten Salt -- Partnership Flip with Debt :doc:`../modules/FresnelPhysical`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Levpartflip` Linear Fresnel Molten Salt -- Partnership Flip without Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP power system that uses long small mirrors to line focus sunlight on fixed receiver tubes mounted above them.. Developer/investor partnership flip PPA structure without debt. @@ -782,7 +782,7 @@ Linear Fresnel Molten Salt -- Partnership Flip without Debt :doc:`../modules/FresnelPhysical`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Equpartflip` Linear Fresnel Molten Salt -- Sale Leaseback ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP power system that uses long small mirrors to line focus sunlight on fixed receiver tubes mounted above them.. Sale leaseback partnership PPA structure. @@ -791,7 +791,7 @@ Linear Fresnel Molten Salt -- Sale Leaseback :doc:`../modules/FresnelPhysical`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Saleleaseback` Linear Fresnel Molten Salt -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP power system that uses long small mirrors to line focus sunlight on fixed receiver tubes mounted above them.. Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -800,7 +800,7 @@ Linear Fresnel Molten Salt -- Single Owner :doc:`../modules/FresnelPhysical`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Singleowner` Linear Molten Salt -- ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Industrial process heat linear collector system with molten salt heat transfer fluid. . @@ -809,7 +809,7 @@ Linear Molten Salt -- :doc:`../modules/FresnelPhysicalIph`, :doc:`../modules/LcoefcrDesign` Linear Molten Salt -- No Financial Model ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Industrial process heat linear collector system with molten salt heat transfer fluid. Run the performance model with no financial model. @@ -818,7 +818,7 @@ Linear Molten Salt -- No Financial Model :doc:`../modules/FresnelPhysicalIph` PVWatts -- Commercial Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using basic NREL PVWatts V8 algorithm. Does not do detailed degradation or loss modeling. If those are important, please use pvsamv1.. Renewable energy system displaces commercial building electric load. @@ -827,7 +827,7 @@ PVWatts -- Commercial Owner :doc:`../modules/Pvwattsv8`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Cashloan` PVWatts -- Community Solar ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using basic NREL PVWatts V8 algorithm. Does not do detailed degradation or loss modeling. If those are important, please use pvsamv1.. Community solar owner model. @@ -836,7 +836,7 @@ PVWatts -- Community Solar :doc:`../modules/Pvwattsv8`, :doc:`../modules/Grid`, :doc:`../modules/Communitysolar` PVWatts -- LCOE Calculator (FCR Method) ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using basic NREL PVWatts V8 algorithm. Does not do detailed degradation or loss modeling. If those are important, please use pvsamv1.. Calculate LCOE using fixed charge rate method. @@ -845,7 +845,7 @@ PVWatts -- LCOE Calculator (FCR Method) :doc:`../modules/Pvwattsv8`, :doc:`../modules/Grid`, :doc:`../modules/Lcoefcr` PVWatts -- Merchant Plant ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using basic NREL PVWatts V8 algorithm. Does not do detailed degradation or loss modeling. If those are important, please use pvsamv1.. Merchant plant with constant DSCR and ancillary services revenue, reserve accounts and depreciation allocations. @@ -854,7 +854,7 @@ PVWatts -- Merchant Plant :doc:`../modules/Pvwattsv8`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Merchantplant` PVWatts -- No Financial Model ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using basic NREL PVWatts V8 algorithm. Does not do detailed degradation or loss modeling. If those are important, please use pvsamv1.. Run the performance model with no financial model. @@ -863,7 +863,7 @@ PVWatts -- No Financial Model :doc:`../modules/Pvwattsv8`, :doc:`../modules/Grid` PVWatts -- Partnership Flip with Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using basic NREL PVWatts V8 algorithm. Does not do detailed degradation or loss modeling. If those are important, please use pvsamv1.. Developer/investor partnership flip PPA structure with debt. @@ -872,7 +872,7 @@ PVWatts -- Partnership Flip with Debt :doc:`../modules/Pvwattsv8`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Levpartflip` PVWatts -- Partnership Flip without Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using basic NREL PVWatts V8 algorithm. Does not do detailed degradation or loss modeling. If those are important, please use pvsamv1.. Developer/investor partnership flip PPA structure without debt. @@ -881,7 +881,7 @@ PVWatts -- Partnership Flip without Debt :doc:`../modules/Pvwattsv8`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Equpartflip` PVWatts -- Residential Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using basic NREL PVWatts V8 algorithm. Does not do detailed degradation or loss modeling. If those are important, please use pvsamv1.. Renewable energy system displaces residential home electric load. @@ -890,7 +890,7 @@ PVWatts -- Residential Owner :doc:`../modules/Pvwattsv8`, :doc:`../modules/Belpe`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Cashloan` PVWatts -- Sale Leaseback ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using basic NREL PVWatts V8 algorithm. Does not do detailed degradation or loss modeling. If those are important, please use pvsamv1.. Sale leaseback partnership PPA structure. @@ -899,7 +899,7 @@ PVWatts -- Sale Leaseback :doc:`../modules/Pvwattsv8`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Saleleaseback` PVWatts -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using basic NREL PVWatts V8 algorithm. Does not do detailed degradation or loss modeling. If those are important, please use pvsamv1.. Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -908,7 +908,7 @@ PVWatts -- Single Owner :doc:`../modules/Pvwattsv8`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Singleowner` PVWatts -- Third Party - Host / Developer ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using basic NREL PVWatts V8 algorithm. Does not do detailed degradation or loss modeling. If those are important, please use pvsamv1.. Third party ownershop from host and developer perspective for PPA. @@ -917,7 +917,7 @@ PVWatts -- Third Party - Host / Developer :doc:`../modules/Pvwattsv8`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/HostDeveloper` PVWatts -- Third Party Owner - Host ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Photovoltaic system using basic NREL PVWatts V8 algorithm. Does not do detailed degradation or loss modeling. If those are important, please use pvsamv1.. Third party ownership from host perspective for PPA or lease agreement. @@ -926,7 +926,7 @@ PVWatts -- Third Party Owner - Host :doc:`../modules/Pvwattsv8`, :doc:`../modules/Belpe`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Thirdpartyownership` PVWatts Wind Battery Hybrid -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Hybrid power system with PVWatts and wind power generation and battery storage). Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -935,7 +935,7 @@ PVWatts Wind Battery Hybrid -- Single Owner :doc:`../modules/Pvwattsv8`, :doc:`../modules/Windpower`, :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Singleowner` PVWatts Wind Battery Hybrid -- Third Party - Host / Developer ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Hybrid power system with PVWatts and wind power generation and battery storage). Third party ownershop from host and developer perspective for PPA. @@ -944,7 +944,7 @@ PVWatts Wind Battery Hybrid -- Third Party - Host / Developer :doc:`../modules/Pvwattsv8`, :doc:`../modules/Windpower`, :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/HostDeveloper` PVWatts Wind Fuel Cell Battery Hybrid -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Hybrid power system with PVWatts and wind power generation, fuel cell, and battery storage). Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -953,7 +953,7 @@ PVWatts Wind Fuel Cell Battery Hybrid -- Single Owner :doc:`../modules/Pvwattsv8`, :doc:`../modules/Windpower`, :doc:`../modules/Fuelcell`, :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Singleowner` PVWatts Wind Fuel Cell Battery Hybrid -- Third Party - Host / Developer ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Hybrid power system with PVWatts and wind power generation, fuel cell, and battery storage). Third party ownershop from host and developer perspective for PPA. @@ -962,7 +962,7 @@ PVWatts Wind Fuel Cell Battery Hybrid -- Third Party - Host / Developer :doc:`../modules/Pvwattsv8`, :doc:`../modules/Windpower`, :doc:`../modules/Fuelcell`, :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/HostDeveloper` PVWatts-Battery -- Commercial Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- PVWatts system model with battery storage. Renewable energy system displaces commercial building electric load. @@ -971,7 +971,7 @@ PVWatts-Battery -- Commercial Owner :doc:`../modules/Pvwattsv8`, :doc:`../modules/Battwatts`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Cashloan` PVWatts-Battery -- Residential Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- PVWatts system model with battery storage. Renewable energy system displaces residential home electric load. @@ -980,7 +980,7 @@ PVWatts-Battery -- Residential Owner :doc:`../modules/Pvwattsv8`, :doc:`../modules/Belpe`, :doc:`../modules/Battwatts`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Cashloan` PVWatts-Battery -- Third Party - Host / Developer ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- PVWatts system model with battery storage. Third party ownershop from host and developer perspective for PPA. @@ -989,7 +989,7 @@ PVWatts-Battery -- Third Party - Host / Developer :doc:`../modules/Pvwattsv8`, :doc:`../modules/Battwatts`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/HostDeveloper` PVWatts-Battery -- Third Party Owner - Host ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- PVWatts system model with battery storage. Third party ownership from host perspective for PPA or lease agreement. @@ -998,7 +998,7 @@ PVWatts-Battery -- Third Party Owner - Host :doc:`../modules/Pvwattsv8`, :doc:`../modules/Belpe`, :doc:`../modules/Battwatts`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Thirdpartyownership` Parabolic Trough -- ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Industrial process heat parabolic trough system using heat transfer and thermodynamic component models. . @@ -1007,7 +1007,7 @@ Parabolic Trough -- :doc:`../modules/TroughPhysicalIph`, :doc:`../modules/LcoefcrDesign` Parabolic Trough -- No Financial Model ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Industrial process heat parabolic trough system using heat transfer and thermodynamic component models. Run the performance model with no financial model. @@ -1016,7 +1016,7 @@ Parabolic Trough -- No Financial Model :doc:`../modules/TroughPhysicalIph` Parabolic Trough Empirical Model -- Commercial Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP parabolic trough system using model with empirically-derived coefficients and equations. Renewable energy system displaces commercial building electric load. @@ -1025,7 +1025,7 @@ Parabolic Trough Empirical Model -- Commercial Owner :doc:`../modules/TcstroughEmpirical`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Cashloan` Parabolic Trough Empirical Model -- LCOE Calculator (FCR Method) ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP parabolic trough system using model with empirically-derived coefficients and equations. Calculate LCOE using fixed charge rate method. @@ -1034,7 +1034,7 @@ Parabolic Trough Empirical Model -- LCOE Calculator (FCR Method) :doc:`../modules/TcstroughEmpirical`, :doc:`../modules/Lcoefcr` Parabolic Trough Empirical Model -- Merchant Plant ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP parabolic trough system using model with empirically-derived coefficients and equations. Merchant plant with constant DSCR and ancillary services revenue, reserve accounts and depreciation allocations. @@ -1043,7 +1043,7 @@ Parabolic Trough Empirical Model -- Merchant Plant :doc:`../modules/TcstroughEmpirical`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Merchantplant` Parabolic Trough Empirical Model -- No Financial Model ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP parabolic trough system using model with empirically-derived coefficients and equations. Run the performance model with no financial model. @@ -1052,7 +1052,7 @@ Parabolic Trough Empirical Model -- No Financial Model :doc:`../modules/TcstroughEmpirical` Parabolic Trough Empirical Model -- Partnership Flip with Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP parabolic trough system using model with empirically-derived coefficients and equations. Developer/investor partnership flip PPA structure with debt. @@ -1061,7 +1061,7 @@ Parabolic Trough Empirical Model -- Partnership Flip with Debt :doc:`../modules/TcstroughEmpirical`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Levpartflip` Parabolic Trough Empirical Model -- Partnership Flip without Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP parabolic trough system using model with empirically-derived coefficients and equations. Developer/investor partnership flip PPA structure without debt. @@ -1070,7 +1070,7 @@ Parabolic Trough Empirical Model -- Partnership Flip without Debt :doc:`../modules/TcstroughEmpirical`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Equpartflip` Parabolic Trough Empirical Model -- Sale Leaseback ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP parabolic trough system using model with empirically-derived coefficients and equations. Sale leaseback partnership PPA structure. @@ -1079,7 +1079,7 @@ Parabolic Trough Empirical Model -- Sale Leaseback :doc:`../modules/TcstroughEmpirical`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Saleleaseback` Parabolic Trough Empirical Model -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP parabolic trough system using model with empirically-derived coefficients and equations. Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -1088,7 +1088,7 @@ Parabolic Trough Empirical Model -- Single Owner :doc:`../modules/TcstroughEmpirical`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Singleowner` Parabolic Trough Physical Model -- LCOE Calculator (FCR Method) ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP parabolic trough system using heat transfer and thermodynamic component models. Calculate LCOE using fixed charge rate method. @@ -1097,7 +1097,7 @@ Parabolic Trough Physical Model -- LCOE Calculator (FCR Method) :doc:`../modules/TroughPhysical`, :doc:`../modules/Grid`, :doc:`../modules/Lcoefcr` Parabolic Trough Physical Model -- Merchant Plant ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP parabolic trough system using heat transfer and thermodynamic component models. Merchant plant with constant DSCR and ancillary services revenue, reserve accounts and depreciation allocations. @@ -1106,7 +1106,7 @@ Parabolic Trough Physical Model -- Merchant Plant :doc:`../modules/TroughPhysical`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Merchantplant` Parabolic Trough Physical Model -- No Financial Model ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP parabolic trough system using heat transfer and thermodynamic component models. Run the performance model with no financial model. @@ -1115,7 +1115,7 @@ Parabolic Trough Physical Model -- No Financial Model :doc:`../modules/TroughPhysical`, :doc:`../modules/Grid` Parabolic Trough Physical Model -- Partnership Flip with Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP parabolic trough system using heat transfer and thermodynamic component models. Developer/investor partnership flip PPA structure with debt. @@ -1124,7 +1124,7 @@ Parabolic Trough Physical Model -- Partnership Flip with Debt :doc:`../modules/TroughPhysical`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Levpartflip` Parabolic Trough Physical Model -- Partnership Flip without Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP parabolic trough system using heat transfer and thermodynamic component models. Developer/investor partnership flip PPA structure without debt. @@ -1133,7 +1133,7 @@ Parabolic Trough Physical Model -- Partnership Flip without Debt :doc:`../modules/TroughPhysical`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Equpartflip` Parabolic Trough Physical Model -- Sale Leaseback ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP parabolic trough system using heat transfer and thermodynamic component models. Sale leaseback partnership PPA structure. @@ -1142,7 +1142,7 @@ Parabolic Trough Physical Model -- Sale Leaseback :doc:`../modules/TroughPhysical`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Saleleaseback` Parabolic Trough Physical Model -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP parabolic trough system using heat transfer and thermodynamic component models. Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -1151,7 +1151,7 @@ Parabolic Trough Physical Model -- Single Owner :doc:`../modules/TroughPhysical`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Singleowner` Photovoltaic Wind Battery Hybrid -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Hybrid power system with PVWatts and wind power generation and battery storage). Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -1160,7 +1160,7 @@ Photovoltaic Wind Battery Hybrid -- Single Owner :doc:`../modules/Pvsamv1`, :doc:`../modules/Windpower`, :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Singleowner` Photovoltaic Wind Battery Hybrid -- Third Party - Host / Developer ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Hybrid power system with PVWatts and wind power generation and battery storage). Third party ownershop from host and developer perspective for PPA. @@ -1169,7 +1169,7 @@ Photovoltaic Wind Battery Hybrid -- Third Party - Host / Developer :doc:`../modules/Pvsamv1`, :doc:`../modules/Windpower`, :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/HostDeveloper` Power Tower Molten Salt -- Merchant Plant ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP molten salt power tower system using heat transfer and thermodynamic component models. Merchant plant with constant DSCR and ancillary services revenue, reserve accounts and depreciation allocations. @@ -1178,7 +1178,7 @@ Power Tower Molten Salt -- Merchant Plant :doc:`../modules/TcsmoltenSalt`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Merchantplant` Power Tower Molten Salt -- No Financial Model ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP molten salt power tower system using heat transfer and thermodynamic component models. Run the performance model with no financial model. @@ -1187,7 +1187,7 @@ Power Tower Molten Salt -- No Financial Model :doc:`../modules/TcsmoltenSalt` Power Tower Molten Salt -- Partnership Flip with Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP molten salt power tower system using heat transfer and thermodynamic component models. Developer/investor partnership flip PPA structure with debt. @@ -1196,7 +1196,7 @@ Power Tower Molten Salt -- Partnership Flip with Debt :doc:`../modules/TcsmoltenSalt`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Levpartflip` Power Tower Molten Salt -- Partnership Flip without Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP molten salt power tower system using heat transfer and thermodynamic component models. Developer/investor partnership flip PPA structure without debt. @@ -1205,7 +1205,7 @@ Power Tower Molten Salt -- Partnership Flip without Debt :doc:`../modules/TcsmoltenSalt`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Equpartflip` Power Tower Molten Salt -- Sale Leaseback ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP molten salt power tower system using heat transfer and thermodynamic component models. Sale leaseback partnership PPA structure. @@ -1214,7 +1214,7 @@ Power Tower Molten Salt -- Sale Leaseback :doc:`../modules/TcsmoltenSalt`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Saleleaseback` Power Tower Molten Salt -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- CSP molten salt power tower system using heat transfer and thermodynamic component models. Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -1223,7 +1223,7 @@ Power Tower Molten Salt -- Single Owner :doc:`../modules/TcsmoltenSalt`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Singleowner` Pumped Thermal Energy Storage -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Pumped thermal energy storage. Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -1232,7 +1232,7 @@ Pumped Thermal Energy Storage -- Single Owner :doc:`../modules/EtesPtes`, :doc:`../modules/Singleowner` Solar Water Heating -- Commercial Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Solar water heating model for residential and commercial building applications. Renewable energy system displaces commercial building electric load. @@ -1241,7 +1241,7 @@ Solar Water Heating -- Commercial Owner :doc:`../modules/Swh`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Cashloan` Solar Water Heating -- LCOE Calculator (FCR Method) ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Solar water heating model for residential and commercial building applications. Calculate LCOE using fixed charge rate method. @@ -1250,7 +1250,7 @@ Solar Water Heating -- LCOE Calculator (FCR Method) :doc:`../modules/Swh`, :doc:`../modules/Lcoefcr` Solar Water Heating -- No Financial Model ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Solar water heating model for residential and commercial building applications. Run the performance model with no financial model. @@ -1259,7 +1259,7 @@ Solar Water Heating -- No Financial Model :doc:`../modules/Swh` Solar Water Heating -- Residential Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Solar water heating model for residential and commercial building applications. Renewable energy system displaces residential home electric load. @@ -1268,7 +1268,7 @@ Solar Water Heating -- Residential Owner :doc:`../modules/Swh`, :doc:`../modules/Belpe`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Cashloan` Standalone Battery -- Commercial Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Generic standalone battery storage. Renewable energy system displaces commercial building electric load. @@ -1277,7 +1277,7 @@ Standalone Battery -- Commercial Owner :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Cashloan` Standalone Battery -- Merchant Plant ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Generic standalone battery storage. Merchant plant with constant DSCR and ancillary services revenue, reserve accounts and depreciation allocations. @@ -1286,7 +1286,7 @@ Standalone Battery -- Merchant Plant :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Merchantplant` Standalone Battery -- Partnership Flip with Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Generic standalone battery storage. Developer/investor partnership flip PPA structure with debt. @@ -1295,7 +1295,7 @@ Standalone Battery -- Partnership Flip with Debt :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Levpartflip` Standalone Battery -- Partnership Flip without Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Generic standalone battery storage. Developer/investor partnership flip PPA structure without debt. @@ -1304,7 +1304,7 @@ Standalone Battery -- Partnership Flip without Debt :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Equpartflip` Standalone Battery -- Residential Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Generic standalone battery storage. Renewable energy system displaces residential home electric load. @@ -1313,7 +1313,7 @@ Standalone Battery -- Residential Owner :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Cashloan` Standalone Battery -- Sale Leaseback ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Generic standalone battery storage. Sale leaseback partnership PPA structure. @@ -1322,7 +1322,7 @@ Standalone Battery -- Sale Leaseback :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Saleleaseback` Standalone Battery -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Generic standalone battery storage. Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -1331,7 +1331,7 @@ Standalone Battery -- Single Owner :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Singleowner` Standalone Battery -- Third Party - Host / Developer ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Generic standalone battery storage. Third party ownershop from host and developer perspective for PPA. @@ -1340,7 +1340,7 @@ Standalone Battery -- Third Party - Host / Developer :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/HostDeveloper` Standalone Battery -- Third Party Owner - Host ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Generic standalone battery storage. Third party ownership from host perspective for PPA or lease agreement. @@ -1349,7 +1349,7 @@ Standalone Battery -- Third Party Owner - Host :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Thirdpartyownership` Tidal -- LCOE Calculator (FCR Method) ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Marine energy tidal system. Calculate LCOE using fixed charge rate method. @@ -1358,7 +1358,7 @@ Tidal -- LCOE Calculator (FCR Method) :doc:`../modules/TidalFileReader`, :doc:`../modules/MhkTidal`, :doc:`../modules/Lcoefcr` Tidal -- No Financial Model ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Marine energy tidal system. Run the performance model with no financial model. @@ -1367,7 +1367,7 @@ Tidal -- No Financial Model :doc:`../modules/TidalFileReader`, :doc:`../modules/MhkTidal` Tower Molten Salt -- ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Industrial process heat power tower system with molten salt heat transfer fluid. . @@ -1376,7 +1376,7 @@ Tower Molten Salt -- :doc:`../modules/MsptIph`, :doc:`../modules/LcoefcrDesign` Tower Molten Salt -- No Financial Model ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Industrial process heat power tower system with molten salt heat transfer fluid. Run the performance model with no financial model. @@ -1385,7 +1385,7 @@ Tower Molten Salt -- No Financial Model :doc:`../modules/MsptIph` Wave -- LCOE Calculator (FCR Method) ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Marine energy wave system. Calculate LCOE using fixed charge rate method. @@ -1394,7 +1394,7 @@ Wave -- LCOE Calculator (FCR Method) :doc:`../modules/WaveFileReader`, :doc:`../modules/MhkWave`, :doc:`../modules/Lcoefcr` Wave -- No Financial Model ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Marine energy wave system. Run the performance model with no financial model. @@ -1403,7 +1403,7 @@ Wave -- No Financial Model :doc:`../modules/WaveFileReader`, :doc:`../modules/MhkWave` Wave -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Marine energy wave system. Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -1412,7 +1412,7 @@ Wave -- Single Owner :doc:`../modules/WaveFileReader`, :doc:`../modules/MhkWave`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Singleowner` Wave Battery -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Marine energy wave system with battery. Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. @@ -1421,7 +1421,7 @@ Wave Battery -- Single Owner :doc:`../modules/WaveFileReader`, :doc:`../modules/MhkWave`, :doc:`../modules/Battery`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Singleowner` Wind -- Commercial Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Small or large wind power system. Renewable energy system displaces commercial building electric load. @@ -1430,7 +1430,7 @@ Wind -- Commercial Owner :doc:`../modules/Windpower`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Cashloan` Wind -- LCOE Calculator (FCR Method) ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Small or large wind power system. Calculate LCOE using fixed charge rate method. @@ -1439,7 +1439,7 @@ Wind -- LCOE Calculator (FCR Method) :doc:`../modules/Windpower`, :doc:`../modules/Grid`, :doc:`../modules/Lcoefcr` Wind -- Merchant Plant ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Small or large wind power system. Merchant plant with constant DSCR and ancillary services revenue, reserve accounts and depreciation allocations. @@ -1448,7 +1448,7 @@ Wind -- Merchant Plant :doc:`../modules/Windpower`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Merchantplant` Wind -- No Financial Model ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Small or large wind power system. Run the performance model with no financial model. @@ -1457,7 +1457,7 @@ Wind -- No Financial Model :doc:`../modules/Windpower`, :doc:`../modules/Grid` Wind -- Partnership Flip with Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Small or large wind power system. Developer/investor partnership flip PPA structure with debt. @@ -1466,7 +1466,7 @@ Wind -- Partnership Flip with Debt :doc:`../modules/Windpower`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Levpartflip` Wind -- Partnership Flip without Debt ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Small or large wind power system. Developer/investor partnership flip PPA structure without debt. @@ -1475,7 +1475,7 @@ Wind -- Partnership Flip without Debt :doc:`../modules/Windpower`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Equpartflip` Wind -- Residential Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Small or large wind power system. Renewable energy system displaces residential home electric load. @@ -1484,7 +1484,7 @@ Wind -- Residential Owner :doc:`../modules/Windpower`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Cashloan` Wind -- Sale Leaseback ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Small or large wind power system. Sale leaseback partnership PPA structure. @@ -1493,7 +1493,7 @@ Wind -- Sale Leaseback :doc:`../modules/Windpower`, :doc:`../modules/Grid`, :doc:`../modules/Utilityrate5`, :doc:`../modules/Saleleaseback` Wind -- Single Owner ------------------------------------------------------------------------ +--------------------------------------------------------------------------------- Small or large wind power system. Single owner PPA with constant DSCR and IRR target year, reserve accounts and depreciation allocations. diff --git a/docs/lists/models.rst b/docs/lists/models.rst index 376bdbd9..de9c37a0 100644 --- a/docs/lists/models.rst +++ b/docs/lists/models.rst @@ -70,6 +70,12 @@ :doc:`../modules/HostDeveloper` Host Developer Financial Model +:doc:`../modules/Hybrid` (HD) + Hybrid processing + +:doc:`../modules/HybridSteps` (HD) + Hybrid processing with 'steps' passed in on how to combine + :doc:`../modules/Iec61853interp` (HD) Determine single diode model parameters from IEC 61853 solution matrix at a given temperature and irradiance. @@ -311,6 +317,8 @@ ../modules/Grid.rst ../modules/Hcpv.rst ../modules/HostDeveloper.rst + ../modules/Hybrid.rst + ../modules/HybridSteps.rst ../modules/Iec61853interp.rst ../modules/Iec61853par.rst ../modules/InvCecCg.rst diff --git a/docs/modules/Battery.rst b/docs/modules/Battery.rst index 3bc6846a..61bd1111 100644 --- a/docs/modules/Battery.rst +++ b/docs/modules/Battery.rst @@ -179,6 +179,12 @@ GridLimits Group .. autoclass:: PySAM.Battery.Battery.GridLimits :members: +HybridCosts Group +------------------ + +.. autoclass:: PySAM.Battery.Battery.HybridCosts + :members: + Outputs Group -------------- diff --git a/docs/modules/Fuelcell.rst b/docs/modules/Fuelcell.rst index 92b59cd8..1feb55d6 100644 --- a/docs/modules/Fuelcell.rst +++ b/docs/modules/Fuelcell.rst @@ -69,6 +69,12 @@ FuelCell Group .. autoclass:: PySAM.Fuelcell.Fuelcell.FuelCell :members: +HybridCosts Group +------------------ + +.. autoclass:: PySAM.Fuelcell.Fuelcell.HybridCosts + :members: + Outputs Group -------------- diff --git a/docs/modules/GenericSystem.rst b/docs/modules/GenericSystem.rst index 07752755..84d1338c 100644 --- a/docs/modules/GenericSystem.rst +++ b/docs/modules/GenericSystem.rst @@ -17,6 +17,8 @@ The variables listed below are interdependent with other variables. If you chang - heat_rate + - system_capacity + Functions ----------- @@ -42,6 +44,12 @@ AdjustmentFactors Group :members: :noindex: +HybridCosts Group +------------------ + +.. autoclass:: PySAM.GenericSystem.GenericSystem.HybridCosts + :members: + Outputs Group -------------- diff --git a/docs/modules/Grid.rst b/docs/modules/Grid.rst index 4d8ab6cd..be5ce7f3 100644 --- a/docs/modules/Grid.rst +++ b/docs/modules/Grid.rst @@ -51,6 +51,12 @@ GridLimits Group .. autoclass:: PySAM.Grid.Grid.GridLimits :members: +HybridCosts Group +------------------ + +.. autoclass:: PySAM.Grid.Grid.HybridCosts + :members: + Outputs Group -------------- diff --git a/docs/modules/HostDeveloper.rst b/docs/modules/HostDeveloper.rst index fd881498..236df557 100644 --- a/docs/modules/HostDeveloper.rst +++ b/docs/modules/HostDeveloper.rst @@ -13,8 +13,16 @@ Interdependent Variables The variables listed below are interdependent with other variables. If you change the value of one of these variables, you may need to change values of other variables. The SAM user interface manages these interdependent variables, but in PySAM, it is up to you change the value of all interdependent variables so they are consistent. See :doc:`../interdependent-variables` for examples and details. + - battery_per_kWh + + - battery_total_cost_lcos + - construction_financing_cost + - land_area + + - om_batt_nameplate + - total_installed_cost Functions @@ -149,6 +157,12 @@ FuelCell Group .. autoclass:: PySAM.HostDeveloper.HostDeveloper.FuelCell :members: +HybridCosts Group +------------------ + +.. autoclass:: PySAM.HostDeveloper.HostDeveloper.HybridCosts + :members: + Outputs Group -------------- diff --git a/docs/modules/Hybrid.rst b/docs/modules/Hybrid.rst new file mode 100644 index 00000000..4384073e --- /dev/null +++ b/docs/modules/Hybrid.rst @@ -0,0 +1,35 @@ +.. _Hybrid: + +Hybrid +======= + +.. automodule:: PySAM.Hybrid + :members: + +Hybrid is a wrapper for the SSC compute module `cmod_hybrid.cpp `_ + +Interdependent Variables +-------------------------- + +The variables listed below are interdependent with other variables. If you change the value of one of these variables, you may need to change values of other variables. The SAM user interface manages these interdependent variables, but in PySAM, it is up to you change the value of all interdependent variables so they are consistent. See :doc:`../interdependent-variables` for examples and details. + +- None + +Functions +----------- + +.. autoclass:: PySAM.Hybrid.Hybrid + :members: + +Common Group +------------- + +.. autoclass:: PySAM.Hybrid.Hybrid.Common + :members: + +Outputs Group +-------------- + +.. autoclass:: PySAM.Hybrid.Hybrid.Outputs + :members: + diff --git a/docs/modules/HybridSteps.rst b/docs/modules/HybridSteps.rst new file mode 100644 index 00000000..9c304f7d --- /dev/null +++ b/docs/modules/HybridSteps.rst @@ -0,0 +1,35 @@ +.. _HybridSteps: + +HybridSteps +============ + +.. automodule:: PySAM.HybridSteps + :members: + +HybridSteps is a wrapper for the SSC compute module `cmod_hybrid_steps.cpp `_ + +Interdependent Variables +-------------------------- + +The variables listed below are interdependent with other variables. If you change the value of one of these variables, you may need to change values of other variables. The SAM user interface manages these interdependent variables, but in PySAM, it is up to you change the value of all interdependent variables so they are consistent. See :doc:`../interdependent-variables` for examples and details. + +- None + +Functions +----------- + +.. autoclass:: PySAM.HybridSteps.HybridSteps + :members: + +Common Group +------------- + +.. autoclass:: PySAM.HybridSteps.HybridSteps.Common + :members: + +Outputs Group +-------------- + +.. autoclass:: PySAM.HybridSteps.HybridSteps.Outputs + :members: + diff --git a/docs/modules/Pvsamv1.rst b/docs/modules/Pvsamv1.rst index e1c7bf11..76e2fb2a 100644 --- a/docs/modules/Pvsamv1.rst +++ b/docs/modules/Pvsamv1.rst @@ -15,6 +15,8 @@ The variables listed below are interdependent with other variables. If you chang - 6par_aisc + - 6par_area + - 6par_bvoc - 6par_imp @@ -25,6 +27,64 @@ The variables listed below are interdependent with other variables. If you chang - 6par_voc + - LeadAcid_q10_computed + + - LeadAcid_q20_computed + + - LeadAcid_qn_computed + + - batt_Qexp + + - batt_Qfull + + - batt_Qfull_flow + + - batt_Qnom + + - batt_Vnom_default + + - batt_ac_dc_efficiency + + - batt_ac_or_dc + + - batt_chem + + - batt_computed_bank_capacity + + - batt_computed_series + + - batt_computed_strings + + - batt_current_charge_max + + - batt_current_choice + + - batt_current_discharge_max + + - batt_dc_ac_efficiency + + - batt_dc_dc_efficiency + + - batt_dispatch_load_forecast_choice + + - batt_load_ac_forecast + + - batt_load_ac_forecast_escalation + + - batt_mass + + - batt_power_charge_max_kwac + + - batt_power_charge_max_kwdc + + - batt_power_discharge_max_kwac + + - batt_power_discharge_max_kwdc + + - batt_room_temperature_celsius + + - batt_surface_area + - cec_area - cec_i_mp_ref @@ -37,6 +97,16 @@ The variables listed below are interdependent with other variables. If you chang - cec_v_oc_ref + - dispatch_manual_discharge + + - dispatch_manual_gridcharge + + - dispatch_manual_percent_discharge + + - dispatch_manual_percent_gridcharge + + - grid_curtailment + - inv_cec_cg_c0 - inv_cec_cg_c1 @@ -55,6 +125,8 @@ The variables listed below are interdependent with other variables. If you chang - inv_cec_cg_vdco + - inv_ds_eff + - inv_ds_paco - inv_num_mppt @@ -87,6 +159,10 @@ The variables listed below are interdependent with other variables. If you chang - inverter_model + - load + + - load_escalation + - module_aspect_ratio - module_model @@ -99,6 +175,8 @@ The variables listed below are interdependent with other variables. If you chang - sd11par_Voc0 + - sd11par_area + - snl_a - snl_a0 @@ -171,6 +249,8 @@ The variables listed below are interdependent with other variables. If you chang - snl_voco + - solar_resource_file + - spe_area - spe_eff0 @@ -199,24 +279,32 @@ The variables listed below are interdependent with other variables. If you chang - spe_voc + - subarray1_gcr + - subarray1_modules_per_string - subarray1_nstrings - subarray2_enable + - subarray2_gcr + - subarray2_modules_per_string - subarray2_nstrings - subarray3_enable + - subarray3_gcr + - subarray3_modules_per_string - subarray3_nstrings - subarray4_enable + - subarray4_gcr + - subarray4_modules_per_string - subarray4_nstrings @@ -416,6 +504,12 @@ GridLimits Group .. autoclass:: PySAM.Pvsamv1.Pvsamv1.GridLimits :members: +HybridCosts Group +------------------ + +.. autoclass:: PySAM.Pvsamv1.Pvsamv1.HybridCosts + :members: + Outputs Group -------------- diff --git a/docs/modules/Pvwattsv8.rst b/docs/modules/Pvwattsv8.rst index 1a7eb1db..a7195d4e 100644 --- a/docs/modules/Pvwattsv8.rst +++ b/docs/modules/Pvwattsv8.rst @@ -13,7 +13,11 @@ Interdependent Variables The variables listed below are interdependent with other variables. If you change the value of one of these variables, you may need to change values of other variables. The SAM user interface manages these interdependent variables, but in PySAM, it is up to you change the value of all interdependent variables so they are consistent. See :doc:`../interdependent-variables` for examples and details. -- None + - dc_ac_ratio + + - gcr + + - module_type Functions ----------- @@ -52,6 +56,12 @@ AdjustmentFactors Group :members: :noindex: +HybridCosts Group +------------------ + +.. autoclass:: PySAM.Pvwattsv8.Pvwattsv8.HybridCosts + :members: + Outputs Group -------------- diff --git a/docs/modules/Singleowner.rst b/docs/modules/Singleowner.rst index 495ab36a..5998a1cf 100644 --- a/docs/modules/Singleowner.rst +++ b/docs/modules/Singleowner.rst @@ -13,13 +13,19 @@ Interdependent Variables The variables listed below are interdependent with other variables. If you change the value of one of these variables, you may need to change values of other variables. The SAM user interface manages these interdependent variables, but in PySAM, it is up to you change the value of all interdependent variables so they are consistent. See :doc:`../interdependent-variables` for examples and details. + - battery_per_kWh + + - battery_total_cost_lcos + - construction_financing_cost - cp_battery_nameplate - cp_system_nameplate - - system_capacity + - land_area + + - om_batt_nameplate - total_installed_cost @@ -143,6 +149,12 @@ Monthly Group .. autoclass:: PySAM.Singleowner.Singleowner.Monthly :members: +HybridCosts Group +------------------ + +.. autoclass:: PySAM.Singleowner.Singleowner.HybridCosts + :members: + Outputs Group -------------- diff --git a/docs/modules/Utilityrate5.rst b/docs/modules/Utilityrate5.rst index dce517c2..180e87dc 100644 --- a/docs/modules/Utilityrate5.rst +++ b/docs/modules/Utilityrate5.rst @@ -45,6 +45,12 @@ Load Group .. autoclass:: PySAM.Utilityrate5.Utilityrate5.Load :members: +HybridCosts Group +------------------ + +.. autoclass:: PySAM.Utilityrate5.Utilityrate5.HybridCosts + :members: + Outputs Group -------------- diff --git a/docs/modules/Windpower.rst b/docs/modules/Windpower.rst index b2d1f515..8a4bab79 100644 --- a/docs/modules/Windpower.rst +++ b/docs/modules/Windpower.rst @@ -13,8 +13,6 @@ Interdependent Variables The variables listed below are interdependent with other variables. If you change the value of one of these variables, you may need to change values of other variables. The SAM user interface manages these interdependent variables, but in PySAM, it is up to you change the value of all interdependent variables so they are consistent. See :doc:`../interdependent-variables` for examples and details. - - system_capacity - - wake_int_loss - wind_farm_wake_model @@ -78,6 +76,12 @@ Uncertainty Group .. autoclass:: PySAM.Windpower.Windpower.Uncertainty :members: +HybridCosts Group +------------------ + +.. autoclass:: PySAM.Windpower.Windpower.HybridCosts + :members: + Outputs Group -------------- diff --git a/files/Hybrids/BatteryHybrid.py b/files/Hybrids/BatteryHybrid.py new file mode 100644 index 00000000..de6a368c --- /dev/null +++ b/files/Hybrids/BatteryHybrid.py @@ -0,0 +1,55 @@ +from typing import Iterable +import PySAM.Battery as batt + +from .HybridBase import HybridGenerator + +class BatteryHybrid(HybridGenerator): + def __init__(self, name="battery") -> None: + super().__init__(batt, name) + self._data: batt.Battery + + def _collect_inputs(self, input): + if self._ssc.data_query(self._data_ptr, b'batt_computed_bank_capacity') != self._ssc.NUMBER: + raise RuntimeError("BatteryHybrid error: BatterySystem.batt_computed_bank_capacity required but not assigned") + self._ssc.data_set_variable(self._data_ptr, 'system_capacity', self._data.BatterySystem.batt_computed_bank_capacity) + self._ssc.data_set_variable(self._data_ptr, 'om_batt_nameplate', self._data.BatterySystem.batt_computed_bank_capacity) + super()._collect_inputs(input) + + @property + def om_fixed(self): + """ + Battery fixed O&M annual amount [$/year] + """ + return self._ssc.data_get_array(self._data_ptr, b'om_batt_fixed_cost') + + @om_fixed.setter + def om_fixed(self, om_fixed: Iterable): + if not isinstance(om_fixed, Iterable): + om_fixed = [om_fixed] + self._ssc.data_set_array(self._data_ptr, b'om_batt_fixed_cost', om_fixed) + + @property + def om_production(self): + """ + Battery production-based O&M amount [$/MWh] + """ + return self._ssc.data_get_array(self._data_ptr, b'om_batt_variable_cost') + + @om_production.setter + def om_production(self, om_production: Iterable): + if not isinstance(om_production, Iterable): + om_production = [om_production] + self._ssc.data_set_array(self._data_ptr, b'om_batt_variable_cost', om_production) + + @property + def om_capacity(self): + """ + Battery capacity-based O&M amount [$/kWcap] + """ + return self._ssc.data_get_array(self._data_ptr, b'om_batt_capacity_cost') + + @om_capacity.setter + def om_capacity(self, om_capacity: Iterable): + if not isinstance(om_capacity, Iterable): + om_capacity = [om_capacity] + self._ssc.data_set_array(self._data_ptr, b'om_batt_capacity_cost', om_capacity) diff --git a/files/Hybrids/BatteryHybrid.pyi b/files/Hybrids/BatteryHybrid.pyi new file mode 100644 index 00000000..258e4df0 --- /dev/null +++ b/files/Hybrids/BatteryHybrid.pyi @@ -0,0 +1,552 @@ +from .HybridBase import HybridGenerator + +class BatteryHybrid(HybridGenerator): + def new(self, str): + pass + + def default(self, str): + pass + + def assign(self, dict): + pass + + def value(self, name, value=None): + pass + + def unassign(self, name): + pass + + def execute(self, int_verbosity): + pass + + def export(self): + pass + + def __getattribute__(self, *args, **kwargs): + pass + + def __init__(self, *args, **kwargs): + pass + + def Reopt_size_standalone_battery_post(self, args): + pass + + class Simulation(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + percent_complete = float + + + class Lifetime(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + analysis_period = float + inflation_rate = float + system_use_lifetime_output = float + + + class BatterySystem(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + batt_ac_dc_efficiency = float + batt_ac_or_dc = float + batt_computed_bank_capacity = float + batt_computed_series = float + batt_computed_strings = float + batt_current_charge_max = float + batt_current_choice = float + batt_current_discharge_max = float + batt_dc_ac_efficiency = float + batt_dc_dc_efficiency = float + batt_inverter_efficiency_cutoff = float + batt_loss_choice = float + batt_losses = tuple + batt_losses_charging = tuple + batt_losses_discharging = tuple + batt_losses_idle = tuple + batt_mass = float + batt_meter_position = float + batt_power_charge_max_kwac = float + batt_power_charge_max_kwdc = float + batt_power_discharge_max_kwac = float + batt_power_discharge_max_kwdc = float + batt_replacement_capacity = float + batt_replacement_option = float + batt_replacement_schedule_percent = tuple + batt_surface_area = float + en_batt = float + en_standalone_batt = float + en_wave_batt = float + om_replacement_cost1 = tuple + + + class SystemOutput(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + annual_energy = float + capacity_factor = float + energy_hourly_kW = tuple + gen = tuple + + + class Load(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + crit_load = tuple + crit_load_escalation = tuple + grid_outage = tuple + load = tuple + load_escalation = tuple + run_resiliency_calcs = float + + + class BatteryCell(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + LeadAcid_q10_computed = float + LeadAcid_q20_computed = float + LeadAcid_qn_computed = float + LeadAcid_tn = float + batt_C_rate = float + batt_Cp = float + batt_Qexp = float + batt_Qfull = float + batt_Qfull_flow = float + batt_Qnom = float + batt_Vcut = float + batt_Vexp = float + batt_Vfull = float + batt_Vnom = float + batt_Vnom_default = float + batt_calendar_a = float + batt_calendar_b = float + batt_calendar_c = float + batt_calendar_choice = float + batt_calendar_lifetime_matrix = tuple + batt_calendar_q0 = float + batt_chem = float + batt_h_to_ambient = float + batt_initial_SOC = float + batt_life_model = float + batt_lifetime_matrix = tuple + batt_maximum_SOC = float + batt_minimum_SOC = float + batt_minimum_modetime = float + batt_minimum_outage_SOC = float + batt_resistance = float + batt_room_temperature_celsius = tuple + batt_voltage_choice = float + batt_voltage_matrix = tuple + cap_vs_temp = tuple + + + class Inverter(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + inv_cec_cg_eff_cec = float + inv_cec_cg_paco = float + inv_ds_eff = float + inv_ds_paco = float + inv_pd_eff = float + inv_pd_paco = float + inv_snl_eff_cec = float + inv_snl_paco = float + inverter_count = float + inverter_model = float + + + class Losses(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + dcoptimizer_loss = float + + + class BatteryDispatch(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + batt_custom_dispatch = tuple + batt_cycle_cost = tuple + batt_cycle_cost_choice = float + batt_dispatch_auto_btm_can_discharge_to_grid = float + batt_dispatch_auto_can_charge = float + batt_dispatch_auto_can_clipcharge = float + batt_dispatch_auto_can_fuelcellcharge = float + batt_dispatch_auto_can_gridcharge = float + batt_dispatch_charge_only_system_exceeds_load = float + batt_dispatch_choice = float + batt_dispatch_discharge_only_load_exceeds_system = float + batt_dispatch_load_forecast_choice = float + batt_dispatch_pvs_ac_lb = float + batt_dispatch_pvs_ac_lb_enable = float + batt_dispatch_pvs_ac_ub = float + batt_dispatch_pvs_ac_ub_enable = float + batt_dispatch_pvs_curtail_as_control = float + batt_dispatch_pvs_curtail_if_violation = float + batt_dispatch_pvs_forecast_shift_periods = float + batt_dispatch_pvs_kf = float + batt_dispatch_pvs_ki = float + batt_dispatch_pvs_kp = float + batt_dispatch_pvs_max_ramp = float + batt_dispatch_pvs_nameplate_ac = float + batt_dispatch_pvs_short_forecast_enable = float + batt_dispatch_pvs_soc_rest = float + batt_dispatch_pvs_timestep_multiplier = float + batt_dispatch_update_frequency_hours = float + batt_dispatch_wf_forecast_choice = float + batt_load_ac_forecast = tuple + batt_load_ac_forecast_escalation = tuple + batt_look_ahead_hours = float + batt_pv_ac_forecast = tuple + batt_pv_clipping_forecast = tuple + batt_target_choice = float + batt_target_power = tuple + batt_target_power_monthly = tuple + dispatch_manual_btm_discharge_to_grid = tuple + dispatch_manual_charge = tuple + dispatch_manual_discharge = tuple + dispatch_manual_fuelcellcharge = tuple + dispatch_manual_gridcharge = tuple + dispatch_manual_percent_discharge = tuple + dispatch_manual_percent_gridcharge = tuple + dispatch_manual_sched = tuple + dispatch_manual_sched_weekend = tuple + dispatch_manual_system_charge_first = float + + + class SystemCosts(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + om_batt_replacement_cost = tuple + om_batt_variable_cost = tuple + om_production_escal = float + om_replacement_cost_escal = float + + + class FuelCell(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + fuelcell_power = tuple + + + class PriceSignal(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + dispatch_factors_ts = tuple + dispatch_sched_weekday = tuple + dispatch_sched_weekend = tuple + dispatch_tod_factors = tuple + forecast_price_signal_model = float + mp_ancserv1_revenue = tuple + mp_ancserv2_revenue = tuple + mp_ancserv3_revenue = tuple + mp_ancserv4_revenue = tuple + mp_enable_ancserv1 = float + mp_enable_ancserv2 = float + mp_enable_ancserv3 = float + mp_enable_ancserv4 = float + mp_enable_energy_market_revenue = float + mp_energy_market_revenue = tuple + ppa_escalation = float + ppa_multiplier_model = float + ppa_price_input = tuple + + + class Revenue(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + mp_ancserv1_revenue_single = tuple + mp_ancserv2_revenue_single = tuple + mp_ancserv3_revenue_single = tuple + mp_ancserv4_revenue_single = tuple + mp_enable_ancserv1_percent_gen = float + mp_enable_ancserv2_percent_gen = float + mp_enable_ancserv3_percent_gen = float + mp_enable_ancserv4_percent_gen = float + mp_enable_market_percent_gen = float + mp_energy_market_revenue_single = tuple + + + class ElectricityRates(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + en_electricity_rates = float + rate_escalation = tuple + ur_annual_min_charge = float + ur_billing_demand_lookback_percentages = tuple + ur_billing_demand_lookback_period = float + ur_billing_demand_minimum = float + ur_dc_billing_demand_periods = tuple + ur_dc_enable = float + ur_dc_flat_mat = tuple + ur_dc_sched_weekday = tuple + ur_dc_sched_weekend = tuple + ur_dc_tou_mat = tuple + ur_ec_sched_weekday = tuple + ur_ec_sched_weekend = tuple + ur_ec_tou_mat = tuple + ur_en_ts_buy_rate = float + ur_en_ts_sell_rate = float + ur_enable_billing_demand = float + ur_metering_option = float + ur_monthly_fixed_charge = float + ur_monthly_min_charge = float + ur_nm_credit_month = float + ur_nm_credit_rollover = float + ur_nm_yearend_sell_rate = float + ur_sell_eq_buy = float + ur_ts_buy_rate = tuple + ur_ts_sell_rate = tuple + ur_yearzero_usage_peaks = tuple + + + class GridLimits(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + enable_interconnection_limit = float + grid_curtailment = tuple + grid_interconnection_limit_kwac = float + + + class Outputs(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + annual_crit_load = float + annual_crit_load_unmet = float + annual_crit_load_unmet_percentage = float + annual_export_to_grid_energy = tuple + annual_import_to_grid_energy = tuple + annual_outage_losses_unmet = float + average_battery_conversion_efficiency = float + average_battery_roundtrip_efficiency = float + avg_critical_load = float + batt_DOD = tuple + batt_DOD_cycle_average = tuple + batt_I = tuple + batt_SOC = tuple + batt_annual_charge_energy = tuple + batt_annual_charge_from_grid = tuple + batt_annual_charge_from_system = tuple + batt_annual_discharge_energy = tuple + batt_annual_energy_loss = tuple + batt_annual_energy_system_loss = tuple + batt_bank_installed_capacity = float + batt_bank_replacement = tuple + batt_capacity_percent = tuple + batt_capacity_percent_calendar = tuple + batt_capacity_percent_cycle = tuple + batt_capacity_thermal_percent = tuple + batt_conversion_loss = tuple + batt_cost_to_cycle = tuple + batt_cycles = tuple + batt_dispatch_sched = tuple + batt_power = tuple + batt_power_dc = tuple + batt_power_target = tuple + batt_pvs_PV_ramp_interval = tuple + batt_pvs_P_pv_ac = tuple + batt_pvs_battpower = tuple + batt_pvs_battsoc = tuple + batt_pvs_curtail = tuple + batt_pvs_energy_to_grid_percent = float + batt_pvs_energy_to_grid_percent_sam = float + batt_pvs_forecast_pv_energy = tuple + batt_pvs_outpower = tuple + batt_pvs_violation_count = float + batt_pvs_violation_list = tuple + batt_pvs_violation_percent = float + batt_q0 = tuple + batt_q1 = tuple + batt_q2 = tuple + batt_qmax = tuple + batt_qmaxI = tuple + batt_qmax_thermal = tuple + batt_revenue_charge = tuple + batt_revenue_clipcharge = tuple + batt_revenue_discharge = tuple + batt_revenue_gridcharge = tuple + batt_system_charge_percent = float + batt_system_loss = tuple + batt_temperature = tuple + batt_to_grid = tuple + batt_to_inverter_dc = tuple + batt_to_load = tuple + batt_to_system_load = tuple + batt_voltage = tuple + batt_voltage_cell = tuple + capacity_factor_sales = float + cdf_of_surviving = tuple + cf_battery_replacement_cost_schedule = tuple + cf_energy_net = tuple + cf_fuelcell_replacement_cost_schedule = tuple + cf_om_capacity = tuple + cf_om_fixed = tuple + cf_om_fuel_cost = tuple + cf_om_land_lease = tuple + cf_om_production = tuple + crit_load = tuple + crit_load_unmet = tuple + fuelcell_to_batt = tuple + gen_without_battery = tuple + grid_power = tuple + grid_power_target = tuple + grid_to_batt = tuple + grid_to_load = tuple + interconnection_loss = tuple + market_sell_rate_series_yr1 = tuple + monthly_batt_to_grid = tuple + monthly_batt_to_load = tuple + monthly_batt_to_system_load = tuple + monthly_crit_load = tuple + monthly_crit_load_unmet = tuple + monthly_crit_load_unmet_percentage = tuple + monthly_grid_to_batt = tuple + monthly_grid_to_load = tuple + monthly_interconnection_loss = tuple + monthly_outage_losses_unmet = tuple + monthly_system_to_batt = tuple + monthly_system_to_grid = tuple + monthly_system_to_load = tuple + num_ts_load_met_by_system_lifetime = float + num_ts_load_met_by_system_yr1 = float + outage_durations = tuple + outage_losses_unmet = tuple + pdf_of_surviving = tuple + percent_ts_load_met_by_system_lifetime = float + percent_ts_load_met_by_system_yr1 = float + resilience_hrs = tuple + resilience_hrs_avg = float + resilience_hrs_max = float + resilience_hrs_min = float + survival_function = tuple + system_to_batt = tuple + system_to_batt_dc = tuple + system_to_grid = tuple + system_to_load = tuple diff --git a/files/Hybrids/FuelCellHybrid.py b/files/Hybrids/FuelCellHybrid.py new file mode 100644 index 00000000..98fc43ac --- /dev/null +++ b/files/Hybrids/FuelCellHybrid.py @@ -0,0 +1,61 @@ +from typing import Iterable +import PySAM.Fuelcell as fuelcell + +from .HybridBase import HybridGenerator + +class FuelCellHybrid(HybridGenerator): + def __init__(self, name="fuelcell") -> None: + super().__init__(fuelcell, name) + self.data: fuelcell.Fuelcell + + @property + def om_fixed(self): + """ + Fuel cell fixed O&M annual amount [$/year] + """ + return self._ssc.data_get_array(self._data, b'om_fuelcell_fixed_cost') + + @om_fixed.setter + def om_fixed(self, om_fixed: Iterable): + if not isinstance(om_fixed, Iterable): + om_fixed = [om_fixed] + self._ssc.data_set_array(self._data, b'om_fuelcell_fixed_cost', om_fixed) + + @property + def om_production(self): + """ + Fuel cell production-based O&M amount [$/MWh] + """ + return self._ssc.data_get_array(self._data, b'om_fuelcell_variable_cost') + + @om_production.setter + def om_production(self, om_production: Iterable): + if not isinstance(om_production, Iterable): + om_production = [om_production] + self._ssc.data_set_array(self._data, b'om_fuelcell_variable_cost', om_production) + + @property + def om_capacity(self): + """ + Fuel cell capacity-based O&M amount [$/kWcap] + """ + return self._ssc.data_get_array(self._data, b'om_fuelcell_capacity_cost') + + @om_fixed.setter + def om_capacity(self, om_capacity: Iterable): + if not isinstance(om_capacity, Iterable): + om_capacity = [om_capacity] + self._ssc.data_set_array(self._data, b'om_fuelcell_capacity_cost', om_capacity) + + @property + def om_fuel_cost(self): + """ + Fuel cost [$/MMBtu] + """ + return self._ssc.data_get_array(self._data, b'om_fuel_cost') + + @om_fuel_cost.setter + def om_fuel_cost(self, om_fuel_cost: Iterable): + if not isinstance(om_fuel_cost, Iterable): + om_fuel_cost = [om_fuel_cost] + self._ssc.data_set_array(self._data, b'om_fuel_cost', om_fuel_cost) \ No newline at end of file diff --git a/files/Hybrids/FuelCellHybrid.pyi b/files/Hybrids/FuelCellHybrid.pyi new file mode 100644 index 00000000..caec5755 --- /dev/null +++ b/files/Hybrids/FuelCellHybrid.pyi @@ -0,0 +1,160 @@ +from .HybridBase import HybridGenerator + +class FuelCellHybrid(HybridGenerator): + def new(self, str): + pass + + def default(self, str): + pass + + def assign(self, dict): + pass + + def value(self, name, value=None): + pass + + def unassign(self, name): + pass + + def execute(self, int_verbosity): + pass + + def export(self): + pass + + def __getattribute__(self, *args, **kwargs): + pass + + def __init__(self, *args, **kwargs): + pass + + class Lifetime(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + analysis_period = float + system_use_lifetime_output = float + + + class Common(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + annual_energy = float + capacity_factor = float + gen = tuple + + + class Load(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + load = tuple + + + class FuelCell(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + dispatch_manual_fuelcell_sched = tuple + dispatch_manual_fuelcell_sched_weekend = tuple + dispatch_manual_fuelcellcharge = tuple + dispatch_manual_fuelcelldischarge = tuple + dispatch_manual_percent_fc_discharge = tuple + dispatch_manual_units_fc_discharge = tuple + fuelcell_availability_schedule = tuple + fuelcell_degradation = float + fuelcell_degradation_restart = float + fuelcell_degradation_restart_schedule = float + fuelcell_degradation_restarts_per_year = float + fuelcell_dispatch = tuple + fuelcell_dispatch_choice = float + fuelcell_dynamic_response_down = float + fuelcell_dynamic_response_up = float + fuelcell_efficiency = tuple + fuelcell_efficiency_choice = float + fuelcell_fixed_pct = float + fuelcell_fuel_available = float + fuelcell_fuel_price = float + fuelcell_fuel_type = float + fuelcell_is_started = float + fuelcell_lhv = float + fuelcell_number_of_units = float + fuelcell_operation_options = float + fuelcell_replacement_option = float + fuelcell_replacement_percent = float + fuelcell_replacement_schedule = tuple + fuelcell_shutdown_time = float + fuelcell_startup_time = float + fuelcell_type = float + fuelcell_unit_max_power = float + fuelcell_unit_min_power = float + + + class Outputs(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + annual_energy_discharged = float + annual_energy_distribution_time = tuple + annual_energy_distribution_time_fc = tuple + annual_fuel_usage = float + annual_fuel_usage_lifetime = tuple + cf_battery_replacement_cost_schedule = tuple + cf_energy_net = tuple + cf_fuelcell_replacement_cost_schedule = tuple + cf_om_capacity = tuple + cf_om_fixed = tuple + cf_om_fuel_cost = tuple + cf_om_land_lease = tuple + cf_om_production = tuple + fuelcell_annual_energy_discharged = tuple + fuelcell_electrical_efficiency = tuple + fuelcell_fuel_consumption_mcf = tuple + fuelcell_monthly_energy_discharged = tuple + fuelcell_percent_load = tuple + fuelcell_power = tuple + fuelcell_power_max_percent = tuple + fuelcell_power_thermal = tuple + fuelcell_replacement = tuple + fuelcell_to_grid = tuple + fuelcell_to_load = tuple + gen = tuple + system_heat_rate = float + + om_fuel_cost: float \ No newline at end of file diff --git a/files/Hybrids/GenericSystemHybrid.py b/files/Hybrids/GenericSystemHybrid.py new file mode 100644 index 00000000..b9e162c2 --- /dev/null +++ b/files/Hybrids/GenericSystemHybrid.py @@ -0,0 +1,8 @@ +import PySAM.GenericSystem as gensys + +from .HybridBase import HybridGenerator + +class GenericSystemHybrid(HybridGenerator): + def __init__(self, name="generic_system") -> None: + super().__init__(gensys, name) + self._data : gensys.GenericSystem \ No newline at end of file diff --git a/files/Hybrids/GenericSystemHybrid.pyi b/files/Hybrids/GenericSystemHybrid.pyi new file mode 100644 index 00000000..462ff5cf --- /dev/null +++ b/files/Hybrids/GenericSystemHybrid.pyi @@ -0,0 +1,126 @@ +from .HybridBase import HybridGenerator + +class GenericSystemHybrid(HybridGenerator): + def new(self, str): + pass + + def default(self, str): + pass + + def assign(self, dict): + pass + + def value(self, name, value=None): + pass + + def unassign(self, name): + pass + + def execute(self, int_verbosity): + pass + + def export(self): + pass + + def __getattribute__(self, *args, **kwargs): + pass + + def __init__(self, *args, **kwargs): + pass + + class Plant(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + conv_eff = float + derate = float + energy_output_array = tuple + heat_rate = float + spec_mode = float + system_capacity = float + user_capacity_factor = float + + + class Lifetime(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + analysis_period = float + generic_degradation = tuple + system_use_lifetime_output = float + + + class AdjustmentFactors(object): + def assign(self): + pass + + def export(self): + return {} + + def __init__(self, *args, **kwargs): # real signature unknown + pass + + constant = float + en_hourly = float + en_periods = float + en_timeindex = float + hourly = tuple + periods = tuple + imeindex = tuple + dc_constant = float + dc_en_hourly = float + dc_en_periods = float + dc_en_timeindex = float + dc_hourly = tuple + dc_periods = tuple + dc_imeindex = tuple + sf_constant = float + sf_en_hourly = float + sf_en_periods = float + sf_en_timeindex = float + sf_hourly = tuple + sf_periods = tuple + sf_timeindex = tuple + + class Outputs(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + annual_energy = float + annual_energy_distribution_time = tuple + annual_fuel_usage = float + capacity_factor = float + cf_battery_replacement_cost_schedule = tuple + cf_energy_net = tuple + cf_fuelcell_replacement_cost_schedule = tuple + cf_om_capacity = tuple + cf_om_fixed = tuple + cf_om_fuel_cost = tuple + cf_om_land_lease = tuple + cf_om_production = tuple + gen = tuple + kwh_per_kw = float + monthly_energy = tuple + system_heat_rate = float + water_usage = float \ No newline at end of file diff --git a/files/Hybrids/HybridBase.py b/files/Hybrids/HybridBase.py new file mode 100644 index 00000000..055b6f25 --- /dev/null +++ b/files/Hybrids/HybridBase.py @@ -0,0 +1,208 @@ +from typing import Any, Iterable +from pathlib import Path +import PySAM +from PySAM.PySSC import PySSC +import marshal +from ctypes import * + +import PySAM.Grid as grid +import PySAM.Singleowner as so +import PySAM.HostDeveloper as hd + + +class HybridGenerator: + """ + All properties that not SSC variables should be prepended with '_' + """ + _ssc: PySSC = PySSC() + _ssc.pdll.ssc_data_get_table.restype = c_void_p + _ssc.pdll.ssc_data_create.restype = c_void_p + _ssc.pdll.ssc_var_get_number.restype = POINTER(c_float) + + def __init__(self, pysam_module, name) -> None: + # create the system cmod and the required financial stuff + self._name = name + self._factory = pysam_module + self._compute_module_name = pysam_module.__name__.split('.')[1].lower() + # PySAM model that provides access to the simulation data + self._data = None + # Pointer to the simulation data container inside the PySAM model + self._data_ptr = None + + def new(self): + if self._data != None: + raise NotImplementedError("Model data already created. Replacing model data is currently not supported. Create a new instance of HybridGenerator instead") + self._data = self._factory.new() + self._data_ptr = self._data.get_data_ptr() + self._sole_data_owner = True + + def default(self, config_name: str): + if self._data != None: + raise NotImplementedError("Model data already created. Replacing model data is currently not supported. Create a new instance of HybridGenerator instead") + self._data = self._factory.default(config_name) + self._data_ptr = self._data.get_data_ptr() + self._sole_data_owner = True + + # load the fin vars manually + defaults_dir = Path(PySAM.__file__).parent / "defaults" / f"{self._compute_module_name}_{config_name.lower()}.df" + with open(defaults_dir, 'rb') as f: + defaults = marshal.load(f) + for k, v in defaults['HybridCosts'].items(): + self.__setattr__(k, v) + + def _collect_inputs(self, hybrid_input_data_ptr): + """ + Insert the simulation data from this technology model as input into the hybrid input data. + Hybrid input data makes a copy of the simulation data. + PySAM model still has data ownership of original simulation data + """ + self._ssc.data_set_table(hybrid_input_data_ptr, self._name.encode("ascii"), self._data_ptr) + + def _collect_outputs(self, hybrid_input_data_ptr): + """ + Function should only be called after `_collect_inputs` has been called. + + Get the updated simulation data from the hybrid input data, now with results, and copy it + """ + p_pv_ret = self._ssc.data_get_table(hybrid_input_data_ptr, self._name.encode("ascii")) + if not p_pv_ret: + raise RuntimeError(f"Outputs for {self._name} sub-system does not exist in `hybrid_input_data_ptr`") + self._ssc.data_deep_copy(p_pv_ret, self._data_ptr) + + def __getattr__(self, name: str): + if name in self.__dir__(): + return super().__getattr__(name) + else: + if not self._data: + raise RuntimeError("Create the compute module first with `new` or ` default`") + else: + try: + return self._data.__getattribute__(name) + except: + raise AttributeError(f"Attribute {name} does not exist in {self._factory.__name__} " + "and is not a HybridGenerator financial variable.") + + def value(self, name, value=None): + if name == 'value': + return + elif name in self.__dir__(): + attr = getattr(self, name) + if value is None: + return attr + else: + return setattr(attr, value) + else: + if value is None: + return self._data.value(name) + return self._data.value(name, value) + + def assign(self, input_dict): + """ + Returns list of variables that weren't assigned + """ + unassigned = [] + for k, v in input_dict.items(): + try: + self._data.value(k, v) + except: + unassigned.append(k) + return unassigned + + def export(self): + return self._data.export() + + @property + def total_installed_cost(self): + """ + Total installed cost for technology [$] + """ + return self._ssc.data_get_number(self._data_ptr, b'total_installed_cost') + + @total_installed_cost.setter + def total_installed_cost(self, total_installed_cost: float): + self._ssc.data_set_number(self._data_ptr, b'total_installed_cost', total_installed_cost) + + @property + def om_fixed(self): + """ + Fixed O&M annual amount [$/year] + """ + return self._ssc.data_get_array(self._data_ptr, b'om_fixed') + + @om_fixed.setter + def om_fixed(self, om_fixed: Iterable): + if not isinstance(om_fixed, Iterable): + om_fixed = [om_fixed] + self._ssc.data_set_array(self._data_ptr, b'om_fixed', om_fixed) + + @property + def om_fixed_escal(self): + """ + Fixed O&M escalation [%/year] + """ + return self._ssc.data_get_number(self._data_ptr, b'om_fixed_escal') + + @om_fixed_escal.setter + def om_fixed_escal(self, om_fixed_escal: float): + self._ssc.data_set_number(self._data_ptr, b'om_fixed_escal', om_fixed_escal) + + @property + def om_production(self): + """ + Production-based O&M amount [$/MWh] + """ + return self._ssc.data_get_array(self._data_ptr, b'om_production') + + @om_production.setter + def om_production(self, om_production: Iterable): + if not isinstance(om_production, Iterable): + om_production = [om_production] + self._ssc.data_set_array(self._data_ptr, b'om_production', om_production) + + @property + def om_production_escal(self): + """ + Production-based O&M escalation [%/year] + """ + return self._ssc.data_get_number(self._data_ptr, b'om_production_escal') + + @om_production_escal.setter + def om_production_escal(self, om_production_escal: float): + self._ssc.data_set_number(self._data_ptr, b'om_production_escal', om_production_escal) + + @property + def om_capacity(self): + """ + Capacity-based O&M amount [$/kWcap] + """ + return self._ssc.data_get_array(self._data_ptr, b'om_capacity') + + @om_fixed.setter + def om_capacity(self, om_capacity: Iterable): + if not isinstance(om_capacity, Iterable): + om_capacity = [om_capacity] + self._ssc.data_set_array(self._data_ptr, b'om_capacity', om_capacity) + + @property + def om_production_escal(self): + """ + Capacity-based O&M escalation [%/year] + """ + return self._ssc.data_get_number(self._data_ptr, b'om_production_escal') + + @om_production_escal.setter + def om_production_escal(self, om_production_escal: float): + self._ssc.data_set_number(self._data_ptr, b'om_production_escal', om_production_escal) + + @property + def degradation(self): + """ + Annual AC degradation [%]. If not provided, defaults to 0 + """ + return self._ssc.data_get_array(self._data_ptr, b'degradation') + + @degradation.setter + def degradation(self, degradation: Iterable): + if not isinstance(degradation, Iterable): + om_capacity = [om_capacity] + self._ssc.data_set_array(self._data_ptr, b'degradation', degradation) \ No newline at end of file diff --git a/files/Hybrids/HybridBase.pyi b/files/Hybrids/HybridBase.pyi new file mode 100644 index 00000000..3ab5d994 --- /dev/null +++ b/files/Hybrids/HybridBase.pyi @@ -0,0 +1,9 @@ +class HybridGenerator(object): + total_installed_cost: float + om_fixed: tuple + om_fixed_escal: float + om_production: tuple + om_production_escal: float + om_capacity: tuple + om_capacity_escal: float + degradation: tuple diff --git a/files/Hybrids/HybridSystem.py b/files/Hybrids/HybridSystem.py new file mode 100644 index 00000000..0d05a255 --- /dev/null +++ b/files/Hybrids/HybridSystem.py @@ -0,0 +1,159 @@ +from collections import OrderedDict +from ctypes import * + +from .HybridBase import HybridGenerator +from .PVWattsHybrid import PVWattsHybrid, pvwatts +from .PVHybrid import PVHybrid, pv +from .WindHybrid import WindHybrid, wind +from .BatteryHybrid import BatteryHybrid, batt +from .GenericSystemHybrid import GenericSystemHybrid, gensys +from .FuelCellHybrid import FuelCellHybrid, fuelcell + +import PySAM.Grid as grid +import PySAM.HostDeveloper as hd +import PySAM.Utilityrate5 as ur +import PySAM.Singleowner as so +import PySAM.Hybrid as hybrid + + +class HybridSystem: + supported_financial_modules = {"singleowner": so, "utilityrate5": ur, "host_developer": hd} + + def __init__(self, technology_modules, financial_modules) -> None: + self._technology_modules = technology_modules + self._financial_module = financial_modules + + # data container for Hybrid module, ownership will belong to self._hybrid + self._data_ptr = HybridGenerator._ssc.data_create() + # input data container, will be copied into data container. Ownership stays with HybridSystem + self._data_input_ptr = HybridGenerator._ssc.data_create() + # PySAM model that will perform the Hybrid simulation + self._hybrid = hybrid.wrap(self._data_ptr) + + self._generators = OrderedDict() + + # create PySAM models for each of the sub-systems + for pysam_module in technology_modules: + if pysam_module == pv: + self.pv: PVHybrid = PVHybrid() + self._generators['pvsamv1'] = self.pv + elif pysam_module == pvwatts: + self.pvwatts: PVWattsHybrid = PVWattsHybrid() + self._generators['pvwattsv8'] = self.pvwatts + elif pysam_module == wind: + self.wind: WindHybrid = WindHybrid() + self._generators['windpower'] = self.wind + elif pysam_module == gensys: + self.gensys: GenericSystemHybrid = GenericSystemHybrid() + self._generators['generic_system'] = self.gensys + elif pysam_module == batt: + self.battery: BatteryHybrid = BatteryHybrid() + self._generators['battery'] = self.battery + elif pysam_module == fuelcell: + self.fuelcell: FuelCellHybrid = FuelCellHybrid() + self._generators['fuelcell'] = self.fuelcell + else: + raise NotImplementedError(f"HybridSystem currently not enabled for module {pysam_module}") + + self._financials = OrderedDict() + + self._grid: grid.Grid + + for financial_module in financial_modules: + if financial_module == so: + self.singleowner: so.Singleowner + self._financials['singleowner'] = None + elif financial_module == ur: + self.utilityrate5: ur.Utilityrate5 + self._financials['utilityrate5'] = None + elif financial_module == hd: + self.host_developer: hd.HostDeveloper + self._financials['host_developer'] = None + else: + raise NotImplementedError(f"HybridSystem currently not enabled for module {financial_module}") + + self._cmod_list = list(self._generators.keys()) + ['grid'] + list(self._financials.keys()) + + def new(self): + for gen in self._generators.values(): + gen.new() + self._grid = grid.new() + for k in self._financials.keys(): + setattr(self, k, self.supported_financial_modules[k].from_existing(self._grid)) + self._financials[k] = getattr(self, k) + + def default(self, config_name: str): + for gen in self._generators.values(): + gen.default(config_name) + self._grid = grid.default(config_name) + for k in self._financials.keys(): + setattr(self, k, self.supported_financial_modules[k].from_existing(self._grid, config_name)) + self._financials[k] = getattr(self, k) + + def assign(self, input_dict): + unassigned_dict = {} + for k, v in input_dict.items(): + if k in self._generators.keys(): + unassigned_dict[k] = self._generators[k].assign(v) + elif k.lower() == "hybrid": + unassigned = [] + for key, value in input_dict[k].items(): + if key in self._grid.GridLimits.__dir__() or key in self._grid.Load.__dir__(): + self._grid.value(key, value) + else: + # Try to find which financial module it may belong to + assigned = False + for fin_model in self._financials.values(): + for attr in fin_model.__dir__(): + # PySAM group names are capitalized + if not attr[0].isupper(): + continue + attr = getattr(fin_model, attr) + if not hasattr(attr, '__dir__'): + continue + # if variable belongs to this group + if key in attr.__dir__(): + fin_model.value(key, value) + assigned = True + break + if assigned: + break + if not assigned: + unassigned.append(key) + return unassigned + + def value(self, name): + outputs = self._hybrid.Outputs.output + if name not in outputs.keys: + raise ValueError(f"{name} is not an output of HybridSystem") + return self._hybrid.Outputs.output[name] + + def _collect_hybrid_inputs(self): + """ + Takes data container from the sub-system models and passes them to the hybrid input data container, which makes a copy + """ + for name, gen in self._generators.items(): + gen._collect_inputs(self._data_input_ptr) + + HybridGenerator._ssc.data_set_table(self._data_input_ptr, b'hybrid', self._grid.get_data_ptr()) + HybridGenerator._ssc.data_set_data_array(self._data_input_ptr, b'compute_modules', self._cmod_list) + HybridGenerator._ssc.data_set_table(self._data_ptr, b'input', self._data_input_ptr) + + def _collect_hybrid_outputs(self): + """ + Gets sub-system data from the hybrid model and copies them back to the sub-system classes + """ + data_input = HybridGenerator._ssc.data_get_table(self._data_ptr, b'input') + for name, gen in self._generators.items(): + gen._collect_outputs(data_input) + p_fin_ret = HybridGenerator._ssc.data_get_table(data_input, b'hybrid') + data_ptr = self._grid.get_data_ptr() + HybridGenerator._ssc.data_deep_copy(p_fin_ret, data_ptr) + + def execute(self, verbosity_int=0): + self._collect_hybrid_inputs() + self._hybrid.execute(verbosity_int) + self._collect_hybrid_outputs() + + def export(self): + return self._hybrid.export() \ No newline at end of file diff --git a/files/Hybrids/PVHybrid.py b/files/Hybrids/PVHybrid.py new file mode 100644 index 00000000..22ec670d --- /dev/null +++ b/files/Hybrids/PVHybrid.py @@ -0,0 +1,8 @@ +import PySAM.Pvsamv1 as pv + +from .HybridBase import HybridGenerator + +class PVHybrid(HybridGenerator): + def __init__(self, name="pvsamv1") -> None: + super().__init__(pv, name) + self._data: pv.Pvsamv1 \ No newline at end of file diff --git a/files/Hybrids/PVHybrid.pyi b/files/Hybrids/PVHybrid.pyi new file mode 100644 index 00000000..5b271a34 --- /dev/null +++ b/files/Hybrids/PVHybrid.pyi @@ -0,0 +1,1580 @@ +from .HybridBase import HybridGenerator + +class PVHybrid(HybridGenerator): + def new(self, str): + pass + + def default(self, str): + pass + + def assign(self, dict): + pass + + def value(self, name, value=None): + pass + + def unassign(self, name): + pass + + def execute(self, int_verbosity): + pass + + def export(self): + pass + + def __getattribute__(self, *args, **kwargs): + pass + + def __init__(self, *args, **kwargs): + pass + + def Reopt_size_battery_post(self, args): + pass + + class SolarResource(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + albedo = tuple + albedo_spatial = tuple + irrad_mode = float + sky_model = float + solar_resource_data = dict + solar_resource_file = str + use_spatial_albedos = float + use_wf_albedo = float + + + class Losses(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + acwiring_loss = float + calculate_bifacial_electrical_mismatch = float + calculate_rack_shading = float + dcoptimizer_loss = float + en_snow_model = float + subarray1_dcwiring_loss = float + subarray1_diodeconn_loss = float + subarray1_electrical_mismatch = float + subarray1_mismatch_loss = float + subarray1_nameplate_loss = float + subarray1_rack_shading = float + subarray1_rear_soiling_loss = float + subarray1_soiling = tuple + subarray1_tracking_loss = float + subarray2_dcwiring_loss = float + subarray2_diodeconn_loss = float + subarray2_electrical_mismatch = float + subarray2_mismatch_loss = float + subarray2_nameplate_loss = float + subarray2_rack_shading = float + subarray2_rear_soiling_loss = float + subarray2_soiling = tuple + subarray2_tracking_loss = float + subarray3_dcwiring_loss = float + subarray3_diodeconn_loss = float + subarray3_electrical_mismatch = float + subarray3_mismatch_loss = float + subarray3_nameplate_loss = float + subarray3_rack_shading = float + subarray3_rear_soiling_loss = float + subarray3_soiling = tuple + subarray3_tracking_loss = float + subarray4_dcwiring_loss = float + subarray4_diodeconn_loss = float + subarray4_electrical_mismatch = float + subarray4_mismatch_loss = float + subarray4_nameplate_loss = float + subarray4_rack_shading = float + subarray4_rear_soiling_loss = float + subarray4_soiling = tuple + subarray4_tracking_loss = float + transformer_load_loss = float + transformer_no_load_loss = float + transmission_loss = float + + + class Lifetime(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + ac_lifetime_losses = tuple + analysis_period = float + dc_degradation = tuple + dc_lifetime_losses = tuple + en_ac_lifetime_losses = float + en_dc_lifetime_losses = float + inflation_rate = float + save_full_lifetime_variables = float + system_use_lifetime_output = float + + + class SystemDesign(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + enable_mismatch_vmax_calc = float + inverter_count = float + subarray1_azimuth = float + subarray1_backtrack = float + subarray1_custom_cell_temp_array = tuple + subarray1_custom_rot_angles_array = tuple + subarray1_gcr = float + subarray1_modules_per_string = float + subarray1_monthly_tilt = tuple + subarray1_mppt_input = float + subarray1_nstrings = float + subarray1_rotlim = float + subarray1_slope_azm = float + subarray1_slope_tilt = float + subarray1_tilt = float + subarray1_tilt_eq_lat = float + subarray1_track_mode = float + subarray1_use_custom_cell_temp = float + subarray1_use_custom_rot_angles = float + subarray2_azimuth = float + subarray2_backtrack = float + subarray2_custom_cell_temp_array = tuple + subarray2_custom_rot_angles_array = tuple + subarray2_enable = float + subarray2_gcr = float + subarray2_modules_per_string = float + subarray2_monthly_tilt = tuple + subarray2_mppt_input = float + subarray2_nstrings = float + subarray2_rotlim = float + subarray2_slope_azm = float + subarray2_slope_tilt = float + subarray2_tilt = float + subarray2_tilt_eq_lat = float + subarray2_track_mode = float + subarray2_use_custom_cell_temp = float + subarray2_use_custom_rot_angles = float + subarray3_azimuth = float + subarray3_backtrack = float + subarray3_custom_cell_temp_array = tuple + subarray3_custom_rot_angles_array = tuple + subarray3_enable = float + subarray3_gcr = float + subarray3_modules_per_string = float + subarray3_monthly_tilt = tuple + subarray3_mppt_input = float + subarray3_nstrings = float + subarray3_rotlim = float + subarray3_slope_azm = float + subarray3_slope_tilt = float + subarray3_tilt = float + subarray3_tilt_eq_lat = float + subarray3_track_mode = float + subarray3_use_custom_cell_temp = float + subarray3_use_custom_rot_angles = float + subarray4_azimuth = float + subarray4_backtrack = float + subarray4_custom_cell_temp_array = tuple + subarray4_custom_rot_angles_array = tuple + subarray4_enable = float + subarray4_gcr = float + subarray4_modules_per_string = float + subarray4_monthly_tilt = tuple + subarray4_mppt_input = float + subarray4_nstrings = float + subarray4_rotlim = float + subarray4_slope_azm = float + subarray4_slope_tilt = float + subarray4_tilt = float + subarray4_tilt_eq_lat = float + subarray4_track_mode = float + subarray4_use_custom_cell_temp = float + subarray4_use_custom_rot_angles = float + system_capacity = float + + + class Shading(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + subarray1_shade_mode = float + subarray1_shading_azal = tuple + subarray1_shading_diff = float + subarray1_shading_en_azal = float + subarray1_shading_en_diff = float + subarray1_shading_en_mxh = float + subarray1_shading_en_string_option = float + subarray1_shading_en_timestep = float + subarray1_shading_mxh = tuple + subarray1_shading_string_option = float + subarray1_shading_timestep = tuple + subarray2_shade_mode = float + subarray2_shading_azal = tuple + subarray2_shading_diff = float + subarray2_shading_en_azal = float + subarray2_shading_en_diff = float + subarray2_shading_en_mxh = float + subarray2_shading_en_string_option = float + subarray2_shading_en_timestep = float + subarray2_shading_mxh = tuple + subarray2_shading_string_option = float + subarray2_shading_timestep = tuple + subarray3_shade_mode = float + subarray3_shading_azal = tuple + subarray3_shading_diff = float + subarray3_shading_en_azal = float + subarray3_shading_en_diff = float + subarray3_shading_en_mxh = float + subarray3_shading_en_string_option = float + subarray3_shading_en_timestep = float + subarray3_shading_mxh = tuple + subarray3_shading_string_option = float + subarray3_shading_timestep = tuple + subarray4_shade_mode = float + subarray4_shading_azal = tuple + subarray4_shading_diff = float + subarray4_shading_en_azal = float + subarray4_shading_en_diff = float + subarray4_shading_en_mxh = float + subarray4_shading_en_string_option = float + subarray4_shading_en_timestep = float + subarray4_shading_mxh = tuple + subarray4_shading_string_option = float + subarray4_shading_timestep = tuple + + + class Layout(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + module_aspect_ratio = float + subarray1_mod_orient = float + subarray1_nmodx = float + subarray1_nmody = float + subarray2_mod_orient = float + subarray2_nmodx = float + subarray2_nmody = float + subarray3_mod_orient = float + subarray3_nmodx = float + subarray3_nmody = float + subarray4_mod_orient = float + subarray4_nmodx = float + subarray4_nmody = float + + + class Module(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + module_model = float + + + class SimpleEfficiencyModuleModel(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + spe_a = float + spe_area = float + spe_b = float + spe_bifacial_ground_clearance_height = float + spe_bifacial_transmission_factor = float + spe_bifaciality = float + spe_dT = float + spe_eff0 = float + spe_eff1 = float + spe_eff2 = float + spe_eff3 = float + spe_eff4 = float + spe_fd = float + spe_is_bifacial = float + spe_module_structure = float + spe_rad0 = float + spe_rad1 = float + spe_rad2 = float + spe_rad3 = float + spe_rad4 = float + spe_reference = float + spe_temp_coeff = float + spe_vmp = float + spe_voc = float + + + class CECPerformanceModelWithModuleDatabase(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + cec_a_ref = float + cec_adjust = float + cec_alpha_sc = float + cec_area = float + cec_array_cols = float + cec_array_rows = float + cec_backside_temp = float + cec_beta_oc = float + cec_bifacial_ground_clearance_height = float + cec_bifacial_transmission_factor = float + cec_bifaciality = float + cec_gamma_r = float + cec_gap_spacing = float + cec_ground_clearance_height = float + cec_heat_transfer = float + cec_height = float + cec_i_l_ref = float + cec_i_mp_ref = float + cec_i_o_ref = float + cec_i_sc_ref = float + cec_is_bifacial = float + cec_lacunarity_enable = float + cec_lacunarity_length = float + cec_module_length = float + cec_module_width = float + cec_mounting_config = float + cec_mounting_orientation = float + cec_n_s = float + cec_r_s = float + cec_r_sh_ref = float + cec_standoff = float + cec_t_noct = float + cec_temp_corr_mode = float + cec_transient_thermal_model_unit_mass = float + cec_v_mp_ref = float + cec_v_oc_ref = float + + + class CECPerformanceModelWithUserEnteredSpecifications(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + sixpar_aisc = float + sixpar_area = float + sixpar_bifacial_ground_clearance_height = float + sixpar_bifacial_transmission_factor = float + sixpar_bifaciality = float + sixpar_bvoc = float + sixpar_celltech = float + sixpar_gpmp = float + sixpar_imp = float + sixpar_is_bifacial = float + sixpar_isc = float + sixpar_mounting = float + sixpar_nser = float + sixpar_standoff = float + sixpar_tnoct = float + sixpar_transient_thermal_model_unit_mass = float + sixpar_vmp = float + sixpar_voc = float + + + class SandiaPVArrayPerformanceModelWithModuleDatabase(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + snl_a = float + snl_a0 = float + snl_a1 = float + snl_a2 = float + snl_a3 = float + snl_a4 = float + snl_aimp = float + snl_aisc = float + snl_area = float + snl_b = float + snl_b0 = float + snl_b1 = float + snl_b2 = float + snl_b3 = float + snl_b4 = float + snl_b5 = float + snl_bvmpo = float + snl_bvoco = float + snl_c0 = float + snl_c1 = float + snl_c2 = float + snl_c3 = float + snl_c4 = float + snl_c5 = float + snl_c6 = float + snl_c7 = float + snl_dtc = float + snl_fd = float + snl_impo = float + snl_isco = float + snl_ixo = float + snl_ixxo = float + snl_mbvmp = float + snl_mbvoc = float + snl_module_structure = float + snl_n = float + snl_ref_a = float + snl_ref_b = float + snl_ref_dT = float + snl_series_cells = float + snl_transient_thermal_model_unit_mass = float + snl_vmpo = float + snl_voco = float + + + class IEC61853SingleDiodeModel(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + sd11par_AMa0 = float + sd11par_AMa1 = float + sd11par_AMa2 = float + sd11par_AMa3 = float + sd11par_AMa4 = float + sd11par_Egref = float + sd11par_Il = float + sd11par_Imp0 = float + sd11par_Io = float + sd11par_Isc0 = float + sd11par_Vmp0 = float + sd11par_Voc0 = float + sd11par_alphaIsc = float + sd11par_area = float + sd11par_c1 = float + sd11par_c2 = float + sd11par_c3 = float + sd11par_d1 = float + sd11par_d2 = float + sd11par_d3 = float + sd11par_glass = float + sd11par_mounting = float + sd11par_n = float + sd11par_nser = float + sd11par_standoff = float + sd11par_tnoct = float + + + class MermoudLejeuneSingleDiodeModel(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + mlm_AM_c_lp0 = float + mlm_AM_c_lp1 = float + mlm_AM_c_lp2 = float + mlm_AM_c_lp3 = float + mlm_AM_c_lp4 = float + mlm_AM_c_lp5 = float + mlm_AM_c_sa0 = float + mlm_AM_c_sa1 = float + mlm_AM_c_sa2 = float + mlm_AM_c_sa3 = float + mlm_AM_c_sa4 = float + mlm_AM_mode = float + mlm_D2MuTau = float + mlm_E_g = float + mlm_IAM_c_as = float + mlm_IAM_c_cs_iamValue = tuple + mlm_IAM_c_cs_incAngle = tuple + mlm_IAM_c_sa0 = float + mlm_IAM_c_sa1 = float + mlm_IAM_c_sa2 = float + mlm_IAM_c_sa3 = float + mlm_IAM_c_sa4 = float + mlm_IAM_c_sa5 = float + mlm_IAM_mode = float + mlm_I_mp_ref = float + mlm_I_sc_ref = float + mlm_Length = float + mlm_N_diodes = float + mlm_N_parallel = float + mlm_N_series = float + mlm_R_s = float + mlm_R_sh0 = float + mlm_R_shexp = float + mlm_R_shref = float + mlm_S_ref = float + mlm_T_c_fa_U0 = float + mlm_T_c_fa_U1 = float + mlm_T_c_fa_alpha = float + mlm_T_c_no_mounting = float + mlm_T_c_no_standoff = float + mlm_T_c_no_tnoct = float + mlm_T_mode = float + mlm_T_ref = float + mlm_V_mp_ref = float + mlm_V_oc_ref = float + mlm_Width = float + mlm_alpha_isc = float + mlm_beta_voc_spec = float + mlm_bifacial_ground_clearance_height = float + mlm_bifacial_transmission_factor = float + mlm_bifaciality = float + mlm_groundRelfectionFraction = float + mlm_is_bifacial = float + mlm_mu_n = float + mlm_n_0 = float + + + class Inverter(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + inv_cec_cg_eff_cec = float + inv_cec_cg_paco = float + inv_ds_eff = float + inv_ds_paco = float + inv_num_mppt = float + inv_pd_eff = float + inv_pd_paco = float + inv_snl_eff_cec = float + inv_snl_paco = float + inverter_count = float + inverter_model = float + mppt_hi_inverter = float + mppt_low_inverter = float + + + class InverterCECDatabase(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + inv_snl_c0 = float + inv_snl_c1 = float + inv_snl_c2 = float + inv_snl_c3 = float + inv_snl_paco = float + inv_snl_pdco = float + inv_snl_pnt = float + inv_snl_pso = float + inv_snl_vdcmax = float + inv_snl_vdco = float + inv_tdc_cec_db = tuple + + + class InverterCECCoefficientGenerator(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + inv_cec_cg_c0 = float + inv_cec_cg_c1 = float + inv_cec_cg_c2 = float + inv_cec_cg_c3 = float + inv_cec_cg_paco = float + inv_cec_cg_pdco = float + inv_cec_cg_pnt = float + inv_cec_cg_psco = float + inv_cec_cg_vdcmax = float + inv_cec_cg_vdco = float + inv_tdc_cec_cg = tuple + + + class InverterDatasheet(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + inv_ds_eff = float + inv_ds_paco = float + inv_ds_pnt = float + inv_ds_pso = float + inv_ds_vdcmax = float + inv_ds_vdco = float + inv_tdc_ds = tuple + + + class InverterPartLoadCurve(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + inv_pd_efficiency = tuple + inv_pd_paco = float + inv_pd_partload = tuple + inv_pd_pdco = float + inv_pd_pnt = float + inv_pd_vdcmax = float + inv_pd_vdco = float + inv_tdc_plc = tuple + + + class InverterMermoudLejeuneModel(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + ond_Aux_Loss = float + ond_CompPMax = str + ond_CompVMax = str + ond_IMaxAC = float + ond_IMaxDC = float + ond_INomAC = float + ond_INomDC = float + ond_ModeAffEnum = str + ond_ModeOper = str + ond_NbInputs = float + ond_NbMPPT = float + ond_Night_Loss = float + ond_PLim1 = float + ond_PLimAbs = float + ond_PMaxDC = float + ond_PMaxOUT = float + ond_PNomConv = float + ond_PNomDC = float + ond_PSeuil = float + ond_TPLim1 = float + ond_TPLimAbs = float + ond_TPMax = float + ond_TPNom = float + ond_VAbsMax = float + ond_VMPPMax = float + ond_VMppMin = float + ond_VNomEff = tuple + ond_VOutConv = float + ond_doAllowOverpower = float + ond_doUseTemperatureLimit = float + ond_effCurve_Pac = tuple + ond_effCurve_Pdc = tuple + ond_effCurve_elements = float + ond_effCurve_eta = tuple + ond_lossRAc = float + ond_lossRDc = float + + + class BatterySystem(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + batt_ac_dc_efficiency = float + batt_ac_or_dc = float + batt_computed_bank_capacity = float + batt_computed_series = float + batt_computed_strings = float + batt_current_charge_max = float + batt_current_choice = float + batt_current_discharge_max = float + batt_dc_ac_efficiency = float + batt_dc_dc_efficiency = float + batt_inverter_efficiency_cutoff = float + batt_loss_choice = float + batt_losses = tuple + batt_losses_charging = tuple + batt_losses_discharging = tuple + batt_losses_idle = tuple + batt_mass = float + batt_meter_position = float + batt_power_charge_max_kwac = float + batt_power_charge_max_kwdc = float + batt_power_discharge_max_kwac = float + batt_power_discharge_max_kwdc = float + batt_replacement_capacity = float + batt_replacement_option = float + batt_replacement_schedule_percent = tuple + batt_surface_area = float + en_batt = float + en_standalone_batt = float + om_replacement_cost1 = tuple + + + class Load(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + crit_load = tuple + crit_load_escalation = tuple + grid_outage = tuple + load = tuple + load_escalation = tuple + run_resiliency_calcs = float + + + class PVLosses(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + enable_subhourly_clipping = float + subhourly_clipping_matrix = tuple + + + class AdjustmentFactors(object): + def assign(self): + pass + + def export(self): + return {} + + def __init__(self, *args, **kwargs): # real signature unknown + pass + + constant = float + en_hourly = float + en_periods = float + en_timeindex = float + hourly = tuple + periods = tuple + imeindex = tuple + dc_constant = float + dc_en_hourly = float + dc_en_periods = float + dc_en_timeindex = float + dc_hourly = tuple + dc_periods = tuple + dc_imeindex = tuple + sf_constant = float + sf_en_hourly = float + sf_en_periods = float + sf_en_timeindex = float + sf_hourly = tuple + sf_periods = tuple + sf_timeindex = tuple + + class BatteryCell(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + LeadAcid_q10_computed = float + LeadAcid_q20_computed = float + LeadAcid_qn_computed = float + LeadAcid_tn = float + batt_C_rate = float + batt_Cp = float + batt_Qexp = float + batt_Qfull = float + batt_Qfull_flow = float + batt_Qnom = float + batt_Vcut = float + batt_Vexp = float + batt_Vfull = float + batt_Vnom = float + batt_Vnom_default = float + batt_calendar_a = float + batt_calendar_b = float + batt_calendar_c = float + batt_calendar_choice = float + batt_calendar_lifetime_matrix = tuple + batt_calendar_q0 = float + batt_chem = float + batt_h_to_ambient = float + batt_initial_SOC = float + batt_life_model = float + batt_lifetime_matrix = tuple + batt_maximum_SOC = float + batt_minimum_SOC = float + batt_minimum_modetime = float + batt_minimum_outage_SOC = float + batt_resistance = float + batt_room_temperature_celsius = tuple + batt_voltage_choice = float + batt_voltage_matrix = tuple + cap_vs_temp = tuple + + + class BatteryDispatch(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + batt_custom_dispatch = tuple + batt_cycle_cost = tuple + batt_cycle_cost_choice = float + batt_dispatch_auto_btm_can_discharge_to_grid = float + batt_dispatch_auto_can_charge = float + batt_dispatch_auto_can_clipcharge = float + batt_dispatch_auto_can_fuelcellcharge = float + batt_dispatch_auto_can_gridcharge = float + batt_dispatch_charge_only_system_exceeds_load = float + batt_dispatch_choice = float + batt_dispatch_discharge_only_load_exceeds_system = float + batt_dispatch_load_forecast_choice = float + batt_dispatch_pvs_ac_lb = float + batt_dispatch_pvs_ac_lb_enable = float + batt_dispatch_pvs_ac_ub = float + batt_dispatch_pvs_ac_ub_enable = float + batt_dispatch_pvs_curtail_as_control = float + batt_dispatch_pvs_curtail_if_violation = float + batt_dispatch_pvs_forecast_shift_periods = float + batt_dispatch_pvs_kf = float + batt_dispatch_pvs_ki = float + batt_dispatch_pvs_kp = float + batt_dispatch_pvs_max_ramp = float + batt_dispatch_pvs_nameplate_ac = float + batt_dispatch_pvs_short_forecast_enable = float + batt_dispatch_pvs_soc_rest = float + batt_dispatch_pvs_timestep_multiplier = float + batt_dispatch_update_frequency_hours = float + batt_dispatch_wf_forecast_choice = float + batt_load_ac_forecast = tuple + batt_load_ac_forecast_escalation = tuple + batt_look_ahead_hours = float + batt_pv_ac_forecast = tuple + batt_pv_clipping_forecast = tuple + batt_target_choice = float + batt_target_power = tuple + batt_target_power_monthly = tuple + dispatch_manual_btm_discharge_to_grid = tuple + dispatch_manual_charge = tuple + dispatch_manual_discharge = tuple + dispatch_manual_fuelcellcharge = tuple + dispatch_manual_gridcharge = tuple + dispatch_manual_percent_discharge = tuple + dispatch_manual_percent_gridcharge = tuple + dispatch_manual_sched = tuple + dispatch_manual_sched_weekend = tuple + dispatch_manual_system_charge_first = float + + + class SystemCosts(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + om_batt_replacement_cost = tuple + om_batt_variable_cost = tuple + om_production_escal = float + om_replacement_cost_escal = float + + + class FuelCell(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + fuelcell_power = tuple + + + class PriceSignal(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + dispatch_factors_ts = tuple + dispatch_sched_weekday = tuple + dispatch_sched_weekend = tuple + dispatch_tod_factors = tuple + forecast_price_signal_model = float + mp_ancserv1_revenue = tuple + mp_ancserv2_revenue = tuple + mp_ancserv3_revenue = tuple + mp_ancserv4_revenue = tuple + mp_enable_ancserv1 = float + mp_enable_ancserv2 = float + mp_enable_ancserv3 = float + mp_enable_ancserv4 = float + mp_enable_energy_market_revenue = float + mp_energy_market_revenue = tuple + ppa_escalation = float + ppa_multiplier_model = float + ppa_price_input = tuple + + + class Revenue(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + mp_ancserv1_revenue_single = tuple + mp_ancserv2_revenue_single = tuple + mp_ancserv3_revenue_single = tuple + mp_ancserv4_revenue_single = tuple + mp_enable_ancserv1_percent_gen = float + mp_enable_ancserv2_percent_gen = float + mp_enable_ancserv3_percent_gen = float + mp_enable_ancserv4_percent_gen = float + mp_enable_market_percent_gen = float + mp_energy_market_revenue_single = tuple + + + class ElectricityRates(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + en_electricity_rates = float + rate_escalation = tuple + ur_annual_min_charge = float + ur_billing_demand_lookback_percentages = tuple + ur_billing_demand_lookback_period = float + ur_billing_demand_minimum = float + ur_dc_billing_demand_periods = tuple + ur_dc_enable = float + ur_dc_flat_mat = tuple + ur_dc_sched_weekday = tuple + ur_dc_sched_weekend = tuple + ur_dc_tou_mat = tuple + ur_ec_sched_weekday = tuple + ur_ec_sched_weekend = tuple + ur_ec_tou_mat = tuple + ur_en_ts_buy_rate = float + ur_en_ts_sell_rate = float + ur_enable_billing_demand = float + ur_metering_option = float + ur_monthly_fixed_charge = float + ur_monthly_min_charge = float + ur_nm_credit_month = float + ur_nm_credit_rollover = float + ur_nm_yearend_sell_rate = float + ur_sell_eq_buy = float + ur_ts_buy_rate = tuple + ur_ts_sell_rate = tuple + ur_yearzero_usage_peaks = tuple + + + class GridLimits(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + enable_interconnection_limit = float + grid_curtailment = tuple + grid_interconnection_limit_kwac = float + + + class Outputs(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + ac_gross = tuple + ac_lifetime_loss = tuple + ac_perf_adj_loss = tuple + ac_transmission_loss = tuple + ac_wiring_loss = tuple + airmass = tuple + alb = tuple + alb_spatial = tuple + annual_ac_battery_loss_percent = float + annual_ac_gross = float + annual_ac_inv_clip_loss_percent = float + annual_ac_inv_eff_loss_percent = float + annual_ac_inv_pnt_loss_percent = float + annual_ac_inv_pso_loss_percent = float + annual_ac_lifetime_loss_percent = float + annual_ac_loss_ond = float + annual_ac_perf_adj_loss_percent = float + annual_ac_wiring_loss = float + annual_ac_wiring_loss_percent = float + annual_bifacial_electrical_mismatch = float + annual_bifacial_electrical_mismatch_percent = float + annual_crit_load = float + annual_crit_load_unmet = float + annual_crit_load_unmet_percentage = float + annual_dc_battery_loss_percent = float + annual_dc_diodes_loss = float + annual_dc_diodes_loss_percent = float + annual_dc_gross = float + annual_dc_inv_tdc_loss_percent = float + annual_dc_invmppt_loss = float + annual_dc_lifetime_loss_percent = float + annual_dc_loss_ond = float + annual_dc_mismatch_loss = float + annual_dc_mismatch_loss_percent = float + annual_dc_module_loss_percent = float + annual_dc_mppt_clip_loss_percent = float + annual_dc_nameplate_loss = float + annual_dc_nameplate_loss_percent = float + annual_dc_net = float + annual_dc_nominal = float + annual_dc_optimizer_loss = float + annual_dc_optimizer_loss_percent = float + annual_dc_perf_adj_loss_percent = float + annual_dc_snow_loss_percent = float + annual_dc_tracking_loss = float + annual_dc_tracking_loss_percent = float + annual_dc_wiring_loss = float + annual_dc_wiring_loss_percent = float + annual_energy = float + annual_energy_distribution_time = tuple + annual_export_to_grid_energy = tuple + annual_gh = float + annual_ground_absorbed = float + annual_ground_absorbed_percent = float + annual_ground_incident = float + annual_ground_incident_percent = float + annual_import_to_grid_energy = tuple + annual_inv_cliploss = float + annual_inv_pntloss = float + annual_inv_psoloss = float + annual_inv_tdcloss = float + annual_outage_losses_unmet = float + annual_poa_beam_eff = float + annual_poa_beam_nom = float + annual_poa_cover_loss_percent = float + annual_poa_eff = float + annual_poa_front = float + annual_poa_nom = float + annual_poa_rear = float + annual_poa_rear_direct_diffuse = float + annual_poa_rear_gain_percent = float + annual_poa_rear_ground_reflected = float + annual_poa_rear_rack_shaded = float + annual_poa_rear_row_reflections = float + annual_poa_rear_self_shaded = float + annual_poa_rear_soiled = float + annual_poa_shaded = float + annual_poa_shaded_soiled = float + annual_poa_shading_loss_percent = float + annual_poa_soiling_loss_percent = float + annual_rack_shaded_percent = float + annual_rear_direct_diffuse_percent = float + annual_rear_ground_reflected_percent = float + annual_rear_row_reflections_percent = float + annual_rear_self_shaded_percent = float + annual_rear_soiled_percent = float + annual_snow_loss = float + annual_subarray1_dc_diodes_loss = float + annual_subarray1_dc_gross = float + annual_subarray1_dc_mismatch_loss = float + annual_subarray1_dc_nameplate_loss = float + annual_subarray1_dc_tracking_loss = float + annual_subarray1_dc_wiring_loss = float + annual_subarray2_dc_diodes_loss = float + annual_subarray2_dc_gross = float + annual_subarray2_dc_mismatch_loss = float + annual_subarray2_dc_nameplate_loss = float + annual_subarray2_dc_tracking_loss = float + annual_subarray2_dc_wiring_loss = float + annual_subarray3_dc_diodes_loss = float + annual_subarray3_dc_gross = float + annual_subarray3_dc_mismatch_loss = float + annual_subarray3_dc_nameplate_loss = float + annual_subarray3_dc_tracking_loss = float + annual_subarray3_dc_wiring_loss = float + annual_subarray4_dc_diodes_loss = float + annual_subarray4_dc_gross = float + annual_subarray4_dc_mismatch_loss = float + annual_subarray4_dc_nameplate_loss = float + annual_subarray4_dc_tracking_loss = float + annual_subarray4_dc_wiring_loss = float + annual_subhourly_clipping_loss = float + annual_subhourly_clipping_loss_percent = float + annual_total_loss_percent = float + annual_transmission_loss = float + annual_transmission_loss_percent = float + annual_xfmr_loss_percent = float + average_battery_conversion_efficiency = float + average_battery_roundtrip_efficiency = float + avg_critical_load = float + batt_DOD = tuple + batt_DOD_cycle_average = tuple + batt_I = tuple + batt_SOC = tuple + batt_annual_charge_energy = tuple + batt_annual_charge_from_grid = tuple + batt_annual_charge_from_system = tuple + batt_annual_discharge_energy = tuple + batt_annual_energy_loss = tuple + batt_annual_energy_system_loss = tuple + batt_bank_installed_capacity = float + batt_bank_replacement = tuple + batt_capacity_percent = tuple + batt_capacity_percent_calendar = tuple + batt_capacity_percent_cycle = tuple + batt_capacity_thermal_percent = tuple + batt_conversion_loss = tuple + batt_cost_to_cycle = tuple + batt_cycles = tuple + batt_dispatch_sched = tuple + batt_power = tuple + batt_power_dc = tuple + batt_power_target = tuple + batt_pvs_PV_ramp_interval = tuple + batt_pvs_P_pv_ac = tuple + batt_pvs_battpower = tuple + batt_pvs_battsoc = tuple + batt_pvs_curtail = tuple + batt_pvs_energy_to_grid_percent = float + batt_pvs_energy_to_grid_percent_sam = float + batt_pvs_forecast_pv_energy = tuple + batt_pvs_outpower = tuple + batt_pvs_violation_count = float + batt_pvs_violation_list = tuple + batt_pvs_violation_percent = float + batt_q0 = tuple + batt_q1 = tuple + batt_q2 = tuple + batt_qmax = tuple + batt_qmaxI = tuple + batt_qmax_thermal = tuple + batt_revenue_charge = tuple + batt_revenue_clipcharge = tuple + batt_revenue_discharge = tuple + batt_revenue_gridcharge = tuple + batt_system_charge_percent = float + batt_system_loss = tuple + batt_temperature = tuple + batt_to_grid = tuple + batt_to_inverter_dc = tuple + batt_to_load = tuple + batt_to_system_load = tuple + batt_voltage = tuple + batt_voltage_cell = tuple + bifacial_electrical_mismatch = tuple + capacity_factor = float + capacity_factor_ac = float + cdf_of_surviving = tuple + cf_battery_replacement_cost_schedule = tuple + cf_energy_net = tuple + cf_fuelcell_replacement_cost_schedule = tuple + cf_om_capacity = tuple + cf_om_fixed = tuple + cf_om_fuel_cost = tuple + cf_om_land_lease = tuple + cf_om_production = tuple + crit_load = tuple + crit_load_unmet = tuple + dc_degrade_factor = tuple + dc_invmppt_loss = tuple + dc_lifetime_loss = tuple + dc_net = tuple + dc_snow_loss = tuple + df = tuple + df_calc = tuple + dn = tuple + dn_calc = tuple + elev = float + fuelcell_to_batt = tuple + gen = tuple + gen_without_battery = tuple + gh = tuple + gh_calc = tuple + grid_power = tuple + grid_power_target = tuple + grid_to_batt = tuple + grid_to_load = tuple + ground_absorbed = tuple + ground_incident = tuple + interconnection_loss = tuple + inv_cliploss = tuple + inv_eff = tuple + inv_pntloss = tuple + inv_psoloss = tuple + inv_tdcloss = tuple + inv_total_loss = tuple + inverterMPPT1_DCVoltage = tuple + inverterMPPT2_DCVoltage = tuple + inverterMPPT3_DCVoltage = tuple + inverterMPPT4_DCVoltage = tuple + kwh_per_kw = float + lat = float + lon = float + market_sell_rate_series_yr1 = tuple + monthly_batt_to_grid = tuple + monthly_batt_to_load = tuple + monthly_batt_to_system_load = tuple + monthly_crit_load = tuple + monthly_crit_load_unmet = tuple + monthly_crit_load_unmet_percentage = tuple + monthly_dc = tuple + monthly_energy = tuple + monthly_grid_to_batt = tuple + monthly_grid_to_load = tuple + monthly_interconnection_loss = tuple + monthly_outage_losses_unmet = tuple + monthly_poa_beam_eff = tuple + monthly_poa_beam_nom = tuple + monthly_poa_eff = tuple + monthly_poa_front = tuple + monthly_poa_nom = tuple + monthly_poa_rear = tuple + monthly_snow_loss = tuple + monthly_system_to_batt = tuple + monthly_system_to_grid = tuple + monthly_system_to_load = tuple + nameplate_dc_rating = float + num_ts_load_met_by_system_lifetime = float + num_ts_load_met_by_system_yr1 = float + outage_durations = tuple + outage_losses_unmet = tuple + pdf_of_surviving = tuple + percent_ts_load_met_by_system_lifetime = float + percent_ts_load_met_by_system_yr1 = float + performance_ratio = float + poa_beam_eff = tuple + poa_beam_nom = tuple + poa_eff = tuple + poa_front = tuple + poa_nom = tuple + poa_rear = tuple + poa_rear_direct_diffuse = tuple + poa_rear_ground_reflected = tuple + poa_rear_rack_shaded = tuple + poa_rear_row_reflections = tuple + poa_rear_self_shaded = tuple + poa_rear_soiled = tuple + poa_shaded = tuple + poa_shaded_soiled = tuple + resilience_hrs = tuple + resilience_hrs_avg = float + resilience_hrs_max = float + resilience_hrs_min = float + shadedb_subarray1_shade_frac = tuple + shadedb_subarray2_shade_frac = tuple + shadedb_subarray3_shade_frac = tuple + shadedb_subarray4_shade_frac = tuple + sixpar_Adj = float + sixpar_Il = float + sixpar_Io = float + sixpar_Rs = float + sixpar_Rsh = float + sixpar_a = float + snowdepth = tuple + sol_alt = tuple + sol_azi = tuple + sol_zen = tuple + subarray1_aoi = tuple + subarray1_aoi_modifier = tuple + subarray1_axisrot = tuple + subarray1_beam_shading_factor = tuple + subarray1_celltemp = tuple + subarray1_celltempSS = tuple + subarray1_dc_gross = tuple + subarray1_dc_voltage = tuple + subarray1_dcloss = float + subarray1_ground_rear_spatial = tuple + subarray1_idealrot = tuple + subarray1_isc = tuple + subarray1_linear_derate = tuple + subarray1_modeff = tuple + subarray1_poa_beam_front_cs = tuple + subarray1_poa_diffuse_front_cs = tuple + subarray1_poa_eff = tuple + subarray1_poa_eff_beam = tuple + subarray1_poa_eff_diff = tuple + subarray1_poa_front = tuple + subarray1_poa_ground_front_cs = tuple + subarray1_poa_nom = tuple + subarray1_poa_rear = tuple + subarray1_poa_rear_cs = tuple + subarray1_poa_rear_spatial = tuple + subarray1_poa_shaded = tuple + subarray1_poa_shaded_soiled = tuple + subarray1_snow_coverage = tuple + subarray1_snow_loss = tuple + subarray1_soiling_derate = tuple + subarray1_ss_derate = tuple + subarray1_ss_diffuse_derate = tuple + subarray1_ss_reflected_derate = tuple + subarray1_surf_azi = tuple + subarray1_surf_tilt = tuple + subarray1_voc = tuple + subarray2_aoi = tuple + subarray2_aoi_modifier = tuple + subarray2_axisrot = tuple + subarray2_beam_shading_factor = tuple + subarray2_celltemp = tuple + subarray2_celltempSS = tuple + subarray2_dc_gross = tuple + subarray2_dc_voltage = tuple + subarray2_dcloss = float + subarray2_ground_rear_spatial = tuple + subarray2_idealrot = tuple + subarray2_isc = tuple + subarray2_linear_derate = tuple + subarray2_modeff = tuple + subarray2_poa_beam_front_cs = tuple + subarray2_poa_diffuse_front_cs = tuple + subarray2_poa_eff = tuple + subarray2_poa_eff_beam = tuple + subarray2_poa_eff_diff = tuple + subarray2_poa_front = tuple + subarray2_poa_ground_front_cs = tuple + subarray2_poa_nom = tuple + subarray2_poa_rear = tuple + subarray2_poa_rear_cs = tuple + subarray2_poa_rear_spatial = tuple + subarray2_poa_shaded = tuple + subarray2_poa_shaded_soiled = tuple + subarray2_snow_coverage = tuple + subarray2_snow_loss = tuple + subarray2_soiling_derate = tuple + subarray2_ss_derate = tuple + subarray2_ss_diffuse_derate = tuple + subarray2_ss_reflected_derate = tuple + subarray2_surf_azi = tuple + subarray2_surf_tilt = tuple + subarray2_voc = tuple + subarray3_aoi = tuple + subarray3_aoi_modifier = tuple + subarray3_axisrot = tuple + subarray3_beam_shading_factor = tuple + subarray3_celltemp = tuple + subarray3_celltempSS = tuple + subarray3_dc_gross = tuple + subarray3_dc_voltage = tuple + subarray3_dcloss = float + subarray3_ground_rear_spatial = tuple + subarray3_idealrot = tuple + subarray3_isc = tuple + subarray3_linear_derate = tuple + subarray3_modeff = tuple + subarray3_poa_beam_front_cs = tuple + subarray3_poa_diffuse_front_cs = tuple + subarray3_poa_eff = tuple + subarray3_poa_eff_beam = tuple + subarray3_poa_eff_diff = tuple + subarray3_poa_front = tuple + subarray3_poa_ground_front_cs = tuple + subarray3_poa_nom = tuple + subarray3_poa_rear = tuple + subarray3_poa_rear_cs = tuple + subarray3_poa_rear_spatial = tuple + subarray3_poa_shaded = tuple + subarray3_poa_shaded_soiled = tuple + subarray3_snow_coverage = tuple + subarray3_snow_loss = tuple + subarray3_soiling_derate = tuple + subarray3_ss_derate = tuple + subarray3_ss_diffuse_derate = tuple + subarray3_ss_reflected_derate = tuple + subarray3_surf_azi = tuple + subarray3_surf_tilt = tuple + subarray3_voc = tuple + subarray4_aoi = tuple + subarray4_aoi_modifier = tuple + subarray4_axisrot = tuple + subarray4_beam_shading_factor = tuple + subarray4_celltemp = tuple + subarray4_celltempSS = tuple + subarray4_dc_gross = tuple + subarray4_dc_voltage = tuple + subarray4_dcloss = float + subarray4_ground_rear_spatial = tuple + subarray4_idealrot = tuple + subarray4_isc = tuple + subarray4_linear_derate = tuple + subarray4_modeff = tuple + subarray4_poa_beam_front_cs = tuple + subarray4_poa_diffuse_front_cs = tuple + subarray4_poa_eff = tuple + subarray4_poa_eff_beam = tuple + subarray4_poa_eff_diff = tuple + subarray4_poa_front = tuple + subarray4_poa_ground_front_cs = tuple + subarray4_poa_nom = tuple + subarray4_poa_rear = tuple + subarray4_poa_rear_cs = tuple + subarray4_poa_rear_spatial = tuple + subarray4_poa_shaded = tuple + subarray4_poa_shaded_soiled = tuple + subarray4_snow_coverage = tuple + subarray4_snow_loss = tuple + subarray4_soiling_derate = tuple + subarray4_ss_derate = tuple + subarray4_ss_diffuse_derate = tuple + subarray4_ss_reflected_derate = tuple + subarray4_surf_azi = tuple + subarray4_surf_tilt = tuple + subarray4_voc = tuple + subhourly_clipping_loss = tuple + sunpos_hour = tuple + sunup = tuple + survival_function = tuple + system_to_batt = tuple + system_to_batt_dc = tuple + system_to_grid = tuple + system_to_load = tuple + tdry = tuple + ts_shift_hours = float + tz = float + wfpoa = tuple + wspd = tuple + xfmr_ll_ts = tuple + xfmr_ll_year1 = float + xfmr_loss_ts = tuple + xfmr_loss_year1 = float + xfmr_nll_ts = tuple + xfmr_nll_year1 = float \ No newline at end of file diff --git a/files/Hybrids/PVWattsHybrid.py b/files/Hybrids/PVWattsHybrid.py new file mode 100644 index 00000000..0651e503 --- /dev/null +++ b/files/Hybrids/PVWattsHybrid.py @@ -0,0 +1,8 @@ +import PySAM.Pvwattsv8 as pvwatts + +from .HybridBase import HybridGenerator + +class PVWattsHybrid(HybridGenerator): + def __init__(self, name="pvwattsv8") -> None: + super().__init__(pvwatts, name) + self._data: pvwatts.Pvwattsv8 \ No newline at end of file diff --git a/files/Hybrids/PVWattsHybrid.pyi b/files/Hybrids/PVWattsHybrid.pyi new file mode 100644 index 00000000..aa9f396b --- /dev/null +++ b/files/Hybrids/PVWattsHybrid.pyi @@ -0,0 +1,221 @@ +from .HybridBase import HybridGenerator + +class PVWattsHybrid(HybridGenerator): + def new(self, str): + pass + + def default(self, str): + pass + + def assign(self, dict): + pass + + def value(self, name, value=None): + pass + + def unassign(self, name): + pass + + def execute(self, int_verbosity): + pass + + def export(self): + pass + + def __getattribute__(self, *args, **kwargs): + pass + + def __init__(self, *args, **kwargs): + pass + + def Reopt_size_battery_post(self, args): + pass + + class SolarResource(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + albedo = tuple + albedo_default = float + albedo_default_snow = float + solar_resource_data = dict + solar_resource_file = str + use_wf_albedo = float + + + class Lifetime(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + analysis_period = float + dc_degradation = tuple + system_use_lifetime_output = float + + + class SystemDesign(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + array_type = float + azimuth = float + batt_simple_enable = float + bifaciality = float + dc_ac_ratio = float + en_snowloss = float + enable_wind_stow = float + gcr = float + gust_factor = float + inv_eff = float + losses = float + module_type = float + rotlim = float + soiling = tuple + stow_wspd = float + system_capacity = float + tilt = float + wind_stow_angle = float + xfmr_ll = float + xfmr_nll = float + + + class Shading(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + shading_azal = tuple + shading_diff = float + shading_en_azal = float + shading_en_diff = float + shading_en_mxh = float + shading_en_string_option = float + shading_en_timestep = float + shading_mxh = tuple + shading_string_option = float + shading_timestep = tuple + + + class AdjustmentFactors(object): + def assign(self): + pass + + def export(self): + return {} + + def __init__(self, *args, **kwargs): # real signature unknown + pass + + constant = float + en_hourly = float + en_periods = float + en_timeindex = float + hourly = tuple + periods = tuple + imeindex = tuple + dc_constant = float + dc_en_hourly = float + dc_en_periods = float + dc_en_timeindex = float + dc_hourly = tuple + dc_periods = tuple + dc_imeindex = tuple + sf_constant = float + sf_en_hourly = float + sf_en_periods = float + sf_en_timeindex = float + sf_hourly = tuple + sf_periods = tuple + sf_timeindex = tuple + + class Outputs(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + ac = tuple + ac_annual = float + ac_annual_pre_adjust = float + ac_monthly = tuple + ac_pre_adjust = tuple + alb = tuple + annual_energy = float + annual_energy_distribution_time = tuple + aoi = tuple + capacity_factor = float + capacity_factor_ac = float + cf_battery_replacement_cost_schedule = tuple + cf_energy_net = tuple + cf_fuelcell_replacement_cost_schedule = tuple + cf_om_capacity = tuple + cf_om_fixed = tuple + cf_om_fuel_cost = tuple + cf_om_land_lease = tuple + cf_om_production = tuple + city = str + dc = tuple + dc_monthly = tuple + dcsnowderate = tuple + df = tuple + dn = tuple + elev = float + gen = tuple + gh = tuple + inv_eff_output = tuple + inverter_efficiency = float + kwh_per_kw = float + lat = float + location = str + lon = float + monthly_energy = tuple + percent_complete = float + poa = tuple + poa_monthly = tuple + shad_beam_factor = tuple + snow = tuple + soiling_f = tuple + solrad_annual = float + solrad_monthly = tuple + ss_beam_factor = tuple + ss_gnd_diffuse_factor = tuple + ss_sky_diffuse_factor = tuple + state = str + sunup = tuple + tamb = tuple + tcell = tuple + tpoa = tuple + ts_shift_hours = float + tz = float + wspd = tuple \ No newline at end of file diff --git a/files/Hybrids/WindHybrid.py b/files/Hybrids/WindHybrid.py new file mode 100644 index 00000000..f54ebaa1 --- /dev/null +++ b/files/Hybrids/WindHybrid.py @@ -0,0 +1,8 @@ +import PySAM.Windpower as wind + +from .HybridBase import HybridGenerator + +class WindHybrid(HybridGenerator): + def __init__(self, name="windpower") -> None: + super().__init__(wind, name) + self._data: wind.Windpower \ No newline at end of file diff --git a/files/Hybrids/WindHybrid.pyi b/files/Hybrids/WindHybrid.pyi new file mode 100644 index 00000000..e487849d --- /dev/null +++ b/files/Hybrids/WindHybrid.pyi @@ -0,0 +1,220 @@ +from .HybridBase import HybridGenerator + +class WindHybrid(HybridGenerator): + def new(self, str): + pass + + def default(self, str): + pass + + def assign(self, dict): + pass + + def value(self, name, value=None): + pass + + def unassign(self, name): + pass + + def execute(self, int_verbosity): + pass + + def export(self): + pass + + def __getattribute__(self, *args, **kwargs): + pass + + def __init__(self, *args, **kwargs): + pass + + class Resource(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + weibull_k_factor = float + weibull_reference_height = float + weibull_wind_speed = float + wind_resource_data = dict + wind_resource_distribution = tuple + wind_resource_filename = str + wind_resource_model_choice = float + + + class Turbine(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + def calculate_powercurve(self, args): + pass + + wind_resource_shear = float + wind_turbine_hub_ht = float + wind_turbine_max_cp = float + wind_turbine_powercurve_powerout = tuple + wind_turbine_powercurve_windspeeds = tuple + wind_turbine_rotor_diameter = float + + + class Farm(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + max_turbine_override = float + system_capacity = float + wind_farm_wake_model = float + wind_farm_xCoordinates = tuple + wind_farm_yCoordinates = tuple + wind_resource_turbulence_coeff = float + + + class Losses(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + avail_bop_loss = float + avail_grid_loss = float + avail_turb_loss = float + elec_eff_loss = float + elec_parasitic_loss = float + en_icing_cutoff = float + en_low_temp_cutoff = float + env_degrad_loss = float + env_env_loss = float + env_exposure_loss = float + env_icing_loss = float + icing_cutoff_rh = float + icing_cutoff_temp = float + low_temp_cutoff = float + ops_env_loss = float + ops_grid_loss = float + ops_load_loss = float + ops_strategies_loss = float + turb_generic_loss = float + turb_hysteresis_loss = float + turb_perf_loss = float + turb_specific_loss = float + wake_ext_loss = float + wake_future_loss = float + wake_int_loss = float + + + class AdjustmentFactors(object): + def assign(self): + pass + + def export(self): + return {} + + def __init__(self, *args, **kwargs): # real signature unknown + pass + + constant = float + en_hourly = float + en_periods = float + en_timeindex = float + hourly = tuple + periods = tuple + imeindex = tuple + dc_constant = float + dc_en_hourly = float + dc_en_periods = float + dc_en_timeindex = float + dc_hourly = tuple + dc_periods = tuple + dc_imeindex = tuple + sf_constant = float + sf_en_hourly = float + sf_en_periods = float + sf_en_timeindex = float + sf_hourly = tuple + sf_periods = tuple + sf_timeindex = tuple + + class Uncertainty(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + total_uncert = float + + + class Outputs(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + annual_energy = float + annual_energy_distribution_time = tuple + annual_energy_p75 = float + annual_energy_p90 = float + annual_energy_p95 = float + annual_gross_energy = float + avail_losses = float + capacity_factor = float + cf_battery_replacement_cost_schedule = tuple + cf_energy_net = tuple + cf_fuelcell_replacement_cost_schedule = tuple + cf_om_capacity = tuple + cf_om_fixed = tuple + cf_om_fuel_cost = tuple + cf_om_land_lease = tuple + cf_om_production = tuple + cutoff_losses = float + elec_losses = float + elev = float + env_losses = float + gen = tuple + kwh_per_kw = float + lat = float + lon = float + monthly_energy = tuple + ops_losses = float + pressure = tuple + temp = tuple + turb_losses = float + turbine_output_by_windspeed_bin = tuple + wake_losses = float + wind_direction = tuple + wind_speed = tuple + wind_speed_average = float + year = float \ No newline at end of file diff --git a/files/Hybrids/__init__.py b/files/Hybrids/__init__.py new file mode 100644 index 00000000..ae85f860 --- /dev/null +++ b/files/Hybrids/__init__.py @@ -0,0 +1,8 @@ +from .HybridBase import HybridGenerator +from .PVWattsHybrid import PVWattsHybrid +from .PVHybrid import PVHybrid +from .WindHybrid import WindHybrid +from .BatteryHybrid import BatteryHybrid +from .GenericSystemHybrid import GenericSystemHybrid +from .FuelCellHybrid import FuelCellHybrid +from .HybridSystem import HybridSystem \ No newline at end of file diff --git a/files/PySSC.py b/files/PySSC.py index f9bf53cf..86622e26 100644 --- a/files/PySSC.py +++ b/files/PySSC.py @@ -44,6 +44,7 @@ def __init__(self, pdll_path=None): NUMBER = 2 ARRAY = 3 MATRIX = 4 + TABLE = 5 INPUT = 1 OUTPUT = 2 INOUT = 3 @@ -74,7 +75,7 @@ def var_set_array(self, p_var, parr): arr = (c_number * count)() arr[:] = [parr] # set all at once instead of looping print("input type should be array. Changing to single element array") - return self.pdll.ssc_var_set_array(c_void_p(p_var), pointer(arr), c_int(count)) + self.pdll.ssc_var_set_array(c_void_p(p_var), pointer(arr), c_int(count)) def var_set_matrix(self, p_var, mat): nrows = len(mat) @@ -86,7 +87,7 @@ def var_set_matrix(self, p_var, mat): for c in range(ncols): arr[idx] = c_number(mat[r][c]) idx = idx + 1 - return self.pdll.ssc_var_set_matrix(c_void_p(p_var), pointer(arr), c_int(nrows), c_int(ncols)) + self.pdll.ssc_var_set_matrix(c_void_p(p_var), pointer(arr), c_int(nrows), c_int(ncols)) def var_set_data_array(self, p_var, p_arr, r): self.pdll.ssc_var_set_data_array(c_void_p(p_var), c_void_p(p_arr), c_int(r)) @@ -95,7 +96,7 @@ def var_set_data_matrix(self, p_var, p_mat, r, c): self.pdll.ssc_var_set_data_matrix(c_void_p(p_var), c_void_p(p_mat), c_int(r), c_int(c)) def var_set_table(self, p_var, p_tab): - return self.pdll.ssc_var_set_table(c_void_p(p_var), c_void_p(p_tab)) + self.pdll.ssc_var_set_table(c_void_p(p_var), c_void_p(p_tab)) def var_get_string(self, p_var): return self.pdll.ssc_var_get_string(c_void_p(p_var)) @@ -185,7 +186,7 @@ def data_set_array(self, p_data, name, parr): arr[:] = [parr] # set all at once instead of looping print(name, " input type should be array. Changing to single element array") - return self.pdll.ssc_data_set_array(c_void_p(p_data), c_char_p(name), pointer(arr), c_int(count)) + self.pdll.ssc_data_set_array(c_void_p(p_data), c_char_p(name), pointer(arr), c_int(count)) def data_set_array_from_csv(self, p_data, name, fn): f = open(fn, 'rb') @@ -193,7 +194,7 @@ def data_set_array_from_csv(self, p_data, name, fn): for line in f: data.extend([n for n in map(float, line.split(b','))]) f.close() - return self.data_set_array(p_data, name, data) + self.data_set_array(p_data, name, data) def data_set_matrix(self, p_data, name, mat): nrows = len(mat) @@ -205,7 +206,7 @@ def data_set_matrix(self, p_data, name, mat): for c in range(ncols): arr[idx] = c_number(mat[r][c]) idx = idx + 1 - return self.pdll.ssc_data_set_matrix(c_void_p(p_data), c_char_p(name), pointer(arr), c_int(nrows), c_int(ncols)) + self.pdll.ssc_data_set_matrix(c_void_p(p_data), c_char_p(name), pointer(arr), c_int(nrows), c_int(ncols)) def data_set_matrix_from_csv(self, p_data, name, fn): f = open(fn, 'rb') @@ -214,31 +215,33 @@ def data_set_matrix_from_csv(self, p_data, name, fn): lst = ([n for n in map(float, line.split(b','))]) data.append(lst) f.close() - return self.data_set_matrix(p_data, name, data) + self.data_set_matrix(p_data, name, data) def data_set_data_array(self, p_data, name, data_arr): p_var = self.var_create() self.var_set_value(p_var, data_arr) - return self.data_set_var(p_data, name, p_var) + self.data_set_var(p_data, name, p_var) def data_set_data_matrix(self, p_data, name, data_mat): p_var = self.var_create() self.var_set_value(p_var, data_mat) - return self.data_set_var(p_data, name, p_var) + self.data_set_var(p_data, name, p_var) def data_set_table(self, p_data, name, tab): - return self.pdll.ssc_data_set_table(c_void_p(p_data), c_char_p(name), c_void_p(tab)) + self.pdll.ssc_data_set_table(c_void_p(p_data), c_char_p(name), c_void_p(tab)) def data_set_var(self, p_var, name, p_val): - return self.pdll.ssc_data_set_var(c_void_p(p_var), c_char_p(name), c_void_p(p_val)) + self.pdll.ssc_data_set_var(c_void_p(p_var), c_char_p(name), c_void_p(p_val)) def data_get_string(self, p_data, name): return self.pdll.ssc_data_get_string(c_void_p(p_data), c_char_p(name)) def data_get_number(self, p_data, name): val = c_number(0) - self.pdll.ssc_data_get_number(c_void_p(p_data), c_char_p(name), byref(val)) - return val.value + if self.pdll.ssc_data_get_number(c_void_p(p_data), c_char_p(name), byref(val)): + return val.value + else: + raise RuntimeError(f"Error {str(name)} not assigned.") def data_get_array(self, p_data, name): count = c_int() @@ -293,7 +296,7 @@ def data_get_data_matrix(self, p_data, name, matrix_of_types): # don't call data_free() on the result, it's an internal # pointer inside SSC def data_get_table(self, p_data, name): - return c_ulong(self.pdll.ssc_data_get_table(c_void_p(p_data), name)) + return self.pdll.ssc_data_get_table(c_void_p(p_data), name) def module_entry(self, index): self.pdll.ssc_module_entry.restype = c_void_p @@ -438,6 +441,27 @@ def data_set_variable(self, table, ssc_input_data_name, value): self.data_set_variable(input_table, k, v) self.data_set_table(table, ssc_input_data_name, input_table) + def data_get_variable(self, data, ssc_var_name): + if isinstance(ssc_var_name, str): + ssc_var_name = ssc_var_name.encode('ascii') + ssc_data_query = self.data_query(data, ssc_var_name) + if ssc_data_query < self.STRING or ssc_data_query > self.TABLE: + raise ValueError(f"Error with variable f'{ssc_var_name}', invalid data type") + if ssc_data_query > 0: + if ssc_data_query == self.STRING: + return self.data_get_string(data, ssc_var_name).decode( + "ascii") + elif ssc_data_query == self.NUMBER: + return self.data_get_number(data, ssc_var_name) + elif ssc_data_query == self.ARRAY: + return self.data_get_array(data, ssc_var_name) + elif ssc_data_query == self.MATRIX: + return self.data_get_matrix(data, ssc_var_name) + elif ssc_data_query == self.TABLE: + return self.data_get_table(data, ssc_var_name) + + def data_deep_copy(self, data_source, data_dest): + return self.pdll.ssc_data_deep_copy(c_void_p(data_source), c_void_p(data_dest)) # Functions to simulate compute modules through dictionaries def ssc_sim_from_dict(data_pydict): diff --git a/modules/Battery.c b/modules/Battery.c index fcad658d..260bb4dc 100644 --- a/modules/Battery.c +++ b/modules/Battery.c @@ -4853,6 +4853,308 @@ static PyTypeObject GridLimits_Type = { }; +/* + * HybridCosts Group + */ + +static PyTypeObject HybridCosts_Type; + +static PyObject * +HybridCosts_new(SAM_Battery data_ptr) +{ + PyObject* new_obj = HybridCosts_Type.tp_alloc(&HybridCosts_Type,0); + + VarGroupObject* HybridCosts_obj = (VarGroupObject*)new_obj; + + HybridCosts_obj->data_ptr = (SAM_table)data_ptr; + + return new_obj; +} + +/* HybridCosts methods */ + +static PyObject * +HybridCosts_assign(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + + if (!PySAM_assign_from_dict(self->data_ptr, dict, "Battery", "HybridCosts")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +HybridCosts_replace(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + PyTypeObject* tp = &HybridCosts_Type; + + if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "Battery", "HybridCosts")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +HybridCosts_export(VarGroupObject *self, PyObject *args) +{ + PyTypeObject* tp = &HybridCosts_Type; + PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); + return dict; +} + +static PyMethodDef HybridCosts_methods[] = { + {"assign", (PyCFunction)HybridCosts_assign, METH_VARARGS, + PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``HybridCosts_vals = { var: val, ...}``")}, + {"replace", (PyCFunction)HybridCosts_replace, METH_VARARGS, + PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``HybridCosts_vals = { var: val, ...}``")}, + {"export", (PyCFunction)HybridCosts_export, METH_VARARGS, + PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, + {NULL, NULL} /* sentinel */ +}; + +static PyObject * +HybridCosts_get_add_om_num_types(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Battery_HybridCosts_add_om_num_types_nget, self->data_ptr); +} + +static int +HybridCosts_set_add_om_num_types(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Battery_HybridCosts_add_om_num_types_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_degradation(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Battery_HybridCosts_degradation_aget, self->data_ptr); +} + +static int +HybridCosts_set_degradation(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Battery_HybridCosts_degradation_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_land_area(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Battery_HybridCosts_land_area_nget, self->data_ptr); +} + +static int +HybridCosts_set_land_area(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Battery_HybridCosts_land_area_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_batt_capacity_cost(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Battery_HybridCosts_om_batt_capacity_cost_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_batt_capacity_cost(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Battery_HybridCosts_om_batt_capacity_cost_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_batt_fixed_cost(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Battery_HybridCosts_om_batt_fixed_cost_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_batt_fixed_cost(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Battery_HybridCosts_om_batt_fixed_cost_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_batt_nameplate(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Battery_HybridCosts_om_batt_nameplate_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_batt_nameplate(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Battery_HybridCosts_om_batt_nameplate_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_capacity_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Battery_HybridCosts_om_capacity_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_capacity_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Battery_HybridCosts_om_capacity_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fixed_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Battery_HybridCosts_om_fixed_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_fixed_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Battery_HybridCosts_om_fixed_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_land_lease(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Battery_HybridCosts_om_land_lease_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_land_lease(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Battery_HybridCosts_om_land_lease_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_land_lease_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Battery_HybridCosts_om_land_lease_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_land_lease_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Battery_HybridCosts_om_land_lease_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_production1_values(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Battery_HybridCosts_om_production1_values_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_production1_values(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Battery_HybridCosts_om_production1_values_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_total_installed_cost(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Battery_HybridCosts_total_installed_cost_nget, self->data_ptr); +} + +static int +HybridCosts_set_total_installed_cost(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Battery_HybridCosts_total_installed_cost_nset, self->data_ptr); +} + +static PyGetSetDef HybridCosts_getset[] = { +{"add_om_num_types", (getter)HybridCosts_get_add_om_num_types,(setter)HybridCosts_set_add_om_num_types, + PyDoc_STR("*float*: Number of O and M types\n\n**Info:**\nbattery,fuelcell\n\n**Constraints:**\nINTEGER,MIN=0,MAX=2\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"degradation", (getter)HybridCosts_get_degradation,(setter)HybridCosts_set_degradation, + PyDoc_STR("*sequence*: Annual AC degradation [%]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"land_area", (getter)HybridCosts_get_land_area,(setter)HybridCosts_set_land_area, + PyDoc_STR("*float*: Total land area [acres]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults.\n\nThe value of ``land_area`` depends on the following variables:\n\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - batt_power_discharge_max_kwac\n"), + NULL}, +{"om_batt_capacity_cost", (getter)HybridCosts_get_om_batt_capacity_cost,(setter)HybridCosts_set_om_batt_capacity_cost, + PyDoc_STR("*sequence*: Battery capacity-based System Costs amount [$/kWcap]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_batt_fixed_cost", (getter)HybridCosts_get_om_batt_fixed_cost,(setter)HybridCosts_set_om_batt_fixed_cost, + PyDoc_STR("*sequence*: Battery fixed System Costs annual amount [$/year]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_batt_nameplate", (getter)HybridCosts_get_om_batt_nameplate,(setter)HybridCosts_set_om_batt_nameplate, + PyDoc_STR("*float*: Battery capacity for System Costs values [kW]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults.\n\nThe value of ``om_batt_nameplate`` depends on the following variables:\n\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_computed_bank_capacity\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n"), + NULL}, +{"om_capacity_escal", (getter)HybridCosts_get_om_capacity_escal,(setter)HybridCosts_set_om_capacity_escal, + PyDoc_STR("*float*: Capacity-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fixed_escal", (getter)HybridCosts_get_om_fixed_escal,(setter)HybridCosts_set_om_fixed_escal, + PyDoc_STR("*float*: Fixed O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_land_lease", (getter)HybridCosts_get_om_land_lease,(setter)HybridCosts_set_om_land_lease, + PyDoc_STR("*sequence*: Land lease cost [$/acre]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_land_lease_escal", (getter)HybridCosts_get_om_land_lease_escal,(setter)HybridCosts_set_om_land_lease_escal, + PyDoc_STR("*float*: Land lease cost escalation [%/yr]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_production1_values", (getter)HybridCosts_get_om_production1_values,(setter)HybridCosts_set_om_production1_values, + PyDoc_STR("*sequence*: Battery production for System Costs values [kWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"total_installed_cost", (getter)HybridCosts_get_total_installed_cost,(setter)HybridCosts_set_total_installed_cost, + PyDoc_STR("*float*: Total installed cost [$]\n\n**Required:**\nTrue\n\nThe value of ``total_installed_cost`` depends on the following variables:\n\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_computed_bank_capacity\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n"), + NULL}, + {NULL} /* Sentinel */ +}; + +static PyTypeObject HybridCosts_Type = { + /* The ob_type field must be initialized in the module init function + * to be portable to Windows without using C++. */ + PyVarObject_HEAD_INIT(NULL, 0) + "Battery.HybridCosts", /*tp_name*/ + sizeof(VarGroupObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + /* methods */ + 0, /*tp_dealloc*/ + 0, /*tp_print*/ + (getattrfunc)0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_reserved*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistofnset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + HybridCosts_methods, /*tp_methods*/ + 0, /*tp_members*/ + HybridCosts_getset, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictofnset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + 0, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ +}; + + /* * Outputs Group */ @@ -5332,6 +5634,12 @@ Outputs_get_cf_fuelcell_replacement_cost_schedule(VarGroupObject *self, void *cl return PySAM_array_getter(SAM_Battery_Outputs_cf_fuelcell_replacement_cost_schedule_aget, self->data_ptr); } +static PyObject * +Outputs_get_cf_land_lease_expense(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Battery_Outputs_cf_land_lease_expense_aget, self->data_ptr); +} + static PyObject * Outputs_get_cf_om_capacity(VarGroupObject *self, void *closure) { @@ -5801,6 +6109,9 @@ static PyGetSetDef Outputs_getset[] = { {"cf_fuelcell_replacement_cost_schedule", (getter)Outputs_get_cf_fuelcell_replacement_cost_schedule,(setter)0, PyDoc_STR("*sequence*: replacement O&M costs [$]"), NULL}, +{"cf_land_lease_expense", (getter)Outputs_get_cf_land_lease_expense,(setter)0, + PyDoc_STR("*sequence*: Land lease expense [$]"), + NULL}, {"cf_om_capacity", (getter)Outputs_get_cf_om_capacity,(setter)0, PyDoc_STR("*sequence*: capacity O&M costs [$]"), NULL}, @@ -6056,6 +6367,10 @@ newBatteryObject(void* data_ptr) PyDict_SetItemString(attr_dict, "GridLimits", GridLimits_obj); Py_DECREF(GridLimits_obj); + PyObject* HybridCosts_obj = HybridCosts_new(self->data_ptr); + PyDict_SetItemString(attr_dict, "HybridCosts", HybridCosts_obj); + Py_DECREF(HybridCosts_obj); + PyObject* Outputs_obj = Outputs_new(self->data_ptr); PyDict_SetItemString(attr_dict, "Outputs", Outputs_obj); Py_DECREF(Outputs_obj); @@ -6154,8 +6469,6 @@ Battery_unassign(CmodObject *self, PyObject *args) static PyMethodDef Battery_methods[] = { {"execute", (PyCFunction)Battery_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Battery_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Battery_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Simulation': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Battery_replace, METH_VARARGS, @@ -6166,6 +6479,8 @@ static PyMethodDef Battery_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Battery_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Battery_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {"Reopt_size_standalone_battery_post", (PyCFunction)Reopt_size_standalone_battery_post, METH_VARARGS | METH_KEYWORDS, Reopt_size_standalone_battery_post_doc}, {NULL, NULL} /* sentinel */ @@ -6454,6 +6769,13 @@ BatteryModule_exec(PyObject *m) (PyObject*)&GridLimits_Type); Py_DECREF(&GridLimits_Type); + /// Add the HybridCosts type object to Battery_Type + if (PyType_Ready(&HybridCosts_Type) < 0) { goto fail; } + PyDict_SetItemString(Battery_Type.tp_dict, + "HybridCosts", + (PyObject*)&HybridCosts_Type); + Py_DECREF(&HybridCosts_Type); + /// Add the Outputs type object to Battery_Type if (PyType_Ready(&Outputs_Type) < 0) { goto fail; } PyDict_SetItemString(Battery_Type.tp_dict, diff --git a/modules/BatteryStateful.c b/modules/BatteryStateful.c index c3f6ecd8..1c3065c7 100644 --- a/modules/BatteryStateful.c +++ b/modules/BatteryStateful.c @@ -2516,8 +2516,6 @@ static PyMethodDef BatteryStateful_methods[] = { PyDoc_STR("setup() -> None\n Setup parameters in simulation")}, {"execute", (PyCFunction)BatteryStateful_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)BatteryStateful_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)BatteryStateful_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Controls': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)BatteryStateful_replace, METH_VARARGS, @@ -2528,6 +2526,8 @@ static PyMethodDef BatteryStateful_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)BatteryStateful_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)BatteryStateful_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Battwatts.c b/modules/Battwatts.c index 8219e936..75f7fcd6 100644 --- a/modules/Battwatts.c +++ b/modules/Battwatts.c @@ -1988,8 +1988,6 @@ Battwatts_unassign(CmodObject *self, PyObject *args) static PyMethodDef Battwatts_methods[] = { {"execute", (PyCFunction)Battwatts_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Battwatts_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Battwatts_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Lifetime': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Battwatts_replace, METH_VARARGS, @@ -2000,6 +1998,8 @@ static PyMethodDef Battwatts_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Battwatts_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Battwatts_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Belpe.c b/modules/Belpe.c index 23e0c65a..c14960d8 100644 --- a/modules/Belpe.c +++ b/modules/Belpe.c @@ -584,8 +584,6 @@ Belpe_unassign(CmodObject *self, PyObject *args) static PyMethodDef Belpe_methods[] = { {"execute", (PyCFunction)Belpe_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Belpe_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Belpe_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Load Profile Estimator': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Belpe_replace, METH_VARARGS, @@ -596,6 +594,8 @@ static PyMethodDef Belpe_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Belpe_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Belpe_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Biomass.c b/modules/Biomass.c index daef6ba2..1e994fb7 100644 --- a/modules/Biomass.c +++ b/modules/Biomass.c @@ -2570,8 +2570,6 @@ Biomass_unassign(CmodObject *self, PyObject *args) static PyMethodDef Biomass_methods[] = { {"execute", (PyCFunction)Biomass_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Biomass_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Biomass_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'biopower': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Biomass_replace, METH_VARARGS, @@ -2582,6 +2580,8 @@ static PyMethodDef Biomass_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Biomass_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Biomass_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Cashloan.c b/modules/Cashloan.c index 9992a93e..f40dc8e6 100644 --- a/modules/Cashloan.c +++ b/modules/Cashloan.c @@ -828,94 +828,94 @@ SystemCosts_set_total_installed_cost(VarGroupObject *self, PyObject *value, void static PyGetSetDef SystemCosts_getset[] = { {"add_om_num_types", (getter)SystemCosts_get_add_om_num_types,(setter)SystemCosts_set_add_om_num_types, - PyDoc_STR("*float*: Number of O and M types\n\n**Constraints:**\nINTEGER,MIN=0,MAX=2\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Number of O and M types\n\n**Info:**\nbattery,fuelcell\n\n**Constraints:**\nINTEGER,MIN=0,MAX=2\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"annual_fuel_usage", (getter)SystemCosts_get_annual_fuel_usage,(setter)SystemCosts_set_annual_fuel_usage, - PyDoc_STR("*float*: Fuel usage (yr 1) [kWht]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel usage (yr 1) [kWht]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"annual_fuel_usage_lifetime", (getter)SystemCosts_get_annual_fuel_usage_lifetime,(setter)SystemCosts_set_annual_fuel_usage_lifetime, - PyDoc_STR("*sequence*: Fuel usage (lifetime) [kWht]"), + PyDoc_STR("*sequence*: Fuel usage (lifetime) [kWht]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical"), NULL}, {"om_batt_capacity_cost", (getter)SystemCosts_get_om_batt_capacity_cost,(setter)SystemCosts_set_om_batt_capacity_cost, - PyDoc_STR("*sequence*: Battery capacity-based System Costs amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery capacity-based System Costs amount [$/kWcap]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_fixed_cost", (getter)SystemCosts_get_om_batt_fixed_cost,(setter)SystemCosts_set_om_batt_fixed_cost, - PyDoc_STR("*sequence*: Battery fixed System Costs annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery fixed System Costs annual amount [$/year]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_nameplate", (getter)SystemCosts_get_om_batt_nameplate,(setter)SystemCosts_set_om_batt_nameplate, - PyDoc_STR("*float*: Battery capacity for System Costs values [kW]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Battery capacity for System Costs values [kW]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_replacement_cost", (getter)SystemCosts_get_om_batt_replacement_cost,(setter)SystemCosts_set_om_batt_replacement_cost, - PyDoc_STR("*sequence*: Replacement cost 1 [$/kWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Replacement cost 1 [$/kWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_variable_cost", (getter)SystemCosts_get_om_batt_variable_cost,(setter)SystemCosts_set_om_batt_variable_cost, - PyDoc_STR("*sequence*: Battery production-based System Costs amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery production-based System Costs amount [$/MWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_capacity", (getter)SystemCosts_get_om_capacity,(setter)SystemCosts_set_om_capacity, - PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_capacity_escal", (getter)SystemCosts_get_om_capacity_escal,(setter)SystemCosts_set_om_capacity_escal, PyDoc_STR("*float*: Capacity-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fixed", (getter)SystemCosts_get_om_fixed,(setter)SystemCosts_set_om_fixed, - PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fixed_escal", (getter)SystemCosts_get_om_fixed_escal,(setter)SystemCosts_set_om_fixed_escal, PyDoc_STR("*float*: Fixed O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuel_cost", (getter)SystemCosts_get_om_fuel_cost,(setter)SystemCosts_set_om_fuel_cost, - PyDoc_STR("*sequence*: Fuel cost [$/MMBtu]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cost [$/MMBtu]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuel_cost_escal", (getter)SystemCosts_get_om_fuel_cost_escal,(setter)SystemCosts_set_om_fuel_cost_escal, - PyDoc_STR("*float*: Fuel cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel cost escalation [%/year]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_capacity_cost", (getter)SystemCosts_get_om_fuelcell_capacity_cost,(setter)SystemCosts_set_om_fuelcell_capacity_cost, - PyDoc_STR("*sequence*: Fuel cell capacity-based System Costs amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell capacity-based System Costs amount [$/kWcap]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_fixed_cost", (getter)SystemCosts_get_om_fuelcell_fixed_cost,(setter)SystemCosts_set_om_fuelcell_fixed_cost, - PyDoc_STR("*sequence*: Fuel cell fixed System Costs annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell fixed System Costs annual amount [$/year]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_nameplate", (getter)SystemCosts_get_om_fuelcell_nameplate,(setter)SystemCosts_set_om_fuelcell_nameplate, - PyDoc_STR("*float*: Fuel cell capacity for System Costs values [kW]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel cell capacity for System Costs values [kW]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_replacement_cost", (getter)SystemCosts_get_om_fuelcell_replacement_cost,(setter)SystemCosts_set_om_fuelcell_replacement_cost, - PyDoc_STR("*sequence*: Replacement cost 2 [$/kW]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Replacement cost 2 [$/kW]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_variable_cost", (getter)SystemCosts_get_om_fuelcell_variable_cost,(setter)SystemCosts_set_om_fuelcell_variable_cost, - PyDoc_STR("*sequence*: Fuel cell production-based System Costs amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell production-based System Costs amount [$/MWh]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_cost", (getter)SystemCosts_get_om_opt_fuel_1_cost,(setter)SystemCosts_set_om_opt_fuel_1_cost, - PyDoc_STR("*sequence*: Biomass feedstock cost [$/unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Biomass feedstock cost [$/unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_cost_escal", (getter)SystemCosts_get_om_opt_fuel_1_cost_escal,(setter)SystemCosts_set_om_opt_fuel_1_cost_escal, - PyDoc_STR("*float*: Biomass feedstock cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Biomass feedstock cost escalation [%/year]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_usage", (getter)SystemCosts_get_om_opt_fuel_1_usage,(setter)SystemCosts_set_om_opt_fuel_1_usage, - PyDoc_STR("*float*: Biomass feedstock usage [unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Biomass feedstock usage [unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_cost", (getter)SystemCosts_get_om_opt_fuel_2_cost,(setter)SystemCosts_set_om_opt_fuel_2_cost, - PyDoc_STR("*sequence*: Coal feedstock cost [$/unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Coal feedstock cost [$/unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_cost_escal", (getter)SystemCosts_get_om_opt_fuel_2_cost_escal,(setter)SystemCosts_set_om_opt_fuel_2_cost_escal, - PyDoc_STR("*float*: Coal feedstock cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Coal feedstock cost escalation [%/year]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_usage", (getter)SystemCosts_get_om_opt_fuel_2_usage,(setter)SystemCosts_set_om_opt_fuel_2_usage, - PyDoc_STR("*float*: Coal feedstock usage [unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Coal feedstock usage [unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production", (getter)SystemCosts_get_om_production,(setter)SystemCosts_set_om_production, - PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production1_values", (getter)SystemCosts_get_om_production1_values,(setter)SystemCosts_set_om_production1_values, - PyDoc_STR("*sequence*: Battery production for System Costs values [kWh]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery production for System Costs values [kWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production2_values", (getter)SystemCosts_get_om_production2_values,(setter)SystemCosts_set_om_production2_values, - PyDoc_STR("*sequence*: Fuel cell production for System Costs values [kWh]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell production for System Costs values [kWh]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production_escal", (getter)SystemCosts_get_om_production_escal,(setter)SystemCosts_set_om_production_escal, PyDoc_STR("*float*: Production-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_replacement_cost_escal", (getter)SystemCosts_get_om_replacement_cost_escal,(setter)SystemCosts_set_om_replacement_cost_escal, - PyDoc_STR("*float*: Replacement cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Replacement cost escalation [%/year]\n\n**Info:**\nbattery,fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"total_installed_cost", (getter)SystemCosts_get_total_installed_cost,(setter)SystemCosts_set_total_installed_cost, PyDoc_STR("*float*: Total installed cost [$]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nTrue"), @@ -4418,7 +4418,7 @@ static PyGetSetDef SystemOutput_getset[] = { PyDoc_STR("*sequence*: Power generated by renewable resource [kW]\n\n**Required:**\nTrue"), NULL}, {"gen_purchases", (getter)SystemOutput_get_gen_purchases,(setter)SystemOutput_set_gen_purchases, - PyDoc_STR("*sequence*: Electricity from grid [kW]\n\n**INOUT:** This variable is both an input and an output to the compute module."), + PyDoc_STR("*sequence*: Electricity from grid to system [kW]\n\n**INOUT:** This variable is both an input and an output to the compute module."), NULL}, {NULL} /* Sentinel */ }; @@ -6752,8 +6752,6 @@ Cashloan_unassign(CmodObject *self, PyObject *args) static PyMethodDef Cashloan_methods[] = { {"execute", (PyCFunction)Cashloan_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Cashloan_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Cashloan_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Financial Parameters': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Cashloan_replace, METH_VARARGS, @@ -6764,6 +6762,8 @@ static PyMethodDef Cashloan_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Cashloan_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Cashloan_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/CbConstructionFinancing.c b/modules/CbConstructionFinancing.c index 3d4d4f58..b2cc5e76 100644 --- a/modules/CbConstructionFinancing.c +++ b/modules/CbConstructionFinancing.c @@ -977,8 +977,6 @@ CbConstructionFinancing_unassign(CmodObject *self, PyObject *args) static PyMethodDef CbConstructionFinancing_methods[] = { {"execute", (PyCFunction)CbConstructionFinancing_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)CbConstructionFinancing_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)CbConstructionFinancing_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'system costs': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)CbConstructionFinancing_replace, METH_VARARGS, @@ -989,6 +987,8 @@ static PyMethodDef CbConstructionFinancing_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)CbConstructionFinancing_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)CbConstructionFinancing_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/CbEmpiricalHceHeatLoss.c b/modules/CbEmpiricalHceHeatLoss.c index eb6e7b91..c80e7ff8 100644 --- a/modules/CbEmpiricalHceHeatLoss.c +++ b/modules/CbEmpiricalHceHeatLoss.c @@ -617,8 +617,6 @@ CbEmpiricalHceHeatLoss_unassign(CmodObject *self, PyObject *args) static PyMethodDef CbEmpiricalHceHeatLoss_methods[] = { {"execute", (PyCFunction)CbEmpiricalHceHeatLoss_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)CbEmpiricalHceHeatLoss_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)CbEmpiricalHceHeatLoss_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'hce': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)CbEmpiricalHceHeatLoss_replace, METH_VARARGS, @@ -629,6 +627,8 @@ static PyMethodDef CbEmpiricalHceHeatLoss_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)CbEmpiricalHceHeatLoss_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)CbEmpiricalHceHeatLoss_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/CbMsptSystemCosts.c b/modules/CbMsptSystemCosts.c index eebb4919..56ee6f4a 100644 --- a/modules/CbMsptSystemCosts.c +++ b/modules/CbMsptSystemCosts.c @@ -1502,8 +1502,6 @@ CbMsptSystemCosts_unassign(CmodObject *self, PyObject *args) static PyMethodDef CbMsptSystemCosts_methods[] = { {"execute", (PyCFunction)CbMsptSystemCosts_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)CbMsptSystemCosts_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)CbMsptSystemCosts_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'heliostat': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)CbMsptSystemCosts_replace, METH_VARARGS, @@ -1514,6 +1512,8 @@ static PyMethodDef CbMsptSystemCosts_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)CbMsptSystemCosts_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)CbMsptSystemCosts_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Communitysolar.c b/modules/Communitysolar.c index 5d4a2625..c4c4a2db 100644 --- a/modules/Communitysolar.c +++ b/modules/Communitysolar.c @@ -550,7 +550,7 @@ static PyGetSetDef FinancialParameters_getset[] = { PyDoc_STR("*float*: Limit debt fraction [0/1]\n\n**Constraints:**\nBOOLEAN\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"dscr_maximum_debt_fraction", (getter)FinancialParameters_get_dscr_maximum_debt_fraction,(setter)FinancialParameters_set_dscr_maximum_debt_fraction, - PyDoc_STR("*float*: Maximum debt fraction [%]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 100 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Maximum debt fraction [%]\n\n**Constraints:**\nPOSITIVE\n\n**Required:**\nFalse. Automatically set to 100 if not assigned explicitly or loaded from defaults."), NULL}, {"dscr_reserve_months", (getter)FinancialParameters_get_dscr_reserve_months,(setter)FinancialParameters_set_dscr_reserve_months, PyDoc_STR("*float*: Debt service reserve account [months P&I]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 6 if not assigned explicitly or loaded from defaults."), @@ -1176,94 +1176,94 @@ SystemCosts_set_total_installed_cost(VarGroupObject *self, PyObject *value, void static PyGetSetDef SystemCosts_getset[] = { {"add_om_num_types", (getter)SystemCosts_get_add_om_num_types,(setter)SystemCosts_set_add_om_num_types, - PyDoc_STR("*float*: Number of O and M types\n\n**Constraints:**\nINTEGER,MIN=0,MAX=2\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Number of O and M types\n\n**Info:**\nbattery,fuelcell\n\n**Constraints:**\nINTEGER,MIN=0,MAX=2\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"annual_fuel_usage", (getter)SystemCosts_get_annual_fuel_usage,(setter)SystemCosts_set_annual_fuel_usage, - PyDoc_STR("*float*: Fuel usage (yr 1) [kWht]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel usage (yr 1) [kWht]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"annual_fuel_usage_lifetime", (getter)SystemCosts_get_annual_fuel_usage_lifetime,(setter)SystemCosts_set_annual_fuel_usage_lifetime, - PyDoc_STR("*sequence*: Fuel usage (lifetime) [kWht]"), + PyDoc_STR("*sequence*: Fuel usage (lifetime) [kWht]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical"), NULL}, {"om_batt_capacity_cost", (getter)SystemCosts_get_om_batt_capacity_cost,(setter)SystemCosts_set_om_batt_capacity_cost, - PyDoc_STR("*sequence*: Battery capacity-based System Costs amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery capacity-based System Costs amount [$/kWcap]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_fixed_cost", (getter)SystemCosts_get_om_batt_fixed_cost,(setter)SystemCosts_set_om_batt_fixed_cost, - PyDoc_STR("*sequence*: Battery fixed System Costs annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery fixed System Costs annual amount [$/year]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_nameplate", (getter)SystemCosts_get_om_batt_nameplate,(setter)SystemCosts_set_om_batt_nameplate, - PyDoc_STR("*float*: Battery capacity for System Costs values [kW]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Battery capacity for System Costs values [kW]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_replacement_cost", (getter)SystemCosts_get_om_batt_replacement_cost,(setter)SystemCosts_set_om_batt_replacement_cost, - PyDoc_STR("*sequence*: Replacement cost 1 [$/kWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Replacement cost 1 [$/kWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_variable_cost", (getter)SystemCosts_get_om_batt_variable_cost,(setter)SystemCosts_set_om_batt_variable_cost, - PyDoc_STR("*sequence*: Battery production-based System Costs amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery production-based System Costs amount [$/MWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_capacity", (getter)SystemCosts_get_om_capacity,(setter)SystemCosts_set_om_capacity, - PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_capacity_escal", (getter)SystemCosts_get_om_capacity_escal,(setter)SystemCosts_set_om_capacity_escal, PyDoc_STR("*float*: Capacity-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fixed", (getter)SystemCosts_get_om_fixed,(setter)SystemCosts_set_om_fixed, - PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fixed_escal", (getter)SystemCosts_get_om_fixed_escal,(setter)SystemCosts_set_om_fixed_escal, PyDoc_STR("*float*: Fixed O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuel_cost", (getter)SystemCosts_get_om_fuel_cost,(setter)SystemCosts_set_om_fuel_cost, - PyDoc_STR("*sequence*: Fuel cost [$/MMBtu]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cost [$/MMBtu]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuel_cost_escal", (getter)SystemCosts_get_om_fuel_cost_escal,(setter)SystemCosts_set_om_fuel_cost_escal, - PyDoc_STR("*float*: Fuel cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel cost escalation [%/year]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_capacity_cost", (getter)SystemCosts_get_om_fuelcell_capacity_cost,(setter)SystemCosts_set_om_fuelcell_capacity_cost, - PyDoc_STR("*sequence*: Fuel cell capacity-based System Costs amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell capacity-based System Costs amount [$/kWcap]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_fixed_cost", (getter)SystemCosts_get_om_fuelcell_fixed_cost,(setter)SystemCosts_set_om_fuelcell_fixed_cost, - PyDoc_STR("*sequence*: Fuel cell fixed System Costs annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell fixed System Costs annual amount [$/year]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_nameplate", (getter)SystemCosts_get_om_fuelcell_nameplate,(setter)SystemCosts_set_om_fuelcell_nameplate, - PyDoc_STR("*float*: Fuel cell capacity for System Costs values [kW]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel cell capacity for System Costs values [kW]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_replacement_cost", (getter)SystemCosts_get_om_fuelcell_replacement_cost,(setter)SystemCosts_set_om_fuelcell_replacement_cost, - PyDoc_STR("*sequence*: Replacement cost 2 [$/kW]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Replacement cost 2 [$/kW]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_variable_cost", (getter)SystemCosts_get_om_fuelcell_variable_cost,(setter)SystemCosts_set_om_fuelcell_variable_cost, - PyDoc_STR("*sequence*: Fuel cell production-based System Costs amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell production-based System Costs amount [$/MWh]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_cost", (getter)SystemCosts_get_om_opt_fuel_1_cost,(setter)SystemCosts_set_om_opt_fuel_1_cost, - PyDoc_STR("*sequence*: Biomass feedstock cost [$/unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Biomass feedstock cost [$/unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_cost_escal", (getter)SystemCosts_get_om_opt_fuel_1_cost_escal,(setter)SystemCosts_set_om_opt_fuel_1_cost_escal, - PyDoc_STR("*float*: Biomass feedstock cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Biomass feedstock cost escalation [%/year]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_usage", (getter)SystemCosts_get_om_opt_fuel_1_usage,(setter)SystemCosts_set_om_opt_fuel_1_usage, - PyDoc_STR("*float*: Biomass feedstock usage [unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Biomass feedstock usage [unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_cost", (getter)SystemCosts_get_om_opt_fuel_2_cost,(setter)SystemCosts_set_om_opt_fuel_2_cost, - PyDoc_STR("*sequence*: Coal feedstock cost [$/unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Coal feedstock cost [$/unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_cost_escal", (getter)SystemCosts_get_om_opt_fuel_2_cost_escal,(setter)SystemCosts_set_om_opt_fuel_2_cost_escal, - PyDoc_STR("*float*: Coal feedstock cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Coal feedstock cost escalation [%/year]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_usage", (getter)SystemCosts_get_om_opt_fuel_2_usage,(setter)SystemCosts_set_om_opt_fuel_2_usage, - PyDoc_STR("*float*: Coal feedstock usage [unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Coal feedstock usage [unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production", (getter)SystemCosts_get_om_production,(setter)SystemCosts_set_om_production, - PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production1_values", (getter)SystemCosts_get_om_production1_values,(setter)SystemCosts_set_om_production1_values, - PyDoc_STR("*sequence*: Battery production for System Costs values [kWh]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery production for System Costs values [kWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production2_values", (getter)SystemCosts_get_om_production2_values,(setter)SystemCosts_set_om_production2_values, - PyDoc_STR("*sequence*: Fuel cell production for System Costs values [kWh]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell production for System Costs values [kWh]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production_escal", (getter)SystemCosts_get_om_production_escal,(setter)SystemCosts_set_om_production_escal, PyDoc_STR("*float*: Production-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_replacement_cost_escal", (getter)SystemCosts_get_om_replacement_cost_escal,(setter)SystemCosts_set_om_replacement_cost_escal, - PyDoc_STR("*float*: Replacement cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Replacement cost escalation [%/year]\n\n**Info:**\nbattery,fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"system_lifetime_recapitalize", (getter)SystemCosts_get_system_lifetime_recapitalize,(setter)SystemCosts_set_system_lifetime_recapitalize, PyDoc_STR("*sequence*: Recapitalization boolean\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), @@ -4870,7 +4870,7 @@ static PyGetSetDef SystemOutput_getset[] = { PyDoc_STR("*sequence*: Net power to or from the grid [kW]\n\n**Required:**\nTrue"), NULL}, {"gen_purchases", (getter)SystemOutput_get_gen_purchases,(setter)SystemOutput_set_gen_purchases, - PyDoc_STR("*sequence*: Electricity from grid [kW]\n\n**INOUT:** This variable is both an input and an output to the compute module."), + PyDoc_STR("*sequence*: Electricity from grid to system [kW]\n\n**INOUT:** This variable is both an input and an output to the compute module."), NULL}, {"gen_without_battery", (getter)SystemOutput_get_gen_without_battery,(setter)SystemOutput_set_gen_without_battery, PyDoc_STR("*sequence*: Electricity to or from the renewable system, without the battery [kW]"), @@ -12005,8 +12005,6 @@ Communitysolar_unassign(CmodObject *self, PyObject *args) static PyMethodDef Communitysolar_methods[] = { {"execute", (PyCFunction)Communitysolar_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Communitysolar_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Communitysolar_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Financial Parameters': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Communitysolar_replace, METH_VARARGS, @@ -12017,6 +12015,8 @@ static PyMethodDef Communitysolar_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Communitysolar_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Communitysolar_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/CspDsgLfUi.c b/modules/CspDsgLfUi.c index e0a8687f..efc0b2d5 100644 --- a/modules/CspDsgLfUi.c +++ b/modules/CspDsgLfUi.c @@ -428,8 +428,6 @@ CspDsgLfUi_unassign(CmodObject *self, PyObject *args) static PyMethodDef CspDsgLfUi_methods[] = { {"execute", (PyCFunction)CspDsgLfUi_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)CspDsgLfUi_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)CspDsgLfUi_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Common': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)CspDsgLfUi_replace, METH_VARARGS, @@ -440,6 +438,8 @@ static PyMethodDef CspDsgLfUi_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)CspDsgLfUi_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)CspDsgLfUi_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/CspSubcomponent.c b/modules/CspSubcomponent.c index 7297645c..104f478b 100644 --- a/modules/CspSubcomponent.c +++ b/modules/CspSubcomponent.c @@ -1676,8 +1676,6 @@ CspSubcomponent_unassign(CmodObject *self, PyObject *args) static PyMethodDef CspSubcomponent_methods[] = { {"execute", (PyCFunction)CspSubcomponent_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)CspSubcomponent_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)CspSubcomponent_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'system': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)CspSubcomponent_replace, METH_VARARGS, @@ -1688,6 +1686,8 @@ static PyMethodDef CspSubcomponent_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)CspSubcomponent_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)CspSubcomponent_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Equpartflip.c b/modules/Equpartflip.c index 4ceb3110..f3203537 100644 --- a/modules/Equpartflip.c +++ b/modules/Equpartflip.c @@ -1205,94 +1205,94 @@ SystemCosts_set_total_installed_cost(VarGroupObject *self, PyObject *value, void static PyGetSetDef SystemCosts_getset[] = { {"add_om_num_types", (getter)SystemCosts_get_add_om_num_types,(setter)SystemCosts_set_add_om_num_types, - PyDoc_STR("*float*: Number of O and M types\n\n**Constraints:**\nINTEGER,MIN=0,MAX=2\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Number of O and M types\n\n**Info:**\nbattery,fuelcell\n\n**Constraints:**\nINTEGER,MIN=0,MAX=2\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"annual_fuel_usage", (getter)SystemCosts_get_annual_fuel_usage,(setter)SystemCosts_set_annual_fuel_usage, - PyDoc_STR("*float*: Fuel usage (yr 1) [kWht]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel usage (yr 1) [kWht]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"annual_fuel_usage_lifetime", (getter)SystemCosts_get_annual_fuel_usage_lifetime,(setter)SystemCosts_set_annual_fuel_usage_lifetime, - PyDoc_STR("*sequence*: Fuel usage (lifetime) [kWht]"), + PyDoc_STR("*sequence*: Fuel usage (lifetime) [kWht]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical"), NULL}, {"om_batt_capacity_cost", (getter)SystemCosts_get_om_batt_capacity_cost,(setter)SystemCosts_set_om_batt_capacity_cost, - PyDoc_STR("*sequence*: Battery capacity-based System Costs amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery capacity-based System Costs amount [$/kWcap]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_fixed_cost", (getter)SystemCosts_get_om_batt_fixed_cost,(setter)SystemCosts_set_om_batt_fixed_cost, - PyDoc_STR("*sequence*: Battery fixed System Costs annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery fixed System Costs annual amount [$/year]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_nameplate", (getter)SystemCosts_get_om_batt_nameplate,(setter)SystemCosts_set_om_batt_nameplate, - PyDoc_STR("*float*: Battery capacity for System Costs values [kW]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Battery capacity for System Costs values [kW]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_replacement_cost", (getter)SystemCosts_get_om_batt_replacement_cost,(setter)SystemCosts_set_om_batt_replacement_cost, - PyDoc_STR("*sequence*: Replacement cost 1 [$/kWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Replacement cost 1 [$/kWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_variable_cost", (getter)SystemCosts_get_om_batt_variable_cost,(setter)SystemCosts_set_om_batt_variable_cost, - PyDoc_STR("*sequence*: Battery production-based System Costs amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery production-based System Costs amount [$/MWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_capacity", (getter)SystemCosts_get_om_capacity,(setter)SystemCosts_set_om_capacity, - PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_capacity_escal", (getter)SystemCosts_get_om_capacity_escal,(setter)SystemCosts_set_om_capacity_escal, PyDoc_STR("*float*: Capacity-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fixed", (getter)SystemCosts_get_om_fixed,(setter)SystemCosts_set_om_fixed, - PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fixed_escal", (getter)SystemCosts_get_om_fixed_escal,(setter)SystemCosts_set_om_fixed_escal, PyDoc_STR("*float*: Fixed O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuel_cost", (getter)SystemCosts_get_om_fuel_cost,(setter)SystemCosts_set_om_fuel_cost, - PyDoc_STR("*sequence*: Fuel cost [$/MMBtu]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cost [$/MMBtu]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuel_cost_escal", (getter)SystemCosts_get_om_fuel_cost_escal,(setter)SystemCosts_set_om_fuel_cost_escal, - PyDoc_STR("*float*: Fuel cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel cost escalation [%/year]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_capacity_cost", (getter)SystemCosts_get_om_fuelcell_capacity_cost,(setter)SystemCosts_set_om_fuelcell_capacity_cost, - PyDoc_STR("*sequence*: Fuel cell capacity-based System Costs amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell capacity-based System Costs amount [$/kWcap]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_fixed_cost", (getter)SystemCosts_get_om_fuelcell_fixed_cost,(setter)SystemCosts_set_om_fuelcell_fixed_cost, - PyDoc_STR("*sequence*: Fuel cell fixed System Costs annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell fixed System Costs annual amount [$/year]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_nameplate", (getter)SystemCosts_get_om_fuelcell_nameplate,(setter)SystemCosts_set_om_fuelcell_nameplate, - PyDoc_STR("*float*: Fuel cell capacity for System Costs values [kW]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel cell capacity for System Costs values [kW]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_replacement_cost", (getter)SystemCosts_get_om_fuelcell_replacement_cost,(setter)SystemCosts_set_om_fuelcell_replacement_cost, - PyDoc_STR("*sequence*: Replacement cost 2 [$/kW]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Replacement cost 2 [$/kW]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_variable_cost", (getter)SystemCosts_get_om_fuelcell_variable_cost,(setter)SystemCosts_set_om_fuelcell_variable_cost, - PyDoc_STR("*sequence*: Fuel cell production-based System Costs amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell production-based System Costs amount [$/MWh]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_cost", (getter)SystemCosts_get_om_opt_fuel_1_cost,(setter)SystemCosts_set_om_opt_fuel_1_cost, - PyDoc_STR("*sequence*: Biomass feedstock cost [$/unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Biomass feedstock cost [$/unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_cost_escal", (getter)SystemCosts_get_om_opt_fuel_1_cost_escal,(setter)SystemCosts_set_om_opt_fuel_1_cost_escal, - PyDoc_STR("*float*: Biomass feedstock cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Biomass feedstock cost escalation [%/year]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_usage", (getter)SystemCosts_get_om_opt_fuel_1_usage,(setter)SystemCosts_set_om_opt_fuel_1_usage, - PyDoc_STR("*float*: Biomass feedstock usage [unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Biomass feedstock usage [unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_cost", (getter)SystemCosts_get_om_opt_fuel_2_cost,(setter)SystemCosts_set_om_opt_fuel_2_cost, - PyDoc_STR("*sequence*: Coal feedstock cost [$/unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Coal feedstock cost [$/unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_cost_escal", (getter)SystemCosts_get_om_opt_fuel_2_cost_escal,(setter)SystemCosts_set_om_opt_fuel_2_cost_escal, - PyDoc_STR("*float*: Coal feedstock cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Coal feedstock cost escalation [%/year]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_usage", (getter)SystemCosts_get_om_opt_fuel_2_usage,(setter)SystemCosts_set_om_opt_fuel_2_usage, - PyDoc_STR("*float*: Coal feedstock usage [unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Coal feedstock usage [unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production", (getter)SystemCosts_get_om_production,(setter)SystemCosts_set_om_production, - PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production1_values", (getter)SystemCosts_get_om_production1_values,(setter)SystemCosts_set_om_production1_values, - PyDoc_STR("*sequence*: Battery production for System Costs values [kWh]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery production for System Costs values [kWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production2_values", (getter)SystemCosts_get_om_production2_values,(setter)SystemCosts_set_om_production2_values, - PyDoc_STR("*sequence*: Fuel cell production for System Costs values [kWh]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell production for System Costs values [kWh]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production_escal", (getter)SystemCosts_get_om_production_escal,(setter)SystemCosts_set_om_production_escal, PyDoc_STR("*float*: Production-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_replacement_cost_escal", (getter)SystemCosts_get_om_replacement_cost_escal,(setter)SystemCosts_set_om_replacement_cost_escal, - PyDoc_STR("*float*: Replacement cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Replacement cost escalation [%/year]\n\n**Info:**\nbattery,fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"total_installed_cost", (getter)SystemCosts_get_total_installed_cost,(setter)SystemCosts_set_total_installed_cost, PyDoc_STR("*float*: Installed cost [$]\n\n**Required:**\nTrue\n\nThe value of the following variables depends on ``total_installed_cost``:\n\n\t - construction_financing_cost\n"), @@ -4227,7 +4227,7 @@ static PyGetSetDef SystemOutput_getset[] = { PyDoc_STR("*sequence*: Power generated by renewable resource [kW]\n\n**Required:**\nTrue"), NULL}, {"gen_purchases", (getter)SystemOutput_get_gen_purchases,(setter)SystemOutput_set_gen_purchases, - PyDoc_STR("*sequence*: Electricity from grid [kW]\n\n**INOUT:** This variable is both an input and an output to the compute module."), + PyDoc_STR("*sequence*: Electricity from grid to system [kW]\n\n**INOUT:** This variable is both an input and an output to the compute module."), NULL}, {"system_capacity", (getter)SystemOutput_get_system_capacity,(setter)SystemOutput_set_system_capacity, PyDoc_STR("*float*: System nameplate capacity [kW]\n\n**Constraints:**\nMIN=1e-3\n\n**Required:**\nTrue"), @@ -11933,8 +11933,6 @@ Equpartflip_unassign(CmodObject *self, PyObject *args) static PyMethodDef Equpartflip_methods[] = { {"execute", (PyCFunction)Equpartflip_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Equpartflip_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Equpartflip_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Revenue': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Equpartflip_replace, METH_VARARGS, @@ -11945,6 +11943,8 @@ static PyMethodDef Equpartflip_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Equpartflip_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Equpartflip_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/EtesElectricResistance.c b/modules/EtesElectricResistance.c index 7840cea0..1bb481e5 100644 --- a/modules/EtesElectricResistance.c +++ b/modules/EtesElectricResistance.c @@ -4892,8 +4892,6 @@ EtesElectricResistance_unassign(CmodObject *self, PyObject *args) static PyMethodDef EtesElectricResistance_methods[] = { {"execute", (PyCFunction)EtesElectricResistance_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)EtesElectricResistance_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)EtesElectricResistance_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Solar Resource': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)EtesElectricResistance_replace, METH_VARARGS, @@ -4904,6 +4902,8 @@ static PyMethodDef EtesElectricResistance_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)EtesElectricResistance_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)EtesElectricResistance_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/EtesPtes.c b/modules/EtesPtes.c index f24a0a26..a4f2e84c 100644 --- a/modules/EtesPtes.c +++ b/modules/EtesPtes.c @@ -4883,8 +4883,6 @@ EtesPtes_unassign(CmodObject *self, PyObject *args) static PyMethodDef EtesPtes_methods[] = { {"execute", (PyCFunction)EtesPtes_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)EtesPtes_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)EtesPtes_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Solar Resource': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)EtesPtes_replace, METH_VARARGS, @@ -4895,6 +4893,8 @@ static PyMethodDef EtesPtes_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)EtesPtes_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)EtesPtes_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/FresnelPhysical.c b/modules/FresnelPhysical.c index d8390a5b..30c34e75 100644 --- a/modules/FresnelPhysical.c +++ b/modules/FresnelPhysical.c @@ -7394,8 +7394,6 @@ FresnelPhysical_unassign(CmodObject *self, PyObject *args) static PyMethodDef FresnelPhysical_methods[] = { {"execute", (PyCFunction)FresnelPhysical_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)FresnelPhysical_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)FresnelPhysical_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'System Control': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)FresnelPhysical_replace, METH_VARARGS, @@ -7406,6 +7404,8 @@ static PyMethodDef FresnelPhysical_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)FresnelPhysical_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)FresnelPhysical_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/FresnelPhysicalIph.c b/modules/FresnelPhysicalIph.c index a7c5bf00..76db2720 100644 --- a/modules/FresnelPhysicalIph.c +++ b/modules/FresnelPhysicalIph.c @@ -6485,8 +6485,6 @@ FresnelPhysicalIph_unassign(CmodObject *self, PyObject *args) static PyMethodDef FresnelPhysicalIph_methods[] = { {"execute", (PyCFunction)FresnelPhysicalIph_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)FresnelPhysicalIph_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)FresnelPhysicalIph_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'System Control': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)FresnelPhysicalIph_replace, METH_VARARGS, @@ -6497,6 +6495,8 @@ static PyMethodDef FresnelPhysicalIph_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)FresnelPhysicalIph_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)FresnelPhysicalIph_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Fuelcell.c b/modules/Fuelcell.c index 7bf998e3..8d42b3f0 100644 --- a/modules/Fuelcell.c +++ b/modules/Fuelcell.c @@ -1079,6 +1079,398 @@ static PyTypeObject FuelCell_Type = { }; +/* + * HybridCosts Group + */ + +static PyTypeObject HybridCosts_Type; + +static PyObject * +HybridCosts_new(SAM_Fuelcell data_ptr) +{ + PyObject* new_obj = HybridCosts_Type.tp_alloc(&HybridCosts_Type,0); + + VarGroupObject* HybridCosts_obj = (VarGroupObject*)new_obj; + + HybridCosts_obj->data_ptr = (SAM_table)data_ptr; + + return new_obj; +} + +/* HybridCosts methods */ + +static PyObject * +HybridCosts_assign(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + + if (!PySAM_assign_from_dict(self->data_ptr, dict, "Fuelcell", "HybridCosts")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +HybridCosts_replace(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + PyTypeObject* tp = &HybridCosts_Type; + + if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "Fuelcell", "HybridCosts")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +HybridCosts_export(VarGroupObject *self, PyObject *args) +{ + PyTypeObject* tp = &HybridCosts_Type; + PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); + return dict; +} + +static PyMethodDef HybridCosts_methods[] = { + {"assign", (PyCFunction)HybridCosts_assign, METH_VARARGS, + PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``HybridCosts_vals = { var: val, ...}``")}, + {"replace", (PyCFunction)HybridCosts_replace, METH_VARARGS, + PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``HybridCosts_vals = { var: val, ...}``")}, + {"export", (PyCFunction)HybridCosts_export, METH_VARARGS, + PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, + {NULL, NULL} /* sentinel */ +}; + +static PyObject * +HybridCosts_get_add_om_num_types(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Fuelcell_HybridCosts_add_om_num_types_nget, self->data_ptr); +} + +static int +HybridCosts_set_add_om_num_types(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Fuelcell_HybridCosts_add_om_num_types_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_degradation(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Fuelcell_HybridCosts_degradation_aget, self->data_ptr); +} + +static int +HybridCosts_set_degradation(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Fuelcell_HybridCosts_degradation_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_land_area(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Fuelcell_HybridCosts_land_area_nget, self->data_ptr); +} + +static int +HybridCosts_set_land_area(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Fuelcell_HybridCosts_land_area_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_capacity_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Fuelcell_HybridCosts_om_capacity_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_capacity_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Fuelcell_HybridCosts_om_capacity_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fixed_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Fuelcell_HybridCosts_om_fixed_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_fixed_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Fuelcell_HybridCosts_om_fixed_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fuel_cost(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Fuelcell_HybridCosts_om_fuel_cost_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_fuel_cost(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Fuelcell_HybridCosts_om_fuel_cost_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fuel_cost_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Fuelcell_HybridCosts_om_fuel_cost_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_fuel_cost_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Fuelcell_HybridCosts_om_fuel_cost_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fuelcell_capacity_cost(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Fuelcell_HybridCosts_om_fuelcell_capacity_cost_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_fuelcell_capacity_cost(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Fuelcell_HybridCosts_om_fuelcell_capacity_cost_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fuelcell_fixed_cost(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Fuelcell_HybridCosts_om_fuelcell_fixed_cost_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_fuelcell_fixed_cost(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Fuelcell_HybridCosts_om_fuelcell_fixed_cost_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fuelcell_nameplate(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Fuelcell_HybridCosts_om_fuelcell_nameplate_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_fuelcell_nameplate(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Fuelcell_HybridCosts_om_fuelcell_nameplate_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fuelcell_replacement_cost(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Fuelcell_HybridCosts_om_fuelcell_replacement_cost_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_fuelcell_replacement_cost(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Fuelcell_HybridCosts_om_fuelcell_replacement_cost_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fuelcell_variable_cost(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Fuelcell_HybridCosts_om_fuelcell_variable_cost_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_fuelcell_variable_cost(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Fuelcell_HybridCosts_om_fuelcell_variable_cost_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_land_lease(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Fuelcell_HybridCosts_om_land_lease_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_land_lease(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Fuelcell_HybridCosts_om_land_lease_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_land_lease_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Fuelcell_HybridCosts_om_land_lease_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_land_lease_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Fuelcell_HybridCosts_om_land_lease_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_production2_values(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Fuelcell_HybridCosts_om_production2_values_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_production2_values(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Fuelcell_HybridCosts_om_production2_values_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_production_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Fuelcell_HybridCosts_om_production_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_production_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Fuelcell_HybridCosts_om_production_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_replacement_cost_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Fuelcell_HybridCosts_om_replacement_cost_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_replacement_cost_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Fuelcell_HybridCosts_om_replacement_cost_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_total_installed_cost(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Fuelcell_HybridCosts_total_installed_cost_nget, self->data_ptr); +} + +static int +HybridCosts_set_total_installed_cost(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Fuelcell_HybridCosts_total_installed_cost_nset, self->data_ptr); +} + +static PyGetSetDef HybridCosts_getset[] = { +{"add_om_num_types", (getter)HybridCosts_get_add_om_num_types,(setter)HybridCosts_set_add_om_num_types, + PyDoc_STR("*float*: Number of O and M types\n\n**Info:**\nbattery,fuelcell\n\n**Constraints:**\nINTEGER,MIN=0,MAX=2\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"degradation", (getter)HybridCosts_get_degradation,(setter)HybridCosts_set_degradation, + PyDoc_STR("*sequence*: Annual AC degradation [%]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"land_area", (getter)HybridCosts_get_land_area,(setter)HybridCosts_set_land_area, + PyDoc_STR("*float*: Total land area [acres]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_capacity_escal", (getter)HybridCosts_get_om_capacity_escal,(setter)HybridCosts_set_om_capacity_escal, + PyDoc_STR("*float*: Capacity-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fixed_escal", (getter)HybridCosts_get_om_fixed_escal,(setter)HybridCosts_set_om_fixed_escal, + PyDoc_STR("*float*: Fixed O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fuel_cost", (getter)HybridCosts_get_om_fuel_cost,(setter)HybridCosts_set_om_fuel_cost, + PyDoc_STR("*sequence*: Fuel cost [$/MMBtu]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fuel_cost_escal", (getter)HybridCosts_get_om_fuel_cost_escal,(setter)HybridCosts_set_om_fuel_cost_escal, + PyDoc_STR("*float*: Fuel cost escalation [%/year]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fuelcell_capacity_cost", (getter)HybridCosts_get_om_fuelcell_capacity_cost,(setter)HybridCosts_set_om_fuelcell_capacity_cost, + PyDoc_STR("*sequence*: Fuel cell capacity-based System Costs amount [$/kWcap]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fuelcell_fixed_cost", (getter)HybridCosts_get_om_fuelcell_fixed_cost,(setter)HybridCosts_set_om_fuelcell_fixed_cost, + PyDoc_STR("*sequence*: Fuel cell fixed System Costs annual amount [$/year]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fuelcell_nameplate", (getter)HybridCosts_get_om_fuelcell_nameplate,(setter)HybridCosts_set_om_fuelcell_nameplate, + PyDoc_STR("*float*: Fuel cell capacity for System Costs values [kW]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fuelcell_replacement_cost", (getter)HybridCosts_get_om_fuelcell_replacement_cost,(setter)HybridCosts_set_om_fuelcell_replacement_cost, + PyDoc_STR("*sequence*: Replacement cost 2 [$/kW]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fuelcell_variable_cost", (getter)HybridCosts_get_om_fuelcell_variable_cost,(setter)HybridCosts_set_om_fuelcell_variable_cost, + PyDoc_STR("*sequence*: Fuel cell production-based System Costs amount [$/MWh]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_land_lease", (getter)HybridCosts_get_om_land_lease,(setter)HybridCosts_set_om_land_lease, + PyDoc_STR("*sequence*: Land lease cost [$/acre]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_land_lease_escal", (getter)HybridCosts_get_om_land_lease_escal,(setter)HybridCosts_set_om_land_lease_escal, + PyDoc_STR("*float*: Land lease cost escalation [%/yr]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_production2_values", (getter)HybridCosts_get_om_production2_values,(setter)HybridCosts_set_om_production2_values, + PyDoc_STR("*sequence*: Fuel cell production for System Costs values [kWh]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_production_escal", (getter)HybridCosts_get_om_production_escal,(setter)HybridCosts_set_om_production_escal, + PyDoc_STR("*float*: Production-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_replacement_cost_escal", (getter)HybridCosts_get_om_replacement_cost_escal,(setter)HybridCosts_set_om_replacement_cost_escal, + PyDoc_STR("*float*: Replacement cost escalation [%/year]\n\n**Info:**\nbattery,fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"total_installed_cost", (getter)HybridCosts_get_total_installed_cost,(setter)HybridCosts_set_total_installed_cost, + PyDoc_STR("*float*: Total installed cost [$]\n\n**Required:**\nTrue\n\nThe value of ``total_installed_cost`` depends on the following variables:\n\n\t - fuelcell_number_of_units\n\t - fuelcell_unit_max_power\n"), + NULL}, + {NULL} /* Sentinel */ +}; + +static PyTypeObject HybridCosts_Type = { + /* The ob_type field must be initialized in the module init function + * to be portable to Windows without using C++. */ + PyVarObject_HEAD_INIT(NULL, 0) + "Fuelcell.HybridCosts", /*tp_name*/ + sizeof(VarGroupObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + /* methods */ + 0, /*tp_dealloc*/ + 0, /*tp_print*/ + (getattrfunc)0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_reserved*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistofnset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + HybridCosts_methods, /*tp_methods*/ + 0, /*tp_members*/ + HybridCosts_getset, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictofnset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + 0, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ +}; + + /* * Outputs Group */ @@ -1198,6 +1590,12 @@ Outputs_get_cf_fuelcell_replacement_cost_schedule(VarGroupObject *self, void *cl return PySAM_array_getter(SAM_Fuelcell_Outputs_cf_fuelcell_replacement_cost_schedule_aget, self->data_ptr); } +static PyObject * +Outputs_get_cf_land_lease_expense(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Fuelcell_Outputs_cf_land_lease_expense_aget, self->data_ptr); +} + static PyObject * Outputs_get_cf_om_capacity(VarGroupObject *self, void *closure) { @@ -1331,6 +1729,9 @@ static PyGetSetDef Outputs_getset[] = { {"cf_fuelcell_replacement_cost_schedule", (getter)Outputs_get_cf_fuelcell_replacement_cost_schedule,(setter)0, PyDoc_STR("*sequence*: replacement O&M costs [$]"), NULL}, +{"cf_land_lease_expense", (getter)Outputs_get_cf_land_lease_expense,(setter)0, + PyDoc_STR("*sequence*: Land lease expense [$]"), + NULL}, {"cf_om_capacity", (getter)Outputs_get_cf_om_capacity,(setter)0, PyDoc_STR("*sequence*: capacity O&M costs [$]"), NULL}, @@ -1464,6 +1865,10 @@ newFuelcellObject(void* data_ptr) PyDict_SetItemString(attr_dict, "FuelCell", FuelCell_obj); Py_DECREF(FuelCell_obj); + PyObject* HybridCosts_obj = HybridCosts_new(self->data_ptr); + PyDict_SetItemString(attr_dict, "HybridCosts", HybridCosts_obj); + Py_DECREF(HybridCosts_obj); + PyObject* Outputs_obj = Outputs_new(self->data_ptr); PyDict_SetItemString(attr_dict, "Outputs", Outputs_obj); Py_DECREF(Outputs_obj); @@ -1562,8 +1967,6 @@ Fuelcell_unassign(CmodObject *self, PyObject *args) static PyMethodDef Fuelcell_methods[] = { {"execute", (PyCFunction)Fuelcell_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Fuelcell_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Fuelcell_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Lifetime': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Fuelcell_replace, METH_VARARGS, @@ -1574,6 +1977,8 @@ static PyMethodDef Fuelcell_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Fuelcell_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Fuelcell_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; @@ -1783,6 +2188,13 @@ FuelcellModule_exec(PyObject *m) (PyObject*)&FuelCell_Type); Py_DECREF(&FuelCell_Type); + /// Add the HybridCosts type object to Fuelcell_Type + if (PyType_Ready(&HybridCosts_Type) < 0) { goto fail; } + PyDict_SetItemString(Fuelcell_Type.tp_dict, + "HybridCosts", + (PyObject*)&HybridCosts_Type); + Py_DECREF(&HybridCosts_Type); + /// Add the Outputs type object to Fuelcell_Type if (PyType_Ready(&Outputs_Type) < 0) { goto fail; } PyDict_SetItemString(Fuelcell_Type.tp_dict, diff --git a/modules/GenericSystem.c b/modules/GenericSystem.c index 2d5b0b64..d586c3fc 100644 --- a/modules/GenericSystem.c +++ b/modules/GenericSystem.c @@ -400,6 +400,338 @@ static PyTypeObject Lifetime_Type = { }; +/* + * HybridCosts Group + */ + +static PyTypeObject HybridCosts_Type; + +static PyObject * +HybridCosts_new(SAM_GenericSystem data_ptr) +{ + PyObject* new_obj = HybridCosts_Type.tp_alloc(&HybridCosts_Type,0); + + VarGroupObject* HybridCosts_obj = (VarGroupObject*)new_obj; + + HybridCosts_obj->data_ptr = (SAM_table)data_ptr; + + return new_obj; +} + +/* HybridCosts methods */ + +static PyObject * +HybridCosts_assign(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + + if (!PySAM_assign_from_dict(self->data_ptr, dict, "GenericSystem", "HybridCosts")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +HybridCosts_replace(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + PyTypeObject* tp = &HybridCosts_Type; + + if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "GenericSystem", "HybridCosts")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +HybridCosts_export(VarGroupObject *self, PyObject *args) +{ + PyTypeObject* tp = &HybridCosts_Type; + PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); + return dict; +} + +static PyMethodDef HybridCosts_methods[] = { + {"assign", (PyCFunction)HybridCosts_assign, METH_VARARGS, + PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``HybridCosts_vals = { var: val, ...}``")}, + {"replace", (PyCFunction)HybridCosts_replace, METH_VARARGS, + PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``HybridCosts_vals = { var: val, ...}``")}, + {"export", (PyCFunction)HybridCosts_export, METH_VARARGS, + PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, + {NULL, NULL} /* sentinel */ +}; + +static PyObject * +HybridCosts_get_annual_fuel_usage_lifetime(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_GenericSystem_HybridCosts_annual_fuel_usage_lifetime_aget, self->data_ptr); +} + +static int +HybridCosts_set_annual_fuel_usage_lifetime(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_GenericSystem_HybridCosts_annual_fuel_usage_lifetime_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_degradation(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_GenericSystem_HybridCosts_degradation_aget, self->data_ptr); +} + +static int +HybridCosts_set_degradation(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_GenericSystem_HybridCosts_degradation_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_land_area(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_GenericSystem_HybridCosts_land_area_nget, self->data_ptr); +} + +static int +HybridCosts_set_land_area(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_GenericSystem_HybridCosts_land_area_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_capacity(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_GenericSystem_HybridCosts_om_capacity_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_capacity(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_GenericSystem_HybridCosts_om_capacity_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_capacity_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_GenericSystem_HybridCosts_om_capacity_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_capacity_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_GenericSystem_HybridCosts_om_capacity_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fixed(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_GenericSystem_HybridCosts_om_fixed_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_fixed(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_GenericSystem_HybridCosts_om_fixed_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fixed_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_GenericSystem_HybridCosts_om_fixed_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_fixed_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_GenericSystem_HybridCosts_om_fixed_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fuel_cost(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_GenericSystem_HybridCosts_om_fuel_cost_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_fuel_cost(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_GenericSystem_HybridCosts_om_fuel_cost_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fuel_cost_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_GenericSystem_HybridCosts_om_fuel_cost_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_fuel_cost_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_GenericSystem_HybridCosts_om_fuel_cost_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_land_lease(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_GenericSystem_HybridCosts_om_land_lease_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_land_lease(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_GenericSystem_HybridCosts_om_land_lease_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_land_lease_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_GenericSystem_HybridCosts_om_land_lease_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_land_lease_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_GenericSystem_HybridCosts_om_land_lease_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_production(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_GenericSystem_HybridCosts_om_production_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_production(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_GenericSystem_HybridCosts_om_production_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_production_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_GenericSystem_HybridCosts_om_production_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_production_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_GenericSystem_HybridCosts_om_production_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_total_installed_cost(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_GenericSystem_HybridCosts_total_installed_cost_nget, self->data_ptr); +} + +static int +HybridCosts_set_total_installed_cost(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_GenericSystem_HybridCosts_total_installed_cost_nset, self->data_ptr); +} + +static PyGetSetDef HybridCosts_getset[] = { +{"annual_fuel_usage_lifetime", (getter)HybridCosts_get_annual_fuel_usage_lifetime,(setter)HybridCosts_set_annual_fuel_usage_lifetime, + PyDoc_STR("*sequence*: Fuel usage (lifetime) [kWht]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical"), + NULL}, +{"degradation", (getter)HybridCosts_get_degradation,(setter)HybridCosts_set_degradation, + PyDoc_STR("*sequence*: Annual AC degradation [%]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"land_area", (getter)HybridCosts_get_land_area,(setter)HybridCosts_set_land_area, + PyDoc_STR("*float*: Total land area [acres]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults.\n\nThe value of ``land_area`` depends on the following variables:\n\n\t - system_capacity\n"), + NULL}, +{"om_capacity", (getter)HybridCosts_get_om_capacity,(setter)HybridCosts_set_om_capacity, + PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_capacity_escal", (getter)HybridCosts_get_om_capacity_escal,(setter)HybridCosts_set_om_capacity_escal, + PyDoc_STR("*float*: Capacity-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fixed", (getter)HybridCosts_get_om_fixed,(setter)HybridCosts_set_om_fixed, + PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fixed_escal", (getter)HybridCosts_get_om_fixed_escal,(setter)HybridCosts_set_om_fixed_escal, + PyDoc_STR("*float*: Fixed O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fuel_cost", (getter)HybridCosts_get_om_fuel_cost,(setter)HybridCosts_set_om_fuel_cost, + PyDoc_STR("*sequence*: Fuel cost [$/MMBtu]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fuel_cost_escal", (getter)HybridCosts_get_om_fuel_cost_escal,(setter)HybridCosts_set_om_fuel_cost_escal, + PyDoc_STR("*float*: Fuel cost escalation [%/year]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_land_lease", (getter)HybridCosts_get_om_land_lease,(setter)HybridCosts_set_om_land_lease, + PyDoc_STR("*sequence*: Land lease cost [$/acre]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_land_lease_escal", (getter)HybridCosts_get_om_land_lease_escal,(setter)HybridCosts_set_om_land_lease_escal, + PyDoc_STR("*float*: Land lease cost escalation [%/yr]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_production", (getter)HybridCosts_get_om_production,(setter)HybridCosts_set_om_production, + PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_production_escal", (getter)HybridCosts_get_om_production_escal,(setter)HybridCosts_set_om_production_escal, + PyDoc_STR("*float*: Production-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"total_installed_cost", (getter)HybridCosts_get_total_installed_cost,(setter)HybridCosts_set_total_installed_cost, + PyDoc_STR("*float*: Total installed cost [$]\n\n**Required:**\nTrue\n\nThe value of ``total_installed_cost`` depends on the following variables:\n\n\t - system_capacity\n"), + NULL}, + {NULL} /* Sentinel */ +}; + +static PyTypeObject HybridCosts_Type = { + /* The ob_type field must be initialized in the module init function + * to be portable to Windows without using C++. */ + PyVarObject_HEAD_INIT(NULL, 0) + "GenericSystem.HybridCosts", /*tp_name*/ + sizeof(VarGroupObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + /* methods */ + 0, /*tp_dealloc*/ + 0, /*tp_print*/ + (getattrfunc)0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_reserved*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistofnset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + HybridCosts_methods, /*tp_methods*/ + 0, /*tp_members*/ + HybridCosts_getset, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictofnset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + 0, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ +}; + + /* * Outputs Group */ @@ -513,6 +845,12 @@ Outputs_get_cf_fuelcell_replacement_cost_schedule(VarGroupObject *self, void *cl return PySAM_array_getter(SAM_GenericSystem_Outputs_cf_fuelcell_replacement_cost_schedule_aget, self->data_ptr); } +static PyObject * +Outputs_get_cf_land_lease_expense(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_GenericSystem_Outputs_cf_land_lease_expense_aget, self->data_ptr); +} + static PyObject * Outputs_get_cf_om_capacity(VarGroupObject *self, void *closure) { @@ -595,6 +933,9 @@ static PyGetSetDef Outputs_getset[] = { {"cf_fuelcell_replacement_cost_schedule", (getter)Outputs_get_cf_fuelcell_replacement_cost_schedule,(setter)0, PyDoc_STR("*sequence*: replacement O&M costs [$]"), NULL}, +{"cf_land_lease_expense", (getter)Outputs_get_cf_land_lease_expense,(setter)0, + PyDoc_STR("*sequence*: Land lease expense [$]"), + NULL}, {"cf_om_capacity", (getter)Outputs_get_cf_om_capacity,(setter)0, PyDoc_STR("*sequence*: capacity O&M costs [$]"), NULL}, @@ -711,6 +1052,10 @@ newGenericSystemObject(void* data_ptr) PyDict_SetItemString(attr_dict, "AdjustmentFactors", Adjust_obj); Py_DECREF(Adjust_obj); + PyObject* HybridCosts_obj = HybridCosts_new(self->data_ptr); + PyDict_SetItemString(attr_dict, "HybridCosts", HybridCosts_obj); + Py_DECREF(HybridCosts_obj); + PyObject* Outputs_obj = Outputs_new(self->data_ptr); PyDict_SetItemString(attr_dict, "Outputs", Outputs_obj); Py_DECREF(Outputs_obj); @@ -809,8 +1154,6 @@ GenericSystem_unassign(CmodObject *self, PyObject *args) static PyMethodDef GenericSystem_methods[] = { {"execute", (PyCFunction)GenericSystem_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)GenericSystem_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)GenericSystem_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Plant': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)GenericSystem_replace, METH_VARARGS, @@ -821,6 +1164,8 @@ static PyMethodDef GenericSystem_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)GenericSystem_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)GenericSystem_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; @@ -1016,6 +1361,13 @@ GenericSystemModule_exec(PyObject *m) (PyObject*)&Lifetime_Type); Py_DECREF(&Lifetime_Type); + /// Add the HybridCosts type object to GenericSystem_Type + if (PyType_Ready(&HybridCosts_Type) < 0) { goto fail; } + PyDict_SetItemString(GenericSystem_Type.tp_dict, + "HybridCosts", + (PyObject*)&HybridCosts_Type); + Py_DECREF(&HybridCosts_Type); + /// Add the Outputs type object to GenericSystem_Type if (PyType_Ready(&Outputs_Type) < 0) { goto fail; } PyDict_SetItemString(GenericSystem_Type.tp_dict, diff --git a/modules/Geothermal.c b/modules/Geothermal.c index 7f282c4a..e1678926 100644 --- a/modules/Geothermal.c +++ b/modules/Geothermal.c @@ -2168,8 +2168,6 @@ Geothermal_unassign(CmodObject *self, PyObject *args) static PyMethodDef Geothermal_methods[] = { {"execute", (PyCFunction)Geothermal_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Geothermal_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Geothermal_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'GeoHourly': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Geothermal_replace, METH_VARARGS, @@ -2180,6 +2178,8 @@ static PyMethodDef Geothermal_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Geothermal_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Geothermal_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/GeothermalCosts.c b/modules/GeothermalCosts.c index 3d237e31..8991e8da 100644 --- a/modules/GeothermalCosts.c +++ b/modules/GeothermalCosts.c @@ -839,8 +839,6 @@ GeothermalCosts_unassign(CmodObject *self, PyObject *args) static PyMethodDef GeothermalCosts_methods[] = { {"execute", (PyCFunction)GeothermalCosts_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)GeothermalCosts_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)GeothermalCosts_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'GeoHourly': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)GeothermalCosts_replace, METH_VARARGS, @@ -851,6 +849,8 @@ static PyMethodDef GeothermalCosts_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)GeothermalCosts_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)GeothermalCosts_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Grid.c b/modules/Grid.c index dae3f329..2aec731e 100644 --- a/modules/Grid.c +++ b/modules/Grid.c @@ -811,6 +811,293 @@ static PyTypeObject GridLimits_Type = { }; +/* + * HybridCosts Group + */ + +static PyTypeObject HybridCosts_Type; + +static PyObject * +HybridCosts_new(SAM_Grid data_ptr) +{ + PyObject* new_obj = HybridCosts_Type.tp_alloc(&HybridCosts_Type,0); + + VarGroupObject* HybridCosts_obj = (VarGroupObject*)new_obj; + + HybridCosts_obj->data_ptr = (SAM_table)data_ptr; + + return new_obj; +} + +/* HybridCosts methods */ + +static PyObject * +HybridCosts_assign(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + + if (!PySAM_assign_from_dict(self->data_ptr, dict, "Grid", "HybridCosts")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +HybridCosts_replace(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + PyTypeObject* tp = &HybridCosts_Type; + + if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "Grid", "HybridCosts")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +HybridCosts_export(VarGroupObject *self, PyObject *args) +{ + PyTypeObject* tp = &HybridCosts_Type; + PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); + return dict; +} + +static PyMethodDef HybridCosts_methods[] = { + {"assign", (PyCFunction)HybridCosts_assign, METH_VARARGS, + PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``HybridCosts_vals = { var: val, ...}``")}, + {"replace", (PyCFunction)HybridCosts_replace, METH_VARARGS, + PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``HybridCosts_vals = { var: val, ...}``")}, + {"export", (PyCFunction)HybridCosts_export, METH_VARARGS, + PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, + {NULL, NULL} /* sentinel */ +}; + +static PyObject * +HybridCosts_get_degradation(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Grid_HybridCosts_degradation_aget, self->data_ptr); +} + +static int +HybridCosts_set_degradation(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Grid_HybridCosts_degradation_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_land_area(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Grid_HybridCosts_land_area_nget, self->data_ptr); +} + +static int +HybridCosts_set_land_area(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Grid_HybridCosts_land_area_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_capacity(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Grid_HybridCosts_om_capacity_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_capacity(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Grid_HybridCosts_om_capacity_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_capacity_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Grid_HybridCosts_om_capacity_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_capacity_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Grid_HybridCosts_om_capacity_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fixed(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Grid_HybridCosts_om_fixed_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_fixed(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Grid_HybridCosts_om_fixed_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fixed_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Grid_HybridCosts_om_fixed_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_fixed_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Grid_HybridCosts_om_fixed_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_land_lease(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Grid_HybridCosts_om_land_lease_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_land_lease(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Grid_HybridCosts_om_land_lease_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_land_lease_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Grid_HybridCosts_om_land_lease_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_land_lease_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Grid_HybridCosts_om_land_lease_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_production(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Grid_HybridCosts_om_production_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_production(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Grid_HybridCosts_om_production_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_production_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Grid_HybridCosts_om_production_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_production_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Grid_HybridCosts_om_production_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_total_installed_cost(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Grid_HybridCosts_total_installed_cost_nget, self->data_ptr); +} + +static int +HybridCosts_set_total_installed_cost(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Grid_HybridCosts_total_installed_cost_nset, self->data_ptr); +} + +static PyGetSetDef HybridCosts_getset[] = { +{"degradation", (getter)HybridCosts_get_degradation,(setter)HybridCosts_set_degradation, + PyDoc_STR("*sequence*: Annual AC degradation [%]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"land_area", (getter)HybridCosts_get_land_area,(setter)HybridCosts_set_land_area, + PyDoc_STR("*float*: Total land area [acres]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_capacity", (getter)HybridCosts_get_om_capacity,(setter)HybridCosts_set_om_capacity, + PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_capacity_escal", (getter)HybridCosts_get_om_capacity_escal,(setter)HybridCosts_set_om_capacity_escal, + PyDoc_STR("*float*: Capacity-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fixed", (getter)HybridCosts_get_om_fixed,(setter)HybridCosts_set_om_fixed, + PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fixed_escal", (getter)HybridCosts_get_om_fixed_escal,(setter)HybridCosts_set_om_fixed_escal, + PyDoc_STR("*float*: Fixed O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_land_lease", (getter)HybridCosts_get_om_land_lease,(setter)HybridCosts_set_om_land_lease, + PyDoc_STR("*sequence*: Land lease cost [$/acre]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_land_lease_escal", (getter)HybridCosts_get_om_land_lease_escal,(setter)HybridCosts_set_om_land_lease_escal, + PyDoc_STR("*float*: Land lease cost escalation [%/yr]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_production", (getter)HybridCosts_get_om_production,(setter)HybridCosts_set_om_production, + PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_production_escal", (getter)HybridCosts_get_om_production_escal,(setter)HybridCosts_set_om_production_escal, + PyDoc_STR("*float*: Production-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"total_installed_cost", (getter)HybridCosts_get_total_installed_cost,(setter)HybridCosts_set_total_installed_cost, + PyDoc_STR("*float*: Total installed cost [$]\n\n**Required:**\nTrue"), + NULL}, + {NULL} /* Sentinel */ +}; + +static PyTypeObject HybridCosts_Type = { + /* The ob_type field must be initialized in the module init function + * to be portable to Windows without using C++. */ + PyVarObject_HEAD_INIT(NULL, 0) + "Grid.HybridCosts", /*tp_name*/ + sizeof(VarGroupObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + /* methods */ + 0, /*tp_dealloc*/ + 0, /*tp_print*/ + (getattrfunc)0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_reserved*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistofnset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + HybridCosts_methods, /*tp_methods*/ + 0, /*tp_members*/ + HybridCosts_getset, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictofnset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + 0, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ +}; + + /* * Outputs Group */ @@ -936,6 +1223,12 @@ Outputs_get_capacity_factor_interconnect_ac(VarGroupObject *self, void *closure) return PySAM_double_getter(SAM_Grid_Outputs_capacity_factor_interconnect_ac_nget, self->data_ptr); } +static PyObject * +Outputs_get_cf_land_lease_expense(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Grid_Outputs_cf_land_lease_expense_aget, self->data_ptr); +} + static PyObject * Outputs_get_full_load(VarGroupObject *self, void *closure) { @@ -988,6 +1281,9 @@ static PyGetSetDef Outputs_getset[] = { {"capacity_factor_interconnect_ac", (getter)Outputs_get_capacity_factor_interconnect_ac,(setter)0, PyDoc_STR("*float*: Capacity factor based on AC interconnection limit [%]"), NULL}, +{"cf_land_lease_expense", (getter)Outputs_get_cf_land_lease_expense,(setter)0, + PyDoc_STR("*sequence*: Land lease expense [$]"), + NULL}, {"full_load", (getter)Outputs_get_full_load,(setter)0, PyDoc_STR("*sequence*: Electricity load prior to grid outage (year 1) [kW]"), NULL}, @@ -1083,6 +1379,10 @@ newGridObject(void* data_ptr) PyDict_SetItemString(attr_dict, "GridLimits", GridLimits_obj); Py_DECREF(GridLimits_obj); + PyObject* HybridCosts_obj = HybridCosts_new(self->data_ptr); + PyDict_SetItemString(attr_dict, "HybridCosts", HybridCosts_obj); + Py_DECREF(HybridCosts_obj); + PyObject* Outputs_obj = Outputs_new(self->data_ptr); PyDict_SetItemString(attr_dict, "Outputs", Outputs_obj); Py_DECREF(Outputs_obj); @@ -1181,8 +1481,6 @@ Grid_unassign(CmodObject *self, PyObject *args) static PyMethodDef Grid_methods[] = { {"execute", (PyCFunction)Grid_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Grid_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Grid_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Lifetime': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Grid_replace, METH_VARARGS, @@ -1193,6 +1491,8 @@ static PyMethodDef Grid_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Grid_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Grid_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; @@ -1409,6 +1709,13 @@ GridModule_exec(PyObject *m) (PyObject*)&GridLimits_Type); Py_DECREF(&GridLimits_Type); + /// Add the HybridCosts type object to Grid_Type + if (PyType_Ready(&HybridCosts_Type) < 0) { goto fail; } + PyDict_SetItemString(Grid_Type.tp_dict, + "HybridCosts", + (PyObject*)&HybridCosts_Type); + Py_DECREF(&HybridCosts_Type); + /// Add the Outputs type object to Grid_Type if (PyType_Ready(&Outputs_Type) < 0) { goto fail; } PyDict_SetItemString(Grid_Type.tp_dict, diff --git a/modules/Hcpv.c b/modules/Hcpv.c index fb7c5e10..b1c04be7 100644 --- a/modules/Hcpv.c +++ b/modules/Hcpv.c @@ -1931,8 +1931,6 @@ Hcpv_unassign(CmodObject *self, PyObject *args) static PyMethodDef Hcpv_methods[] = { {"execute", (PyCFunction)Hcpv_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Hcpv_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Hcpv_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'SolarResourceData': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Hcpv_replace, METH_VARARGS, @@ -1943,6 +1941,8 @@ static PyMethodDef Hcpv_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Hcpv_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Hcpv_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/HostDeveloper.c b/modules/HostDeveloper.c index cad1fb56..e7b0278f 100644 --- a/modules/HostDeveloper.c +++ b/modules/HostDeveloper.c @@ -855,7 +855,7 @@ static PyGetSetDef FinancialParameters_getset[] = { PyDoc_STR("*float*: Limit debt fraction [0/1]\n\n**Constraints:**\nBOOLEAN\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"dscr_maximum_debt_fraction", (getter)FinancialParameters_get_dscr_maximum_debt_fraction,(setter)FinancialParameters_set_dscr_maximum_debt_fraction, - PyDoc_STR("*float*: Maximum debt fraction [%]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 100 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Maximum debt fraction [%]\n\n**Constraints:**\nPOSITIVE\n\n**Required:**\nFalse. Automatically set to 100 if not assigned explicitly or loaded from defaults."), NULL}, {"dscr_reserve_months", (getter)FinancialParameters_get_dscr_reserve_months,(setter)FinancialParameters_set_dscr_reserve_months, PyDoc_STR("*float*: Debt service reserve account [months P&I]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 6 if not assigned explicitly or loaded from defaults."), @@ -924,7 +924,7 @@ static PyGetSetDef FinancialParameters_getset[] = { PyDoc_STR("*sequence*: State income tax rate [%]\n\n**Required:**\nTrue"), NULL}, {"system_capacity", (getter)FinancialParameters_get_system_capacity,(setter)FinancialParameters_set_system_capacity, - PyDoc_STR("*float*: System nameplate capacity [kW]\n\n**Constraints:**\nPOSITIVE\n\n**Required:**\nTrue\n\nThe value of the following variables depends on ``system_capacity``:\n\n\t - construction_financing_cost\n\t - total_installed_cost\n"), + PyDoc_STR("*float*: System nameplate capacity [kW]\n\n**Constraints:**\nPOSITIVE\n\n**Required:**\nTrue\n\nThe value of the following variables depends on ``system_capacity``:\n\n\t - battery_total_cost_lcos\n\t - construction_financing_cost\n\t - land_area\n\t - total_installed_cost\n"), NULL}, {"system_heat_rate", (getter)FinancialParameters_get_system_heat_rate,(setter)FinancialParameters_set_system_heat_rate, PyDoc_STR("*float*: System heat rate [MMBTus/MWh]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), @@ -1430,97 +1430,97 @@ SystemCosts_set_total_installed_cost(VarGroupObject *self, PyObject *value, void static PyGetSetDef SystemCosts_getset[] = { {"add_om_num_types", (getter)SystemCosts_get_add_om_num_types,(setter)SystemCosts_set_add_om_num_types, - PyDoc_STR("*float*: Number of O and M types\n\n**Constraints:**\nINTEGER,MIN=0,MAX=2\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Number of O and M types\n\n**Info:**\nbattery,fuelcell\n\n**Constraints:**\nINTEGER,MIN=0,MAX=2\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"annual_fuel_usage", (getter)SystemCosts_get_annual_fuel_usage,(setter)SystemCosts_set_annual_fuel_usage, - PyDoc_STR("*float*: Fuel usage (yr 1) [kWht]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel usage (yr 1) [kWht]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"annual_fuel_usage_lifetime", (getter)SystemCosts_get_annual_fuel_usage_lifetime,(setter)SystemCosts_set_annual_fuel_usage_lifetime, - PyDoc_STR("*sequence*: Fuel usage (lifetime) [kWht]"), + PyDoc_STR("*sequence*: Fuel usage (lifetime) [kWht]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical"), NULL}, {"om_batt_capacity_cost", (getter)SystemCosts_get_om_batt_capacity_cost,(setter)SystemCosts_set_om_batt_capacity_cost, - PyDoc_STR("*sequence*: Battery capacity-based System Costs amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery capacity-based System Costs amount [$/kWcap]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_fixed_cost", (getter)SystemCosts_get_om_batt_fixed_cost,(setter)SystemCosts_set_om_batt_fixed_cost, - PyDoc_STR("*sequence*: Battery fixed System Costs annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery fixed System Costs annual amount [$/year]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_nameplate", (getter)SystemCosts_get_om_batt_nameplate,(setter)SystemCosts_set_om_batt_nameplate, - PyDoc_STR("*float*: Battery capacity for System Costs values [kW]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Battery capacity for System Costs values [kW]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_replacement_cost", (getter)SystemCosts_get_om_batt_replacement_cost,(setter)SystemCosts_set_om_batt_replacement_cost, - PyDoc_STR("*sequence*: Replacement cost 1 [$/kWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Replacement cost 1 [$/kWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_variable_cost", (getter)SystemCosts_get_om_batt_variable_cost,(setter)SystemCosts_set_om_batt_variable_cost, - PyDoc_STR("*sequence*: Battery production-based System Costs amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery production-based System Costs amount [$/MWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_capacity", (getter)SystemCosts_get_om_capacity,(setter)SystemCosts_set_om_capacity, - PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_capacity_escal", (getter)SystemCosts_get_om_capacity_escal,(setter)SystemCosts_set_om_capacity_escal, PyDoc_STR("*float*: Capacity-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fixed", (getter)SystemCosts_get_om_fixed,(setter)SystemCosts_set_om_fixed, - PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fixed_escal", (getter)SystemCosts_get_om_fixed_escal,(setter)SystemCosts_set_om_fixed_escal, PyDoc_STR("*float*: Fixed O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuel_cost", (getter)SystemCosts_get_om_fuel_cost,(setter)SystemCosts_set_om_fuel_cost, - PyDoc_STR("*sequence*: Fuel cost [$/MMBtu]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cost [$/MMBtu]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuel_cost_escal", (getter)SystemCosts_get_om_fuel_cost_escal,(setter)SystemCosts_set_om_fuel_cost_escal, - PyDoc_STR("*float*: Fuel cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel cost escalation [%/year]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_capacity_cost", (getter)SystemCosts_get_om_fuelcell_capacity_cost,(setter)SystemCosts_set_om_fuelcell_capacity_cost, - PyDoc_STR("*sequence*: Fuel cell capacity-based System Costs amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell capacity-based System Costs amount [$/kWcap]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_fixed_cost", (getter)SystemCosts_get_om_fuelcell_fixed_cost,(setter)SystemCosts_set_om_fuelcell_fixed_cost, - PyDoc_STR("*sequence*: Fuel cell fixed System Costs annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell fixed System Costs annual amount [$/year]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_nameplate", (getter)SystemCosts_get_om_fuelcell_nameplate,(setter)SystemCosts_set_om_fuelcell_nameplate, - PyDoc_STR("*float*: Fuel cell capacity for System Costs values [kW]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel cell capacity for System Costs values [kW]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_replacement_cost", (getter)SystemCosts_get_om_fuelcell_replacement_cost,(setter)SystemCosts_set_om_fuelcell_replacement_cost, - PyDoc_STR("*sequence*: Replacement cost 2 [$/kW]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Replacement cost 2 [$/kW]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_variable_cost", (getter)SystemCosts_get_om_fuelcell_variable_cost,(setter)SystemCosts_set_om_fuelcell_variable_cost, - PyDoc_STR("*sequence*: Fuel cell production-based System Costs amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell production-based System Costs amount [$/MWh]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_cost", (getter)SystemCosts_get_om_opt_fuel_1_cost,(setter)SystemCosts_set_om_opt_fuel_1_cost, - PyDoc_STR("*sequence*: Biomass feedstock cost [$/unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Biomass feedstock cost [$/unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_cost_escal", (getter)SystemCosts_get_om_opt_fuel_1_cost_escal,(setter)SystemCosts_set_om_opt_fuel_1_cost_escal, - PyDoc_STR("*float*: Biomass feedstock cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Biomass feedstock cost escalation [%/year]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_usage", (getter)SystemCosts_get_om_opt_fuel_1_usage,(setter)SystemCosts_set_om_opt_fuel_1_usage, - PyDoc_STR("*float*: Biomass feedstock usage [unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Biomass feedstock usage [unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_cost", (getter)SystemCosts_get_om_opt_fuel_2_cost,(setter)SystemCosts_set_om_opt_fuel_2_cost, - PyDoc_STR("*sequence*: Coal feedstock cost [$/unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Coal feedstock cost [$/unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_cost_escal", (getter)SystemCosts_get_om_opt_fuel_2_cost_escal,(setter)SystemCosts_set_om_opt_fuel_2_cost_escal, - PyDoc_STR("*float*: Coal feedstock cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Coal feedstock cost escalation [%/year]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_usage", (getter)SystemCosts_get_om_opt_fuel_2_usage,(setter)SystemCosts_set_om_opt_fuel_2_usage, - PyDoc_STR("*float*: Coal feedstock usage [unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Coal feedstock usage [unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production", (getter)SystemCosts_get_om_production,(setter)SystemCosts_set_om_production, - PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production1_values", (getter)SystemCosts_get_om_production1_values,(setter)SystemCosts_set_om_production1_values, - PyDoc_STR("*sequence*: Battery production for System Costs values [kWh]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery production for System Costs values [kWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production2_values", (getter)SystemCosts_get_om_production2_values,(setter)SystemCosts_set_om_production2_values, - PyDoc_STR("*sequence*: Fuel cell production for System Costs values [kWh]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell production for System Costs values [kWh]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production_escal", (getter)SystemCosts_get_om_production_escal,(setter)SystemCosts_set_om_production_escal, PyDoc_STR("*float*: Production-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_replacement_cost_escal", (getter)SystemCosts_get_om_replacement_cost_escal,(setter)SystemCosts_set_om_replacement_cost_escal, - PyDoc_STR("*float*: Replacement cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Replacement cost escalation [%/year]\n\n**Info:**\nbattery,fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"total_installed_cost", (getter)SystemCosts_get_total_installed_cost,(setter)SystemCosts_set_total_installed_cost, - PyDoc_STR("*float*: Installed cost [$]\n\n**Required:**\nTrue\n\nThe value of the following variables depends on ``total_installed_cost``:\n\n\t - construction_financing_cost\n"), + PyDoc_STR("*float*: Installed cost [$]\n\n**Required:**\nTrue\n\nThe value of the following variables depends on ``total_installed_cost``:\n\n\t - battery_total_cost_lcos\n\t - construction_financing_cost\n\n\nThe value of ``total_installed_cost`` depends on the following variables:\n\n\t - battery_per_kWh\n"), NULL}, {NULL} /* Sentinel */ }; @@ -5118,10 +5118,10 @@ static PyGetSetDef SystemOutput_getset[] = { PyDoc_STR("*sequence*: Power generated by renewable resource [kW]\n\n**Required:**\nTrue"), NULL}, {"gen_purchases", (getter)SystemOutput_get_gen_purchases,(setter)SystemOutput_set_gen_purchases, - PyDoc_STR("*sequence*: Electricity from grid [kW]\n\n**INOUT:** This variable is both an input and an output to the compute module."), + PyDoc_STR("*sequence*: Electricity from grid to system [kW]\n\n**INOUT:** This variable is both an input and an output to the compute module."), NULL}, {"system_capacity", (getter)SystemOutput_get_system_capacity,(setter)SystemOutput_set_system_capacity, - PyDoc_STR("*float*: System nameplate capacity [kW]\n\n**Constraints:**\nMIN=1e-3\n\n**Required:**\nTrue\n\nThe value of the following variables depends on ``system_capacity``:\n\n\t - construction_financing_cost\n\t - total_installed_cost\n"), + PyDoc_STR("*float*: System nameplate capacity [kW]\n\n**Constraints:**\nMIN=1e-3\n\n**Required:**\nTrue\n\nThe value of the following variables depends on ``system_capacity``:\n\n\t - battery_total_cost_lcos\n\t - construction_financing_cost\n\t - land_area\n\t - total_installed_cost\n"), NULL}, {NULL} /* Sentinel */ }; @@ -5714,7 +5714,7 @@ ConstructionFinancing_set_construction_financing_cost(VarGroupObject *self, PyOb static PyGetSetDef ConstructionFinancing_getset[] = { {"construction_financing_cost", (getter)ConstructionFinancing_get_construction_financing_cost,(setter)ConstructionFinancing_set_construction_financing_cost, - PyDoc_STR("*float*: Construction financing total [$]\n\n**Required:**\nTrue\n\nThe value of ``construction_financing_cost`` depends on the following variables:\n\n\t - total_installed_cost\n"), + PyDoc_STR("*float*: Construction financing total [$]\n\n**Required:**\nTrue\n\nThe value of ``construction_financing_cost`` depends on the following variables:\n\n\t - battery_per_kWh\n\t - total_installed_cost\n"), NULL}, {NULL} /* Sentinel */ }; @@ -5938,7 +5938,7 @@ static PyGetSetDef BatterySystem_getset[] = { PyDoc_STR("*sequence*: Battery bank replacements per year [number/year]\n\n**INOUT:** This variable is both an input and an output to the compute module."), NULL}, {"batt_computed_bank_capacity", (getter)BatterySystem_get_batt_computed_bank_capacity,(setter)BatterySystem_set_batt_computed_bank_capacity, - PyDoc_STR("*float*: Battery bank capacity [kWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Battery bank capacity [kWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults.\n\nThe value of the following variables depends on ``batt_computed_bank_capacity``:\n\n\t - battery_total_cost_lcos\n\t - construction_financing_cost\n\t - om_batt_nameplate\n\t - total_installed_cost\n"), NULL}, {"batt_replacement_option", (getter)BatterySystem_get_batt_replacement_option,(setter)BatterySystem_set_batt_replacement_option, PyDoc_STR("*float*: Enable battery replacement? [0=none,1=capacity based,2=user schedule]\n\n**Constraints:**\nINTEGER,MIN=0,MAX=2\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), @@ -5947,7 +5947,7 @@ static PyGetSetDef BatterySystem_getset[] = { PyDoc_STR("*sequence*: Percentage of battery capacity to replace in each year [%]\n\n**Options:**\nlength <= analysis_period"), NULL}, {"battery_per_kWh", (getter)BatterySystem_get_battery_per_kWh,(setter)BatterySystem_set_battery_per_kWh, - PyDoc_STR("*float*: Battery cost [$/kWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Battery cost [$/kWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults.\n\nThe value of the following variables depends on ``battery_per_kWh``:\n\n\t - battery_total_cost_lcos\n\t - construction_financing_cost\n\t - total_installed_cost\n"), NULL}, {"en_batt", (getter)BatterySystem_get_en_batt,(setter)BatterySystem_set_en_batt, PyDoc_STR("*float*: Enable battery storage model [0/1]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), @@ -6288,7 +6288,7 @@ static PyGetSetDef LCOS_getset[] = { PyDoc_STR("*float*: Net pre-tax cash battery salvage value [%]\n\n**Constraints:**\nMIN=0,MAX=100\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"battery_total_cost_lcos", (getter)LCOS_get_battery_total_cost_lcos,(setter)LCOS_set_battery_total_cost_lcos, - PyDoc_STR("*float*: Battery total investment cost [$]"), + PyDoc_STR("*float*: Battery total investment cost [$]\n\nThe value of ``battery_total_cost_lcos`` depends on the following variables:\n\n\t - battery_per_kWh\n\t - total_installed_cost\n"), NULL}, {"charge_w_sys_ec_ym", (getter)LCOS_get_charge_w_sys_ec_ym,(setter)LCOS_set_charge_w_sys_ec_ym, PyDoc_STR("*sequence[sequence]*: Energy charge with system [$]"), @@ -6963,6 +6963,158 @@ static PyTypeObject FuelCell_Type = { }; +/* + * HybridCosts Group + */ + +static PyTypeObject HybridCosts_Type; + +static PyObject * +HybridCosts_new(SAM_HostDeveloper data_ptr) +{ + PyObject* new_obj = HybridCosts_Type.tp_alloc(&HybridCosts_Type,0); + + VarGroupObject* HybridCosts_obj = (VarGroupObject*)new_obj; + + HybridCosts_obj->data_ptr = (SAM_table)data_ptr; + + return new_obj; +} + +/* HybridCosts methods */ + +static PyObject * +HybridCosts_assign(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + + if (!PySAM_assign_from_dict(self->data_ptr, dict, "HostDeveloper", "HybridCosts")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +HybridCosts_replace(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + PyTypeObject* tp = &HybridCosts_Type; + + if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "HostDeveloper", "HybridCosts")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +HybridCosts_export(VarGroupObject *self, PyObject *args) +{ + PyTypeObject* tp = &HybridCosts_Type; + PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); + return dict; +} + +static PyMethodDef HybridCosts_methods[] = { + {"assign", (PyCFunction)HybridCosts_assign, METH_VARARGS, + PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``HybridCosts_vals = { var: val, ...}``")}, + {"replace", (PyCFunction)HybridCosts_replace, METH_VARARGS, + PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``HybridCosts_vals = { var: val, ...}``")}, + {"export", (PyCFunction)HybridCosts_export, METH_VARARGS, + PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, + {NULL, NULL} /* sentinel */ +}; + +static PyObject * +HybridCosts_get_degradation(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_HostDeveloper_HybridCosts_degradation_aget, self->data_ptr); +} + +static int +HybridCosts_set_degradation(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_HostDeveloper_HybridCosts_degradation_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_total_installed_cost(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_HostDeveloper_HybridCosts_total_installed_cost_nget, self->data_ptr); +} + +static int +HybridCosts_set_total_installed_cost(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_HostDeveloper_HybridCosts_total_installed_cost_nset, self->data_ptr); +} + +static PyGetSetDef HybridCosts_getset[] = { +{"degradation", (getter)HybridCosts_get_degradation,(setter)HybridCosts_set_degradation, + PyDoc_STR("*sequence*: Annual AC degradation [%]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"total_installed_cost", (getter)HybridCosts_get_total_installed_cost,(setter)HybridCosts_set_total_installed_cost, + PyDoc_STR("*float*: Total installed cost [$]\n\n**Required:**\nTrue\n\nThe value of the following variables depends on ``total_installed_cost``:\n\n\t - battery_total_cost_lcos\n\t - construction_financing_cost\n\n\nThe value of ``total_installed_cost`` depends on the following variables:\n\n\t - battery_per_kWh\n"), + NULL}, + {NULL} /* Sentinel */ +}; + +static PyTypeObject HybridCosts_Type = { + /* The ob_type field must be initialized in the module init function + * to be portable to Windows without using C++. */ + PyVarObject_HEAD_INIT(NULL, 0) + "HostDeveloper.HybridCosts", /*tp_name*/ + sizeof(VarGroupObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + /* methods */ + 0, /*tp_dealloc*/ + 0, /*tp_print*/ + (getattrfunc)0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_reserved*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistofnset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + HybridCosts_methods, /*tp_methods*/ + 0, /*tp_members*/ + HybridCosts_getset, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictofnset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + 0, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ +}; + + /* * Outputs Group */ @@ -12240,6 +12392,10 @@ newHostDeveloperObject(void* data_ptr) PyDict_SetItemString(attr_dict, "FuelCell", FuelCell_obj); Py_DECREF(FuelCell_obj); + PyObject* HybridCosts_obj = HybridCosts_new(self->data_ptr); + PyDict_SetItemString(attr_dict, "HybridCosts", HybridCosts_obj); + Py_DECREF(HybridCosts_obj); + PyObject* Outputs_obj = Outputs_new(self->data_ptr); PyDict_SetItemString(attr_dict, "Outputs", Outputs_obj); Py_DECREF(Outputs_obj); @@ -12338,8 +12494,6 @@ HostDeveloper_unassign(CmodObject *self, PyObject *args) static PyMethodDef HostDeveloper_methods[] = { {"execute", (PyCFunction)HostDeveloper_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)HostDeveloper_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)HostDeveloper_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Revenue': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)HostDeveloper_replace, METH_VARARGS, @@ -12350,6 +12504,8 @@ static PyMethodDef HostDeveloper_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)HostDeveloper_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)HostDeveloper_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; @@ -12678,6 +12834,13 @@ HostDeveloperModule_exec(PyObject *m) (PyObject*)&FuelCell_Type); Py_DECREF(&FuelCell_Type); + /// Add the HybridCosts type object to HostDeveloper_Type + if (PyType_Ready(&HybridCosts_Type) < 0) { goto fail; } + PyDict_SetItemString(HostDeveloper_Type.tp_dict, + "HybridCosts", + (PyObject*)&HybridCosts_Type); + Py_DECREF(&HybridCosts_Type); + /// Add the Outputs type object to HostDeveloper_Type if (PyType_Ready(&Outputs_Type) < 0) { goto fail; } PyDict_SetItemString(HostDeveloper_Type.tp_dict, diff --git a/modules/Hybrid.c b/modules/Hybrid.c index 040a7251..1680f0eb 100644 --- a/modules/Hybrid.c +++ b/modules/Hybrid.c @@ -389,8 +389,6 @@ Hybrid_unassign(CmodObject *self, PyObject *args) static PyMethodDef Hybrid_methods[] = { {"execute", (PyCFunction)Hybrid_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Hybrid_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Hybrid_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Common': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Hybrid_replace, METH_VARARGS, @@ -401,6 +399,8 @@ static PyMethodDef Hybrid_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Hybrid_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Hybrid_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/HybridSteps.c b/modules/HybridSteps.c index f22ce551..16e3e5df 100644 --- a/modules/HybridSteps.c +++ b/modules/HybridSteps.c @@ -389,8 +389,6 @@ HybridSteps_unassign(CmodObject *self, PyObject *args) static PyMethodDef HybridSteps_methods[] = { {"execute", (PyCFunction)HybridSteps_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)HybridSteps_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)HybridSteps_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Common': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)HybridSteps_replace, METH_VARARGS, @@ -401,6 +399,8 @@ static PyMethodDef HybridSteps_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)HybridSteps_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)HybridSteps_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Iec61853interp.c b/modules/Iec61853interp.c index eceaedc3..eb7a7709 100644 --- a/modules/Iec61853interp.c +++ b/modules/Iec61853interp.c @@ -596,8 +596,6 @@ Iec61853interp_unassign(CmodObject *self, PyObject *args) static PyMethodDef Iec61853interp_methods[] = { {"execute", (PyCFunction)Iec61853interp_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Iec61853interp_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Iec61853interp_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'IEC61853': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Iec61853interp_replace, METH_VARARGS, @@ -608,6 +606,8 @@ static PyMethodDef Iec61853interp_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Iec61853interp_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Iec61853interp_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Iec61853par.c b/modules/Iec61853par.c index e412a83a..4fe247f5 100644 --- a/modules/Iec61853par.c +++ b/modules/Iec61853par.c @@ -542,8 +542,6 @@ Iec61853par_unassign(CmodObject *self, PyObject *args) static PyMethodDef Iec61853par_methods[] = { {"execute", (PyCFunction)Iec61853par_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Iec61853par_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Iec61853par_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'IEC61853': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Iec61853par_replace, METH_VARARGS, @@ -554,6 +552,8 @@ static PyMethodDef Iec61853par_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Iec61853par_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Iec61853par_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/InvCecCg.c b/modules/InvCecCg.c index 9f3e6ce9..e9d18819 100644 --- a/modules/InvCecCg.c +++ b/modules/InvCecCg.c @@ -599,8 +599,6 @@ InvCecCg_unassign(CmodObject *self, PyObject *args) static PyMethodDef InvCecCg_methods[] = { {"execute", (PyCFunction)InvCecCg_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)InvCecCg_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)InvCecCg_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Common': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)InvCecCg_replace, METH_VARARGS, @@ -611,6 +609,8 @@ static PyMethodDef InvCecCg_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)InvCecCg_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)InvCecCg_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/IphToLcoefcr.c b/modules/IphToLcoefcr.c index 165737b2..eb316187 100644 --- a/modules/IphToLcoefcr.c +++ b/modules/IphToLcoefcr.c @@ -410,8 +410,6 @@ IphToLcoefcr_unassign(CmodObject *self, PyObject *args) static PyMethodDef IphToLcoefcr_methods[] = { {"execute", (PyCFunction)IphToLcoefcr_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)IphToLcoefcr_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)IphToLcoefcr_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'IPH LCOH': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)IphToLcoefcr_replace, METH_VARARGS, @@ -422,6 +420,8 @@ static PyMethodDef IphToLcoefcr_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)IphToLcoefcr_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)IphToLcoefcr_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Ippppa.c b/modules/Ippppa.c index 26710f80..0c381e84 100644 --- a/modules/Ippppa.c +++ b/modules/Ippppa.c @@ -771,94 +771,94 @@ SystemCosts_set_om_replacement_cost_escal(VarGroupObject *self, PyObject *value, static PyGetSetDef SystemCosts_getset[] = { {"add_om_num_types", (getter)SystemCosts_get_add_om_num_types,(setter)SystemCosts_set_add_om_num_types, - PyDoc_STR("*float*: Number of O and M types\n\n**Constraints:**\nINTEGER,MIN=0,MAX=2\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Number of O and M types\n\n**Info:**\nbattery,fuelcell\n\n**Constraints:**\nINTEGER,MIN=0,MAX=2\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"annual_fuel_usage", (getter)SystemCosts_get_annual_fuel_usage,(setter)SystemCosts_set_annual_fuel_usage, - PyDoc_STR("*float*: Fuel usage (yr 1) [kWht]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel usage (yr 1) [kWht]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"annual_fuel_usage_lifetime", (getter)SystemCosts_get_annual_fuel_usage_lifetime,(setter)SystemCosts_set_annual_fuel_usage_lifetime, - PyDoc_STR("*sequence*: Fuel usage (lifetime) [kWht]"), + PyDoc_STR("*sequence*: Fuel usage (lifetime) [kWht]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical"), NULL}, {"om_batt_capacity_cost", (getter)SystemCosts_get_om_batt_capacity_cost,(setter)SystemCosts_set_om_batt_capacity_cost, - PyDoc_STR("*sequence*: Battery capacity-based System Costs amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery capacity-based System Costs amount [$/kWcap]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_fixed_cost", (getter)SystemCosts_get_om_batt_fixed_cost,(setter)SystemCosts_set_om_batt_fixed_cost, - PyDoc_STR("*sequence*: Battery fixed System Costs annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery fixed System Costs annual amount [$/year]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_nameplate", (getter)SystemCosts_get_om_batt_nameplate,(setter)SystemCosts_set_om_batt_nameplate, - PyDoc_STR("*float*: Battery capacity for System Costs values [kW]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Battery capacity for System Costs values [kW]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_replacement_cost", (getter)SystemCosts_get_om_batt_replacement_cost,(setter)SystemCosts_set_om_batt_replacement_cost, - PyDoc_STR("*sequence*: Replacement cost 1 [$/kWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Replacement cost 1 [$/kWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_variable_cost", (getter)SystemCosts_get_om_batt_variable_cost,(setter)SystemCosts_set_om_batt_variable_cost, - PyDoc_STR("*sequence*: Battery production-based System Costs amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery production-based System Costs amount [$/MWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_capacity", (getter)SystemCosts_get_om_capacity,(setter)SystemCosts_set_om_capacity, - PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_capacity_escal", (getter)SystemCosts_get_om_capacity_escal,(setter)SystemCosts_set_om_capacity_escal, PyDoc_STR("*float*: Capacity-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fixed", (getter)SystemCosts_get_om_fixed,(setter)SystemCosts_set_om_fixed, - PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fixed_escal", (getter)SystemCosts_get_om_fixed_escal,(setter)SystemCosts_set_om_fixed_escal, PyDoc_STR("*float*: Fixed O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuel_cost", (getter)SystemCosts_get_om_fuel_cost,(setter)SystemCosts_set_om_fuel_cost, - PyDoc_STR("*sequence*: Fuel cost [$/MMBtu]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cost [$/MMBtu]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuel_cost_escal", (getter)SystemCosts_get_om_fuel_cost_escal,(setter)SystemCosts_set_om_fuel_cost_escal, - PyDoc_STR("*float*: Fuel cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel cost escalation [%/year]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_capacity_cost", (getter)SystemCosts_get_om_fuelcell_capacity_cost,(setter)SystemCosts_set_om_fuelcell_capacity_cost, - PyDoc_STR("*sequence*: Fuel cell capacity-based System Costs amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell capacity-based System Costs amount [$/kWcap]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_fixed_cost", (getter)SystemCosts_get_om_fuelcell_fixed_cost,(setter)SystemCosts_set_om_fuelcell_fixed_cost, - PyDoc_STR("*sequence*: Fuel cell fixed System Costs annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell fixed System Costs annual amount [$/year]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_nameplate", (getter)SystemCosts_get_om_fuelcell_nameplate,(setter)SystemCosts_set_om_fuelcell_nameplate, - PyDoc_STR("*float*: Fuel cell capacity for System Costs values [kW]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel cell capacity for System Costs values [kW]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_replacement_cost", (getter)SystemCosts_get_om_fuelcell_replacement_cost,(setter)SystemCosts_set_om_fuelcell_replacement_cost, - PyDoc_STR("*sequence*: Replacement cost 2 [$/kW]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Replacement cost 2 [$/kW]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_variable_cost", (getter)SystemCosts_get_om_fuelcell_variable_cost,(setter)SystemCosts_set_om_fuelcell_variable_cost, - PyDoc_STR("*sequence*: Fuel cell production-based System Costs amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell production-based System Costs amount [$/MWh]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_cost", (getter)SystemCosts_get_om_opt_fuel_1_cost,(setter)SystemCosts_set_om_opt_fuel_1_cost, - PyDoc_STR("*sequence*: Biomass feedstock cost [$/unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Biomass feedstock cost [$/unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_cost_escal", (getter)SystemCosts_get_om_opt_fuel_1_cost_escal,(setter)SystemCosts_set_om_opt_fuel_1_cost_escal, - PyDoc_STR("*float*: Biomass feedstock cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Biomass feedstock cost escalation [%/year]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_usage", (getter)SystemCosts_get_om_opt_fuel_1_usage,(setter)SystemCosts_set_om_opt_fuel_1_usage, - PyDoc_STR("*float*: Biomass feedstock usage [unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Biomass feedstock usage [unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_cost", (getter)SystemCosts_get_om_opt_fuel_2_cost,(setter)SystemCosts_set_om_opt_fuel_2_cost, - PyDoc_STR("*sequence*: Coal feedstock cost [$/unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Coal feedstock cost [$/unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_cost_escal", (getter)SystemCosts_get_om_opt_fuel_2_cost_escal,(setter)SystemCosts_set_om_opt_fuel_2_cost_escal, - PyDoc_STR("*float*: Coal feedstock cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Coal feedstock cost escalation [%/year]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_usage", (getter)SystemCosts_get_om_opt_fuel_2_usage,(setter)SystemCosts_set_om_opt_fuel_2_usage, - PyDoc_STR("*float*: Coal feedstock usage [unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Coal feedstock usage [unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production", (getter)SystemCosts_get_om_production,(setter)SystemCosts_set_om_production, - PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production1_values", (getter)SystemCosts_get_om_production1_values,(setter)SystemCosts_set_om_production1_values, - PyDoc_STR("*sequence*: Battery production for System Costs values [kWh]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery production for System Costs values [kWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production2_values", (getter)SystemCosts_get_om_production2_values,(setter)SystemCosts_set_om_production2_values, - PyDoc_STR("*sequence*: Fuel cell production for System Costs values [kWh]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell production for System Costs values [kWh]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production_escal", (getter)SystemCosts_get_om_production_escal,(setter)SystemCosts_set_om_production_escal, PyDoc_STR("*float*: Production-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_replacement_cost_escal", (getter)SystemCosts_get_om_replacement_cost_escal,(setter)SystemCosts_set_om_replacement_cost_escal, - PyDoc_STR("*float*: Replacement cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Replacement cost escalation [%/year]\n\n**Info:**\nbattery,fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {NULL} /* Sentinel */ }; @@ -5828,8 +5828,6 @@ Ippppa_unassign(CmodObject *self, PyObject *args) static PyMethodDef Ippppa_methods[] = { {"execute", (PyCFunction)Ippppa_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Ippppa_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Ippppa_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Financial Parameters': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Ippppa_replace, METH_VARARGS, @@ -5840,6 +5838,8 @@ static PyMethodDef Ippppa_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Ippppa_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Ippppa_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Irradproc.c b/modules/Irradproc.c index 271a4547..8d638ada 100644 --- a/modules/Irradproc.c +++ b/modules/Irradproc.c @@ -890,8 +890,6 @@ Irradproc_unassign(CmodObject *self, PyObject *args) static PyMethodDef Irradproc_methods[] = { {"execute", (PyCFunction)Irradproc_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Irradproc_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Irradproc_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Irradiance Processor': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Irradproc_replace, METH_VARARGS, @@ -902,6 +900,8 @@ static PyMethodDef Irradproc_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Irradproc_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Irradproc_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Layoutarea.c b/modules/Layoutarea.c index f26d9fd0..921c473b 100644 --- a/modules/Layoutarea.c +++ b/modules/Layoutarea.c @@ -398,8 +398,6 @@ Layoutarea_unassign(CmodObject *self, PyObject *args) static PyMethodDef Layoutarea_methods[] = { {"execute", (PyCFunction)Layoutarea_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Layoutarea_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Layoutarea_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Common': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Layoutarea_replace, METH_VARARGS, @@ -410,6 +408,8 @@ static PyMethodDef Layoutarea_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Layoutarea_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Layoutarea_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Lcoefcr.c b/modules/Lcoefcr.c index af73bd4f..24a1339e 100644 --- a/modules/Lcoefcr.c +++ b/modules/Lcoefcr.c @@ -449,8 +449,6 @@ Lcoefcr_unassign(CmodObject *self, PyObject *args) static PyMethodDef Lcoefcr_methods[] = { {"execute", (PyCFunction)Lcoefcr_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Lcoefcr_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Lcoefcr_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Simple LCOE': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Lcoefcr_replace, METH_VARARGS, @@ -461,6 +459,8 @@ static PyMethodDef Lcoefcr_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Lcoefcr_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Lcoefcr_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/LcoefcrDesign.c b/modules/LcoefcrDesign.c index cd8065c8..f7dfcafd 100644 --- a/modules/LcoefcrDesign.c +++ b/modules/LcoefcrDesign.c @@ -1067,8 +1067,6 @@ LcoefcrDesign_unassign(CmodObject *self, PyObject *args) static PyMethodDef LcoefcrDesign_methods[] = { {"execute", (PyCFunction)LcoefcrDesign_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)LcoefcrDesign_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)LcoefcrDesign_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'System Control': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)LcoefcrDesign_replace, METH_VARARGS, @@ -1079,6 +1077,8 @@ static PyMethodDef LcoefcrDesign_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)LcoefcrDesign_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)LcoefcrDesign_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Levpartflip.c b/modules/Levpartflip.c index 7517dffe..ba671b28 100644 --- a/modules/Levpartflip.c +++ b/modules/Levpartflip.c @@ -870,7 +870,7 @@ static PyGetSetDef FinancialParameters_getset[] = { PyDoc_STR("*float*: Limit debt fraction [0/1]\n\n**Constraints:**\nBOOLEAN\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"dscr_maximum_debt_fraction", (getter)FinancialParameters_get_dscr_maximum_debt_fraction,(setter)FinancialParameters_set_dscr_maximum_debt_fraction, - PyDoc_STR("*float*: Maximum debt fraction [%]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 100 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Maximum debt fraction [%]\n\n**Constraints:**\nPOSITIVE\n\n**Required:**\nFalse. Automatically set to 100 if not assigned explicitly or loaded from defaults."), NULL}, {"dscr_reserve_months", (getter)FinancialParameters_get_dscr_reserve_months,(setter)FinancialParameters_set_dscr_reserve_months, PyDoc_STR("*float*: Debt service reserve account [months P&I]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 6 if not assigned explicitly or loaded from defaults."), @@ -1445,94 +1445,94 @@ SystemCosts_set_total_installed_cost(VarGroupObject *self, PyObject *value, void static PyGetSetDef SystemCosts_getset[] = { {"add_om_num_types", (getter)SystemCosts_get_add_om_num_types,(setter)SystemCosts_set_add_om_num_types, - PyDoc_STR("*float*: Number of O and M types\n\n**Constraints:**\nINTEGER,MIN=0,MAX=2\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Number of O and M types\n\n**Info:**\nbattery,fuelcell\n\n**Constraints:**\nINTEGER,MIN=0,MAX=2\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"annual_fuel_usage", (getter)SystemCosts_get_annual_fuel_usage,(setter)SystemCosts_set_annual_fuel_usage, - PyDoc_STR("*float*: Fuel usage (yr 1) [kWht]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel usage (yr 1) [kWht]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"annual_fuel_usage_lifetime", (getter)SystemCosts_get_annual_fuel_usage_lifetime,(setter)SystemCosts_set_annual_fuel_usage_lifetime, - PyDoc_STR("*sequence*: Fuel usage (lifetime) [kWht]"), + PyDoc_STR("*sequence*: Fuel usage (lifetime) [kWht]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical"), NULL}, {"om_batt_capacity_cost", (getter)SystemCosts_get_om_batt_capacity_cost,(setter)SystemCosts_set_om_batt_capacity_cost, - PyDoc_STR("*sequence*: Battery capacity-based System Costs amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery capacity-based System Costs amount [$/kWcap]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_fixed_cost", (getter)SystemCosts_get_om_batt_fixed_cost,(setter)SystemCosts_set_om_batt_fixed_cost, - PyDoc_STR("*sequence*: Battery fixed System Costs annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery fixed System Costs annual amount [$/year]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_nameplate", (getter)SystemCosts_get_om_batt_nameplate,(setter)SystemCosts_set_om_batt_nameplate, - PyDoc_STR("*float*: Battery capacity for System Costs values [kW]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Battery capacity for System Costs values [kW]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_replacement_cost", (getter)SystemCosts_get_om_batt_replacement_cost,(setter)SystemCosts_set_om_batt_replacement_cost, - PyDoc_STR("*sequence*: Replacement cost 1 [$/kWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Replacement cost 1 [$/kWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_variable_cost", (getter)SystemCosts_get_om_batt_variable_cost,(setter)SystemCosts_set_om_batt_variable_cost, - PyDoc_STR("*sequence*: Battery production-based System Costs amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery production-based System Costs amount [$/MWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_capacity", (getter)SystemCosts_get_om_capacity,(setter)SystemCosts_set_om_capacity, - PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_capacity_escal", (getter)SystemCosts_get_om_capacity_escal,(setter)SystemCosts_set_om_capacity_escal, PyDoc_STR("*float*: Capacity-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fixed", (getter)SystemCosts_get_om_fixed,(setter)SystemCosts_set_om_fixed, - PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fixed_escal", (getter)SystemCosts_get_om_fixed_escal,(setter)SystemCosts_set_om_fixed_escal, PyDoc_STR("*float*: Fixed O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuel_cost", (getter)SystemCosts_get_om_fuel_cost,(setter)SystemCosts_set_om_fuel_cost, - PyDoc_STR("*sequence*: Fuel cost [$/MMBtu]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cost [$/MMBtu]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuel_cost_escal", (getter)SystemCosts_get_om_fuel_cost_escal,(setter)SystemCosts_set_om_fuel_cost_escal, - PyDoc_STR("*float*: Fuel cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel cost escalation [%/year]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_capacity_cost", (getter)SystemCosts_get_om_fuelcell_capacity_cost,(setter)SystemCosts_set_om_fuelcell_capacity_cost, - PyDoc_STR("*sequence*: Fuel cell capacity-based System Costs amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell capacity-based System Costs amount [$/kWcap]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_fixed_cost", (getter)SystemCosts_get_om_fuelcell_fixed_cost,(setter)SystemCosts_set_om_fuelcell_fixed_cost, - PyDoc_STR("*sequence*: Fuel cell fixed System Costs annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell fixed System Costs annual amount [$/year]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_nameplate", (getter)SystemCosts_get_om_fuelcell_nameplate,(setter)SystemCosts_set_om_fuelcell_nameplate, - PyDoc_STR("*float*: Fuel cell capacity for System Costs values [kW]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel cell capacity for System Costs values [kW]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_replacement_cost", (getter)SystemCosts_get_om_fuelcell_replacement_cost,(setter)SystemCosts_set_om_fuelcell_replacement_cost, - PyDoc_STR("*sequence*: Replacement cost 2 [$/kW]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Replacement cost 2 [$/kW]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_variable_cost", (getter)SystemCosts_get_om_fuelcell_variable_cost,(setter)SystemCosts_set_om_fuelcell_variable_cost, - PyDoc_STR("*sequence*: Fuel cell production-based System Costs amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell production-based System Costs amount [$/MWh]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_cost", (getter)SystemCosts_get_om_opt_fuel_1_cost,(setter)SystemCosts_set_om_opt_fuel_1_cost, - PyDoc_STR("*sequence*: Biomass feedstock cost [$/unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Biomass feedstock cost [$/unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_cost_escal", (getter)SystemCosts_get_om_opt_fuel_1_cost_escal,(setter)SystemCosts_set_om_opt_fuel_1_cost_escal, - PyDoc_STR("*float*: Biomass feedstock cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Biomass feedstock cost escalation [%/year]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_usage", (getter)SystemCosts_get_om_opt_fuel_1_usage,(setter)SystemCosts_set_om_opt_fuel_1_usage, - PyDoc_STR("*float*: Biomass feedstock usage [unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Biomass feedstock usage [unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_cost", (getter)SystemCosts_get_om_opt_fuel_2_cost,(setter)SystemCosts_set_om_opt_fuel_2_cost, - PyDoc_STR("*sequence*: Coal feedstock cost [$/unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Coal feedstock cost [$/unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_cost_escal", (getter)SystemCosts_get_om_opt_fuel_2_cost_escal,(setter)SystemCosts_set_om_opt_fuel_2_cost_escal, - PyDoc_STR("*float*: Coal feedstock cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Coal feedstock cost escalation [%/year]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_usage", (getter)SystemCosts_get_om_opt_fuel_2_usage,(setter)SystemCosts_set_om_opt_fuel_2_usage, - PyDoc_STR("*float*: Coal feedstock usage [unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Coal feedstock usage [unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production", (getter)SystemCosts_get_om_production,(setter)SystemCosts_set_om_production, - PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production1_values", (getter)SystemCosts_get_om_production1_values,(setter)SystemCosts_set_om_production1_values, - PyDoc_STR("*sequence*: Battery production for System Costs values [kWh]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery production for System Costs values [kWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production2_values", (getter)SystemCosts_get_om_production2_values,(setter)SystemCosts_set_om_production2_values, - PyDoc_STR("*sequence*: Fuel cell production for System Costs values [kWh]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell production for System Costs values [kWh]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production_escal", (getter)SystemCosts_get_om_production_escal,(setter)SystemCosts_set_om_production_escal, PyDoc_STR("*float*: Production-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_replacement_cost_escal", (getter)SystemCosts_get_om_replacement_cost_escal,(setter)SystemCosts_set_om_replacement_cost_escal, - PyDoc_STR("*float*: Replacement cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Replacement cost escalation [%/year]\n\n**Info:**\nbattery,fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"total_installed_cost", (getter)SystemCosts_get_total_installed_cost,(setter)SystemCosts_set_total_installed_cost, PyDoc_STR("*float*: Installed cost [$]\n\n**Required:**\nTrue\n\nThe value of the following variables depends on ``total_installed_cost``:\n\n\t - construction_financing_cost\n"), @@ -4527,7 +4527,7 @@ static PyGetSetDef SystemOutput_getset[] = { PyDoc_STR("*sequence*: Power generated by renewable resource [kW]\n\n**Required:**\nTrue"), NULL}, {"gen_purchases", (getter)SystemOutput_get_gen_purchases,(setter)SystemOutput_set_gen_purchases, - PyDoc_STR("*sequence*: Electricity from grid [kW]\n\n**INOUT:** This variable is both an input and an output to the compute module."), + PyDoc_STR("*sequence*: Electricity from grid to system [kW]\n\n**INOUT:** This variable is both an input and an output to the compute module."), NULL}, {"system_capacity", (getter)SystemOutput_get_system_capacity,(setter)SystemOutput_set_system_capacity, PyDoc_STR("*float*: System nameplate capacity [kW]\n\n**Constraints:**\nMIN=1e-3\n\n**Required:**\nTrue"), @@ -12287,8 +12287,6 @@ Levpartflip_unassign(CmodObject *self, PyObject *args) static PyMethodDef Levpartflip_methods[] = { {"execute", (PyCFunction)Levpartflip_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Levpartflip_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Levpartflip_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Revenue': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Levpartflip_replace, METH_VARARGS, @@ -12299,6 +12297,8 @@ static PyMethodDef Levpartflip_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Levpartflip_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Levpartflip_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/LinearFresnelDsgIph.c b/modules/LinearFresnelDsgIph.c index 7e86412f..7457e002 100644 --- a/modules/LinearFresnelDsgIph.c +++ b/modules/LinearFresnelDsgIph.c @@ -2351,8 +2351,6 @@ LinearFresnelDsgIph_unassign(CmodObject *self, PyObject *args) static PyMethodDef LinearFresnelDsgIph_methods[] = { {"execute", (PyCFunction)LinearFresnelDsgIph_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)LinearFresnelDsgIph_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)LinearFresnelDsgIph_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'weather': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)LinearFresnelDsgIph_replace, METH_VARARGS, @@ -2363,6 +2361,8 @@ static PyMethodDef LinearFresnelDsgIph_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)LinearFresnelDsgIph_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)LinearFresnelDsgIph_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Merchantplant.c b/modules/Merchantplant.c index d6b24375..afd07c5d 100644 --- a/modules/Merchantplant.c +++ b/modules/Merchantplant.c @@ -565,7 +565,7 @@ static PyGetSetDef FinancialParameters_getset[] = { PyDoc_STR("*float*: Limit debt fraction [0/1]\n\n**Constraints:**\nBOOLEAN\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"dscr_maximum_debt_fraction", (getter)FinancialParameters_get_dscr_maximum_debt_fraction,(setter)FinancialParameters_set_dscr_maximum_debt_fraction, - PyDoc_STR("*float*: Maximum debt fraction [%]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 100 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Maximum debt fraction [%]\n\n**Constraints:**\nPOSITIVE\n\n**Required:**\nFalse. Automatically set to 100 if not assigned explicitly or loaded from defaults."), NULL}, {"dscr_reserve_months", (getter)FinancialParameters_get_dscr_reserve_months,(setter)FinancialParameters_set_dscr_reserve_months, PyDoc_STR("*float*: Debt service reserve account [months P&I]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 6 if not assigned explicitly or loaded from defaults."), @@ -1191,94 +1191,94 @@ SystemCosts_set_total_installed_cost(VarGroupObject *self, PyObject *value, void static PyGetSetDef SystemCosts_getset[] = { {"add_om_num_types", (getter)SystemCosts_get_add_om_num_types,(setter)SystemCosts_set_add_om_num_types, - PyDoc_STR("*float*: Number of O and M types\n\n**Constraints:**\nINTEGER,MIN=0,MAX=2\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Number of O and M types\n\n**Info:**\nbattery,fuelcell\n\n**Constraints:**\nINTEGER,MIN=0,MAX=2\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"annual_fuel_usage", (getter)SystemCosts_get_annual_fuel_usage,(setter)SystemCosts_set_annual_fuel_usage, - PyDoc_STR("*float*: Fuel usage (yr 1) [kWht]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel usage (yr 1) [kWht]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"annual_fuel_usage_lifetime", (getter)SystemCosts_get_annual_fuel_usage_lifetime,(setter)SystemCosts_set_annual_fuel_usage_lifetime, - PyDoc_STR("*sequence*: Fuel usage (lifetime) [kWht]"), + PyDoc_STR("*sequence*: Fuel usage (lifetime) [kWht]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical"), NULL}, {"om_batt_capacity_cost", (getter)SystemCosts_get_om_batt_capacity_cost,(setter)SystemCosts_set_om_batt_capacity_cost, - PyDoc_STR("*sequence*: Battery capacity-based System Costs amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery capacity-based System Costs amount [$/kWcap]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_fixed_cost", (getter)SystemCosts_get_om_batt_fixed_cost,(setter)SystemCosts_set_om_batt_fixed_cost, - PyDoc_STR("*sequence*: Battery fixed System Costs annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery fixed System Costs annual amount [$/year]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_nameplate", (getter)SystemCosts_get_om_batt_nameplate,(setter)SystemCosts_set_om_batt_nameplate, - PyDoc_STR("*float*: Battery capacity for System Costs values [kW]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Battery capacity for System Costs values [kW]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_replacement_cost", (getter)SystemCosts_get_om_batt_replacement_cost,(setter)SystemCosts_set_om_batt_replacement_cost, - PyDoc_STR("*sequence*: Replacement cost 1 [$/kWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Replacement cost 1 [$/kWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_variable_cost", (getter)SystemCosts_get_om_batt_variable_cost,(setter)SystemCosts_set_om_batt_variable_cost, - PyDoc_STR("*sequence*: Battery production-based System Costs amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery production-based System Costs amount [$/MWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_capacity", (getter)SystemCosts_get_om_capacity,(setter)SystemCosts_set_om_capacity, - PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_capacity_escal", (getter)SystemCosts_get_om_capacity_escal,(setter)SystemCosts_set_om_capacity_escal, PyDoc_STR("*float*: Capacity-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fixed", (getter)SystemCosts_get_om_fixed,(setter)SystemCosts_set_om_fixed, - PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fixed_escal", (getter)SystemCosts_get_om_fixed_escal,(setter)SystemCosts_set_om_fixed_escal, PyDoc_STR("*float*: Fixed O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuel_cost", (getter)SystemCosts_get_om_fuel_cost,(setter)SystemCosts_set_om_fuel_cost, - PyDoc_STR("*sequence*: Fuel cost [$/MMBtu]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cost [$/MMBtu]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuel_cost_escal", (getter)SystemCosts_get_om_fuel_cost_escal,(setter)SystemCosts_set_om_fuel_cost_escal, - PyDoc_STR("*float*: Fuel cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel cost escalation [%/year]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_capacity_cost", (getter)SystemCosts_get_om_fuelcell_capacity_cost,(setter)SystemCosts_set_om_fuelcell_capacity_cost, - PyDoc_STR("*sequence*: Fuel cell capacity-based System Costs amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell capacity-based System Costs amount [$/kWcap]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_fixed_cost", (getter)SystemCosts_get_om_fuelcell_fixed_cost,(setter)SystemCosts_set_om_fuelcell_fixed_cost, - PyDoc_STR("*sequence*: Fuel cell fixed System Costs annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell fixed System Costs annual amount [$/year]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_nameplate", (getter)SystemCosts_get_om_fuelcell_nameplate,(setter)SystemCosts_set_om_fuelcell_nameplate, - PyDoc_STR("*float*: Fuel cell capacity for System Costs values [kW]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel cell capacity for System Costs values [kW]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_replacement_cost", (getter)SystemCosts_get_om_fuelcell_replacement_cost,(setter)SystemCosts_set_om_fuelcell_replacement_cost, - PyDoc_STR("*sequence*: Replacement cost 2 [$/kW]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Replacement cost 2 [$/kW]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_variable_cost", (getter)SystemCosts_get_om_fuelcell_variable_cost,(setter)SystemCosts_set_om_fuelcell_variable_cost, - PyDoc_STR("*sequence*: Fuel cell production-based System Costs amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell production-based System Costs amount [$/MWh]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_cost", (getter)SystemCosts_get_om_opt_fuel_1_cost,(setter)SystemCosts_set_om_opt_fuel_1_cost, - PyDoc_STR("*sequence*: Biomass feedstock cost [$/unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Biomass feedstock cost [$/unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_cost_escal", (getter)SystemCosts_get_om_opt_fuel_1_cost_escal,(setter)SystemCosts_set_om_opt_fuel_1_cost_escal, - PyDoc_STR("*float*: Biomass feedstock cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Biomass feedstock cost escalation [%/year]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_usage", (getter)SystemCosts_get_om_opt_fuel_1_usage,(setter)SystemCosts_set_om_opt_fuel_1_usage, - PyDoc_STR("*float*: Biomass feedstock usage [unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Biomass feedstock usage [unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_cost", (getter)SystemCosts_get_om_opt_fuel_2_cost,(setter)SystemCosts_set_om_opt_fuel_2_cost, - PyDoc_STR("*sequence*: Coal feedstock cost [$/unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Coal feedstock cost [$/unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_cost_escal", (getter)SystemCosts_get_om_opt_fuel_2_cost_escal,(setter)SystemCosts_set_om_opt_fuel_2_cost_escal, - PyDoc_STR("*float*: Coal feedstock cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Coal feedstock cost escalation [%/year]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_usage", (getter)SystemCosts_get_om_opt_fuel_2_usage,(setter)SystemCosts_set_om_opt_fuel_2_usage, - PyDoc_STR("*float*: Coal feedstock usage [unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Coal feedstock usage [unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production", (getter)SystemCosts_get_om_production,(setter)SystemCosts_set_om_production, - PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production1_values", (getter)SystemCosts_get_om_production1_values,(setter)SystemCosts_set_om_production1_values, - PyDoc_STR("*sequence*: Battery production for System Costs values [kWh]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery production for System Costs values [kWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production2_values", (getter)SystemCosts_get_om_production2_values,(setter)SystemCosts_set_om_production2_values, - PyDoc_STR("*sequence*: Fuel cell production for System Costs values [kWh]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell production for System Costs values [kWh]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production_escal", (getter)SystemCosts_get_om_production_escal,(setter)SystemCosts_set_om_production_escal, PyDoc_STR("*float*: Production-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_replacement_cost_escal", (getter)SystemCosts_get_om_replacement_cost_escal,(setter)SystemCosts_set_om_replacement_cost_escal, - PyDoc_STR("*float*: Replacement cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Replacement cost escalation [%/year]\n\n**Info:**\nbattery,fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"system_lifetime_recapitalize", (getter)SystemCosts_get_system_lifetime_recapitalize,(setter)SystemCosts_set_system_lifetime_recapitalize, PyDoc_STR("*sequence*: Recapitalization boolean\n\n**INOUT:** This variable is both an input and an output to the compute module.\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), @@ -5275,7 +5275,7 @@ static PyGetSetDef SystemOutput_getset[] = { PyDoc_STR("*sequence*: Power generated by renewable resource [kW]\n\n**Required:**\nTrue"), NULL}, {"gen_purchases", (getter)SystemOutput_get_gen_purchases,(setter)SystemOutput_set_gen_purchases, - PyDoc_STR("*sequence*: Electricity from grid [kW]\n\n**INOUT:** This variable is both an input and an output to the compute module."), + PyDoc_STR("*sequence*: Electricity from grid to system [kW]\n\n**INOUT:** This variable is both an input and an output to the compute module."), NULL}, {"gen_without_battery", (getter)SystemOutput_get_gen_without_battery,(setter)SystemOutput_set_gen_without_battery, PyDoc_STR("*sequence*: Electricity to or from the renewable system, without the battery [kW]"), @@ -11540,8 +11540,6 @@ Merchantplant_unassign(CmodObject *self, PyObject *args) static PyMethodDef Merchantplant_methods[] = { {"execute", (PyCFunction)Merchantplant_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Merchantplant_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Merchantplant_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Financial Parameters': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Merchantplant_replace, METH_VARARGS, @@ -11552,6 +11550,8 @@ static PyMethodDef Merchantplant_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Merchantplant_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Merchantplant_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/MhkCosts.c b/modules/MhkCosts.c index 9b0518cf..dbc4cf83 100644 --- a/modules/MhkCosts.c +++ b/modules/MhkCosts.c @@ -1031,8 +1031,6 @@ MhkCosts_unassign(CmodObject *self, PyObject *args) static PyMethodDef MhkCosts_methods[] = { {"execute", (PyCFunction)MhkCosts_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)MhkCosts_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)MhkCosts_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'MHKCosts': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)MhkCosts_replace, METH_VARARGS, @@ -1043,6 +1041,8 @@ static PyMethodDef MhkCosts_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)MhkCosts_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)MhkCosts_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/MhkTidal.c b/modules/MhkTidal.c index fa2cc16d..bdf98b31 100644 --- a/modules/MhkTidal.c +++ b/modules/MhkTidal.c @@ -839,8 +839,6 @@ MhkTidal_unassign(CmodObject *self, PyObject *args) static PyMethodDef MhkTidal_methods[] = { {"execute", (PyCFunction)MhkTidal_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)MhkTidal_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)MhkTidal_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'MHKTidal': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)MhkTidal_replace, METH_VARARGS, @@ -851,6 +849,8 @@ static PyMethodDef MhkTidal_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)MhkTidal_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)MhkTidal_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/MhkWave.c b/modules/MhkWave.c index b05380f1..e02e59a6 100644 --- a/modules/MhkWave.c +++ b/modules/MhkWave.c @@ -1283,8 +1283,6 @@ MhkWave_unassign(CmodObject *self, PyObject *args) static PyMethodDef MhkWave_methods[] = { {"execute", (PyCFunction)MhkWave_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)MhkWave_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)MhkWave_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'MHKWave': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)MhkWave_replace, METH_VARARGS, @@ -1295,6 +1293,8 @@ static PyMethodDef MhkWave_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)MhkWave_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)MhkWave_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/MsptIph.c b/modules/MsptIph.c index ba63fa87..6da81cc5 100644 --- a/modules/MsptIph.c +++ b/modules/MsptIph.c @@ -7397,8 +7397,6 @@ MsptIph_unassign(CmodObject *self, PyObject *args) static PyMethodDef MsptIph_methods[] = { {"execute", (PyCFunction)MsptIph_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)MsptIph_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)MsptIph_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Solar Resource': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)MsptIph_replace, METH_VARARGS, @@ -7409,6 +7407,8 @@ static PyMethodDef MsptIph_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)MsptIph_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)MsptIph_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/MsptSfAndRecIsolated.c b/modules/MsptSfAndRecIsolated.c index 4ca733d1..3b248d2b 100644 --- a/modules/MsptSfAndRecIsolated.c +++ b/modules/MsptSfAndRecIsolated.c @@ -1733,8 +1733,6 @@ MsptSfAndRecIsolated_unassign(CmodObject *self, PyObject *args) static PyMethodDef MsptSfAndRecIsolated_methods[] = { {"execute", (PyCFunction)MsptSfAndRecIsolated_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)MsptSfAndRecIsolated_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)MsptSfAndRecIsolated_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Simulation': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)MsptSfAndRecIsolated_replace, METH_VARARGS, @@ -1745,6 +1743,8 @@ static PyMethodDef MsptSfAndRecIsolated_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)MsptSfAndRecIsolated_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)MsptSfAndRecIsolated_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/PtesDesignPoint.c b/modules/PtesDesignPoint.c index d02c2064..d7b837c1 100644 --- a/modules/PtesDesignPoint.c +++ b/modules/PtesDesignPoint.c @@ -857,8 +857,6 @@ PtesDesignPoint_unassign(CmodObject *self, PyObject *args) static PyMethodDef PtesDesignPoint_methods[] = { {"execute", (PyCFunction)PtesDesignPoint_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)PtesDesignPoint_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)PtesDesignPoint_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Common': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)PtesDesignPoint_replace, METH_VARARGS, @@ -869,6 +867,8 @@ static PyMethodDef PtesDesignPoint_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)PtesDesignPoint_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)PtesDesignPoint_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Pv6parmod.c b/modules/Pv6parmod.c index f02a09fd..0b316492 100644 --- a/modules/Pv6parmod.c +++ b/modules/Pv6parmod.c @@ -956,8 +956,6 @@ Pv6parmod_unassign(CmodObject *self, PyObject *args) static PyMethodDef Pv6parmod_methods[] = { {"execute", (PyCFunction)Pv6parmod_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Pv6parmod_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Pv6parmod_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'weather': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Pv6parmod_replace, METH_VARARGS, @@ -968,6 +966,8 @@ static PyMethodDef Pv6parmod_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Pv6parmod_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Pv6parmod_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/PvGetShadeLossMpp.c b/modules/PvGetShadeLossMpp.c index addb041e..0c70eca1 100644 --- a/modules/PvGetShadeLossMpp.c +++ b/modules/PvGetShadeLossMpp.c @@ -530,8 +530,6 @@ PvGetShadeLossMpp_unassign(CmodObject *self, PyObject *args) static PyMethodDef PvGetShadeLossMpp_methods[] = { {"execute", (PyCFunction)PvGetShadeLossMpp_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)PvGetShadeLossMpp_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)PvGetShadeLossMpp_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'PV Shade Loss DB': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)PvGetShadeLossMpp_replace, METH_VARARGS, @@ -542,6 +540,8 @@ static PyMethodDef PvGetShadeLossMpp_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)PvGetShadeLossMpp_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)PvGetShadeLossMpp_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Pvsamv1.c b/modules/Pvsamv1.c index ca800490..366b79d2 100644 --- a/modules/Pvsamv1.c +++ b/modules/Pvsamv1.c @@ -192,7 +192,7 @@ static PyGetSetDef SolarResource_getset[] = { PyDoc_STR("*dict*: Weather data\n\n**Info:**\nlat,lon,tz,elev,year,month,hour,minute,gh,dn,df,poa,tdry,twet,tdew,rhum,pres,snow,alb,aod,wspd,wdir\n\n**Required:**\nFalse for configuration with default inputs. May be required if a variable dependent on its value changes. Example: For the Detailed PV - Single Owner configuration, only Subarray 1 is enabled in the configuration defaults, so Subarray 2 inputs would not be required; if Subarray 2 is enabled, then Subarray 2 inputs is required."), NULL}, {"solar_resource_file", (getter)SolarResource_get_solar_resource_file,(setter)SolarResource_set_solar_resource_file, - PyDoc_STR("*str*: Weather file in TMY2, TMY3, EPW, or SAM CSV\n\n**Required:**\nFalse for configuration with default inputs. May be required if a variable dependent on its value changes. Example: For the Detailed PV - Single Owner configuration, only Subarray 1 is enabled in the configuration defaults, so Subarray 2 inputs would not be required; if Subarray 2 is enabled, then Subarray 2 inputs is required."), + PyDoc_STR("*str*: Weather file in TMY2, TMY3, EPW, or SAM CSV\n\n**Required:**\nFalse for configuration with default inputs. May be required if a variable dependent on its value changes. Example: For the Detailed PV - Single Owner configuration, only Subarray 1 is enabled in the configuration defaults, so Subarray 2 inputs would not be required; if Subarray 2 is enabled, then Subarray 2 inputs is required.\n\nThe value of the following variables depends on ``solar_resource_file``:\n\n\t - batt_room_temperature_celsius\n"), NULL}, {"use_spatial_albedos", (getter)SolarResource_get_use_spatial_albedos,(setter)SolarResource_set_use_spatial_albedos, PyDoc_STR("*float*: Use spatial albedo values [0/1]\n\n**Options:**\n0=no,1=yes\n\n**Constraints:**\nBOOLEAN\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), @@ -381,6 +381,18 @@ Losses_set_en_snow_model(VarGroupObject *self, PyObject *value, void *closure) return PySAM_double_setter(value, SAM_Pvsamv1_Losses_en_snow_model_nset, self->data_ptr); } +static PyObject * +Losses_get_snow_slide_coefficient(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Pvsamv1_Losses_snow_slide_coefficient_nget, self->data_ptr); +} + +static int +Losses_set_snow_slide_coefficient(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Pvsamv1_Losses_snow_slide_coefficient_nset, self->data_ptr); +} + static PyObject * Losses_get_subarray1_dcwiring_loss(VarGroupObject *self, void *closure) { @@ -865,6 +877,9 @@ static PyGetSetDef Losses_getset[] = { {"en_snow_model", (getter)Losses_get_en_snow_model,(setter)Losses_set_en_snow_model, PyDoc_STR("*float*: Toggle snow loss estimation [0/1]\n\n**Constraints:**\nBOOLEAN\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, +{"snow_slide_coefficient", (getter)Losses_get_snow_slide_coefficient,(setter)Losses_set_snow_slide_coefficient, + PyDoc_STR("*float*: Snow Slide Coefficient\n\n**Required:**\nFalse. Automatically set to 1.97 if not assigned explicitly or loaded from defaults."), + NULL}, {"subarray1_dcwiring_loss", (getter)Losses_get_subarray1_dcwiring_loss,(setter)Losses_set_subarray1_dcwiring_loss, PyDoc_STR("*float*: Sub-array 1 DC wiring loss [%]\n\n**Constraints:**\nMIN=0,MAX=100\n\n**Required:**\nTrue"), NULL}, @@ -2253,7 +2268,7 @@ static PyGetSetDef SystemDesign_getset[] = { PyDoc_STR("*float*: Enable mismatched subarray Vmax calculation\n\n**Constraints:**\nBOOLEAN\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"inverter_count", (getter)SystemDesign_get_inverter_count,(setter)SystemDesign_set_inverter_count, - PyDoc_STR("*float*: Number of inverters\n\n**Constraints:**\nINTEGER,POSITIVE\n\n**Required:**\nTrue\n\nThe value of ``inverter_count`` depends on the following variables:\n\n\t - 6par_imp\n\t - 6par_vmp\n\t - 6par_voc\n\t - cec_i_mp_ref\n\t - cec_v_mp_ref\n\t - cec_v_oc_ref\n\t - inv_cec_cg_paco\n\t - inv_ds_paco\n\t - inv_pd_paco\n\t - inv_snl_paco\n\t - inverter_model\n\t - module_model\n\t - mppt_hi_inverter\n\t - mppt_low_inverter\n\t - sd11par_Vmp0\n\t - sd11par_Voc0\n\t - snl_a\n\t - snl_a0\n\t - snl_a1\n\t - snl_a2\n\t - snl_a3\n\t - snl_a4\n\t - snl_aimp\n\t - snl_aisc\n\t - snl_area\n\t - snl_b\n\t - snl_b0\n\t - snl_b1\n\t - snl_b2\n\t - snl_b3\n\t - snl_b4\n\t - snl_b5\n\t - snl_bvmpo\n\t - snl_bvoco\n\t - snl_c0\n\t - snl_c1\n\t - snl_c2\n\t - snl_c3\n\t - snl_dtc\n\t - snl_fd\n\t - snl_impo\n\t - snl_isco\n\t - snl_mbvmp\n\t - snl_mbvoc\n\t - snl_module_structure\n\t - snl_n\n\t - snl_series_cells\n\t - snl_vmpo\n\t - snl_voco\n\t - spe_area\n\t - spe_eff0\n\t - spe_eff1\n\t - spe_eff2\n\t - spe_eff3\n\t - spe_eff4\n\t - spe_rad0\n\t - spe_rad1\n\t - spe_rad2\n\t - spe_rad3\n\t - spe_rad4\n\t - spe_reference\n\t - spe_vmp\n\t - spe_voc\n"), + PyDoc_STR("*float*: Number of inverters\n\n**Constraints:**\nINTEGER,POSITIVE\n\n**Required:**\nTrue\n\nThe value of the following variables depends on ``inverter_count``:\n\n\t - system_capacity\n\n\nThe value of ``inverter_count`` depends on the following variables:\n\n\t - 6par_imp\n\t - 6par_vmp\n\t - 6par_voc\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - batt_power_discharge_max_kwdc\n\t - cec_i_mp_ref\n\t - cec_v_mp_ref\n\t - cec_v_oc_ref\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_ds_paco\n\t - inv_pd_eff\n\t - inv_pd_paco\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n\t - module_model\n\t - mppt_hi_inverter\n\t - mppt_low_inverter\n\t - sd11par_Vmp0\n\t - sd11par_Voc0\n\t - snl_a\n\t - snl_a0\n\t - snl_a1\n\t - snl_a2\n\t - snl_a3\n\t - snl_a4\n\t - snl_aimp\n\t - snl_aisc\n\t - snl_area\n\t - snl_b\n\t - snl_b0\n\t - snl_b1\n\t - snl_b2\n\t - snl_b3\n\t - snl_b4\n\t - snl_b5\n\t - snl_bvmpo\n\t - snl_bvoco\n\t - snl_c0\n\t - snl_c1\n\t - snl_c2\n\t - snl_c3\n\t - snl_dtc\n\t - snl_fd\n\t - snl_impo\n\t - snl_isco\n\t - snl_mbvmp\n\t - snl_mbvoc\n\t - snl_module_structure\n\t - snl_n\n\t - snl_series_cells\n\t - snl_vmpo\n\t - snl_voco\n\t - spe_area\n\t - spe_eff0\n\t - spe_eff1\n\t - spe_eff2\n\t - spe_eff3\n\t - spe_eff4\n\t - spe_rad0\n\t - spe_rad1\n\t - spe_rad2\n\t - spe_rad3\n\t - spe_rad4\n\t - spe_reference\n\t - spe_vmp\n\t - spe_voc\n"), NULL}, {"subarray1_azimuth", (getter)SystemDesign_get_subarray1_azimuth,(setter)SystemDesign_set_subarray1_azimuth, PyDoc_STR("*float*: Sub-array 1 Azimuth [degrees]\n\n**Options:**\n0=N,90=E,180=S,270=W\n\n**Constraints:**\nMIN=0,MAX=359.9\n\n**Required:**\nsubarray1_track_mode~2&subarray1_track_mode~3"), @@ -2271,7 +2286,7 @@ static PyGetSetDef SystemDesign_getset[] = { PyDoc_STR("*float*: Sub-array 1 Ground coverage ratio [0..1]\n\n**Constraints:**\nMIN=0.01,MAX=0.99\n\n**Required:**\nFalse. Automatically set to 0.3 if not assigned explicitly or loaded from defaults."), NULL}, {"subarray1_modules_per_string", (getter)SystemDesign_get_subarray1_modules_per_string,(setter)SystemDesign_set_subarray1_modules_per_string, - PyDoc_STR("*float*: Sub-array 1 Modules per string\n\n**Constraints:**\nINTEGER,POSITIVE\n\n**Required:**\nTrue\n\nThe value of the following variables depends on ``subarray1_modules_per_string``:\n\n\t - system_capacity\n\n\nThe value of ``subarray1_modules_per_string`` depends on the following variables:\n\n\t - 6par_imp\n\t - 6par_vmp\n\t - 6par_voc\n\t - cec_i_mp_ref\n\t - cec_v_mp_ref\n\t - cec_v_oc_ref\n\t - inv_cec_cg_paco\n\t - inv_ds_paco\n\t - inv_pd_paco\n\t - inv_snl_paco\n\t - inverter_model\n\t - module_model\n\t - mppt_hi_inverter\n\t - mppt_low_inverter\n\t - sd11par_Vmp0\n\t - sd11par_Voc0\n\t - snl_a\n\t - snl_a0\n\t - snl_a1\n\t - snl_a2\n\t - snl_a3\n\t - snl_a4\n\t - snl_aimp\n\t - snl_aisc\n\t - snl_area\n\t - snl_b\n\t - snl_b0\n\t - snl_b1\n\t - snl_b2\n\t - snl_b3\n\t - snl_b4\n\t - snl_b5\n\t - snl_bvmpo\n\t - snl_bvoco\n\t - snl_c0\n\t - snl_c1\n\t - snl_c2\n\t - snl_c3\n\t - snl_dtc\n\t - snl_fd\n\t - snl_impo\n\t - snl_isco\n\t - snl_mbvmp\n\t - snl_mbvoc\n\t - snl_module_structure\n\t - snl_n\n\t - snl_series_cells\n\t - snl_vmpo\n\t - snl_voco\n\t - spe_area\n\t - spe_eff0\n\t - spe_eff1\n\t - spe_eff2\n\t - spe_eff3\n\t - spe_eff4\n\t - spe_rad0\n\t - spe_rad1\n\t - spe_rad2\n\t - spe_rad3\n\t - spe_rad4\n\t - spe_reference\n\t - spe_vmp\n\t - spe_voc\n"), + PyDoc_STR("*float*: Sub-array 1 Modules per string\n\n**Constraints:**\nINTEGER,POSITIVE\n\n**Required:**\nTrue\n\nThe value of the following variables depends on ``subarray1_modules_per_string``:\n\n\t - system_capacity\n\n\nThe value of ``subarray1_modules_per_string`` depends on the following variables:\n\n\t - 6par_imp\n\t - 6par_vmp\n\t - 6par_voc\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - batt_power_discharge_max_kwdc\n\t - cec_i_mp_ref\n\t - cec_v_mp_ref\n\t - cec_v_oc_ref\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_ds_paco\n\t - inv_pd_eff\n\t - inv_pd_paco\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n\t - module_model\n\t - mppt_hi_inverter\n\t - mppt_low_inverter\n\t - sd11par_Vmp0\n\t - sd11par_Voc0\n\t - snl_a\n\t - snl_a0\n\t - snl_a1\n\t - snl_a2\n\t - snl_a3\n\t - snl_a4\n\t - snl_aimp\n\t - snl_aisc\n\t - snl_area\n\t - snl_b\n\t - snl_b0\n\t - snl_b1\n\t - snl_b2\n\t - snl_b3\n\t - snl_b4\n\t - snl_b5\n\t - snl_bvmpo\n\t - snl_bvoco\n\t - snl_c0\n\t - snl_c1\n\t - snl_c2\n\t - snl_c3\n\t - snl_dtc\n\t - snl_fd\n\t - snl_impo\n\t - snl_isco\n\t - snl_mbvmp\n\t - snl_mbvoc\n\t - snl_module_structure\n\t - snl_n\n\t - snl_series_cells\n\t - snl_vmpo\n\t - snl_voco\n\t - spe_area\n\t - spe_eff0\n\t - spe_eff1\n\t - spe_eff2\n\t - spe_eff3\n\t - spe_eff4\n\t - spe_rad0\n\t - spe_rad1\n\t - spe_rad2\n\t - spe_rad3\n\t - spe_rad4\n\t - spe_reference\n\t - spe_vmp\n\t - spe_voc\n"), NULL}, {"subarray1_monthly_tilt", (getter)SystemDesign_get_subarray1_monthly_tilt,(setter)SystemDesign_set_subarray1_monthly_tilt, PyDoc_STR("*sequence*: Sub-array 1 monthly tilt input [degrees]\n\n**Constraints:**\nLENGTH=12\n\n**Required:**\nRequired if subarray1_track_mode=4"), @@ -2280,7 +2295,7 @@ static PyGetSetDef SystemDesign_getset[] = { PyDoc_STR("*float*: Sub-array 1 Inverter MPPT input number\n\n**Constraints:**\nINTEGER,POSITIVE\n\n**Required:**\nFalse. Automatically set to 1 if not assigned explicitly or loaded from defaults."), NULL}, {"subarray1_nstrings", (getter)SystemDesign_get_subarray1_nstrings,(setter)SystemDesign_set_subarray1_nstrings, - PyDoc_STR("*float*: Sub-array 1 Number of parallel strings\n\n**Constraints:**\nINTEGER,POSITIVE\n\nThe value of the following variables depends on ``subarray1_nstrings``:\n\n\t - system_capacity\n\n\nThe value of ``subarray1_nstrings`` depends on the following variables:\n\n\t - 6par_imp\n\t - 6par_vmp\n\t - 6par_voc\n\t - cec_i_mp_ref\n\t - cec_v_mp_ref\n\t - cec_v_oc_ref\n\t - inv_cec_cg_paco\n\t - inv_ds_paco\n\t - inv_pd_paco\n\t - inv_snl_paco\n\t - inverter_model\n\t - module_model\n\t - mppt_hi_inverter\n\t - mppt_low_inverter\n\t - sd11par_Vmp0\n\t - sd11par_Voc0\n\t - snl_a\n\t - snl_a0\n\t - snl_a1\n\t - snl_a2\n\t - snl_a3\n\t - snl_a4\n\t - snl_aimp\n\t - snl_aisc\n\t - snl_area\n\t - snl_b\n\t - snl_b0\n\t - snl_b1\n\t - snl_b2\n\t - snl_b3\n\t - snl_b4\n\t - snl_b5\n\t - snl_bvmpo\n\t - snl_bvoco\n\t - snl_c0\n\t - snl_c1\n\t - snl_c2\n\t - snl_c3\n\t - snl_dtc\n\t - snl_fd\n\t - snl_impo\n\t - snl_isco\n\t - snl_mbvmp\n\t - snl_mbvoc\n\t - snl_module_structure\n\t - snl_n\n\t - snl_series_cells\n\t - snl_vmpo\n\t - snl_voco\n\t - spe_area\n\t - spe_eff0\n\t - spe_eff1\n\t - spe_eff2\n\t - spe_eff3\n\t - spe_eff4\n\t - spe_rad0\n\t - spe_rad1\n\t - spe_rad2\n\t - spe_rad3\n\t - spe_rad4\n\t - spe_reference\n\t - spe_vmp\n\t - spe_voc\n"), + PyDoc_STR("*float*: Sub-array 1 Number of parallel strings\n\n**Constraints:**\nINTEGER,POSITIVE\n\nThe value of the following variables depends on ``subarray1_nstrings``:\n\n\t - system_capacity\n\n\nThe value of ``subarray1_nstrings`` depends on the following variables:\n\n\t - 6par_imp\n\t - 6par_vmp\n\t - 6par_voc\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - batt_power_discharge_max_kwdc\n\t - cec_i_mp_ref\n\t - cec_v_mp_ref\n\t - cec_v_oc_ref\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_ds_paco\n\t - inv_pd_eff\n\t - inv_pd_paco\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n\t - module_model\n\t - mppt_hi_inverter\n\t - mppt_low_inverter\n\t - sd11par_Vmp0\n\t - sd11par_Voc0\n\t - snl_a\n\t - snl_a0\n\t - snl_a1\n\t - snl_a2\n\t - snl_a3\n\t - snl_a4\n\t - snl_aimp\n\t - snl_aisc\n\t - snl_area\n\t - snl_b\n\t - snl_b0\n\t - snl_b1\n\t - snl_b2\n\t - snl_b3\n\t - snl_b4\n\t - snl_b5\n\t - snl_bvmpo\n\t - snl_bvoco\n\t - snl_c0\n\t - snl_c1\n\t - snl_c2\n\t - snl_c3\n\t - snl_dtc\n\t - snl_fd\n\t - snl_impo\n\t - snl_isco\n\t - snl_mbvmp\n\t - snl_mbvoc\n\t - snl_module_structure\n\t - snl_n\n\t - snl_series_cells\n\t - snl_vmpo\n\t - snl_voco\n\t - spe_area\n\t - spe_eff0\n\t - spe_eff1\n\t - spe_eff2\n\t - spe_eff3\n\t - spe_eff4\n\t - spe_rad0\n\t - spe_rad1\n\t - spe_rad2\n\t - spe_rad3\n\t - spe_rad4\n\t - spe_reference\n\t - spe_vmp\n\t - spe_voc\n"), NULL}, {"subarray1_rotlim", (getter)SystemDesign_get_subarray1_rotlim,(setter)SystemDesign_set_subarray1_rotlim, PyDoc_STR("*float*: Sub-array 1 Tracker rotation limit [degrees]\n\n**Constraints:**\nMIN=0,MAX=85\n\n**Required:**\nFalse. Automatically set to 45 if not assigned explicitly or loaded from defaults."), @@ -2319,7 +2334,7 @@ static PyGetSetDef SystemDesign_getset[] = { PyDoc_STR("*sequence*: Sub-array 2 Custom tracker rotation angles [deg]\n\n**Required:**\nRequired if subarray2_use_custom_rot_angles=1"), NULL}, {"subarray2_enable", (getter)SystemDesign_get_subarray2_enable,(setter)SystemDesign_set_subarray2_enable, - PyDoc_STR("*float*: Sub-array 2 Enable [0/1]\n\n**Options:**\n0=disabled,1=enabled\n\n**Constraints:**\nBOOLEAN\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults.\n\nThe value of the following variables depends on ``subarray2_enable``:\n\n\t - system_capacity\n\n\nThe value of ``subarray2_enable`` depends on the following variables:\n\n\t - 6par_imp\n\t - 6par_vmp\n\t - 6par_voc\n\t - cec_i_mp_ref\n\t - cec_v_mp_ref\n\t - cec_v_oc_ref\n\t - inv_cec_cg_paco\n\t - inv_ds_paco\n\t - inv_pd_paco\n\t - inv_snl_paco\n\t - inverter_model\n\t - module_model\n\t - mppt_hi_inverter\n\t - mppt_low_inverter\n\t - sd11par_Vmp0\n\t - sd11par_Voc0\n\t - snl_a\n\t - snl_a0\n\t - snl_a1\n\t - snl_a2\n\t - snl_a3\n\t - snl_a4\n\t - snl_aimp\n\t - snl_aisc\n\t - snl_area\n\t - snl_b\n\t - snl_b0\n\t - snl_b1\n\t - snl_b2\n\t - snl_b3\n\t - snl_b4\n\t - snl_b5\n\t - snl_bvmpo\n\t - snl_bvoco\n\t - snl_c0\n\t - snl_c1\n\t - snl_c2\n\t - snl_c3\n\t - snl_dtc\n\t - snl_fd\n\t - snl_impo\n\t - snl_isco\n\t - snl_mbvmp\n\t - snl_mbvoc\n\t - snl_module_structure\n\t - snl_n\n\t - snl_series_cells\n\t - snl_vmpo\n\t - snl_voco\n\t - spe_area\n\t - spe_eff0\n\t - spe_eff1\n\t - spe_eff2\n\t - spe_eff3\n\t - spe_eff4\n\t - spe_rad0\n\t - spe_rad1\n\t - spe_rad2\n\t - spe_rad3\n\t - spe_rad4\n\t - spe_reference\n\t - spe_vmp\n\t - spe_voc\n"), + PyDoc_STR("*float*: Sub-array 2 Enable [0/1]\n\n**Options:**\n0=disabled,1=enabled\n\n**Constraints:**\nBOOLEAN\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults.\n\nThe value of the following variables depends on ``subarray2_enable``:\n\n\t - system_capacity\n\n\nThe value of ``subarray2_enable`` depends on the following variables:\n\n\t - 6par_imp\n\t - 6par_vmp\n\t - 6par_voc\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - batt_power_discharge_max_kwdc\n\t - cec_i_mp_ref\n\t - cec_v_mp_ref\n\t - cec_v_oc_ref\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_ds_paco\n\t - inv_pd_eff\n\t - inv_pd_paco\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n\t - module_model\n\t - mppt_hi_inverter\n\t - mppt_low_inverter\n\t - sd11par_Vmp0\n\t - sd11par_Voc0\n\t - snl_a\n\t - snl_a0\n\t - snl_a1\n\t - snl_a2\n\t - snl_a3\n\t - snl_a4\n\t - snl_aimp\n\t - snl_aisc\n\t - snl_area\n\t - snl_b\n\t - snl_b0\n\t - snl_b1\n\t - snl_b2\n\t - snl_b3\n\t - snl_b4\n\t - snl_b5\n\t - snl_bvmpo\n\t - snl_bvoco\n\t - snl_c0\n\t - snl_c1\n\t - snl_c2\n\t - snl_c3\n\t - snl_dtc\n\t - snl_fd\n\t - snl_impo\n\t - snl_isco\n\t - snl_mbvmp\n\t - snl_mbvoc\n\t - snl_module_structure\n\t - snl_n\n\t - snl_series_cells\n\t - snl_vmpo\n\t - snl_voco\n\t - spe_area\n\t - spe_eff0\n\t - spe_eff1\n\t - spe_eff2\n\t - spe_eff3\n\t - spe_eff4\n\t - spe_rad0\n\t - spe_rad1\n\t - spe_rad2\n\t - spe_rad3\n\t - spe_rad4\n\t - spe_reference\n\t - spe_vmp\n\t - spe_voc\n"), NULL}, {"subarray2_gcr", (getter)SystemDesign_get_subarray2_gcr,(setter)SystemDesign_set_subarray2_gcr, PyDoc_STR("*float*: Sub-array 2 Ground coverage ratio [0..1]\n\n**Constraints:**\nMIN=0.01,MAX=0.99\n\n**Required:**\nFalse. Automatically set to 0.3 if not assigned explicitly or loaded from defaults."), @@ -2373,7 +2388,7 @@ static PyGetSetDef SystemDesign_getset[] = { PyDoc_STR("*sequence*: Sub-array 3 Custom tracker rotation angles [deg]\n\n**Required:**\nRequired if subarray3_use_custom_rot_angles=1"), NULL}, {"subarray3_enable", (getter)SystemDesign_get_subarray3_enable,(setter)SystemDesign_set_subarray3_enable, - PyDoc_STR("*float*: Sub-array 3 Enable [0/1]\n\n**Options:**\n0=disabled,1=enabled\n\n**Constraints:**\nBOOLEAN\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults.\n\nThe value of the following variables depends on ``subarray3_enable``:\n\n\t - system_capacity\n\n\nThe value of ``subarray3_enable`` depends on the following variables:\n\n\t - 6par_imp\n\t - 6par_vmp\n\t - 6par_voc\n\t - cec_i_mp_ref\n\t - cec_v_mp_ref\n\t - cec_v_oc_ref\n\t - inv_cec_cg_paco\n\t - inv_ds_paco\n\t - inv_pd_paco\n\t - inv_snl_paco\n\t - inverter_model\n\t - module_model\n\t - mppt_hi_inverter\n\t - mppt_low_inverter\n\t - sd11par_Vmp0\n\t - sd11par_Voc0\n\t - snl_a\n\t - snl_a0\n\t - snl_a1\n\t - snl_a2\n\t - snl_a3\n\t - snl_a4\n\t - snl_aimp\n\t - snl_aisc\n\t - snl_area\n\t - snl_b\n\t - snl_b0\n\t - snl_b1\n\t - snl_b2\n\t - snl_b3\n\t - snl_b4\n\t - snl_b5\n\t - snl_bvmpo\n\t - snl_bvoco\n\t - snl_c0\n\t - snl_c1\n\t - snl_c2\n\t - snl_c3\n\t - snl_dtc\n\t - snl_fd\n\t - snl_impo\n\t - snl_isco\n\t - snl_mbvmp\n\t - snl_mbvoc\n\t - snl_module_structure\n\t - snl_n\n\t - snl_series_cells\n\t - snl_vmpo\n\t - snl_voco\n\t - spe_area\n\t - spe_eff0\n\t - spe_eff1\n\t - spe_eff2\n\t - spe_eff3\n\t - spe_eff4\n\t - spe_rad0\n\t - spe_rad1\n\t - spe_rad2\n\t - spe_rad3\n\t - spe_rad4\n\t - spe_reference\n\t - spe_vmp\n\t - spe_voc\n"), + PyDoc_STR("*float*: Sub-array 3 Enable [0/1]\n\n**Options:**\n0=disabled,1=enabled\n\n**Constraints:**\nBOOLEAN\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults.\n\nThe value of the following variables depends on ``subarray3_enable``:\n\n\t - system_capacity\n\n\nThe value of ``subarray3_enable`` depends on the following variables:\n\n\t - 6par_imp\n\t - 6par_vmp\n\t - 6par_voc\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - batt_power_discharge_max_kwdc\n\t - cec_i_mp_ref\n\t - cec_v_mp_ref\n\t - cec_v_oc_ref\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_ds_paco\n\t - inv_pd_eff\n\t - inv_pd_paco\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n\t - module_model\n\t - mppt_hi_inverter\n\t - mppt_low_inverter\n\t - sd11par_Vmp0\n\t - sd11par_Voc0\n\t - snl_a\n\t - snl_a0\n\t - snl_a1\n\t - snl_a2\n\t - snl_a3\n\t - snl_a4\n\t - snl_aimp\n\t - snl_aisc\n\t - snl_area\n\t - snl_b\n\t - snl_b0\n\t - snl_b1\n\t - snl_b2\n\t - snl_b3\n\t - snl_b4\n\t - snl_b5\n\t - snl_bvmpo\n\t - snl_bvoco\n\t - snl_c0\n\t - snl_c1\n\t - snl_c2\n\t - snl_c3\n\t - snl_dtc\n\t - snl_fd\n\t - snl_impo\n\t - snl_isco\n\t - snl_mbvmp\n\t - snl_mbvoc\n\t - snl_module_structure\n\t - snl_n\n\t - snl_series_cells\n\t - snl_vmpo\n\t - snl_voco\n\t - spe_area\n\t - spe_eff0\n\t - spe_eff1\n\t - spe_eff2\n\t - spe_eff3\n\t - spe_eff4\n\t - spe_rad0\n\t - spe_rad1\n\t - spe_rad2\n\t - spe_rad3\n\t - spe_rad4\n\t - spe_reference\n\t - spe_vmp\n\t - spe_voc\n"), NULL}, {"subarray3_gcr", (getter)SystemDesign_get_subarray3_gcr,(setter)SystemDesign_set_subarray3_gcr, PyDoc_STR("*float*: Sub-array 3 Ground coverage ratio [0..1]\n\n**Constraints:**\nMIN=0.01,MAX=0.99\n\n**Required:**\nFalse. Automatically set to 0.3 if not assigned explicitly or loaded from defaults."), @@ -2427,7 +2442,7 @@ static PyGetSetDef SystemDesign_getset[] = { PyDoc_STR("*sequence*: Sub-array 4 Custom tracker rotation angles [deg]\n\n**Required:**\nRequired if subarray4_use_custom_rot_angles=1"), NULL}, {"subarray4_enable", (getter)SystemDesign_get_subarray4_enable,(setter)SystemDesign_set_subarray4_enable, - PyDoc_STR("*float*: Sub-array 4 Enable [0/1]\n\n**Options:**\n0=disabled,1=enabled\n\n**Constraints:**\nBOOLEAN\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults.\n\nThe value of the following variables depends on ``subarray4_enable``:\n\n\t - system_capacity\n\n\nThe value of ``subarray4_enable`` depends on the following variables:\n\n\t - 6par_imp\n\t - 6par_vmp\n\t - 6par_voc\n\t - cec_i_mp_ref\n\t - cec_v_mp_ref\n\t - cec_v_oc_ref\n\t - inv_cec_cg_paco\n\t - inv_ds_paco\n\t - inv_pd_paco\n\t - inv_snl_paco\n\t - inverter_model\n\t - module_model\n\t - mppt_hi_inverter\n\t - mppt_low_inverter\n\t - sd11par_Vmp0\n\t - sd11par_Voc0\n\t - snl_a\n\t - snl_a0\n\t - snl_a1\n\t - snl_a2\n\t - snl_a3\n\t - snl_a4\n\t - snl_aimp\n\t - snl_aisc\n\t - snl_area\n\t - snl_b\n\t - snl_b0\n\t - snl_b1\n\t - snl_b2\n\t - snl_b3\n\t - snl_b4\n\t - snl_b5\n\t - snl_bvmpo\n\t - snl_bvoco\n\t - snl_c0\n\t - snl_c1\n\t - snl_c2\n\t - snl_c3\n\t - snl_dtc\n\t - snl_fd\n\t - snl_impo\n\t - snl_isco\n\t - snl_mbvmp\n\t - snl_mbvoc\n\t - snl_module_structure\n\t - snl_n\n\t - snl_series_cells\n\t - snl_vmpo\n\t - snl_voco\n\t - spe_area\n\t - spe_eff0\n\t - spe_eff1\n\t - spe_eff2\n\t - spe_eff3\n\t - spe_eff4\n\t - spe_rad0\n\t - spe_rad1\n\t - spe_rad2\n\t - spe_rad3\n\t - spe_rad4\n\t - spe_reference\n\t - spe_vmp\n\t - spe_voc\n"), + PyDoc_STR("*float*: Sub-array 4 Enable [0/1]\n\n**Options:**\n0=disabled,1=enabled\n\n**Constraints:**\nBOOLEAN\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults.\n\nThe value of the following variables depends on ``subarray4_enable``:\n\n\t - system_capacity\n\n\nThe value of ``subarray4_enable`` depends on the following variables:\n\n\t - 6par_imp\n\t - 6par_vmp\n\t - 6par_voc\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - batt_power_discharge_max_kwdc\n\t - cec_i_mp_ref\n\t - cec_v_mp_ref\n\t - cec_v_oc_ref\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_ds_paco\n\t - inv_pd_eff\n\t - inv_pd_paco\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n\t - module_model\n\t - mppt_hi_inverter\n\t - mppt_low_inverter\n\t - sd11par_Vmp0\n\t - sd11par_Voc0\n\t - snl_a\n\t - snl_a0\n\t - snl_a1\n\t - snl_a2\n\t - snl_a3\n\t - snl_a4\n\t - snl_aimp\n\t - snl_aisc\n\t - snl_area\n\t - snl_b\n\t - snl_b0\n\t - snl_b1\n\t - snl_b2\n\t - snl_b3\n\t - snl_b4\n\t - snl_b5\n\t - snl_bvmpo\n\t - snl_bvoco\n\t - snl_c0\n\t - snl_c1\n\t - snl_c2\n\t - snl_c3\n\t - snl_dtc\n\t - snl_fd\n\t - snl_impo\n\t - snl_isco\n\t - snl_mbvmp\n\t - snl_mbvoc\n\t - snl_module_structure\n\t - snl_n\n\t - snl_series_cells\n\t - snl_vmpo\n\t - snl_voco\n\t - spe_area\n\t - spe_eff0\n\t - spe_eff1\n\t - spe_eff2\n\t - spe_eff3\n\t - spe_eff4\n\t - spe_rad0\n\t - spe_rad1\n\t - spe_rad2\n\t - spe_rad3\n\t - spe_rad4\n\t - spe_reference\n\t - spe_vmp\n\t - spe_voc\n"), NULL}, {"subarray4_gcr", (getter)SystemDesign_get_subarray4_gcr,(setter)SystemDesign_set_subarray4_gcr, PyDoc_STR("*float*: Sub-array 4 Ground coverage ratio [0..1]\n\n**Constraints:**\nMIN=0.01,MAX=0.99\n\n**Required:**\nFalse. Automatically set to 0.3 if not assigned explicitly or loaded from defaults."), @@ -2469,7 +2484,7 @@ static PyGetSetDef SystemDesign_getset[] = { PyDoc_STR("*float*: Sub-array 4 Use custom tracker rotation angles [0/1]\n\n**Constraints:**\nINTEGER,MIN=0,MAX=1\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"system_capacity", (getter)SystemDesign_get_system_capacity,(setter)SystemDesign_set_system_capacity, - PyDoc_STR("*float*: DC Nameplate capacity [kWdc]\n\n**Required:**\nTrue\n\nThe value of ``system_capacity`` depends on the following variables:\n\n\t - 6par_imp\n\t - 6par_vmp\n\t - 6par_voc\n\t - cec_i_mp_ref\n\t - cec_v_mp_ref\n\t - cec_v_oc_ref\n\t - inv_cec_cg_paco\n\t - inv_ds_paco\n\t - inv_pd_paco\n\t - inv_snl_paco\n\t - inverter_model\n\t - module_model\n\t - mppt_hi_inverter\n\t - mppt_low_inverter\n\t - sd11par_Vmp0\n\t - sd11par_Voc0\n\t - snl_a\n\t - snl_a0\n\t - snl_a1\n\t - snl_a2\n\t - snl_a3\n\t - snl_a4\n\t - snl_aimp\n\t - snl_aisc\n\t - snl_area\n\t - snl_b\n\t - snl_b0\n\t - snl_b1\n\t - snl_b2\n\t - snl_b3\n\t - snl_b4\n\t - snl_b5\n\t - snl_bvmpo\n\t - snl_bvoco\n\t - snl_c0\n\t - snl_c1\n\t - snl_c2\n\t - snl_c3\n\t - snl_dtc\n\t - snl_fd\n\t - snl_impo\n\t - snl_isco\n\t - snl_mbvmp\n\t - snl_mbvoc\n\t - snl_module_structure\n\t - snl_n\n\t - snl_series_cells\n\t - snl_vmpo\n\t - snl_voco\n\t - spe_area\n\t - spe_eff0\n\t - spe_eff1\n\t - spe_eff2\n\t - spe_eff3\n\t - spe_eff4\n\t - spe_rad0\n\t - spe_rad1\n\t - spe_rad2\n\t - spe_rad3\n\t - spe_rad4\n\t - spe_reference\n\t - spe_vmp\n\t - spe_voc\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray2_modules_per_string\n\t - subarray2_nstrings\n\t - subarray3_enable\n\t - subarray3_modules_per_string\n\t - subarray3_nstrings\n\t - subarray4_enable\n\t - subarray4_modules_per_string\n\t - subarray4_nstrings\n"), + PyDoc_STR("*float*: DC Nameplate capacity [kWdc]\n\n**Required:**\nTrue\n\nThe value of ``system_capacity`` depends on the following variables:\n\n\t - 6par_imp\n\t - 6par_vmp\n\t - 6par_voc\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - cec_i_mp_ref\n\t - cec_v_mp_ref\n\t - cec_v_oc_ref\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_ds_paco\n\t - inv_pd_eff\n\t - inv_pd_paco\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_count\n\t - inverter_model\n\t - module_model\n\t - mppt_hi_inverter\n\t - mppt_low_inverter\n\t - sd11par_Vmp0\n\t - sd11par_Voc0\n\t - snl_a\n\t - snl_a0\n\t - snl_a1\n\t - snl_a2\n\t - snl_a3\n\t - snl_a4\n\t - snl_aimp\n\t - snl_aisc\n\t - snl_area\n\t - snl_b\n\t - snl_b0\n\t - snl_b1\n\t - snl_b2\n\t - snl_b3\n\t - snl_b4\n\t - snl_b5\n\t - snl_bvmpo\n\t - snl_bvoco\n\t - snl_c0\n\t - snl_c1\n\t - snl_c2\n\t - snl_c3\n\t - snl_dtc\n\t - snl_fd\n\t - snl_impo\n\t - snl_isco\n\t - snl_mbvmp\n\t - snl_mbvoc\n\t - snl_module_structure\n\t - snl_n\n\t - snl_series_cells\n\t - snl_vmpo\n\t - snl_voco\n\t - spe_area\n\t - spe_eff0\n\t - spe_eff1\n\t - spe_eff2\n\t - spe_eff3\n\t - spe_eff4\n\t - spe_rad0\n\t - spe_rad1\n\t - spe_rad2\n\t - spe_rad3\n\t - spe_rad4\n\t - spe_reference\n\t - spe_vmp\n\t - spe_voc\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray2_modules_per_string\n\t - subarray2_nstrings\n\t - subarray3_enable\n\t - subarray3_modules_per_string\n\t - subarray3_nstrings\n\t - subarray4_enable\n\t - subarray4_modules_per_string\n\t - subarray4_nstrings\n"), NULL}, {NULL} /* Sentinel */ }; @@ -7748,13 +7763,13 @@ Inverter_set_mppt_low_inverter(VarGroupObject *self, PyObject *value, void *clos static PyGetSetDef Inverter_getset[] = { {"inv_cec_cg_eff_cec", (getter)Inverter_get_inv_cec_cg_eff_cec,(setter)Inverter_set_inv_cec_cg_eff_cec, - PyDoc_STR("*float*: Inverter Coefficient Generator CEC Efficiency [%]\n\nThe value of ``inv_cec_cg_eff_cec`` depends on the following variables:\n\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n"), + PyDoc_STR("*float*: Inverter Coefficient Generator CEC Efficiency [%]\n\nThe value of the following variables depends on ``inv_cec_cg_eff_cec``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n\n\nThe value of ``inv_cec_cg_eff_cec`` depends on the following variables:\n\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n"), NULL}, {"inv_cec_cg_paco", (getter)Inverter_get_inv_cec_cg_paco,(setter)Inverter_set_inv_cec_cg_paco, - PyDoc_STR("*float*: Inverter Coefficient Generator Max AC Power [Wac]\n\nThe value of the following variables depends on ``inv_cec_cg_paco``:\n\n\t - inv_cec_cg_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), + PyDoc_STR("*float*: Inverter Coefficient Generator Max AC Power [Wac]\n\nThe value of the following variables depends on ``inv_cec_cg_paco``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inv_cec_cg_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inv_ds_eff", (getter)Inverter_get_inv_ds_eff,(setter)Inverter_set_inv_ds_eff, - PyDoc_STR("*float*: Inverter Datasheet Efficiency [%]"), + PyDoc_STR("*float*: Inverter Datasheet Efficiency [%]\n\nThe value of the following variables depends on ``inv_ds_eff``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inv_ds_paco", (getter)Inverter_get_inv_ds_paco,(setter)Inverter_set_inv_ds_paco, PyDoc_STR("*float*: Inverter Datasheet Maximum AC Power [Wac]\n\nThe value of the following variables depends on ``inv_ds_paco``:\n\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), @@ -7763,22 +7778,22 @@ static PyGetSetDef Inverter_getset[] = { PyDoc_STR("*float*: Number of MPPT inputs\n\n**Constraints:**\nINTEGER,MIN=0,MAX=4\n\n**Required:**\nFalse. Automatically set to 1 if not assigned explicitly or loaded from defaults.\n\nThe value of ``inv_num_mppt`` depends on the following variables:\n\n\t - inverter_model\n"), NULL}, {"inv_pd_eff", (getter)Inverter_get_inv_pd_eff,(setter)Inverter_set_inv_pd_eff, - PyDoc_STR("*float*: Inverter Partload Efficiency [%]\n\nThe value of the following variables depends on ``inv_pd_eff``:\n\n\t - inv_pd_pdco\n"), + PyDoc_STR("*float*: Inverter Partload Efficiency [%]\n\nThe value of the following variables depends on ``inv_pd_eff``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inv_pd_pdco\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inv_pd_paco", (getter)Inverter_get_inv_pd_paco,(setter)Inverter_set_inv_pd_paco, PyDoc_STR("*float*: Inverter Partload Maximum AC Power [Wac]\n\nThe value of the following variables depends on ``inv_pd_paco``:\n\n\t - inv_pd_pdco\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inv_snl_eff_cec", (getter)Inverter_get_inv_snl_eff_cec,(setter)Inverter_set_inv_snl_eff_cec, - PyDoc_STR("*float*: Inverter Sandia CEC Efficiency [%]\n\nThe value of ``inv_snl_eff_cec`` depends on the following variables:\n\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n"), + PyDoc_STR("*float*: Inverter Sandia CEC Efficiency [%]\n\nThe value of the following variables depends on ``inv_snl_eff_cec``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n\n\nThe value of ``inv_snl_eff_cec`` depends on the following variables:\n\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n"), NULL}, {"inv_snl_paco", (getter)Inverter_get_inv_snl_paco,(setter)Inverter_set_inv_snl_paco, - PyDoc_STR("*float*: Inverter Sandia Maximum AC Power [Wac]\n\nThe value of the following variables depends on ``inv_snl_paco``:\n\n\t - inv_snl_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), + PyDoc_STR("*float*: Inverter Sandia Maximum AC Power [Wac]\n\nThe value of the following variables depends on ``inv_snl_paco``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inv_snl_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inverter_count", (getter)Inverter_get_inverter_count,(setter)Inverter_set_inverter_count, - PyDoc_STR("*float*: Number of inverters\n\nThe value of ``inverter_count`` depends on the following variables:\n\n\t - 6par_imp\n\t - 6par_vmp\n\t - 6par_voc\n\t - cec_i_mp_ref\n\t - cec_v_mp_ref\n\t - cec_v_oc_ref\n\t - inv_cec_cg_paco\n\t - inv_ds_paco\n\t - inv_pd_paco\n\t - inv_snl_paco\n\t - inverter_model\n\t - module_model\n\t - mppt_hi_inverter\n\t - mppt_low_inverter\n\t - sd11par_Vmp0\n\t - sd11par_Voc0\n\t - snl_a\n\t - snl_a0\n\t - snl_a1\n\t - snl_a2\n\t - snl_a3\n\t - snl_a4\n\t - snl_aimp\n\t - snl_aisc\n\t - snl_area\n\t - snl_b\n\t - snl_b0\n\t - snl_b1\n\t - snl_b2\n\t - snl_b3\n\t - snl_b4\n\t - snl_b5\n\t - snl_bvmpo\n\t - snl_bvoco\n\t - snl_c0\n\t - snl_c1\n\t - snl_c2\n\t - snl_c3\n\t - snl_dtc\n\t - snl_fd\n\t - snl_impo\n\t - snl_isco\n\t - snl_mbvmp\n\t - snl_mbvoc\n\t - snl_module_structure\n\t - snl_n\n\t - snl_series_cells\n\t - snl_vmpo\n\t - snl_voco\n\t - spe_area\n\t - spe_eff0\n\t - spe_eff1\n\t - spe_eff2\n\t - spe_eff3\n\t - spe_eff4\n\t - spe_rad0\n\t - spe_rad1\n\t - spe_rad2\n\t - spe_rad3\n\t - spe_rad4\n\t - spe_reference\n\t - spe_vmp\n\t - spe_voc\n"), + PyDoc_STR("*float*: Number of inverters\n\nThe value of the following variables depends on ``inverter_count``:\n\n\t - system_capacity\n\n\nThe value of ``inverter_count`` depends on the following variables:\n\n\t - 6par_imp\n\t - 6par_vmp\n\t - 6par_voc\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - batt_power_discharge_max_kwdc\n\t - cec_i_mp_ref\n\t - cec_v_mp_ref\n\t - cec_v_oc_ref\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_ds_paco\n\t - inv_pd_eff\n\t - inv_pd_paco\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n\t - module_model\n\t - mppt_hi_inverter\n\t - mppt_low_inverter\n\t - sd11par_Vmp0\n\t - sd11par_Voc0\n\t - snl_a\n\t - snl_a0\n\t - snl_a1\n\t - snl_a2\n\t - snl_a3\n\t - snl_a4\n\t - snl_aimp\n\t - snl_aisc\n\t - snl_area\n\t - snl_b\n\t - snl_b0\n\t - snl_b1\n\t - snl_b2\n\t - snl_b3\n\t - snl_b4\n\t - snl_b5\n\t - snl_bvmpo\n\t - snl_bvoco\n\t - snl_c0\n\t - snl_c1\n\t - snl_c2\n\t - snl_c3\n\t - snl_dtc\n\t - snl_fd\n\t - snl_impo\n\t - snl_isco\n\t - snl_mbvmp\n\t - snl_mbvoc\n\t - snl_module_structure\n\t - snl_n\n\t - snl_series_cells\n\t - snl_vmpo\n\t - snl_voco\n\t - spe_area\n\t - spe_eff0\n\t - spe_eff1\n\t - spe_eff2\n\t - spe_eff3\n\t - spe_eff4\n\t - spe_rad0\n\t - spe_rad1\n\t - spe_rad2\n\t - spe_rad3\n\t - spe_rad4\n\t - spe_reference\n\t - spe_vmp\n\t - spe_voc\n"), NULL}, {"inverter_model", (getter)Inverter_get_inverter_model,(setter)Inverter_set_inverter_model, - PyDoc_STR("*float*: Inverter model specifier\n\n**Options:**\n0=cec,1=datasheet,2=partload,3=coefficientgenerator,4=PVYield\n\n**Constraints:**\nINTEGER,MIN=0,MAX=4\n\n**Required:**\nTrue\n\nThe value of the following variables depends on ``inverter_model``:\n\n\t - inv_num_mppt\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), + PyDoc_STR("*float*: Inverter model specifier\n\n**Options:**\n0=cec,1=datasheet,2=partload,3=coefficientgenerator,4=PVYield\n\n**Constraints:**\nINTEGER,MIN=0,MAX=4\n\n**Required:**\nTrue\n\nThe value of the following variables depends on ``inverter_model``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inv_num_mppt\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"mppt_hi_inverter", (getter)Inverter_get_mppt_hi_inverter,(setter)Inverter_set_mppt_hi_inverter, PyDoc_STR("*float*: Maximum inverter MPPT voltage window [Vdc]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults.\n\nThe value of the following variables depends on ``mppt_hi_inverter``:\n\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), @@ -8041,34 +8056,34 @@ InverterCECDatabase_set_inv_tdc_cec_db(VarGroupObject *self, PyObject *value, vo static PyGetSetDef InverterCECDatabase_getset[] = { {"inv_snl_c0", (getter)InverterCECDatabase_get_inv_snl_c0,(setter)InverterCECDatabase_set_inv_snl_c0, - PyDoc_STR("*float*: Curvature between AC power and DC power at ref [1/W]\n\n**Required:**\nRequired if inverter_model=0\n\nThe value of the following variables depends on ``inv_snl_c0``:\n\n\t - inv_snl_eff_cec\n"), + PyDoc_STR("*float*: Curvature between AC power and DC power at ref [1/W]\n\n**Required:**\nRequired if inverter_model=0\n\nThe value of the following variables depends on ``inv_snl_c0``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inv_snl_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inv_snl_c1", (getter)InverterCECDatabase_get_inv_snl_c1,(setter)InverterCECDatabase_set_inv_snl_c1, - PyDoc_STR("*float*: Coefficient of Pdco variation with DC input voltage [1/V]\n\n**Required:**\nRequired if inverter_model=0\n\nThe value of the following variables depends on ``inv_snl_c1``:\n\n\t - inv_snl_eff_cec\n"), + PyDoc_STR("*float*: Coefficient of Pdco variation with DC input voltage [1/V]\n\n**Required:**\nRequired if inverter_model=0\n\nThe value of the following variables depends on ``inv_snl_c1``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inv_snl_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inv_snl_c2", (getter)InverterCECDatabase_get_inv_snl_c2,(setter)InverterCECDatabase_set_inv_snl_c2, - PyDoc_STR("*float*: Coefficient of Pso variation with DC input voltage [1/V]\n\n**Required:**\nRequired if inverter_model=0\n\nThe value of the following variables depends on ``inv_snl_c2``:\n\n\t - inv_snl_eff_cec\n"), + PyDoc_STR("*float*: Coefficient of Pso variation with DC input voltage [1/V]\n\n**Required:**\nRequired if inverter_model=0\n\nThe value of the following variables depends on ``inv_snl_c2``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inv_snl_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inv_snl_c3", (getter)InverterCECDatabase_get_inv_snl_c3,(setter)InverterCECDatabase_set_inv_snl_c3, - PyDoc_STR("*float*: Coefficient of Co variation with DC input voltage [1/V]\n\n**Required:**\nRequired if inverter_model=0\n\nThe value of the following variables depends on ``inv_snl_c3``:\n\n\t - inv_snl_eff_cec\n"), + PyDoc_STR("*float*: Coefficient of Co variation with DC input voltage [1/V]\n\n**Required:**\nRequired if inverter_model=0\n\nThe value of the following variables depends on ``inv_snl_c3``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inv_snl_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inv_snl_paco", (getter)InverterCECDatabase_get_inv_snl_paco,(setter)InverterCECDatabase_set_inv_snl_paco, - PyDoc_STR("*float*: AC maximum power rating [Wac]\n\n**Required:**\nRequired if inverter_model=0\n\nThe value of the following variables depends on ``inv_snl_paco``:\n\n\t - inv_snl_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), + PyDoc_STR("*float*: AC maximum power rating [Wac]\n\n**Required:**\nRequired if inverter_model=0\n\nThe value of the following variables depends on ``inv_snl_paco``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inv_snl_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inv_snl_pdco", (getter)InverterCECDatabase_get_inv_snl_pdco,(setter)InverterCECDatabase_set_inv_snl_pdco, - PyDoc_STR("*float*: DC input power at which AC power rating is achieved [Wdc]\n\n**Required:**\nRequired if inverter_model=0\n\nThe value of the following variables depends on ``inv_snl_pdco``:\n\n\t - inv_snl_eff_cec\n"), + PyDoc_STR("*float*: DC input power at which AC power rating is achieved [Wdc]\n\n**Required:**\nRequired if inverter_model=0\n\nThe value of the following variables depends on ``inv_snl_pdco``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inv_snl_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inv_snl_pnt", (getter)InverterCECDatabase_get_inv_snl_pnt,(setter)InverterCECDatabase_set_inv_snl_pnt, PyDoc_STR("*float*: AC power consumed by inverter at night [Wac]\n\n**Required:**\nRequired if inverter_model=0"), NULL}, {"inv_snl_pso", (getter)InverterCECDatabase_get_inv_snl_pso,(setter)InverterCECDatabase_set_inv_snl_pso, - PyDoc_STR("*float*: DC power required to enable the inversion process [Wdc]\n\n**Required:**\nRequired if inverter_model=0\n\nThe value of the following variables depends on ``inv_snl_pso``:\n\n\t - inv_snl_eff_cec\n"), + PyDoc_STR("*float*: DC power required to enable the inversion process [Wdc]\n\n**Required:**\nRequired if inverter_model=0\n\nThe value of the following variables depends on ``inv_snl_pso``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inv_snl_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inv_snl_vdcmax", (getter)InverterCECDatabase_get_inv_snl_vdcmax,(setter)InverterCECDatabase_set_inv_snl_vdcmax, PyDoc_STR("*float*: Maximum DC input operating voltage [Vdc]\n\n**Required:**\nRequired if inverter_model=0"), NULL}, {"inv_snl_vdco", (getter)InverterCECDatabase_get_inv_snl_vdco,(setter)InverterCECDatabase_set_inv_snl_vdco, - PyDoc_STR("*float*: DC input voltage for the rated AC power rating [Vdc]\n\n**Required:**\nRequired if inverter_model=0\n\nThe value of the following variables depends on ``inv_snl_vdco``:\n\n\t - inv_snl_eff_cec\n"), + PyDoc_STR("*float*: DC input voltage for the rated AC power rating [Vdc]\n\n**Required:**\nRequired if inverter_model=0\n\nThe value of the following variables depends on ``inv_snl_vdco``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inv_snl_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inv_tdc_cec_db", (getter)InverterCECDatabase_get_inv_tdc_cec_db,(setter)InverterCECDatabase_set_inv_tdc_cec_db, PyDoc_STR("*sequence[sequence]*: Temperature derate curves for CEC Database [(Vdc, C, %/C)]\n\n**Required:**\nRequired if inverter_model=0"), @@ -8328,34 +8343,34 @@ InverterCECCoefficientGenerator_set_inv_tdc_cec_cg(VarGroupObject *self, PyObjec static PyGetSetDef InverterCECCoefficientGenerator_getset[] = { {"inv_cec_cg_c0", (getter)InverterCECCoefficientGenerator_get_inv_cec_cg_c0,(setter)InverterCECCoefficientGenerator_set_inv_cec_cg_c0, - PyDoc_STR("*float*: Curvature between AC power and DC power at ref [1/W]\n\n**Required:**\nRequired if inverter_model=3\n\nThe value of the following variables depends on ``inv_cec_cg_c0``:\n\n\t - inv_cec_cg_eff_cec\n"), + PyDoc_STR("*float*: Curvature between AC power and DC power at ref [1/W]\n\n**Required:**\nRequired if inverter_model=3\n\nThe value of the following variables depends on ``inv_cec_cg_c0``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inv_cec_cg_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inv_cec_cg_c1", (getter)InverterCECCoefficientGenerator_get_inv_cec_cg_c1,(setter)InverterCECCoefficientGenerator_set_inv_cec_cg_c1, - PyDoc_STR("*float*: Coefficient of Pdco variation with DC input voltage [1/V]\n\n**Required:**\nRequired if inverter_model=3\n\nThe value of the following variables depends on ``inv_cec_cg_c1``:\n\n\t - inv_cec_cg_eff_cec\n"), + PyDoc_STR("*float*: Coefficient of Pdco variation with DC input voltage [1/V]\n\n**Required:**\nRequired if inverter_model=3\n\nThe value of the following variables depends on ``inv_cec_cg_c1``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inv_cec_cg_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inv_cec_cg_c2", (getter)InverterCECCoefficientGenerator_get_inv_cec_cg_c2,(setter)InverterCECCoefficientGenerator_set_inv_cec_cg_c2, - PyDoc_STR("*float*: Coefficient of Pso variation with DC input voltage [1/V]\n\n**Required:**\nRequired if inverter_model=3\n\nThe value of the following variables depends on ``inv_cec_cg_c2``:\n\n\t - inv_cec_cg_eff_cec\n"), + PyDoc_STR("*float*: Coefficient of Pso variation with DC input voltage [1/V]\n\n**Required:**\nRequired if inverter_model=3\n\nThe value of the following variables depends on ``inv_cec_cg_c2``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inv_cec_cg_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inv_cec_cg_c3", (getter)InverterCECCoefficientGenerator_get_inv_cec_cg_c3,(setter)InverterCECCoefficientGenerator_set_inv_cec_cg_c3, - PyDoc_STR("*float*: Coefficient of Co variation with DC input voltage [1/V]\n\n**Required:**\nRequired if inverter_model=3\n\nThe value of the following variables depends on ``inv_cec_cg_c3``:\n\n\t - inv_cec_cg_eff_cec\n"), + PyDoc_STR("*float*: Coefficient of Co variation with DC input voltage [1/V]\n\n**Required:**\nRequired if inverter_model=3\n\nThe value of the following variables depends on ``inv_cec_cg_c3``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inv_cec_cg_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inv_cec_cg_paco", (getter)InverterCECCoefficientGenerator_get_inv_cec_cg_paco,(setter)InverterCECCoefficientGenerator_set_inv_cec_cg_paco, - PyDoc_STR("*float*: AC maximum power rating [Wac]\n\n**Required:**\nRequired if inverter_model=3\n\nThe value of the following variables depends on ``inv_cec_cg_paco``:\n\n\t - inv_cec_cg_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), + PyDoc_STR("*float*: AC maximum power rating [Wac]\n\n**Required:**\nRequired if inverter_model=3\n\nThe value of the following variables depends on ``inv_cec_cg_paco``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inv_cec_cg_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inv_cec_cg_pdco", (getter)InverterCECCoefficientGenerator_get_inv_cec_cg_pdco,(setter)InverterCECCoefficientGenerator_set_inv_cec_cg_pdco, - PyDoc_STR("*float*: DC input power at which AC power rating is achieved [Wdc]\n\n**Required:**\nRequired if inverter_model=3\n\nThe value of the following variables depends on ``inv_cec_cg_pdco``:\n\n\t - inv_cec_cg_eff_cec\n"), + PyDoc_STR("*float*: DC input power at which AC power rating is achieved [Wdc]\n\n**Required:**\nRequired if inverter_model=3\n\nThe value of the following variables depends on ``inv_cec_cg_pdco``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inv_cec_cg_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inv_cec_cg_pnt", (getter)InverterCECCoefficientGenerator_get_inv_cec_cg_pnt,(setter)InverterCECCoefficientGenerator_set_inv_cec_cg_pnt, PyDoc_STR("*float*: AC power consumed by inverter at night [Wac]\n\n**Required:**\nRequired if inverter_model=3"), NULL}, {"inv_cec_cg_psco", (getter)InverterCECCoefficientGenerator_get_inv_cec_cg_psco,(setter)InverterCECCoefficientGenerator_set_inv_cec_cg_psco, - PyDoc_STR("*float*: DC power required to enable the inversion process [Wdc]\n\n**Required:**\nRequired if inverter_model=3\n\nThe value of the following variables depends on ``inv_cec_cg_psco``:\n\n\t - inv_cec_cg_eff_cec\n"), + PyDoc_STR("*float*: DC power required to enable the inversion process [Wdc]\n\n**Required:**\nRequired if inverter_model=3\n\nThe value of the following variables depends on ``inv_cec_cg_psco``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inv_cec_cg_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inv_cec_cg_vdcmax", (getter)InverterCECCoefficientGenerator_get_inv_cec_cg_vdcmax,(setter)InverterCECCoefficientGenerator_set_inv_cec_cg_vdcmax, PyDoc_STR("*float*: Maximum DC input operating voltage [Vdc]\n\n**Required:**\nRequired if inverter_model=3"), NULL}, {"inv_cec_cg_vdco", (getter)InverterCECCoefficientGenerator_get_inv_cec_cg_vdco,(setter)InverterCECCoefficientGenerator_set_inv_cec_cg_vdco, - PyDoc_STR("*float*: DC input voltage for the rated AC power rating [Vdc]\n\n**Required:**\nRequired if inverter_model=3\n\nThe value of the following variables depends on ``inv_cec_cg_vdco``:\n\n\t - inv_cec_cg_eff_cec\n"), + PyDoc_STR("*float*: DC input voltage for the rated AC power rating [Vdc]\n\n**Required:**\nRequired if inverter_model=3\n\nThe value of the following variables depends on ``inv_cec_cg_vdco``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inv_cec_cg_eff_cec\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inv_tdc_cec_cg", (getter)InverterCECCoefficientGenerator_get_inv_tdc_cec_cg,(setter)InverterCECCoefficientGenerator_set_inv_tdc_cec_cg, PyDoc_STR("*sequence[sequence]*: Temperature derate curves for CEC Coef Gen [(Vdc, C, %/C)]\n\n**Required:**\nRequired if inverter_model=3"), @@ -8567,7 +8582,7 @@ InverterDatasheet_set_inv_tdc_ds(VarGroupObject *self, PyObject *value, void *cl static PyGetSetDef InverterDatasheet_getset[] = { {"inv_ds_eff", (getter)InverterDatasheet_get_inv_ds_eff,(setter)InverterDatasheet_set_inv_ds_eff, - PyDoc_STR("*float*: Weighted or Peak or Nominal Efficiency [Wdc]\n\n**Required:**\nRequired if inverter_model=1"), + PyDoc_STR("*float*: Weighted or Peak or Nominal Efficiency [Wdc]\n\n**Required:**\nRequired if inverter_model=1\n\nThe value of the following variables depends on ``inv_ds_eff``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"inv_ds_paco", (getter)InverterDatasheet_get_inv_ds_paco,(setter)InverterDatasheet_set_inv_ds_paco, PyDoc_STR("*float*: AC maximum power rating [Wac]\n\n**Required:**\nRequired if inverter_model=1\n\nThe value of the following variables depends on ``inv_ds_paco``:\n\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), @@ -9962,34 +9977,34 @@ BatterySystem_set_om_replacement_cost1(VarGroupObject *self, PyObject *value, vo static PyGetSetDef BatterySystem_getset[] = { {"batt_ac_dc_efficiency", (getter)BatterySystem_get_batt_ac_dc_efficiency,(setter)BatterySystem_set_batt_ac_dc_efficiency, - PyDoc_STR("*float*: Inverter AC to battery DC efficiency"), + PyDoc_STR("*float*: Inverter AC to battery DC efficiency\n\nThe value of the following variables depends on ``batt_ac_dc_efficiency``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"batt_ac_or_dc", (getter)BatterySystem_get_batt_ac_or_dc,(setter)BatterySystem_set_batt_ac_or_dc, - PyDoc_STR("*float*: Battery interconnection (AC or DC)\n\n**Options:**\n0=DC_Connected,1=AC_Connected\n\nThe value of the following variables depends on ``batt_ac_or_dc``:\n\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), + PyDoc_STR("*float*: Battery interconnection (AC or DC)\n\n**Options:**\n0=DC_Connected,1=AC_Connected\n\nThe value of the following variables depends on ``batt_ac_or_dc``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"batt_computed_bank_capacity", (getter)BatterySystem_get_batt_computed_bank_capacity,(setter)BatterySystem_set_batt_computed_bank_capacity, - PyDoc_STR("*float*: Battery computed bank capacity [kWh]\n\n**INOUT:** This variable is both an input and an output to the compute module."), + PyDoc_STR("*float*: Battery computed bank capacity [kWh]\n\n**INOUT:** This variable is both an input and an output to the compute module.\n\nThe value of the following variables depends on ``batt_computed_bank_capacity``:\n\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_mass\n\t - batt_surface_area\n\n\nThe value of ``batt_computed_bank_capacity`` depends on the following variables:\n\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_pd_eff\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n"), NULL}, {"batt_computed_series", (getter)BatterySystem_get_batt_computed_series,(setter)BatterySystem_set_batt_computed_series, - PyDoc_STR("*float*: Battery number of cells in series\n\n**INOUT:** This variable is both an input and an output to the compute module."), + PyDoc_STR("*float*: Battery number of cells in series\n\n**INOUT:** This variable is both an input and an output to the compute module.\n\nThe value of ``batt_computed_series`` depends on the following variables:\n\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_pd_eff\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n"), NULL}, {"batt_computed_strings", (getter)BatterySystem_get_batt_computed_strings,(setter)BatterySystem_set_batt_computed_strings, - PyDoc_STR("*float*: Battery number of strings of cells\n\n**INOUT:** This variable is both an input and an output to the compute module."), + PyDoc_STR("*float*: Battery number of strings of cells\n\n**INOUT:** This variable is both an input and an output to the compute module.\n\nThe value of the following variables depends on ``batt_computed_strings``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\n\nThe value of ``batt_computed_strings`` depends on the following variables:\n\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_pd_eff\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n"), NULL}, {"batt_current_charge_max", (getter)BatterySystem_get_batt_current_charge_max,(setter)BatterySystem_set_batt_current_charge_max, - PyDoc_STR("*float*: Battery maximum charge current [A]\n\n**INOUT:** This variable is both an input and an output to the compute module."), + PyDoc_STR("*float*: Battery maximum charge current [A]\n\n**INOUT:** This variable is both an input and an output to the compute module.\n\nThe value of ``batt_current_charge_max`` depends on the following variables:\n\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_pd_eff\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n"), NULL}, {"batt_current_choice", (getter)BatterySystem_get_batt_current_choice,(setter)BatterySystem_set_batt_current_choice, - PyDoc_STR("*float*: Limit cells by current or power"), + PyDoc_STR("*float*: Limit cells by current or power\n\nThe value of the following variables depends on ``batt_current_choice``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"batt_current_discharge_max", (getter)BatterySystem_get_batt_current_discharge_max,(setter)BatterySystem_set_batt_current_discharge_max, - PyDoc_STR("*float*: Battery maximum discharge current [A]\n\n**INOUT:** This variable is both an input and an output to the compute module."), + PyDoc_STR("*float*: Battery maximum discharge current [A]\n\n**INOUT:** This variable is both an input and an output to the compute module.\n\nThe value of ``batt_current_discharge_max`` depends on the following variables:\n\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_pd_eff\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n"), NULL}, {"batt_dc_ac_efficiency", (getter)BatterySystem_get_batt_dc_ac_efficiency,(setter)BatterySystem_set_batt_dc_ac_efficiency, - PyDoc_STR("*float*: Battery DC to AC efficiency"), + PyDoc_STR("*float*: Battery DC to AC efficiency\n\nThe value of the following variables depends on ``batt_dc_ac_efficiency``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"batt_dc_dc_efficiency", (getter)BatterySystem_get_batt_dc_dc_efficiency,(setter)BatterySystem_set_batt_dc_dc_efficiency, - PyDoc_STR("*float*: System DC to battery DC efficiency"), + PyDoc_STR("*float*: System DC to battery DC efficiency\n\nThe value of the following variables depends on ``batt_dc_dc_efficiency``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"batt_inverter_efficiency_cutoff", (getter)BatterySystem_get_batt_inverter_efficiency_cutoff,(setter)BatterySystem_set_batt_inverter_efficiency_cutoff, PyDoc_STR("*float*: Inverter efficiency at which to cut battery charge or discharge off [%]"), @@ -10010,22 +10025,22 @@ static PyGetSetDef BatterySystem_getset[] = { PyDoc_STR("*sequence*: Battery system losses when idle (kW DC for DC connected, AC for AC connected) [kW]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"batt_mass", (getter)BatterySystem_get_batt_mass,(setter)BatterySystem_set_batt_mass, - PyDoc_STR("*float*: Battery mass [kg]"), + PyDoc_STR("*float*: Battery mass [kg]\n\nThe value of ``batt_mass`` depends on the following variables:\n\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_computed_bank_capacity\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_pd_eff\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n"), NULL}, {"batt_meter_position", (getter)BatterySystem_get_batt_meter_position,(setter)BatterySystem_set_batt_meter_position, PyDoc_STR("*float*: Position of battery relative to electric meter\n\n**Options:**\n0=BehindTheMeter,1=FrontOfMeter"), NULL}, {"batt_power_charge_max_kwac", (getter)BatterySystem_get_batt_power_charge_max_kwac,(setter)BatterySystem_set_batt_power_charge_max_kwac, - PyDoc_STR("*float*: Battery maximum charge power (AC) [kWac]\n\n**INOUT:** This variable is both an input and an output to the compute module."), + PyDoc_STR("*float*: Battery maximum charge power (AC) [kWac]\n\n**INOUT:** This variable is both an input and an output to the compute module.\n\nThe value of ``batt_power_charge_max_kwac`` depends on the following variables:\n\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_pd_eff\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n"), NULL}, {"batt_power_charge_max_kwdc", (getter)BatterySystem_get_batt_power_charge_max_kwdc,(setter)BatterySystem_set_batt_power_charge_max_kwdc, - PyDoc_STR("*float*: Battery maximum charge power (DC) [kWdc]\n\n**INOUT:** This variable is both an input and an output to the compute module."), + PyDoc_STR("*float*: Battery maximum charge power (DC) [kWdc]\n\n**INOUT:** This variable is both an input and an output to the compute module.\n\nThe value of ``batt_power_charge_max_kwdc`` depends on the following variables:\n\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_pd_eff\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n"), NULL}, {"batt_power_discharge_max_kwac", (getter)BatterySystem_get_batt_power_discharge_max_kwac,(setter)BatterySystem_set_batt_power_discharge_max_kwac, - PyDoc_STR("*float*: Battery maximum discharge power (AC) [kWac]\n\n**INOUT:** This variable is both an input and an output to the compute module."), + PyDoc_STR("*float*: Battery maximum discharge power (AC) [kWac]\n\n**INOUT:** This variable is both an input and an output to the compute module.\n\nThe value of the following variables depends on ``batt_power_discharge_max_kwac``:\n\n\t - system_capacity\n\n\nThe value of ``batt_power_discharge_max_kwac`` depends on the following variables:\n\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_pd_eff\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n"), NULL}, {"batt_power_discharge_max_kwdc", (getter)BatterySystem_get_batt_power_discharge_max_kwdc,(setter)BatterySystem_set_batt_power_discharge_max_kwdc, - PyDoc_STR("*float*: Battery maximum discharge power (DC) [kWdc]\n\n**INOUT:** This variable is both an input and an output to the compute module.\n\nThe value of the following variables depends on ``batt_power_discharge_max_kwdc``:\n\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), + PyDoc_STR("*float*: Battery maximum discharge power (DC) [kWdc]\n\n**INOUT:** This variable is both an input and an output to the compute module.\n\nThe value of the following variables depends on ``batt_power_discharge_max_kwdc``:\n\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n\n\nThe value of ``batt_power_discharge_max_kwdc`` depends on the following variables:\n\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_pd_eff\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n"), NULL}, {"batt_replacement_capacity", (getter)BatterySystem_get_batt_replacement_capacity,(setter)BatterySystem_set_batt_replacement_capacity, PyDoc_STR("*float*: Capacity degradation at which to replace battery [%]"), @@ -10037,7 +10052,7 @@ static PyGetSetDef BatterySystem_getset[] = { PyDoc_STR("*sequence*: Percentage of battery capacity to replace in each year [%]\n\n**Options:**\nlength <= analysis_period\n\n**Required:**\nRequired if batt_replacement_option=2"), NULL}, {"batt_surface_area", (getter)BatterySystem_get_batt_surface_area,(setter)BatterySystem_set_batt_surface_area, - PyDoc_STR("*float*: Battery surface area [m^2]"), + PyDoc_STR("*float*: Battery surface area [m^2]\n\nThe value of ``batt_surface_area`` depends on the following variables:\n\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_computed_bank_capacity\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_pd_eff\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n"), NULL}, {"en_batt", (getter)BatterySystem_get_en_batt,(setter)BatterySystem_set_en_batt, PyDoc_STR("*float*: Enable battery storage model [0/1]\n\n**Constraints:**\nINTEGER,MIN=0,MAX=1\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), @@ -10252,10 +10267,10 @@ static PyGetSetDef Load_getset[] = { PyDoc_STR("*sequence*: Grid outage in this time step [0/1]\n\n**Options:**\n0=GridAvailable,1=GridUnavailable,Length=load"), NULL}, {"load", (getter)Load_get_load,(setter)Load_set_load, - PyDoc_STR("*sequence*: Electricity load (year 1) [kW]\n\n**Required:**\nFalse for configuration with default inputs. May be required if a variable dependent on its value changes. Example: For the Detailed PV - Single Owner configuration, only Subarray 1 is enabled in the configuration defaults, so Subarray 2 inputs would not be required; if Subarray 2 is enabled, then Subarray 2 inputs is required."), + PyDoc_STR("*sequence*: Electricity load (year 1) [kW]\n\n**Required:**\nFalse for configuration with default inputs. May be required if a variable dependent on its value changes. Example: For the Detailed PV - Single Owner configuration, only Subarray 1 is enabled in the configuration defaults, so Subarray 2 inputs would not be required; if Subarray 2 is enabled, then Subarray 2 inputs is required.\n\nThe value of the following variables depends on ``load``:\n\n\t - batt_room_temperature_celsius\n"), NULL}, {"load_escalation", (getter)Load_get_load_escalation,(setter)Load_set_load_escalation, - PyDoc_STR("*sequence*: Annual load escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Annual load escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults.\n\nThe value of the following variables depends on ``load_escalation``:\n\n\t - batt_load_ac_forecast_escalation\n"), NULL}, {"run_resiliency_calcs", (getter)Load_get_run_resiliency_calcs,(setter)Load_set_run_resiliency_calcs, PyDoc_STR("*float*: Enable resilence calculations for every timestep [0/1]\n\n**Options:**\n0=DisableCalcs,1=EnableCalcs\n\n**Constraints:**\nINTEGER,MIN=0,MAX=1\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), @@ -10393,6 +10408,18 @@ PVLosses_set_enable_subhourly_clipping(VarGroupObject *self, PyObject *value, vo return PySAM_double_setter(value, SAM_Pvsamv1_PVLosses_enable_subhourly_clipping_nset, self->data_ptr); } +static PyObject * +PVLosses_get_enable_subinterval_distribution(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Pvsamv1_PVLosses_enable_subinterval_distribution_nget, self->data_ptr); +} + +static int +PVLosses_set_enable_subinterval_distribution(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Pvsamv1_PVLosses_enable_subinterval_distribution_nset, self->data_ptr); +} + static PyObject * PVLosses_get_subhourly_clipping_matrix(VarGroupObject *self, void *closure) { @@ -10409,6 +10436,9 @@ static PyGetSetDef PVLosses_getset[] = { {"enable_subhourly_clipping", (getter)PVLosses_get_enable_subhourly_clipping,(setter)PVLosses_set_enable_subhourly_clipping, PyDoc_STR("*float*: Enable subhourly clipping [0/1]\n\n**Constraints:**\nINTEGER,MIN=0,MAX=1\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, +{"enable_subinterval_distribution", (getter)PVLosses_get_enable_subinterval_distribution,(setter)PVLosses_set_enable_subinterval_distribution, + PyDoc_STR("*float*: Enable subinterval distribution of PV power output [0/1]\n\n**Constraints:**\nINTEGER,MIN=0,MAX=1\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, {"subhourly_clipping_matrix", (getter)PVLosses_get_subhourly_clipping_matrix,(setter)PVLosses_set_subhourly_clipping_matrix, PyDoc_STR("*sequence[sequence]*: PV Subhourly clipping correction matrix"), NULL}, @@ -10955,13 +10985,13 @@ BatteryCell_set_cap_vs_temp(VarGroupObject *self, PyObject *value, void *closure static PyGetSetDef BatteryCell_getset[] = { {"LeadAcid_q10_computed", (getter)BatteryCell_get_LeadAcid_q10_computed,(setter)BatteryCell_set_LeadAcid_q10_computed, - PyDoc_STR("*float*: Capacity at 10-hour discharge rate [Ah]"), + PyDoc_STR("*float*: Capacity at 10-hour discharge rate [Ah]\n\nThe value of ``LeadAcid_q10_computed`` depends on the following variables:\n\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_computed_strings\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_pd_eff\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n"), NULL}, {"LeadAcid_q20_computed", (getter)BatteryCell_get_LeadAcid_q20_computed,(setter)BatteryCell_set_LeadAcid_q20_computed, - PyDoc_STR("*float*: Capacity at 20-hour discharge rate [Ah]"), + PyDoc_STR("*float*: Capacity at 20-hour discharge rate [Ah]\n\nThe value of ``LeadAcid_q20_computed`` depends on the following variables:\n\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_computed_strings\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_pd_eff\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n"), NULL}, {"LeadAcid_qn_computed", (getter)BatteryCell_get_LeadAcid_qn_computed,(setter)BatteryCell_set_LeadAcid_qn_computed, - PyDoc_STR("*float*: Capacity at discharge rate for n-hour rate [Ah]"), + PyDoc_STR("*float*: Capacity at discharge rate for n-hour rate [Ah]\n\nThe value of ``LeadAcid_qn_computed`` depends on the following variables:\n\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_computed_strings\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_pd_eff\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n"), NULL}, {"LeadAcid_tn", (getter)BatteryCell_get_LeadAcid_tn,(setter)BatteryCell_set_LeadAcid_tn, PyDoc_STR("*float*: Time to discharge [h]"), @@ -10973,16 +11003,16 @@ static PyGetSetDef BatteryCell_getset[] = { PyDoc_STR("*float*: Battery specific heat capacity [J/KgK]"), NULL}, {"batt_Qexp", (getter)BatteryCell_get_batt_Qexp,(setter)BatteryCell_set_batt_Qexp, - PyDoc_STR("*float*: Cell capacity at end of exponential zone [Ah]"), + PyDoc_STR("*float*: Cell capacity at end of exponential zone [Ah]\n\nThe value of ``batt_Qexp`` depends on the following variables:\n\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_computed_bank_capacity\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_pd_eff\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n"), NULL}, {"batt_Qfull", (getter)BatteryCell_get_batt_Qfull,(setter)BatteryCell_set_batt_Qfull, - PyDoc_STR("*float*: Fully charged cell capacity [Ah]"), + PyDoc_STR("*float*: Fully charged cell capacity [Ah]\n\nThe value of the following variables depends on ``batt_Qfull``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"batt_Qfull_flow", (getter)BatteryCell_get_batt_Qfull_flow,(setter)BatteryCell_set_batt_Qfull_flow, - PyDoc_STR("*float*: Fully charged flow battery capacity [Ah]"), + PyDoc_STR("*float*: Fully charged flow battery capacity [Ah]\n\nThe value of ``batt_Qfull_flow`` depends on the following variables:\n\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_computed_bank_capacity\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_pd_eff\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n"), NULL}, {"batt_Qnom", (getter)BatteryCell_get_batt_Qnom,(setter)BatteryCell_set_batt_Qnom, - PyDoc_STR("*float*: Cell capacity at end of nominal zone [Ah]"), + PyDoc_STR("*float*: Cell capacity at end of nominal zone [Ah]\n\nThe value of ``batt_Qnom`` depends on the following variables:\n\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_computed_bank_capacity\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_pd_eff\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_model\n"), NULL}, {"batt_Vcut", (getter)BatteryCell_get_batt_Vcut,(setter)BatteryCell_set_batt_Vcut, PyDoc_STR("*float*: Cutoff voltage for battery rated capacity [V]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), @@ -10997,7 +11027,7 @@ static PyGetSetDef BatteryCell_getset[] = { PyDoc_STR("*float*: Cell voltage at end of nominal zone [V]"), NULL}, {"batt_Vnom_default", (getter)BatteryCell_get_batt_Vnom_default,(setter)BatteryCell_set_batt_Vnom_default, - PyDoc_STR("*float*: Default nominal cell voltage [V]"), + PyDoc_STR("*float*: Default nominal cell voltage [V]\n\nThe value of the following variables depends on ``batt_Vnom_default``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"batt_calendar_a", (getter)BatteryCell_get_batt_calendar_a,(setter)BatteryCell_set_batt_calendar_a, PyDoc_STR("*float*: Calendar life model coefficient [1/sqrt(day)]\n\n**Required:**\nRequired if en_batt=1&batt_life_model=0&batt_calendar_choice=1"), @@ -11018,7 +11048,7 @@ static PyGetSetDef BatteryCell_getset[] = { PyDoc_STR("*float*: Calendar life model initial capacity cofficient\n\n**Required:**\nRequired if en_batt=1&batt_life_model=0&batt_calendar_choice=1"), NULL}, {"batt_chem", (getter)BatteryCell_get_batt_chem,(setter)BatteryCell_set_batt_chem, - PyDoc_STR("*float*: Battery chemistry\n\n**Options:**\n0=LeadAcid,1=LiIon"), + PyDoc_STR("*float*: Battery chemistry\n\n**Options:**\n0=LeadAcid,1=LiIon\n\nThe value of the following variables depends on ``batt_chem``:\n\n\t - LeadAcid_q10_computed\n\t - LeadAcid_q20_computed\n\t - LeadAcid_qn_computed\n\t - batt_Qexp\n\t - batt_Qfull_flow\n\t - batt_Qnom\n\t - batt_computed_bank_capacity\n\t - batt_computed_series\n\t - batt_computed_strings\n\t - batt_current_charge_max\n\t - batt_current_discharge_max\n\t - batt_mass\n\t - batt_power_charge_max_kwac\n\t - batt_power_charge_max_kwdc\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - batt_surface_area\n\t - inverter_count\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray3_enable\n\t - subarray4_enable\n\t - system_capacity\n"), NULL}, {"batt_h_to_ambient", (getter)BatteryCell_get_batt_h_to_ambient,(setter)BatteryCell_set_batt_h_to_ambient, PyDoc_STR("*float*: Heat transfer between battery and environment [W/m2K]"), @@ -11048,7 +11078,7 @@ static PyGetSetDef BatteryCell_getset[] = { PyDoc_STR("*float*: Internal resistance [Ohm]"), NULL}, {"batt_room_temperature_celsius", (getter)BatteryCell_get_batt_room_temperature_celsius,(setter)BatteryCell_set_batt_room_temperature_celsius, - PyDoc_STR("*sequence*: Temperature of storage room [C]\n\n**Options:**\nlength=1 for fixed, # of weatherfile records otherwise"), + PyDoc_STR("*sequence*: Temperature of storage room [C]\n\n**Options:**\nlength=1 for fixed, # of weatherfile records otherwise\n\nThe value of ``batt_room_temperature_celsius`` depends on the following variables:\n\n\t - grid_curtailment\n\t - load\n\t - solar_resource_file\n"), NULL}, {"batt_voltage_choice", (getter)BatteryCell_get_batt_voltage_choice,(setter)BatteryCell_set_batt_voltage_choice, PyDoc_STR("*float*: Battery voltage input option [0/1]\n\n**Options:**\n0=UseVoltageModel,1=InputVoltageTable\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), @@ -11779,7 +11809,7 @@ static PyGetSetDef BatteryDispatch_getset[] = { PyDoc_STR("*float*: Battery can discharge battery only when load exceeds system output [0/1]\n\n**Required:**\nRequired if en_batt=1&en_standalone_batt=0&batt_meter_position=0"), NULL}, {"batt_dispatch_load_forecast_choice", (getter)BatteryDispatch_get_batt_dispatch_load_forecast_choice,(setter)BatteryDispatch_set_batt_dispatch_load_forecast_choice, - PyDoc_STR("*float*: Load forecast choice for automatic dispatch [0/1/2]\n\n**Options:**\n0=LookAhead,1=LookBehind,2=InputForecast\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Load forecast choice for automatic dispatch [0/1/2]\n\n**Options:**\n0=LookAhead,1=LookBehind,2=InputForecast\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults.\n\nThe value of the following variables depends on ``batt_dispatch_load_forecast_choice``:\n\n\t - batt_load_ac_forecast\n\t - batt_load_ac_forecast_escalation\n"), NULL}, {"batt_dispatch_pvs_ac_lb", (getter)BatteryDispatch_get_batt_dispatch_pvs_ac_lb,(setter)BatteryDispatch_set_batt_dispatch_pvs_ac_lb, PyDoc_STR("*float*: AC lower bound [fraction of nameplate]\n\n**Required:**\nRequired if en_batt=1&en_standalone_batt=0&batt_meter_position=1&batt_dispatch_choice=1"), @@ -11833,10 +11863,10 @@ static PyGetSetDef BatteryDispatch_getset[] = { PyDoc_STR("*float*: Weather forecast choice for automatic dispatch [0/1/2]\n\n**Options:**\n0=LookAhead,1=LookBehind,2=InputForecast\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"batt_load_ac_forecast", (getter)BatteryDispatch_get_batt_load_ac_forecast,(setter)BatteryDispatch_set_batt_load_ac_forecast, - PyDoc_STR("*sequence*: Load ac power forecast [kW]\n\n**Info:**\nLength either 8760 or 8760 * steps per hour"), + PyDoc_STR("*sequence*: Load ac power forecast [kW]\n\n**Info:**\nLength either 8760 or 8760 * steps per hour\n\nThe value of ``batt_load_ac_forecast`` depends on the following variables:\n\n\t - batt_dispatch_load_forecast_choice\n"), NULL}, {"batt_load_ac_forecast_escalation", (getter)BatteryDispatch_get_batt_load_ac_forecast_escalation,(setter)BatteryDispatch_set_batt_load_ac_forecast_escalation, - PyDoc_STR("*sequence*: Annual load escalation for ac power forecast [kW]\n\n**Options:**\nlength <= analysis_period"), + PyDoc_STR("*sequence*: Annual load escalation for ac power forecast [kW]\n\n**Options:**\nlength <= analysis_period\n\nThe value of ``batt_load_ac_forecast_escalation`` depends on the following variables:\n\n\t - batt_dispatch_load_forecast_choice\n\t - load_escalation\n"), NULL}, {"batt_look_ahead_hours", (getter)BatteryDispatch_get_batt_look_ahead_hours,(setter)BatteryDispatch_set_batt_look_ahead_hours, PyDoc_STR("*float*: Hours to look ahead in automated dispatch [hours]\n\n**Constraints:**\nMIN=1"), @@ -11863,19 +11893,19 @@ static PyGetSetDef BatteryDispatch_getset[] = { PyDoc_STR("*sequence*: Periods 1-6 charging from system allowed?\n\n**Required:**\nRequired if en_batt=1&en_standalone_batt=0&batt_dispatch_choice=3"), NULL}, {"dispatch_manual_discharge", (getter)BatteryDispatch_get_dispatch_manual_discharge,(setter)BatteryDispatch_set_dispatch_manual_discharge, - PyDoc_STR("*sequence*: Periods 1-6 discharging allowed?\n\n**Required:**\nRequired if en_batt=1&batt_dispatch_choice=3"), + PyDoc_STR("*sequence*: Periods 1-6 discharging allowed?\n\n**Required:**\nRequired if en_batt=1&batt_dispatch_choice=3\n\nThe value of the following variables depends on ``dispatch_manual_discharge``:\n\n\t - dispatch_manual_percent_discharge\n"), NULL}, {"dispatch_manual_fuelcellcharge", (getter)BatteryDispatch_get_dispatch_manual_fuelcellcharge,(setter)BatteryDispatch_set_dispatch_manual_fuelcellcharge, PyDoc_STR("*sequence*: Periods 1-6 charging from fuel cell allowed?"), NULL}, {"dispatch_manual_gridcharge", (getter)BatteryDispatch_get_dispatch_manual_gridcharge,(setter)BatteryDispatch_set_dispatch_manual_gridcharge, - PyDoc_STR("*sequence*: Periods 1-6 grid charging allowed?\n\n**Required:**\nRequired if en_batt=1&batt_dispatch_choice=3"), + PyDoc_STR("*sequence*: Periods 1-6 grid charging allowed?\n\n**Required:**\nRequired if en_batt=1&batt_dispatch_choice=3\n\nThe value of the following variables depends on ``dispatch_manual_gridcharge``:\n\n\t - dispatch_manual_percent_gridcharge\n"), NULL}, {"dispatch_manual_percent_discharge", (getter)BatteryDispatch_get_dispatch_manual_percent_discharge,(setter)BatteryDispatch_set_dispatch_manual_percent_discharge, - PyDoc_STR("*sequence*: Periods 1-6 discharge percent [%]\n\n**Required:**\nRequired if en_batt=1&batt_dispatch_choice=3"), + PyDoc_STR("*sequence*: Periods 1-6 discharge percent [%]\n\n**Required:**\nRequired if en_batt=1&batt_dispatch_choice=3\n\nThe value of ``dispatch_manual_percent_discharge`` depends on the following variables:\n\n\t - dispatch_manual_discharge\n"), NULL}, {"dispatch_manual_percent_gridcharge", (getter)BatteryDispatch_get_dispatch_manual_percent_gridcharge,(setter)BatteryDispatch_set_dispatch_manual_percent_gridcharge, - PyDoc_STR("*sequence*: Periods 1-6 gridcharge percent [%]\n\n**Required:**\nRequired if en_batt=1&batt_dispatch_choice=3"), + PyDoc_STR("*sequence*: Periods 1-6 gridcharge percent [%]\n\n**Required:**\nRequired if en_batt=1&batt_dispatch_choice=3\n\nThe value of ``dispatch_manual_percent_gridcharge`` depends on the following variables:\n\n\t - dispatch_manual_gridcharge\n"), NULL}, {"dispatch_manual_sched", (getter)BatteryDispatch_get_dispatch_manual_sched,(setter)BatteryDispatch_set_dispatch_manual_sched, PyDoc_STR("*sequence[sequence]*: Battery dispatch schedule for weekday\n\n**Required:**\nRequired if en_batt=1&batt_dispatch_choice=3"), @@ -13573,7 +13603,7 @@ static PyGetSetDef GridLimits_getset[] = { PyDoc_STR("*float*: Enable grid interconnection limit [0/1]\n\n**Info:**\nEnable a grid interconnection limit"), NULL}, {"grid_curtailment", (getter)GridLimits_get_grid_curtailment,(setter)GridLimits_set_grid_curtailment, - PyDoc_STR("*sequence*: Grid curtailment as energy delivery limit (first year) [MW]\n\n**Required:**\nFalse for configuration with default inputs. May be required if a variable dependent on its value changes. Example: For the Detailed PV - Single Owner configuration, only Subarray 1 is enabled in the configuration defaults, so Subarray 2 inputs would not be required; if Subarray 2 is enabled, then Subarray 2 inputs is required."), + PyDoc_STR("*sequence*: Grid curtailment as energy delivery limit (first year) [MW]\n\n**Required:**\nFalse for configuration with default inputs. May be required if a variable dependent on its value changes. Example: For the Detailed PV - Single Owner configuration, only Subarray 1 is enabled in the configuration defaults, so Subarray 2 inputs would not be required; if Subarray 2 is enabled, then Subarray 2 inputs is required.\n\nThe value of the following variables depends on ``grid_curtailment``:\n\n\t - batt_room_temperature_celsius\n"), NULL}, {"grid_interconnection_limit_kwac", (getter)GridLimits_get_grid_interconnection_limit_kwac,(setter)GridLimits_set_grid_interconnection_limit_kwac, PyDoc_STR("*float*: Grid interconnection limit [kWac]"), @@ -13628,6 +13658,278 @@ static PyTypeObject GridLimits_Type = { }; +/* + * HybridCosts Group + */ + +static PyTypeObject HybridCosts_Type; + +static PyObject * +HybridCosts_new(SAM_Pvsamv1 data_ptr) +{ + PyObject* new_obj = HybridCosts_Type.tp_alloc(&HybridCosts_Type,0); + + VarGroupObject* HybridCosts_obj = (VarGroupObject*)new_obj; + + HybridCosts_obj->data_ptr = (SAM_table)data_ptr; + + return new_obj; +} + +/* HybridCosts methods */ + +static PyObject * +HybridCosts_assign(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + + if (!PySAM_assign_from_dict(self->data_ptr, dict, "Pvsamv1", "HybridCosts")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +HybridCosts_replace(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + PyTypeObject* tp = &HybridCosts_Type; + + if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "Pvsamv1", "HybridCosts")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +HybridCosts_export(VarGroupObject *self, PyObject *args) +{ + PyTypeObject* tp = &HybridCosts_Type; + PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); + return dict; +} + +static PyMethodDef HybridCosts_methods[] = { + {"assign", (PyCFunction)HybridCosts_assign, METH_VARARGS, + PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``HybridCosts_vals = { var: val, ...}``")}, + {"replace", (PyCFunction)HybridCosts_replace, METH_VARARGS, + PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``HybridCosts_vals = { var: val, ...}``")}, + {"export", (PyCFunction)HybridCosts_export, METH_VARARGS, + PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, + {NULL, NULL} /* sentinel */ +}; + +static PyObject * +HybridCosts_get_degradation(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Pvsamv1_HybridCosts_degradation_aget, self->data_ptr); +} + +static int +HybridCosts_set_degradation(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Pvsamv1_HybridCosts_degradation_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_land_area(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Pvsamv1_HybridCosts_land_area_nget, self->data_ptr); +} + +static int +HybridCosts_set_land_area(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Pvsamv1_HybridCosts_land_area_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_capacity(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Pvsamv1_HybridCosts_om_capacity_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_capacity(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Pvsamv1_HybridCosts_om_capacity_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_capacity_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Pvsamv1_HybridCosts_om_capacity_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_capacity_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Pvsamv1_HybridCosts_om_capacity_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fixed(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Pvsamv1_HybridCosts_om_fixed_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_fixed(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Pvsamv1_HybridCosts_om_fixed_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fixed_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Pvsamv1_HybridCosts_om_fixed_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_fixed_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Pvsamv1_HybridCosts_om_fixed_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_land_lease(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Pvsamv1_HybridCosts_om_land_lease_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_land_lease(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Pvsamv1_HybridCosts_om_land_lease_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_land_lease_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Pvsamv1_HybridCosts_om_land_lease_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_land_lease_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Pvsamv1_HybridCosts_om_land_lease_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_production(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Pvsamv1_HybridCosts_om_production_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_production(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Pvsamv1_HybridCosts_om_production_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_total_installed_cost(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Pvsamv1_HybridCosts_total_installed_cost_nget, self->data_ptr); +} + +static int +HybridCosts_set_total_installed_cost(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Pvsamv1_HybridCosts_total_installed_cost_nset, self->data_ptr); +} + +static PyGetSetDef HybridCosts_getset[] = { +{"degradation", (getter)HybridCosts_get_degradation,(setter)HybridCosts_set_degradation, + PyDoc_STR("*sequence*: Annual AC degradation [%]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"land_area", (getter)HybridCosts_get_land_area,(setter)HybridCosts_set_land_area, + PyDoc_STR("*float*: Total land area [acres]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults.\n\nThe value of ``land_area`` depends on the following variables:\n\n\t - 6par_area\n\t - 6par_imp\n\t - 6par_vmp\n\t - 6par_voc\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - batt_power_discharge_max_kwdc\n\t - cec_area\n\t - cec_i_mp_ref\n\t - cec_v_mp_ref\n\t - cec_v_oc_ref\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_ds_paco\n\t - inv_pd_eff\n\t - inv_pd_paco\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_count\n\t - inverter_model\n\t - module_model\n\t - mppt_hi_inverter\n\t - mppt_low_inverter\n\t - sd11par_Vmp0\n\t - sd11par_Voc0\n\t - sd11par_area\n\t - snl_a\n\t - snl_a0\n\t - snl_a1\n\t - snl_a2\n\t - snl_a3\n\t - snl_a4\n\t - snl_aimp\n\t - snl_aisc\n\t - snl_area\n\t - snl_b\n\t - snl_b0\n\t - snl_b1\n\t - snl_b2\n\t - snl_b3\n\t - snl_b4\n\t - snl_b5\n\t - snl_bvmpo\n\t - snl_bvoco\n\t - snl_c0\n\t - snl_c1\n\t - snl_c2\n\t - snl_c3\n\t - snl_dtc\n\t - snl_fd\n\t - snl_impo\n\t - snl_isco\n\t - snl_mbvmp\n\t - snl_mbvoc\n\t - snl_module_structure\n\t - snl_n\n\t - snl_series_cells\n\t - snl_vmpo\n\t - snl_voco\n\t - spe_area\n\t - spe_eff0\n\t - spe_eff1\n\t - spe_eff2\n\t - spe_eff3\n\t - spe_eff4\n\t - spe_rad0\n\t - spe_rad1\n\t - spe_rad2\n\t - spe_rad3\n\t - spe_rad4\n\t - spe_reference\n\t - spe_vmp\n\t - spe_voc\n\t - subarray1_gcr\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray2_gcr\n\t - subarray2_modules_per_string\n\t - subarray2_nstrings\n\t - subarray3_enable\n\t - subarray3_gcr\n\t - subarray3_modules_per_string\n\t - subarray3_nstrings\n\t - subarray4_enable\n\t - subarray4_gcr\n\t - subarray4_modules_per_string\n\t - subarray4_nstrings\n"), + NULL}, +{"om_capacity", (getter)HybridCosts_get_om_capacity,(setter)HybridCosts_set_om_capacity, + PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_capacity_escal", (getter)HybridCosts_get_om_capacity_escal,(setter)HybridCosts_set_om_capacity_escal, + PyDoc_STR("*float*: Capacity-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fixed", (getter)HybridCosts_get_om_fixed,(setter)HybridCosts_set_om_fixed, + PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fixed_escal", (getter)HybridCosts_get_om_fixed_escal,(setter)HybridCosts_set_om_fixed_escal, + PyDoc_STR("*float*: Fixed O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_land_lease", (getter)HybridCosts_get_om_land_lease,(setter)HybridCosts_set_om_land_lease, + PyDoc_STR("*sequence*: Land lease cost [$/acre]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_land_lease_escal", (getter)HybridCosts_get_om_land_lease_escal,(setter)HybridCosts_set_om_land_lease_escal, + PyDoc_STR("*float*: Land lease cost escalation [%/yr]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_production", (getter)HybridCosts_get_om_production,(setter)HybridCosts_set_om_production, + PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"total_installed_cost", (getter)HybridCosts_get_total_installed_cost,(setter)HybridCosts_set_total_installed_cost, + PyDoc_STR("*float*: Total installed cost [$]\n\n**Required:**\nTrue\n\nThe value of ``total_installed_cost`` depends on the following variables:\n\n\t - 6par_area\n\t - 6par_imp\n\t - 6par_vmp\n\t - 6par_voc\n\t - batt_Qfull\n\t - batt_Vnom_default\n\t - batt_ac_dc_efficiency\n\t - batt_ac_or_dc\n\t - batt_chem\n\t - batt_computed_bank_capacity\n\t - batt_current_choice\n\t - batt_dc_ac_efficiency\n\t - batt_dc_dc_efficiency\n\t - batt_power_discharge_max_kwac\n\t - batt_power_discharge_max_kwdc\n\t - cec_area\n\t - cec_i_mp_ref\n\t - cec_v_mp_ref\n\t - cec_v_oc_ref\n\t - inv_cec_cg_c0\n\t - inv_cec_cg_c1\n\t - inv_cec_cg_c2\n\t - inv_cec_cg_c3\n\t - inv_cec_cg_eff_cec\n\t - inv_cec_cg_paco\n\t - inv_cec_cg_pdco\n\t - inv_cec_cg_psco\n\t - inv_cec_cg_vdco\n\t - inv_ds_eff\n\t - inv_ds_paco\n\t - inv_pd_eff\n\t - inv_pd_paco\n\t - inv_snl_c0\n\t - inv_snl_c1\n\t - inv_snl_c2\n\t - inv_snl_c3\n\t - inv_snl_eff_cec\n\t - inv_snl_paco\n\t - inv_snl_pdco\n\t - inv_snl_pso\n\t - inv_snl_vdco\n\t - inverter_count\n\t - inverter_model\n\t - module_model\n\t - mppt_hi_inverter\n\t - mppt_low_inverter\n\t - sd11par_Vmp0\n\t - sd11par_Voc0\n\t - sd11par_area\n\t - snl_a\n\t - snl_a0\n\t - snl_a1\n\t - snl_a2\n\t - snl_a3\n\t - snl_a4\n\t - snl_aimp\n\t - snl_aisc\n\t - snl_area\n\t - snl_b\n\t - snl_b0\n\t - snl_b1\n\t - snl_b2\n\t - snl_b3\n\t - snl_b4\n\t - snl_b5\n\t - snl_bvmpo\n\t - snl_bvoco\n\t - snl_c0\n\t - snl_c1\n\t - snl_c2\n\t - snl_c3\n\t - snl_dtc\n\t - snl_fd\n\t - snl_impo\n\t - snl_isco\n\t - snl_mbvmp\n\t - snl_mbvoc\n\t - snl_module_structure\n\t - snl_n\n\t - snl_series_cells\n\t - snl_vmpo\n\t - snl_voco\n\t - spe_area\n\t - spe_eff0\n\t - spe_eff1\n\t - spe_eff2\n\t - spe_eff3\n\t - spe_eff4\n\t - spe_rad0\n\t - spe_rad1\n\t - spe_rad2\n\t - spe_rad3\n\t - spe_rad4\n\t - spe_reference\n\t - spe_vmp\n\t - spe_voc\n\t - subarray1_gcr\n\t - subarray1_modules_per_string\n\t - subarray1_nstrings\n\t - subarray2_enable\n\t - subarray2_gcr\n\t - subarray2_modules_per_string\n\t - subarray2_nstrings\n\t - subarray3_enable\n\t - subarray3_gcr\n\t - subarray3_modules_per_string\n\t - subarray3_nstrings\n\t - subarray4_enable\n\t - subarray4_gcr\n\t - subarray4_modules_per_string\n\t - subarray4_nstrings\n\t - system_capacity\n"), + NULL}, + {NULL} /* Sentinel */ +}; + +static PyTypeObject HybridCosts_Type = { + /* The ob_type field must be initialized in the module init function + * to be portable to Windows without using C++. */ + PyVarObject_HEAD_INIT(NULL, 0) + "Pvsamv1.HybridCosts", /*tp_name*/ + sizeof(VarGroupObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + /* methods */ + 0, /*tp_dealloc*/ + 0, /*tp_print*/ + (getattrfunc)0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_reserved*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistofnset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + HybridCosts_methods, /*tp_methods*/ + 0, /*tp_members*/ + HybridCosts_getset, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictofnset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + 0, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ +}; + + /* * Outputs Group */ @@ -13987,6 +14289,18 @@ Outputs_get_annual_dc_wiring_loss_percent(VarGroupObject *self, void *closure) return PySAM_double_getter(SAM_Pvsamv1_Outputs_annual_dc_wiring_loss_percent_nget, self->data_ptr); } +static PyObject * +Outputs_get_annual_distribution_clipping_loss(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Pvsamv1_Outputs_annual_distribution_clipping_loss_nget, self->data_ptr); +} + +static PyObject * +Outputs_get_annual_distribution_clipping_loss_percent(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Pvsamv1_Outputs_annual_distribution_clipping_loss_percent_nget, self->data_ptr); +} + static PyObject * Outputs_get_annual_energy(VarGroupObject *self, void *closure) { @@ -14785,6 +15099,12 @@ Outputs_get_cf_fuelcell_replacement_cost_schedule(VarGroupObject *self, void *cl return PySAM_array_getter(SAM_Pvsamv1_Outputs_cf_fuelcell_replacement_cost_schedule_aget, self->data_ptr); } +static PyObject * +Outputs_get_cf_land_lease_expense(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Pvsamv1_Outputs_cf_land_lease_expense_aget, self->data_ptr); +} + static PyObject * Outputs_get_cf_om_capacity(VarGroupObject *self, void *closure) { @@ -14869,6 +15189,12 @@ Outputs_get_df_calc(VarGroupObject *self, void *closure) return PySAM_array_getter(SAM_Pvsamv1_Outputs_df_calc_aget, self->data_ptr); } +static PyObject * +Outputs_get_distribution_clipping_loss(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Pvsamv1_Outputs_distribution_clipping_loss_aget, self->data_ptr); +} + static PyObject * Outputs_get_dn(VarGroupObject *self, void *closure) { @@ -16544,6 +16870,12 @@ static PyGetSetDef Outputs_getset[] = { {"annual_dc_wiring_loss_percent", (getter)Outputs_get_annual_dc_wiring_loss_percent,(setter)0, PyDoc_STR("*float*: DC wiring loss [%]"), NULL}, +{"annual_distribution_clipping_loss", (getter)Outputs_get_annual_distribution_clipping_loss,(setter)0, + PyDoc_STR("*float*: Subinterval distribution clipping correction loss [kWh]"), + NULL}, +{"annual_distribution_clipping_loss_percent", (getter)Outputs_get_annual_distribution_clipping_loss_percent,(setter)0, + PyDoc_STR("*float*: Subinterval distribution clipping correction loss percent [%]"), + NULL}, {"annual_energy", (getter)Outputs_get_annual_energy,(setter)0, PyDoc_STR("*float*: Annual AC energy [kWh]"), NULL}, @@ -16943,6 +17275,9 @@ static PyGetSetDef Outputs_getset[] = { {"cf_fuelcell_replacement_cost_schedule", (getter)Outputs_get_cf_fuelcell_replacement_cost_schedule,(setter)0, PyDoc_STR("*sequence*: replacement O&M costs [$]"), NULL}, +{"cf_land_lease_expense", (getter)Outputs_get_cf_land_lease_expense,(setter)0, + PyDoc_STR("*sequence*: Land lease expense [$]"), + NULL}, {"cf_om_capacity", (getter)Outputs_get_cf_om_capacity,(setter)0, PyDoc_STR("*sequence*: capacity O&M costs [$]"), NULL}, @@ -16985,6 +17320,9 @@ static PyGetSetDef Outputs_getset[] = { {"df_calc", (getter)Outputs_get_df_calc,(setter)0, PyDoc_STR("*sequence*: Irradiance DHI calculated [W/m2]"), NULL}, +{"distribution_clipping_loss", (getter)Outputs_get_distribution_clipping_loss,(setter)0, + PyDoc_STR("*sequence*: Subinterval distribution clipping correction loss [kW]"), + NULL}, {"dn", (getter)Outputs_get_dn,(setter)0, PyDoc_STR("*sequence*: Irradiance DNI from weather file [W/m2]"), NULL}, @@ -17948,6 +18286,10 @@ newPvsamv1Object(void* data_ptr) PyDict_SetItemString(attr_dict, "GridLimits", GridLimits_obj); Py_DECREF(GridLimits_obj); + PyObject* HybridCosts_obj = HybridCosts_new(self->data_ptr); + PyDict_SetItemString(attr_dict, "HybridCosts", HybridCosts_obj); + Py_DECREF(HybridCosts_obj); + PyObject* Outputs_obj = Outputs_new(self->data_ptr); PyDict_SetItemString(attr_dict, "Outputs", Outputs_obj); Py_DECREF(Outputs_obj); @@ -18046,8 +18388,6 @@ Pvsamv1_unassign(CmodObject *self, PyObject *args) static PyMethodDef Pvsamv1_methods[] = { {"execute", (PyCFunction)Pvsamv1_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Pvsamv1_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Pvsamv1_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Solar Resource': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Pvsamv1_replace, METH_VARARGS, @@ -18058,6 +18398,8 @@ static PyMethodDef Pvsamv1_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Pvsamv1_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Pvsamv1_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {"Reopt_size_battery_post", (PyCFunction)Reopt_size_battery_post, METH_VARARGS | METH_KEYWORDS, Reopt_size_battery_post_doc}, {NULL, NULL} /* sentinel */ @@ -18451,6 +18793,13 @@ Pvsamv1Module_exec(PyObject *m) (PyObject*)&GridLimits_Type); Py_DECREF(&GridLimits_Type); + /// Add the HybridCosts type object to Pvsamv1_Type + if (PyType_Ready(&HybridCosts_Type) < 0) { goto fail; } + PyDict_SetItemString(Pvsamv1_Type.tp_dict, + "HybridCosts", + (PyObject*)&HybridCosts_Type); + Py_DECREF(&HybridCosts_Type); + /// Add the Outputs type object to Pvsamv1_Type if (PyType_Ready(&Outputs_Type) < 0) { goto fail; } PyDict_SetItemString(Pvsamv1_Type.tp_dict, diff --git a/modules/Pvsandiainv.c b/modules/Pvsandiainv.c index 39e35ad6..7bed5414 100644 --- a/modules/Pvsandiainv.c +++ b/modules/Pvsandiainv.c @@ -593,8 +593,6 @@ Pvsandiainv_unassign(CmodObject *self, PyObject *args) static PyMethodDef Pvsandiainv_methods[] = { {"execute", (PyCFunction)Pvsandiainv_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Pvsandiainv_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Pvsandiainv_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Sandia Inverter Model': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Pvsandiainv_replace, METH_VARARGS, @@ -605,6 +603,8 @@ static PyMethodDef Pvsandiainv_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Pvsandiainv_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Pvsandiainv_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Pvwattsv5.c b/modules/Pvwattsv5.c index c49c9bda..2edd75c2 100644 --- a/modules/Pvwattsv5.c +++ b/modules/Pvwattsv5.c @@ -1457,8 +1457,6 @@ Pvwattsv5_unassign(CmodObject *self, PyObject *args) static PyMethodDef Pvwattsv5_methods[] = { {"execute", (PyCFunction)Pvwattsv5_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Pvwattsv5_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Pvwattsv5_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Lifetime': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Pvwattsv5_replace, METH_VARARGS, @@ -1469,6 +1467,8 @@ static PyMethodDef Pvwattsv5_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Pvwattsv5_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Pvwattsv5_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Pvwattsv51ts.c b/modules/Pvwattsv51ts.c index 2dbedd0f..a24b78ce 100644 --- a/modules/Pvwattsv51ts.c +++ b/modules/Pvwattsv51ts.c @@ -929,8 +929,6 @@ Pvwattsv51ts_unassign(CmodObject *self, PyObject *args) static PyMethodDef Pvwattsv51ts_methods[] = { {"execute", (PyCFunction)Pvwattsv51ts_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Pvwattsv51ts_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Pvwattsv51ts_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'PVWatts': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Pvwattsv51ts_replace, METH_VARARGS, @@ -941,6 +939,8 @@ static PyMethodDef Pvwattsv51ts_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Pvwattsv51ts_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Pvwattsv51ts_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Pvwattsv7.c b/modules/Pvwattsv7.c index 4edfe898..6f4f104a 100644 --- a/modules/Pvwattsv7.c +++ b/modules/Pvwattsv7.c @@ -1675,8 +1675,6 @@ Pvwattsv7_unassign(CmodObject *self, PyObject *args) static PyMethodDef Pvwattsv7_methods[] = { {"execute", (PyCFunction)Pvwattsv7_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Pvwattsv7_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Pvwattsv7_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Solar Resource': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Pvwattsv7_replace, METH_VARARGS, @@ -1687,6 +1685,8 @@ static PyMethodDef Pvwattsv7_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Pvwattsv7_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Pvwattsv7_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {"Reopt_size_battery_post", (PyCFunction)Reopt_size_battery_post, METH_VARARGS | METH_KEYWORDS, Reopt_size_battery_post_doc}, {NULL, NULL} /* sentinel */ diff --git a/modules/Pvwattsv8.c b/modules/Pvwattsv8.c index 4415693b..f22f45b1 100644 --- a/modules/Pvwattsv8.c +++ b/modules/Pvwattsv8.c @@ -745,7 +745,7 @@ static PyGetSetDef SystemDesign_getset[] = { PyDoc_STR("*float*: Tracker stow wind speed threshold [m/s]\n\n**Required:**\nFalse. Automatically set to 10 if not assigned explicitly or loaded from defaults."), NULL}, {"system_capacity", (getter)SystemDesign_get_system_capacity,(setter)SystemDesign_set_system_capacity, - PyDoc_STR("*float*: System size (DC nameplate) [kW]\n\n**Required:**\nTrue"), + PyDoc_STR("*float*: System size (DC nameplate) [kW]\n\n**Required:**\nTrue\n\nThe value of ``system_capacity`` depends on the following variables:\n\n\t - dc_ac_ratio\n"), NULL}, {"tilt", (getter)SystemDesign_get_tilt,(setter)SystemDesign_set_tilt, PyDoc_STR("*float*: Tilt angle [degrees]\n\n**Options:**\nH=0,V=90\n\n**Constraints:**\nMIN=0,MAX=90\n\n**Required:**\narray_type<4"), @@ -1081,6 +1081,293 @@ static PyTypeObject Shading_Type = { }; +/* + * HybridCosts Group + */ + +static PyTypeObject HybridCosts_Type; + +static PyObject * +HybridCosts_new(SAM_Pvwattsv8 data_ptr) +{ + PyObject* new_obj = HybridCosts_Type.tp_alloc(&HybridCosts_Type,0); + + VarGroupObject* HybridCosts_obj = (VarGroupObject*)new_obj; + + HybridCosts_obj->data_ptr = (SAM_table)data_ptr; + + return new_obj; +} + +/* HybridCosts methods */ + +static PyObject * +HybridCosts_assign(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + + if (!PySAM_assign_from_dict(self->data_ptr, dict, "Pvwattsv8", "HybridCosts")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +HybridCosts_replace(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + PyTypeObject* tp = &HybridCosts_Type; + + if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "Pvwattsv8", "HybridCosts")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +HybridCosts_export(VarGroupObject *self, PyObject *args) +{ + PyTypeObject* tp = &HybridCosts_Type; + PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); + return dict; +} + +static PyMethodDef HybridCosts_methods[] = { + {"assign", (PyCFunction)HybridCosts_assign, METH_VARARGS, + PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``HybridCosts_vals = { var: val, ...}``")}, + {"replace", (PyCFunction)HybridCosts_replace, METH_VARARGS, + PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``HybridCosts_vals = { var: val, ...}``")}, + {"export", (PyCFunction)HybridCosts_export, METH_VARARGS, + PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, + {NULL, NULL} /* sentinel */ +}; + +static PyObject * +HybridCosts_get_degradation(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Pvwattsv8_HybridCosts_degradation_aget, self->data_ptr); +} + +static int +HybridCosts_set_degradation(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Pvwattsv8_HybridCosts_degradation_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_land_area(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Pvwattsv8_HybridCosts_land_area_nget, self->data_ptr); +} + +static int +HybridCosts_set_land_area(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Pvwattsv8_HybridCosts_land_area_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_capacity(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Pvwattsv8_HybridCosts_om_capacity_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_capacity(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Pvwattsv8_HybridCosts_om_capacity_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_capacity_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Pvwattsv8_HybridCosts_om_capacity_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_capacity_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Pvwattsv8_HybridCosts_om_capacity_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fixed(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Pvwattsv8_HybridCosts_om_fixed_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_fixed(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Pvwattsv8_HybridCosts_om_fixed_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fixed_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Pvwattsv8_HybridCosts_om_fixed_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_fixed_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Pvwattsv8_HybridCosts_om_fixed_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_land_lease(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Pvwattsv8_HybridCosts_om_land_lease_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_land_lease(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Pvwattsv8_HybridCosts_om_land_lease_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_land_lease_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Pvwattsv8_HybridCosts_om_land_lease_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_land_lease_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Pvwattsv8_HybridCosts_om_land_lease_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_production(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Pvwattsv8_HybridCosts_om_production_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_production(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Pvwattsv8_HybridCosts_om_production_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_production_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Pvwattsv8_HybridCosts_om_production_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_production_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Pvwattsv8_HybridCosts_om_production_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_total_installed_cost(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Pvwattsv8_HybridCosts_total_installed_cost_nget, self->data_ptr); +} + +static int +HybridCosts_set_total_installed_cost(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Pvwattsv8_HybridCosts_total_installed_cost_nset, self->data_ptr); +} + +static PyGetSetDef HybridCosts_getset[] = { +{"degradation", (getter)HybridCosts_get_degradation,(setter)HybridCosts_set_degradation, + PyDoc_STR("*sequence*: Annual AC degradation [%]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"land_area", (getter)HybridCosts_get_land_area,(setter)HybridCosts_set_land_area, + PyDoc_STR("*float*: Total land area [acres]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults.\n\nThe value of ``land_area`` depends on the following variables:\n\n\t - dc_ac_ratio\n\t - gcr\n\t - module_type\n"), + NULL}, +{"om_capacity", (getter)HybridCosts_get_om_capacity,(setter)HybridCosts_set_om_capacity, + PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_capacity_escal", (getter)HybridCosts_get_om_capacity_escal,(setter)HybridCosts_set_om_capacity_escal, + PyDoc_STR("*float*: Capacity-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fixed", (getter)HybridCosts_get_om_fixed,(setter)HybridCosts_set_om_fixed, + PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fixed_escal", (getter)HybridCosts_get_om_fixed_escal,(setter)HybridCosts_set_om_fixed_escal, + PyDoc_STR("*float*: Fixed O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_land_lease", (getter)HybridCosts_get_om_land_lease,(setter)HybridCosts_set_om_land_lease, + PyDoc_STR("*sequence*: Land lease cost [$/acre]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_land_lease_escal", (getter)HybridCosts_get_om_land_lease_escal,(setter)HybridCosts_set_om_land_lease_escal, + PyDoc_STR("*float*: Land lease cost escalation [%/yr]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_production", (getter)HybridCosts_get_om_production,(setter)HybridCosts_set_om_production, + PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_production_escal", (getter)HybridCosts_get_om_production_escal,(setter)HybridCosts_set_om_production_escal, + PyDoc_STR("*float*: Production-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"total_installed_cost", (getter)HybridCosts_get_total_installed_cost,(setter)HybridCosts_set_total_installed_cost, + PyDoc_STR("*float*: Total installed cost [$]\n\n**Required:**\nTrue\n\nThe value of ``total_installed_cost`` depends on the following variables:\n\n\t - dc_ac_ratio\n\t - gcr\n\t - module_type\n"), + NULL}, + {NULL} /* Sentinel */ +}; + +static PyTypeObject HybridCosts_Type = { + /* The ob_type field must be initialized in the module init function + * to be portable to Windows without using C++. */ + PyVarObject_HEAD_INIT(NULL, 0) + "Pvwattsv8.HybridCosts", /*tp_name*/ + sizeof(VarGroupObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + /* methods */ + 0, /*tp_dealloc*/ + 0, /*tp_print*/ + (getattrfunc)0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_reserved*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistofnset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + HybridCosts_methods, /*tp_methods*/ + 0, /*tp_members*/ + HybridCosts_getset, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictofnset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + 0, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ +}; + + /* * Outputs Group */ @@ -1236,6 +1523,12 @@ Outputs_get_cf_fuelcell_replacement_cost_schedule(VarGroupObject *self, void *cl return PySAM_array_getter(SAM_Pvwattsv8_Outputs_cf_fuelcell_replacement_cost_schedule_aget, self->data_ptr); } +static PyObject * +Outputs_get_cf_land_lease_expense(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Pvwattsv8_Outputs_cf_land_lease_expense_aget, self->data_ptr); +} + static PyObject * Outputs_get_cf_om_capacity(VarGroupObject *self, void *closure) { @@ -1519,6 +1812,9 @@ static PyGetSetDef Outputs_getset[] = { {"cf_fuelcell_replacement_cost_schedule", (getter)Outputs_get_cf_fuelcell_replacement_cost_schedule,(setter)0, PyDoc_STR("*sequence*: replacement O&M costs [$]"), NULL}, +{"cf_land_lease_expense", (getter)Outputs_get_cf_land_lease_expense,(setter)0, + PyDoc_STR("*sequence*: Land lease expense [$]"), + NULL}, {"cf_om_capacity", (getter)Outputs_get_cf_om_capacity,(setter)0, PyDoc_STR("*sequence*: capacity O&M costs [$]"), NULL}, @@ -1733,6 +2029,10 @@ newPvwattsv8Object(void* data_ptr) PyDict_SetItemString(attr_dict, "AdjustmentFactors", Adjust_obj); Py_DECREF(Adjust_obj); + PyObject* HybridCosts_obj = HybridCosts_new(self->data_ptr); + PyDict_SetItemString(attr_dict, "HybridCosts", HybridCosts_obj); + Py_DECREF(HybridCosts_obj); + PyObject* Outputs_obj = Outputs_new(self->data_ptr); PyDict_SetItemString(attr_dict, "Outputs", Outputs_obj); Py_DECREF(Outputs_obj); @@ -1831,8 +2131,6 @@ Pvwattsv8_unassign(CmodObject *self, PyObject *args) static PyMethodDef Pvwattsv8_methods[] = { {"execute", (PyCFunction)Pvwattsv8_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Pvwattsv8_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Pvwattsv8_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Solar Resource': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Pvwattsv8_replace, METH_VARARGS, @@ -1843,6 +2141,8 @@ static PyMethodDef Pvwattsv8_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Pvwattsv8_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Pvwattsv8_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {"Reopt_size_battery_post", (PyCFunction)Reopt_size_battery_post, METH_VARARGS | METH_KEYWORDS, Reopt_size_battery_post_doc}, {NULL, NULL} /* sentinel */ @@ -2054,6 +2354,13 @@ Pvwattsv8Module_exec(PyObject *m) (PyObject*)&Shading_Type); Py_DECREF(&Shading_Type); + /// Add the HybridCosts type object to Pvwattsv8_Type + if (PyType_Ready(&HybridCosts_Type) < 0) { goto fail; } + PyDict_SetItemString(Pvwattsv8_Type.tp_dict, + "HybridCosts", + (PyObject*)&HybridCosts_Type); + Py_DECREF(&HybridCosts_Type); + /// Add the Outputs type object to Pvwattsv8_Type if (PyType_Ready(&Outputs_Type) < 0) { goto fail; } PyDict_SetItemString(Pvwattsv8_Type.tp_dict, diff --git a/modules/Saleleaseback.c b/modules/Saleleaseback.c index 3c537292..bd0ea3d5 100644 --- a/modules/Saleleaseback.c +++ b/modules/Saleleaseback.c @@ -1163,94 +1163,94 @@ SystemCosts_set_om_replacement_cost_escal(VarGroupObject *self, PyObject *value, static PyGetSetDef SystemCosts_getset[] = { {"add_om_num_types", (getter)SystemCosts_get_add_om_num_types,(setter)SystemCosts_set_add_om_num_types, - PyDoc_STR("*float*: Number of O and M types\n\n**Constraints:**\nINTEGER,MIN=0,MAX=2\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Number of O and M types\n\n**Info:**\nbattery,fuelcell\n\n**Constraints:**\nINTEGER,MIN=0,MAX=2\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"annual_fuel_usage", (getter)SystemCosts_get_annual_fuel_usage,(setter)SystemCosts_set_annual_fuel_usage, - PyDoc_STR("*float*: Fuel usage (yr 1) [kWht]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel usage (yr 1) [kWht]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"annual_fuel_usage_lifetime", (getter)SystemCosts_get_annual_fuel_usage_lifetime,(setter)SystemCosts_set_annual_fuel_usage_lifetime, - PyDoc_STR("*sequence*: Fuel usage (lifetime) [kWht]"), + PyDoc_STR("*sequence*: Fuel usage (lifetime) [kWht]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical"), NULL}, {"om_batt_capacity_cost", (getter)SystemCosts_get_om_batt_capacity_cost,(setter)SystemCosts_set_om_batt_capacity_cost, - PyDoc_STR("*sequence*: Battery capacity-based System Costs amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery capacity-based System Costs amount [$/kWcap]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_fixed_cost", (getter)SystemCosts_get_om_batt_fixed_cost,(setter)SystemCosts_set_om_batt_fixed_cost, - PyDoc_STR("*sequence*: Battery fixed System Costs annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery fixed System Costs annual amount [$/year]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_nameplate", (getter)SystemCosts_get_om_batt_nameplate,(setter)SystemCosts_set_om_batt_nameplate, - PyDoc_STR("*float*: Battery capacity for System Costs values [kW]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Battery capacity for System Costs values [kW]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_replacement_cost", (getter)SystemCosts_get_om_batt_replacement_cost,(setter)SystemCosts_set_om_batt_replacement_cost, - PyDoc_STR("*sequence*: Replacement cost 1 [$/kWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Replacement cost 1 [$/kWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_variable_cost", (getter)SystemCosts_get_om_batt_variable_cost,(setter)SystemCosts_set_om_batt_variable_cost, - PyDoc_STR("*sequence*: Battery production-based System Costs amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery production-based System Costs amount [$/MWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_capacity", (getter)SystemCosts_get_om_capacity,(setter)SystemCosts_set_om_capacity, - PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_capacity_escal", (getter)SystemCosts_get_om_capacity_escal,(setter)SystemCosts_set_om_capacity_escal, PyDoc_STR("*float*: Capacity-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fixed", (getter)SystemCosts_get_om_fixed,(setter)SystemCosts_set_om_fixed, - PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fixed_escal", (getter)SystemCosts_get_om_fixed_escal,(setter)SystemCosts_set_om_fixed_escal, PyDoc_STR("*float*: Fixed O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuel_cost", (getter)SystemCosts_get_om_fuel_cost,(setter)SystemCosts_set_om_fuel_cost, - PyDoc_STR("*sequence*: Fuel cost [$/MMBtu]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cost [$/MMBtu]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuel_cost_escal", (getter)SystemCosts_get_om_fuel_cost_escal,(setter)SystemCosts_set_om_fuel_cost_escal, - PyDoc_STR("*float*: Fuel cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel cost escalation [%/year]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_capacity_cost", (getter)SystemCosts_get_om_fuelcell_capacity_cost,(setter)SystemCosts_set_om_fuelcell_capacity_cost, - PyDoc_STR("*sequence*: Fuel cell capacity-based System Costs amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell capacity-based System Costs amount [$/kWcap]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_fixed_cost", (getter)SystemCosts_get_om_fuelcell_fixed_cost,(setter)SystemCosts_set_om_fuelcell_fixed_cost, - PyDoc_STR("*sequence*: Fuel cell fixed System Costs annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell fixed System Costs annual amount [$/year]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_nameplate", (getter)SystemCosts_get_om_fuelcell_nameplate,(setter)SystemCosts_set_om_fuelcell_nameplate, - PyDoc_STR("*float*: Fuel cell capacity for System Costs values [kW]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel cell capacity for System Costs values [kW]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_replacement_cost", (getter)SystemCosts_get_om_fuelcell_replacement_cost,(setter)SystemCosts_set_om_fuelcell_replacement_cost, - PyDoc_STR("*sequence*: Replacement cost 2 [$/kW]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Replacement cost 2 [$/kW]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_variable_cost", (getter)SystemCosts_get_om_fuelcell_variable_cost,(setter)SystemCosts_set_om_fuelcell_variable_cost, - PyDoc_STR("*sequence*: Fuel cell production-based System Costs amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell production-based System Costs amount [$/MWh]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_cost", (getter)SystemCosts_get_om_opt_fuel_1_cost,(setter)SystemCosts_set_om_opt_fuel_1_cost, - PyDoc_STR("*sequence*: Biomass feedstock cost [$/unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Biomass feedstock cost [$/unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_cost_escal", (getter)SystemCosts_get_om_opt_fuel_1_cost_escal,(setter)SystemCosts_set_om_opt_fuel_1_cost_escal, - PyDoc_STR("*float*: Biomass feedstock cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Biomass feedstock cost escalation [%/year]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_usage", (getter)SystemCosts_get_om_opt_fuel_1_usage,(setter)SystemCosts_set_om_opt_fuel_1_usage, - PyDoc_STR("*float*: Biomass feedstock usage [unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Biomass feedstock usage [unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_cost", (getter)SystemCosts_get_om_opt_fuel_2_cost,(setter)SystemCosts_set_om_opt_fuel_2_cost, - PyDoc_STR("*sequence*: Coal feedstock cost [$/unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Coal feedstock cost [$/unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_cost_escal", (getter)SystemCosts_get_om_opt_fuel_2_cost_escal,(setter)SystemCosts_set_om_opt_fuel_2_cost_escal, - PyDoc_STR("*float*: Coal feedstock cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Coal feedstock cost escalation [%/year]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_usage", (getter)SystemCosts_get_om_opt_fuel_2_usage,(setter)SystemCosts_set_om_opt_fuel_2_usage, - PyDoc_STR("*float*: Coal feedstock usage [unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Coal feedstock usage [unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production", (getter)SystemCosts_get_om_production,(setter)SystemCosts_set_om_production, - PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production1_values", (getter)SystemCosts_get_om_production1_values,(setter)SystemCosts_set_om_production1_values, - PyDoc_STR("*sequence*: Battery production for System Costs values [kWh]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery production for System Costs values [kWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production2_values", (getter)SystemCosts_get_om_production2_values,(setter)SystemCosts_set_om_production2_values, - PyDoc_STR("*sequence*: Fuel cell production for System Costs values [kWh]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell production for System Costs values [kWh]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production_escal", (getter)SystemCosts_get_om_production_escal,(setter)SystemCosts_set_om_production_escal, PyDoc_STR("*float*: Production-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_replacement_cost_escal", (getter)SystemCosts_get_om_replacement_cost_escal,(setter)SystemCosts_set_om_replacement_cost_escal, - PyDoc_STR("*float*: Replacement cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Replacement cost escalation [%/year]\n\n**Info:**\nbattery,fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {NULL} /* Sentinel */ }; @@ -4152,7 +4152,7 @@ static PyGetSetDef SystemOutput_getset[] = { PyDoc_STR("*sequence*: Power generated by renewable resource [kW]\n\n**Required:**\nTrue"), NULL}, {"gen_purchases", (getter)SystemOutput_get_gen_purchases,(setter)SystemOutput_set_gen_purchases, - PyDoc_STR("*sequence*: Electricity from grid [kW]\n\n**INOUT:** This variable is both an input and an output to the compute module."), + PyDoc_STR("*sequence*: Electricity from grid to system [kW]\n\n**INOUT:** This variable is both an input and an output to the compute module."), NULL}, {"system_capacity", (getter)SystemOutput_get_system_capacity,(setter)SystemOutput_set_system_capacity, PyDoc_STR("*float*: System nameplate capacity [kW]\n\n**Constraints:**\nMIN=1e-3\n\n**Required:**\nTrue"), @@ -11444,8 +11444,6 @@ Saleleaseback_unassign(CmodObject *self, PyObject *args) static PyMethodDef Saleleaseback_methods[] = { {"execute", (PyCFunction)Saleleaseback_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Saleleaseback_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Saleleaseback_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Revenue': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Saleleaseback_replace, METH_VARARGS, @@ -11456,6 +11454,8 @@ static PyMethodDef Saleleaseback_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Saleleaseback_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Saleleaseback_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Sco2AirCooler.c b/modules/Sco2AirCooler.c index b14117c2..1692ca57 100644 --- a/modules/Sco2AirCooler.c +++ b/modules/Sco2AirCooler.c @@ -704,8 +704,6 @@ Sco2AirCooler_unassign(CmodObject *self, PyObject *args) static PyMethodDef Sco2AirCooler_methods[] = { {"execute", (PyCFunction)Sco2AirCooler_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Sco2AirCooler_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Sco2AirCooler_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Common': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Sco2AirCooler_replace, METH_VARARGS, @@ -716,6 +714,8 @@ static PyMethodDef Sco2AirCooler_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Sco2AirCooler_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Sco2AirCooler_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Sco2CompCurves.c b/modules/Sco2CompCurves.c index 0b07349e..d50dd1c1 100644 --- a/modules/Sco2CompCurves.c +++ b/modules/Sco2CompCurves.c @@ -491,8 +491,6 @@ Sco2CompCurves_unassign(CmodObject *self, PyObject *args) static PyMethodDef Sco2CompCurves_methods[] = { {"execute", (PyCFunction)Sco2CompCurves_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Sco2CompCurves_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Sco2CompCurves_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Common': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Sco2CompCurves_replace, METH_VARARGS, @@ -503,6 +501,8 @@ static PyMethodDef Sco2CompCurves_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Sco2CompCurves_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Sco2CompCurves_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Sco2CspSystem.c b/modules/Sco2CspSystem.c index 732e3b8e..5ee5e94c 100644 --- a/modules/Sco2CspSystem.c +++ b/modules/Sco2CspSystem.c @@ -4208,8 +4208,6 @@ Sco2CspSystem_unassign(CmodObject *self, PyObject *args) static PyMethodDef Sco2CspSystem_methods[] = { {"execute", (PyCFunction)Sco2CspSystem_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Sco2CspSystem_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Sco2CspSystem_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'System Design': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Sco2CspSystem_replace, METH_VARARGS, @@ -4220,6 +4218,8 @@ static PyMethodDef Sco2CspSystem_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Sco2CspSystem_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Sco2CspSystem_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Sco2CspUdPcTables.c b/modules/Sco2CspUdPcTables.c index dd080482..be24c796 100644 --- a/modules/Sco2CspUdPcTables.c +++ b/modules/Sco2CspUdPcTables.c @@ -3350,8 +3350,6 @@ Sco2CspUdPcTables_unassign(CmodObject *self, PyObject *args) static PyMethodDef Sco2CspUdPcTables_methods[] = { {"execute", (PyCFunction)Sco2CspUdPcTables_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Sco2CspUdPcTables_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Sco2CspUdPcTables_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'System Design': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Sco2CspUdPcTables_replace, METH_VARARGS, @@ -3362,6 +3360,8 @@ static PyMethodDef Sco2CspUdPcTables_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Sco2CspUdPcTables_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Sco2CspUdPcTables_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Singlediode.c b/modules/Singlediode.c index 20994295..8ded4165 100644 --- a/modules/Singlediode.c +++ b/modules/Singlediode.c @@ -491,8 +491,6 @@ Singlediode_unassign(CmodObject *self, PyObject *args) static PyMethodDef Singlediode_methods[] = { {"execute", (PyCFunction)Singlediode_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Singlediode_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Singlediode_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Single Diode Model': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Singlediode_replace, METH_VARARGS, @@ -503,6 +501,8 @@ static PyMethodDef Singlediode_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Singlediode_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Singlediode_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Singlediodeparams.c b/modules/Singlediodeparams.c index d3f018de..2cda14b1 100644 --- a/modules/Singlediodeparams.c +++ b/modules/Singlediodeparams.c @@ -545,8 +545,6 @@ Singlediodeparams_unassign(CmodObject *self, PyObject *args) static PyMethodDef Singlediodeparams_methods[] = { {"execute", (PyCFunction)Singlediodeparams_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Singlediodeparams_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Singlediodeparams_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Single Diode Model': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Singlediodeparams_replace, METH_VARARGS, @@ -557,6 +555,8 @@ static PyMethodDef Singlediodeparams_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Singlediodeparams_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Singlediodeparams_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Singleowner.c b/modules/Singleowner.c index bdc1ffbb..c909f496 100644 --- a/modules/Singleowner.c +++ b/modules/Singleowner.c @@ -858,7 +858,7 @@ static PyGetSetDef FinancialParameters_getset[] = { PyDoc_STR("*float*: Analyis period [years]\n\n**Constraints:**\nINTEGER,MIN=0,MAX=50\n\n**Required:**\nFalse. Automatically set to 30 if not assigned explicitly or loaded from defaults."), NULL}, {"construction_financing_cost", (getter)FinancialParameters_get_construction_financing_cost,(setter)FinancialParameters_set_construction_financing_cost, - PyDoc_STR("*float*: Construction financing total [$]\n\n**Required:**\nTrue\n\nThe value of ``construction_financing_cost`` depends on the following variables:\n\n\t - total_installed_cost\n"), + PyDoc_STR("*float*: Construction financing total [$]\n\n**Required:**\nTrue\n\nThe value of ``construction_financing_cost`` depends on the following variables:\n\n\t - battery_per_kWh\n\t - total_installed_cost\n"), NULL}, {"cost_debt_closing", (getter)FinancialParameters_get_cost_debt_closing,(setter)FinancialParameters_set_cost_debt_closing, PyDoc_STR("*float*: Debt closing cost [$]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 250000 if not assigned explicitly or loaded from defaults."), @@ -882,7 +882,7 @@ static PyGetSetDef FinancialParameters_getset[] = { PyDoc_STR("*float*: Limit debt fraction [0/1]\n\n**Constraints:**\nBOOLEAN\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"dscr_maximum_debt_fraction", (getter)FinancialParameters_get_dscr_maximum_debt_fraction,(setter)FinancialParameters_set_dscr_maximum_debt_fraction, - PyDoc_STR("*float*: Maximum debt fraction [%]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 100 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Maximum debt fraction [%]\n\n**Constraints:**\nPOSITIVE\n\n**Required:**\nFalse. Automatically set to 100 if not assigned explicitly or loaded from defaults."), NULL}, {"dscr_reserve_months", (getter)FinancialParameters_get_dscr_reserve_months,(setter)FinancialParameters_set_dscr_reserve_months, PyDoc_STR("*float*: Debt service reserve account [months P&I]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 6 if not assigned explicitly or loaded from defaults."), @@ -954,7 +954,7 @@ static PyGetSetDef FinancialParameters_getset[] = { PyDoc_STR("*sequence*: State income tax rate [%]\n\n**Required:**\nTrue"), NULL}, {"system_capacity", (getter)FinancialParameters_get_system_capacity,(setter)FinancialParameters_set_system_capacity, - PyDoc_STR("*float*: System nameplate capacity [kW]\n\n**Constraints:**\nPOSITIVE\n\n**Required:**\nTrue\n\nThe value of the following variables depends on ``system_capacity``:\n\n\t - cp_battery_nameplate\n\t - cp_system_nameplate\n"), + PyDoc_STR("*float*: System nameplate capacity [kW]\n\n**Constraints:**\nPOSITIVE\n\n**Required:**\nTrue\n\nThe value of the following variables depends on ``system_capacity``:\n\n\t - battery_total_cost_lcos\n\t - construction_financing_cost\n\t - cp_battery_nameplate\n\t - cp_system_nameplate\n\t - land_area\n\t - total_installed_cost\n"), NULL}, {"system_heat_rate", (getter)FinancialParameters_get_system_heat_rate,(setter)FinancialParameters_set_system_heat_rate, PyDoc_STR("*float*: System heat rate [MMBTus/MWh]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), @@ -1508,94 +1508,94 @@ SystemCosts_set_total_installed_cost(VarGroupObject *self, PyObject *value, void static PyGetSetDef SystemCosts_getset[] = { {"add_om_num_types", (getter)SystemCosts_get_add_om_num_types,(setter)SystemCosts_set_add_om_num_types, - PyDoc_STR("*float*: Number of O and M types\n\n**Constraints:**\nINTEGER,MIN=0,MAX=2\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Number of O and M types\n\n**Info:**\nbattery,fuelcell\n\n**Constraints:**\nINTEGER,MIN=0,MAX=2\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"annual_fuel_usage", (getter)SystemCosts_get_annual_fuel_usage,(setter)SystemCosts_set_annual_fuel_usage, - PyDoc_STR("*float*: Fuel usage (yr 1) [kWht]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel usage (yr 1) [kWht]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Constraints:**\nMIN=0\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"annual_fuel_usage_lifetime", (getter)SystemCosts_get_annual_fuel_usage_lifetime,(setter)SystemCosts_set_annual_fuel_usage_lifetime, - PyDoc_STR("*sequence*: Fuel usage (lifetime) [kWht]"), + PyDoc_STR("*sequence*: Fuel usage (lifetime) [kWht]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical"), NULL}, {"om_batt_capacity_cost", (getter)SystemCosts_get_om_batt_capacity_cost,(setter)SystemCosts_set_om_batt_capacity_cost, - PyDoc_STR("*sequence*: Battery capacity-based System Costs amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery capacity-based System Costs amount [$/kWcap]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_fixed_cost", (getter)SystemCosts_get_om_batt_fixed_cost,(setter)SystemCosts_set_om_batt_fixed_cost, - PyDoc_STR("*sequence*: Battery fixed System Costs annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery fixed System Costs annual amount [$/year]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_nameplate", (getter)SystemCosts_get_om_batt_nameplate,(setter)SystemCosts_set_om_batt_nameplate, - PyDoc_STR("*float*: Battery capacity for System Costs values [kW]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Battery capacity for System Costs values [kW]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_replacement_cost", (getter)SystemCosts_get_om_batt_replacement_cost,(setter)SystemCosts_set_om_batt_replacement_cost, - PyDoc_STR("*sequence*: Replacement cost 1 [$/kWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Replacement cost 1 [$/kWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_batt_variable_cost", (getter)SystemCosts_get_om_batt_variable_cost,(setter)SystemCosts_set_om_batt_variable_cost, - PyDoc_STR("*sequence*: Battery production-based System Costs amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery production-based System Costs amount [$/MWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_capacity", (getter)SystemCosts_get_om_capacity,(setter)SystemCosts_set_om_capacity, - PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_capacity_escal", (getter)SystemCosts_get_om_capacity_escal,(setter)SystemCosts_set_om_capacity_escal, PyDoc_STR("*float*: Capacity-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fixed", (getter)SystemCosts_get_om_fixed,(setter)SystemCosts_set_om_fixed, - PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fixed_escal", (getter)SystemCosts_get_om_fixed_escal,(setter)SystemCosts_set_om_fixed_escal, PyDoc_STR("*float*: Fixed O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuel_cost", (getter)SystemCosts_get_om_fuel_cost,(setter)SystemCosts_set_om_fuel_cost, - PyDoc_STR("*sequence*: Fuel cost [$/MMBtu]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cost [$/MMBtu]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuel_cost_escal", (getter)SystemCosts_get_om_fuel_cost_escal,(setter)SystemCosts_set_om_fuel_cost_escal, - PyDoc_STR("*float*: Fuel cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel cost escalation [%/year]\n\n**Info:**\ngeneric_system,fuelcell,tcslinearfresnel,tcstroughempirical,tcsgenericsolar,fresnelphysical\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_capacity_cost", (getter)SystemCosts_get_om_fuelcell_capacity_cost,(setter)SystemCosts_set_om_fuelcell_capacity_cost, - PyDoc_STR("*sequence*: Fuel cell capacity-based System Costs amount [$/kWcap]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell capacity-based System Costs amount [$/kWcap]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_fixed_cost", (getter)SystemCosts_get_om_fuelcell_fixed_cost,(setter)SystemCosts_set_om_fuelcell_fixed_cost, - PyDoc_STR("*sequence*: Fuel cell fixed System Costs annual amount [$/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell fixed System Costs annual amount [$/year]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_nameplate", (getter)SystemCosts_get_om_fuelcell_nameplate,(setter)SystemCosts_set_om_fuelcell_nameplate, - PyDoc_STR("*float*: Fuel cell capacity for System Costs values [kW]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Fuel cell capacity for System Costs values [kW]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_replacement_cost", (getter)SystemCosts_get_om_fuelcell_replacement_cost,(setter)SystemCosts_set_om_fuelcell_replacement_cost, - PyDoc_STR("*sequence*: Replacement cost 2 [$/kW]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Replacement cost 2 [$/kW]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_fuelcell_variable_cost", (getter)SystemCosts_get_om_fuelcell_variable_cost,(setter)SystemCosts_set_om_fuelcell_variable_cost, - PyDoc_STR("*sequence*: Fuel cell production-based System Costs amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell production-based System Costs amount [$/MWh]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_cost", (getter)SystemCosts_get_om_opt_fuel_1_cost,(setter)SystemCosts_set_om_opt_fuel_1_cost, - PyDoc_STR("*sequence*: Biomass feedstock cost [$/unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Biomass feedstock cost [$/unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_cost_escal", (getter)SystemCosts_get_om_opt_fuel_1_cost_escal,(setter)SystemCosts_set_om_opt_fuel_1_cost_escal, - PyDoc_STR("*float*: Biomass feedstock cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Biomass feedstock cost escalation [%/year]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_1_usage", (getter)SystemCosts_get_om_opt_fuel_1_usage,(setter)SystemCosts_set_om_opt_fuel_1_usage, - PyDoc_STR("*float*: Biomass feedstock usage [unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Biomass feedstock usage [unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_cost", (getter)SystemCosts_get_om_opt_fuel_2_cost,(setter)SystemCosts_set_om_opt_fuel_2_cost, - PyDoc_STR("*sequence*: Coal feedstock cost [$/unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Coal feedstock cost [$/unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_cost_escal", (getter)SystemCosts_get_om_opt_fuel_2_cost_escal,(setter)SystemCosts_set_om_opt_fuel_2_cost_escal, - PyDoc_STR("*float*: Coal feedstock cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Coal feedstock cost escalation [%/year]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_opt_fuel_2_usage", (getter)SystemCosts_get_om_opt_fuel_2_usage,(setter)SystemCosts_set_om_opt_fuel_2_usage, - PyDoc_STR("*float*: Coal feedstock usage [unit]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Coal feedstock usage [unit]\n\n**Info:**\nbiomass\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production", (getter)SystemCosts_get_om_production,(setter)SystemCosts_set_om_production, - PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production1_values", (getter)SystemCosts_get_om_production1_values,(setter)SystemCosts_set_om_production1_values, - PyDoc_STR("*sequence*: Battery production for System Costs values [kWh]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Battery production for System Costs values [kWh]\n\n**Info:**\nbattery\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production2_values", (getter)SystemCosts_get_om_production2_values,(setter)SystemCosts_set_om_production2_values, - PyDoc_STR("*sequence*: Fuel cell production for System Costs values [kWh]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*sequence*: Fuel cell production for System Costs values [kWh]\n\n**Info:**\nfuelcell\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_production_escal", (getter)SystemCosts_get_om_production_escal,(setter)SystemCosts_set_om_production_escal, PyDoc_STR("*float*: Production-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"om_replacement_cost_escal", (getter)SystemCosts_get_om_replacement_cost_escal,(setter)SystemCosts_set_om_replacement_cost_escal, - PyDoc_STR("*float*: Replacement cost escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Replacement cost escalation [%/year]\n\n**Info:**\nbattery,fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), NULL}, {"system_lifetime_recapitalize", (getter)SystemCosts_get_system_lifetime_recapitalize,(setter)SystemCosts_set_system_lifetime_recapitalize, PyDoc_STR("*sequence*: Recapitalization boolean\n\n**INOUT:** This variable is both an input and an output to the compute module.\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), @@ -1610,7 +1610,7 @@ static PyGetSetDef SystemCosts_getset[] = { PyDoc_STR("*float*: Recapitalization expenses [0/1]\n\n**Options:**\n0=None,1=Recapitalize\n\n**INOUT:** This variable is both an input and an output to the compute module.\n\n**Constraints:**\nINTEGER,MIN=0\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"total_installed_cost", (getter)SystemCosts_get_total_installed_cost,(setter)SystemCosts_set_total_installed_cost, - PyDoc_STR("*float*: Installed cost [$]\n\n**Required:**\nTrue\n\nThe value of the following variables depends on ``total_installed_cost``:\n\n\t - construction_financing_cost\n"), + PyDoc_STR("*float*: Installed cost [$]\n\n**Required:**\nTrue\n\nThe value of the following variables depends on ``total_installed_cost``:\n\n\t - battery_total_cost_lcos\n\t - construction_financing_cost\n\n\nThe value of ``total_installed_cost`` depends on the following variables:\n\n\t - battery_per_kWh\n"), NULL}, {NULL} /* Sentinel */ }; @@ -4659,7 +4659,7 @@ static PyGetSetDef BatterySystem_getset[] = { PyDoc_STR("*sequence*: Battery bank replacements per year [number/year]\n\n**INOUT:** This variable is both an input and an output to the compute module."), NULL}, {"batt_computed_bank_capacity", (getter)BatterySystem_get_batt_computed_bank_capacity,(setter)BatterySystem_set_batt_computed_bank_capacity, - PyDoc_STR("*float*: Battery bank capacity [kWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Battery bank capacity [kWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults.\n\nThe value of the following variables depends on ``batt_computed_bank_capacity``:\n\n\t - battery_total_cost_lcos\n\t - construction_financing_cost\n\t - om_batt_nameplate\n\t - total_installed_cost\n"), NULL}, {"batt_meter_position", (getter)BatterySystem_get_batt_meter_position,(setter)BatterySystem_set_batt_meter_position, PyDoc_STR("*float*: Position of battery relative to electric meter"), @@ -4671,7 +4671,7 @@ static PyGetSetDef BatterySystem_getset[] = { PyDoc_STR("*sequence*: Percentage of battery capacity to replace in each year [%]\n\n**Options:**\nlength <= analysis_period"), NULL}, {"battery_per_kWh", (getter)BatterySystem_get_battery_per_kWh,(setter)BatterySystem_set_battery_per_kWh, - PyDoc_STR("*float*: Battery cost [$/kWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + PyDoc_STR("*float*: Battery cost [$/kWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults.\n\nThe value of the following variables depends on ``battery_per_kWh``:\n\n\t - battery_total_cost_lcos\n\t - construction_financing_cost\n\t - total_installed_cost\n"), NULL}, {"en_batt", (getter)BatterySystem_get_en_batt,(setter)BatterySystem_set_en_batt, PyDoc_STR("*float*: Enable battery storage model [0/1]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), @@ -4827,6 +4827,318 @@ ElectricityRates_set_rate_escalation(VarGroupObject *self, PyObject *value, void return PySAM_array_setter(value, SAM_Singleowner_ElectricityRates_rate_escalation_aset, self->data_ptr); } +static PyObject * +ElectricityRates_get_ur_annual_min_charge(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Singleowner_ElectricityRates_ur_annual_min_charge_nget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_annual_min_charge(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Singleowner_ElectricityRates_ur_annual_min_charge_nset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_billing_demand_lookback_percentages(VarGroupObject *self, void *closure) +{ + return PySAM_matrix_getter(SAM_Singleowner_ElectricityRates_ur_billing_demand_lookback_percentages_mget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_billing_demand_lookback_percentages(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_matrix_setter(value, SAM_Singleowner_ElectricityRates_ur_billing_demand_lookback_percentages_mset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_billing_demand_lookback_period(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Singleowner_ElectricityRates_ur_billing_demand_lookback_period_nget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_billing_demand_lookback_period(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Singleowner_ElectricityRates_ur_billing_demand_lookback_period_nset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_billing_demand_minimum(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Singleowner_ElectricityRates_ur_billing_demand_minimum_nget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_billing_demand_minimum(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Singleowner_ElectricityRates_ur_billing_demand_minimum_nset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_dc_billing_demand_periods(VarGroupObject *self, void *closure) +{ + return PySAM_matrix_getter(SAM_Singleowner_ElectricityRates_ur_dc_billing_demand_periods_mget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_dc_billing_demand_periods(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_matrix_setter(value, SAM_Singleowner_ElectricityRates_ur_dc_billing_demand_periods_mset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_dc_enable(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Singleowner_ElectricityRates_ur_dc_enable_nget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_dc_enable(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Singleowner_ElectricityRates_ur_dc_enable_nset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_dc_flat_mat(VarGroupObject *self, void *closure) +{ + return PySAM_matrix_getter(SAM_Singleowner_ElectricityRates_ur_dc_flat_mat_mget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_dc_flat_mat(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_matrix_setter(value, SAM_Singleowner_ElectricityRates_ur_dc_flat_mat_mset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_dc_sched_weekday(VarGroupObject *self, void *closure) +{ + return PySAM_matrix_getter(SAM_Singleowner_ElectricityRates_ur_dc_sched_weekday_mget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_dc_sched_weekday(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_matrix_setter(value, SAM_Singleowner_ElectricityRates_ur_dc_sched_weekday_mset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_dc_sched_weekend(VarGroupObject *self, void *closure) +{ + return PySAM_matrix_getter(SAM_Singleowner_ElectricityRates_ur_dc_sched_weekend_mget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_dc_sched_weekend(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_matrix_setter(value, SAM_Singleowner_ElectricityRates_ur_dc_sched_weekend_mset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_dc_tou_mat(VarGroupObject *self, void *closure) +{ + return PySAM_matrix_getter(SAM_Singleowner_ElectricityRates_ur_dc_tou_mat_mget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_dc_tou_mat(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_matrix_setter(value, SAM_Singleowner_ElectricityRates_ur_dc_tou_mat_mset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_ec_sched_weekday(VarGroupObject *self, void *closure) +{ + return PySAM_matrix_getter(SAM_Singleowner_ElectricityRates_ur_ec_sched_weekday_mget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_ec_sched_weekday(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_matrix_setter(value, SAM_Singleowner_ElectricityRates_ur_ec_sched_weekday_mset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_ec_sched_weekend(VarGroupObject *self, void *closure) +{ + return PySAM_matrix_getter(SAM_Singleowner_ElectricityRates_ur_ec_sched_weekend_mget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_ec_sched_weekend(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_matrix_setter(value, SAM_Singleowner_ElectricityRates_ur_ec_sched_weekend_mset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_ec_tou_mat(VarGroupObject *self, void *closure) +{ + return PySAM_matrix_getter(SAM_Singleowner_ElectricityRates_ur_ec_tou_mat_mget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_ec_tou_mat(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_matrix_setter(value, SAM_Singleowner_ElectricityRates_ur_ec_tou_mat_mset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_en_ts_buy_rate(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Singleowner_ElectricityRates_ur_en_ts_buy_rate_nget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_en_ts_buy_rate(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Singleowner_ElectricityRates_ur_en_ts_buy_rate_nset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_en_ts_sell_rate(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Singleowner_ElectricityRates_ur_en_ts_sell_rate_nget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_en_ts_sell_rate(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Singleowner_ElectricityRates_ur_en_ts_sell_rate_nset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_enable_billing_demand(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Singleowner_ElectricityRates_ur_enable_billing_demand_nget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_enable_billing_demand(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Singleowner_ElectricityRates_ur_enable_billing_demand_nset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_metering_option(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Singleowner_ElectricityRates_ur_metering_option_nget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_metering_option(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Singleowner_ElectricityRates_ur_metering_option_nset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_monthly_fixed_charge(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Singleowner_ElectricityRates_ur_monthly_fixed_charge_nget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_monthly_fixed_charge(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Singleowner_ElectricityRates_ur_monthly_fixed_charge_nset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_monthly_min_charge(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Singleowner_ElectricityRates_ur_monthly_min_charge_nget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_monthly_min_charge(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Singleowner_ElectricityRates_ur_monthly_min_charge_nset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_nm_credit_month(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Singleowner_ElectricityRates_ur_nm_credit_month_nget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_nm_credit_month(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Singleowner_ElectricityRates_ur_nm_credit_month_nset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_nm_credit_rollover(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Singleowner_ElectricityRates_ur_nm_credit_rollover_nget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_nm_credit_rollover(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Singleowner_ElectricityRates_ur_nm_credit_rollover_nset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_nm_yearend_sell_rate(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Singleowner_ElectricityRates_ur_nm_yearend_sell_rate_nget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_nm_yearend_sell_rate(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Singleowner_ElectricityRates_ur_nm_yearend_sell_rate_nset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_sell_eq_buy(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Singleowner_ElectricityRates_ur_sell_eq_buy_nget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_sell_eq_buy(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Singleowner_ElectricityRates_ur_sell_eq_buy_nset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_ts_buy_rate(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Singleowner_ElectricityRates_ur_ts_buy_rate_aget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_ts_buy_rate(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Singleowner_ElectricityRates_ur_ts_buy_rate_aset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_ts_sell_rate(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Singleowner_ElectricityRates_ur_ts_sell_rate_aget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_ts_sell_rate(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Singleowner_ElectricityRates_ur_ts_sell_rate_aset, self->data_ptr); +} + +static PyObject * +ElectricityRates_get_ur_yearzero_usage_peaks(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Singleowner_ElectricityRates_ur_yearzero_usage_peaks_aget, self->data_ptr); +} + +static int +ElectricityRates_set_ur_yearzero_usage_peaks(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Singleowner_ElectricityRates_ur_yearzero_usage_peaks_aset, self->data_ptr); +} + static PyGetSetDef ElectricityRates_getset[] = { {"en_electricity_rates", (getter)ElectricityRates_get_en_electricity_rates,(setter)ElectricityRates_set_en_electricity_rates, PyDoc_STR("*float*: Enable electricity rates for grid purchase [0/1]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), @@ -4834,6 +5146,84 @@ static PyGetSetDef ElectricityRates_getset[] = { {"rate_escalation", (getter)ElectricityRates_get_rate_escalation,(setter)ElectricityRates_set_rate_escalation, PyDoc_STR("*sequence*: Annual electricity rate escalation [%/year]"), NULL}, +{"ur_annual_min_charge", (getter)ElectricityRates_get_ur_annual_min_charge,(setter)ElectricityRates_set_ur_annual_min_charge, + PyDoc_STR("*float*: Annual minimum charge [$]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"ur_billing_demand_lookback_percentages", (getter)ElectricityRates_get_ur_billing_demand_lookback_percentages,(setter)ElectricityRates_set_ur_billing_demand_lookback_percentages, + PyDoc_STR("*sequence[sequence]*: Billing demand lookback percentages by month and consider actual peak demand [%]\n\n**Info:**\n12x2\n\n**Required:**\nRequired if ur_enable_billing_demand=1"), + NULL}, +{"ur_billing_demand_lookback_period", (getter)ElectricityRates_get_ur_billing_demand_lookback_period,(setter)ElectricityRates_set_ur_billing_demand_lookback_period, + PyDoc_STR("*float*: Billing demand lookback period [mn]\n\n**Constraints:**\nINTEGER,MIN=0,MAX=12\n\n**Required:**\nRequired if ur_enable_billing_demand=1"), + NULL}, +{"ur_billing_demand_minimum", (getter)ElectricityRates_get_ur_billing_demand_minimum,(setter)ElectricityRates_set_ur_billing_demand_minimum, + PyDoc_STR("*float*: Minimum billing demand [kW]\n\n**Required:**\nRequired if ur_enable_billing_demand=1"), + NULL}, +{"ur_dc_billing_demand_periods", (getter)ElectricityRates_get_ur_dc_billing_demand_periods,(setter)ElectricityRates_set_ur_dc_billing_demand_periods, + PyDoc_STR("*sequence[sequence]*: Billing demand applicability to a given demand charge time of use period\n\n**Required:**\nRequired if ur_enable_billing_demand=1"), + NULL}, +{"ur_dc_enable", (getter)ElectricityRates_get_ur_dc_enable,(setter)ElectricityRates_set_ur_dc_enable, + PyDoc_STR("*float*: Enable demand charge [0/1]\n\n**Options:**\n0=disable,1=enable\n\n**Constraints:**\nBOOLEAN\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"ur_dc_flat_mat", (getter)ElectricityRates_get_ur_dc_flat_mat,(setter)ElectricityRates_set_ur_dc_flat_mat, + PyDoc_STR("*sequence[sequence]*: Demand rates (flat) table [col 0=month, col 1=tier no, col 2=tier peak (kW), col 3=charge ($/kW)]\n\n**Info:**\nnx4\n\n**Required:**\nRequired if ur_dc_enable=1"), + NULL}, +{"ur_dc_sched_weekday", (getter)ElectricityRates_get_ur_dc_sched_weekday,(setter)ElectricityRates_set_ur_dc_sched_weekday, + PyDoc_STR("*sequence[sequence]*: Demand charge weekday schedule [Periods defined in ur_dc_tou_mat]\n\n**Info:**\n12x24"), + NULL}, +{"ur_dc_sched_weekend", (getter)ElectricityRates_get_ur_dc_sched_weekend,(setter)ElectricityRates_set_ur_dc_sched_weekend, + PyDoc_STR("*sequence[sequence]*: Demand charge weekend schedule [Periods defined in ur_dc_tou_mat]\n\n**Info:**\n12x24"), + NULL}, +{"ur_dc_tou_mat", (getter)ElectricityRates_get_ur_dc_tou_mat,(setter)ElectricityRates_set_ur_dc_tou_mat, + PyDoc_STR("*sequence[sequence]*: Demand rates (TOU) table [col 0=period no, col 1=tier no, col 2=tier peak (kW), col 3=charge ($/kW)]\n\n**Info:**\nnx4\n\n**Required:**\nRequired if ur_dc_enable=1"), + NULL}, +{"ur_ec_sched_weekday", (getter)ElectricityRates_get_ur_ec_sched_weekday,(setter)ElectricityRates_set_ur_ec_sched_weekday, + PyDoc_STR("*sequence[sequence]*: Energy charge weekday schedule [Periods defined in ur_ec_tou_mat]\n\n**Info:**\n12x24"), + NULL}, +{"ur_ec_sched_weekend", (getter)ElectricityRates_get_ur_ec_sched_weekend,(setter)ElectricityRates_set_ur_ec_sched_weekend, + PyDoc_STR("*sequence[sequence]*: Energy charge weekend schedule [Periods defined in ur_ec_tou_mat]\n\n**Info:**\n12x24"), + NULL}, +{"ur_ec_tou_mat", (getter)ElectricityRates_get_ur_ec_tou_mat,(setter)ElectricityRates_set_ur_ec_tou_mat, + PyDoc_STR("*sequence[sequence]*: Energy rates table [col 0=period no, col 1=tier no, col 2=max usage, col 3=max usage units (0=kWh, 1=kWh/kW, 2=kWh daily, 3=kWh/kW daily), col 4=buy rate ($/kWh), col 5=sell rate ($/kWh)]\n\n**Info:**\nnx6"), + NULL}, +{"ur_en_ts_buy_rate", (getter)ElectricityRates_get_ur_en_ts_buy_rate,(setter)ElectricityRates_set_ur_en_ts_buy_rate, + PyDoc_STR("*float*: Enable time step buy rates [0/1]\n\n**Options:**\n0=disable,1=enable\n\n**Constraints:**\nBOOLEAN\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"ur_en_ts_sell_rate", (getter)ElectricityRates_get_ur_en_ts_sell_rate,(setter)ElectricityRates_set_ur_en_ts_sell_rate, + PyDoc_STR("*float*: Enable time step sell rates [0/1]\n\n**Options:**\n0=disable,1=enable\n\n**Constraints:**\nBOOLEAN\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"ur_enable_billing_demand", (getter)ElectricityRates_get_ur_enable_billing_demand,(setter)ElectricityRates_set_ur_enable_billing_demand, + PyDoc_STR("*float*: Enable billing demand ratchets [0/1]\n\n**Options:**\n0=disable,1=enable\n\n**Constraints:**\nINTEGER,MIN=0,MAX=1\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"ur_metering_option", (getter)ElectricityRates_get_ur_metering_option,(setter)ElectricityRates_set_ur_metering_option, + PyDoc_STR("*float*: Metering options [0=net energy metering,1=net energy metering with $ credits,2=net billing,3=net billing with carryover to next month,4=buy all - sell all]\n\n**Info:**\nNet metering monthly excess\n\n**Constraints:**\nINTEGER,MIN=0,MAX=4\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"ur_monthly_fixed_charge", (getter)ElectricityRates_get_ur_monthly_fixed_charge,(setter)ElectricityRates_set_ur_monthly_fixed_charge, + PyDoc_STR("*float*: Monthly fixed charge [$]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"ur_monthly_min_charge", (getter)ElectricityRates_get_ur_monthly_min_charge,(setter)ElectricityRates_set_ur_monthly_min_charge, + PyDoc_STR("*float*: Monthly minimum charge [$]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"ur_nm_credit_month", (getter)ElectricityRates_get_ur_nm_credit_month,(setter)ElectricityRates_set_ur_nm_credit_month, + PyDoc_STR("*float*: Month of year end payout (true-up) [mn]\n\n**Constraints:**\nINTEGER,MIN=0,MAX=11\n\n**Required:**\nFalse. Automatically set to 11 if not assigned explicitly or loaded from defaults."), + NULL}, +{"ur_nm_credit_rollover", (getter)ElectricityRates_get_ur_nm_credit_rollover,(setter)ElectricityRates_set_ur_nm_credit_rollover, + PyDoc_STR("*float*: Apply net metering true-up credits to future bills [0/1]\n\n**Options:**\n0=disable,1=enable\n\n**Constraints:**\nINTEGER,MIN=0,MAX=1\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"ur_nm_yearend_sell_rate", (getter)ElectricityRates_get_ur_nm_yearend_sell_rate,(setter)ElectricityRates_set_ur_nm_yearend_sell_rate, + PyDoc_STR("*float*: Net metering true-up credit sell rate [$/kWh]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"ur_sell_eq_buy", (getter)ElectricityRates_get_ur_sell_eq_buy,(setter)ElectricityRates_set_ur_sell_eq_buy, + PyDoc_STR("*float*: Set sell rate equal to buy rate [0/1]\n\n**Info:**\nOptional override\n\n**Constraints:**\nBOOLEAN\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"ur_ts_buy_rate", (getter)ElectricityRates_get_ur_ts_buy_rate,(setter)ElectricityRates_set_ur_ts_buy_rate, + PyDoc_STR("*sequence*: Time step buy rates [$/kWh]"), + NULL}, +{"ur_ts_sell_rate", (getter)ElectricityRates_get_ur_ts_sell_rate,(setter)ElectricityRates_set_ur_ts_sell_rate, + PyDoc_STR("*sequence*: Time step sell rates [$/kWh]"), + NULL}, +{"ur_yearzero_usage_peaks", (getter)ElectricityRates_get_ur_yearzero_usage_peaks,(setter)ElectricityRates_set_ur_yearzero_usage_peaks, + PyDoc_STR("*sequence*: Peak usage by month for year zero [kW]\n\n**Info:**\n12\n\n**Required:**\nRequired if ur_enable_billing_demand=1"), + NULL}, {NULL} /* Sentinel */ }; @@ -5050,13 +5440,13 @@ static PyGetSetDef SystemOutput_getset[] = { PyDoc_STR("*sequence*: Net power to or from the grid [kW]\n\n**Required:**\nTrue"), NULL}, {"gen_purchases", (getter)SystemOutput_get_gen_purchases,(setter)SystemOutput_set_gen_purchases, - PyDoc_STR("*sequence*: Electricity from grid [kW]\n\n**INOUT:** This variable is both an input and an output to the compute module."), + PyDoc_STR("*sequence*: Electricity from grid to system [kW]\n\n**INOUT:** This variable is both an input and an output to the compute module."), NULL}, {"gen_without_battery", (getter)SystemOutput_get_gen_without_battery,(setter)SystemOutput_set_gen_without_battery, PyDoc_STR("*sequence*: Electricity to or from the renewable system, without the battery [kW]"), NULL}, {"system_capacity", (getter)SystemOutput_get_system_capacity,(setter)SystemOutput_set_system_capacity, - PyDoc_STR("*float*: System nameplate capacity [kW]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults.\n\nThe value of the following variables depends on ``system_capacity``:\n\n\t - cp_battery_nameplate\n\t - cp_system_nameplate\n"), + PyDoc_STR("*float*: System nameplate capacity [kW]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults.\n\nThe value of the following variables depends on ``system_capacity``:\n\n\t - battery_total_cost_lcos\n\t - construction_financing_cost\n\t - cp_battery_nameplate\n\t - cp_system_nameplate\n\t - land_area\n\t - total_installed_cost\n"), NULL}, {"system_pre_curtailment_kwac", (getter)SystemOutput_get_system_pre_curtailment_kwac,(setter)SystemOutput_set_system_pre_curtailment_kwac, PyDoc_STR("*sequence*: System power before grid curtailment [kW]\n\n**Info:**\nSystem generation"), @@ -5772,7 +6162,7 @@ CapacityPayments_set_cp_system_nameplate(VarGroupObject *self, PyObject *value, static PyGetSetDef CapacityPayments_getset[] = { {"cp_battery_nameplate", (getter)CapacityPayments_get_cp_battery_nameplate,(setter)CapacityPayments_set_cp_battery_nameplate, - PyDoc_STR("*float*: Battery nameplate [MW]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nRequired if cp_capacity_payment_type=0\n\nThe value of ``cp_battery_nameplate`` depends on the following variables:\n\n\t - cp_system_nameplate\n\t - system_capacity\n"), + PyDoc_STR("*float*: Battery nameplate [MW]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nRequired if cp_capacity_payment_type=0\n\nThe value of ``cp_battery_nameplate`` depends on the following variables:\n\n\t - cp_system_nameplate\n"), NULL}, {"cp_capacity_credit_percent", (getter)CapacityPayments_get_cp_capacity_credit_percent,(setter)CapacityPayments_set_cp_capacity_credit_percent, PyDoc_STR("*sequence*: Capacity credit (eligible portion of nameplate) [%]\n\n**Required:**\nRequired if cp_capacity_payment_type=0"), @@ -5787,7 +6177,7 @@ static PyGetSetDef CapacityPayments_getset[] = { PyDoc_STR("*float*: Capacity payment type\n\n**Options:**\n0=Energy basis,1=Fixed amount\n\n**Constraints:**\nINTEGER,MIN=0,MAX=1\n\n**Required:**\nTrue"), NULL}, {"cp_system_nameplate", (getter)CapacityPayments_get_cp_system_nameplate,(setter)CapacityPayments_set_cp_system_nameplate, - PyDoc_STR("*float*: System nameplate [MW]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nRequired if cp_capacity_payment_type=0\n\nThe value of the following variables depends on ``cp_system_nameplate``:\n\n\t - cp_battery_nameplate\n\n\nThe value of ``cp_system_nameplate`` depends on the following variables:\n\n\t - system_capacity\n"), + PyDoc_STR("*float*: System nameplate [MW]\n\n**Constraints:**\nMIN=0\n\n**Required:**\nRequired if cp_capacity_payment_type=0\n\nThe value of the following variables depends on ``cp_system_nameplate``:\n\n\t - cp_battery_nameplate\n"), NULL}, {NULL} /* Sentinel */ }; @@ -6271,7 +6661,7 @@ static PyGetSetDef LCOS_getset[] = { PyDoc_STR("*float*: Net pre-tax cash battery salvage value [%]\n\n**Constraints:**\nMIN=0,MAX=100\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), NULL}, {"battery_total_cost_lcos", (getter)LCOS_get_battery_total_cost_lcos,(setter)LCOS_set_battery_total_cost_lcos, - PyDoc_STR("*float*: Battery total investment cost [$]"), + PyDoc_STR("*float*: Battery total investment cost [$]\n\nThe value of ``battery_total_cost_lcos`` depends on the following variables:\n\n\t - battery_per_kWh\n\t - total_installed_cost\n"), NULL}, {"charge_w_sys_ec_ym", (getter)LCOS_get_charge_w_sys_ec_ym,(setter)LCOS_set_charge_w_sys_ec_ym, PyDoc_STR("*sequence[sequence]*: Energy charge with system [$]"), @@ -6794,6 +7184,158 @@ static PyTypeObject Monthly_Type = { }; +/* + * HybridCosts Group + */ + +static PyTypeObject HybridCosts_Type; + +static PyObject * +HybridCosts_new(SAM_Singleowner data_ptr) +{ + PyObject* new_obj = HybridCosts_Type.tp_alloc(&HybridCosts_Type,0); + + VarGroupObject* HybridCosts_obj = (VarGroupObject*)new_obj; + + HybridCosts_obj->data_ptr = (SAM_table)data_ptr; + + return new_obj; +} + +/* HybridCosts methods */ + +static PyObject * +HybridCosts_assign(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + + if (!PySAM_assign_from_dict(self->data_ptr, dict, "Singleowner", "HybridCosts")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +HybridCosts_replace(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + PyTypeObject* tp = &HybridCosts_Type; + + if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "Singleowner", "HybridCosts")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +HybridCosts_export(VarGroupObject *self, PyObject *args) +{ + PyTypeObject* tp = &HybridCosts_Type; + PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); + return dict; +} + +static PyMethodDef HybridCosts_methods[] = { + {"assign", (PyCFunction)HybridCosts_assign, METH_VARARGS, + PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``HybridCosts_vals = { var: val, ...}``")}, + {"replace", (PyCFunction)HybridCosts_replace, METH_VARARGS, + PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``HybridCosts_vals = { var: val, ...}``")}, + {"export", (PyCFunction)HybridCosts_export, METH_VARARGS, + PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, + {NULL, NULL} /* sentinel */ +}; + +static PyObject * +HybridCosts_get_degradation(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Singleowner_HybridCosts_degradation_aget, self->data_ptr); +} + +static int +HybridCosts_set_degradation(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Singleowner_HybridCosts_degradation_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_total_installed_cost(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Singleowner_HybridCosts_total_installed_cost_nget, self->data_ptr); +} + +static int +HybridCosts_set_total_installed_cost(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Singleowner_HybridCosts_total_installed_cost_nset, self->data_ptr); +} + +static PyGetSetDef HybridCosts_getset[] = { +{"degradation", (getter)HybridCosts_get_degradation,(setter)HybridCosts_set_degradation, + PyDoc_STR("*sequence*: Annual AC degradation [%]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"total_installed_cost", (getter)HybridCosts_get_total_installed_cost,(setter)HybridCosts_set_total_installed_cost, + PyDoc_STR("*float*: Total installed cost [$]\n\n**Required:**\nTrue\n\nThe value of the following variables depends on ``total_installed_cost``:\n\n\t - battery_total_cost_lcos\n\t - construction_financing_cost\n\n\nThe value of ``total_installed_cost`` depends on the following variables:\n\n\t - battery_per_kWh\n"), + NULL}, + {NULL} /* Sentinel */ +}; + +static PyTypeObject HybridCosts_Type = { + /* The ob_type field must be initialized in the module init function + * to be portable to Windows without using C++. */ + PyVarObject_HEAD_INIT(NULL, 0) + "Singleowner.HybridCosts", /*tp_name*/ + sizeof(VarGroupObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + /* methods */ + 0, /*tp_dealloc*/ + 0, /*tp_print*/ + (getattrfunc)0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_reserved*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistofnset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + HybridCosts_methods, /*tp_methods*/ + 0, /*tp_members*/ + HybridCosts_getset, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictofnset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + 0, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ +}; + + /* * Outputs Group */ @@ -12099,6 +12641,10 @@ newSingleownerObject(void* data_ptr) PyDict_SetItemString(attr_dict, "Monthly", Monthly_obj); Py_DECREF(Monthly_obj); + PyObject* HybridCosts_obj = HybridCosts_new(self->data_ptr); + PyDict_SetItemString(attr_dict, "HybridCosts", HybridCosts_obj); + Py_DECREF(HybridCosts_obj); + PyObject* Outputs_obj = Outputs_new(self->data_ptr); PyDict_SetItemString(attr_dict, "Outputs", Outputs_obj); Py_DECREF(Outputs_obj); @@ -12197,8 +12743,6 @@ Singleowner_unassign(CmodObject *self, PyObject *args) static PyMethodDef Singleowner_methods[] = { {"execute", (PyCFunction)Singleowner_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Singleowner_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Singleowner_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Revenue': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Singleowner_replace, METH_VARARGS, @@ -12209,6 +12753,8 @@ static PyMethodDef Singleowner_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Singleowner_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Singleowner_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; @@ -12523,6 +13069,13 @@ SingleownerModule_exec(PyObject *m) (PyObject*)&Monthly_Type); Py_DECREF(&Monthly_Type); + /// Add the HybridCosts type object to Singleowner_Type + if (PyType_Ready(&HybridCosts_Type) < 0) { goto fail; } + PyDict_SetItemString(Singleowner_Type.tp_dict, + "HybridCosts", + (PyObject*)&HybridCosts_Type); + Py_DECREF(&HybridCosts_Type); + /// Add the Outputs type object to Singleowner_Type if (PyType_Ready(&Outputs_Type) < 0) { goto fail; } PyDict_SetItemString(Singleowner_Type.tp_dict, diff --git a/modules/SixParsolve.c b/modules/SixParsolve.c index 3c4b711a..666fc92f 100644 --- a/modules/SixParsolve.c +++ b/modules/SixParsolve.c @@ -569,8 +569,6 @@ SixParsolve_unassign(CmodObject *self, PyObject *args) static PyMethodDef SixParsolve_methods[] = { {"execute", (PyCFunction)SixParsolve_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)SixParsolve_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)SixParsolve_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Six Parameter Solver': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)SixParsolve_replace, METH_VARARGS, @@ -581,6 +579,8 @@ static PyMethodDef SixParsolve_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)SixParsolve_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)SixParsolve_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Snowmodel.c b/modules/Snowmodel.c index d60e9576..9e9c883f 100644 --- a/modules/Snowmodel.c +++ b/modules/Snowmodel.c @@ -77,6 +77,18 @@ static PyMethodDef PVSnowModel_methods[] = { {NULL, NULL} /* sentinel */ }; +static PyObject * +PVSnowModel_get_snow_slide_coefficient(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Snowmodel_PVSnowModel_snow_slide_coefficient_nget, self->data_ptr); +} + +static int +PVSnowModel_set_snow_slide_coefficient(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Snowmodel_PVSnowModel_snow_slide_coefficient_nset, self->data_ptr); +} + static PyObject * PVSnowModel_get_snowdepth(VarGroupObject *self, void *closure) { @@ -174,6 +186,9 @@ PVSnowModel_set_wspd(VarGroupObject *self, PyObject *value, void *closure) } static PyGetSetDef PVSnowModel_getset[] = { +{"snow_slide_coefficient", (getter)PVSnowModel_get_snow_slide_coefficient,(setter)PVSnowModel_set_snow_slide_coefficient, + PyDoc_STR("*float*: Snow Slide Coefficient\n\n**Required:**\nFalse. Automatically set to 1.97 if not assigned explicitly or loaded from defaults."), + NULL}, {"snowdepth", (getter)PVSnowModel_get_snowdepth,(setter)PVSnowModel_set_snowdepth, PyDoc_STR("*sequence*: Snow Depth [cm]\n\n**Constraints:**\nLENGTH=8760\n\n**Required:**\nTrue"), NULL}, @@ -695,8 +710,6 @@ Snowmodel_unassign(CmodObject *self, PyObject *args) static PyMethodDef Snowmodel_methods[] = { {"execute", (PyCFunction)Snowmodel_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Snowmodel_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Snowmodel_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'PV Snow Model': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Snowmodel_replace, METH_VARARGS, @@ -707,6 +720,8 @@ static PyMethodDef Snowmodel_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Snowmodel_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Snowmodel_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Solarpilot.c b/modules/Solarpilot.c index 88d54705..ca5a4248 100644 --- a/modules/Solarpilot.c +++ b/modules/Solarpilot.c @@ -1373,8 +1373,6 @@ Solarpilot_unassign(CmodObject *self, PyObject *args) static PyMethodDef Solarpilot_methods[] = { {"execute", (PyCFunction)Solarpilot_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Solarpilot_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Solarpilot_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'SolarPILOT': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Solarpilot_replace, METH_VARARGS, @@ -1385,6 +1383,8 @@ static PyMethodDef Solarpilot_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Solarpilot_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Solarpilot_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Swh.c b/modules/Swh.c index cf287213..ec41fb2d 100644 --- a/modules/Swh.c +++ b/modules/Swh.c @@ -1661,8 +1661,6 @@ Swh_unassign(CmodObject *self, PyObject *args) static PyMethodDef Swh_methods[] = { {"execute", (PyCFunction)Swh_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Swh_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Swh_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Solar Resource': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Swh_replace, METH_VARARGS, @@ -1673,6 +1671,8 @@ static PyMethodDef Swh_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Swh_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Swh_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/TcsMSLF.c b/modules/TcsMSLF.c index afe4162a..b9e79ba6 100644 --- a/modules/TcsMSLF.c +++ b/modules/TcsMSLF.c @@ -4637,8 +4637,6 @@ TcsMSLF_unassign(CmodObject *self, PyObject *args) static PyMethodDef TcsMSLF_methods[] = { {"execute", (PyCFunction)TcsMSLF_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)TcsMSLF_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)TcsMSLF_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'weather': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)TcsMSLF_replace, METH_VARARGS, @@ -4649,6 +4647,8 @@ static PyMethodDef TcsMSLF_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)TcsMSLF_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)TcsMSLF_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/TcsgenericSolar.c b/modules/TcsgenericSolar.c index 4593674d..51140195 100644 --- a/modules/TcsgenericSolar.c +++ b/modules/TcsgenericSolar.c @@ -2312,8 +2312,6 @@ TcsgenericSolar_unassign(CmodObject *self, PyObject *args) static PyMethodDef TcsgenericSolar_methods[] = { {"execute", (PyCFunction)TcsgenericSolar_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)TcsgenericSolar_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)TcsgenericSolar_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'weather': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)TcsgenericSolar_replace, METH_VARARGS, @@ -2324,6 +2322,8 @@ static PyMethodDef TcsgenericSolar_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)TcsgenericSolar_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)TcsgenericSolar_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/TcslinearFresnel.c b/modules/TcslinearFresnel.c index ca41e3a2..d0e21f5b 100644 --- a/modules/TcslinearFresnel.c +++ b/modules/TcslinearFresnel.c @@ -3575,8 +3575,6 @@ TcslinearFresnel_unassign(CmodObject *self, PyObject *args) static PyMethodDef TcslinearFresnel_methods[] = { {"execute", (PyCFunction)TcslinearFresnel_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)TcslinearFresnel_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)TcslinearFresnel_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'weather': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)TcslinearFresnel_replace, METH_VARARGS, @@ -3587,6 +3585,8 @@ static PyMethodDef TcslinearFresnel_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)TcslinearFresnel_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)TcslinearFresnel_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/TcsmoltenSalt.c b/modules/TcsmoltenSalt.c index 773a7e52..e80cc76f 100644 --- a/modules/TcsmoltenSalt.c +++ b/modules/TcsmoltenSalt.c @@ -9494,8 +9494,6 @@ TcsmoltenSalt_unassign(CmodObject *self, PyObject *args) static PyMethodDef TcsmoltenSalt_methods[] = { {"execute", (PyCFunction)TcsmoltenSalt_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)TcsmoltenSalt_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)TcsmoltenSalt_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Solar Resource': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)TcsmoltenSalt_replace, METH_VARARGS, @@ -9506,6 +9504,8 @@ static PyMethodDef TcsmoltenSalt_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)TcsmoltenSalt_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)TcsmoltenSalt_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/TcstroughEmpirical.c b/modules/TcstroughEmpirical.c index 97633ec9..c9ce76cd 100644 --- a/modules/TcstroughEmpirical.c +++ b/modules/TcstroughEmpirical.c @@ -3788,8 +3788,6 @@ TcstroughEmpirical_unassign(CmodObject *self, PyObject *args) static PyMethodDef TcstroughEmpirical_methods[] = { {"execute", (PyCFunction)TcstroughEmpirical_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)TcstroughEmpirical_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)TcstroughEmpirical_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'weather': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)TcstroughEmpirical_replace, METH_VARARGS, @@ -3800,6 +3798,8 @@ static PyMethodDef TcstroughEmpirical_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)TcstroughEmpirical_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)TcstroughEmpirical_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/TcstroughPhysical.c b/modules/TcstroughPhysical.c index 969b3ff7..e5f9d615 100644 --- a/modules/TcstroughPhysical.c +++ b/modules/TcstroughPhysical.c @@ -5387,8 +5387,6 @@ TcstroughPhysical_unassign(CmodObject *self, PyObject *args) static PyMethodDef TcstroughPhysical_methods[] = { {"execute", (PyCFunction)TcstroughPhysical_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)TcstroughPhysical_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)TcstroughPhysical_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'weather': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)TcstroughPhysical_replace, METH_VARARGS, @@ -5399,6 +5397,8 @@ static PyMethodDef TcstroughPhysical_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)TcstroughPhysical_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)TcstroughPhysical_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/TestUdPowerCycle.c b/modules/TestUdPowerCycle.c index 3ffb87ed..334f5dfb 100644 --- a/modules/TestUdPowerCycle.c +++ b/modules/TestUdPowerCycle.c @@ -389,8 +389,6 @@ TestUdPowerCycle_unassign(CmodObject *self, PyObject *args) static PyMethodDef TestUdPowerCycle_methods[] = { {"execute", (PyCFunction)TestUdPowerCycle_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)TestUdPowerCycle_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)TestUdPowerCycle_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Common': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)TestUdPowerCycle_replace, METH_VARARGS, @@ -401,6 +399,8 @@ static PyMethodDef TestUdPowerCycle_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)TestUdPowerCycle_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)TestUdPowerCycle_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Thermalrate.c b/modules/Thermalrate.c index f0f5d7c3..f26c69de 100644 --- a/modules/Thermalrate.c +++ b/modules/Thermalrate.c @@ -779,8 +779,6 @@ Thermalrate_unassign(CmodObject *self, PyObject *args) static PyMethodDef Thermalrate_methods[] = { {"execute", (PyCFunction)Thermalrate_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Thermalrate_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Thermalrate_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Thermal Rate': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Thermalrate_replace, METH_VARARGS, @@ -791,6 +789,8 @@ static PyMethodDef Thermalrate_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Thermalrate_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Thermalrate_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Thirdpartyownership.c b/modules/Thirdpartyownership.c index 9fb2324f..7a96dc79 100644 --- a/modules/Thirdpartyownership.c +++ b/modules/Thirdpartyownership.c @@ -1547,8 +1547,6 @@ Thirdpartyownership_unassign(CmodObject *self, PyObject *args) static PyMethodDef Thirdpartyownership_methods[] = { {"execute", (PyCFunction)Thirdpartyownership_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Thirdpartyownership_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Thirdpartyownership_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Depreciation': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Thirdpartyownership_replace, METH_VARARGS, @@ -1559,6 +1557,8 @@ static PyMethodDef Thirdpartyownership_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Thirdpartyownership_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Thirdpartyownership_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/TidalFileReader.c b/modules/TidalFileReader.c index 90204fae..850b2de3 100644 --- a/modules/TidalFileReader.c +++ b/modules/TidalFileReader.c @@ -101,18 +101,6 @@ WeatherReader_set_tidal_resource_model_choice(VarGroupObject *self, PyObject *va return PySAM_double_setter(value, SAM_TidalFileReader_WeatherReader_tidal_resource_model_choice_nset, self->data_ptr); } -static PyObject * -WeatherReader_get_use_specific_wf_tidal(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TidalFileReader_WeatherReader_use_specific_wf_tidal_nget, self->data_ptr); -} - -static int -WeatherReader_set_use_specific_wf_tidal(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TidalFileReader_WeatherReader_use_specific_wf_tidal_nset, self->data_ptr); -} - static PyGetSetDef WeatherReader_getset[] = { {"tidal_resource_filename", (getter)WeatherReader_get_tidal_resource_filename,(setter)WeatherReader_set_tidal_resource_filename, PyDoc_STR("*str*: File path with tidal resource data\n\n**Constraints:**\nLOCAL_FILE\n\n**Required:**\nRequired if tidal_resource_model_choice=0"), @@ -120,9 +108,6 @@ static PyGetSetDef WeatherReader_getset[] = { {"tidal_resource_model_choice", (getter)WeatherReader_get_tidal_resource_model_choice,(setter)WeatherReader_set_tidal_resource_model_choice, PyDoc_STR("*float*: Resource distribution or time series tidal resource data [0/1]\n\n**Constraints:**\nINTEGER\n\n**Required:**\nFalse. Automatically set to 1 if not assigned explicitly or loaded from defaults."), NULL}, -{"use_specific_wf_tidal", (getter)WeatherReader_get_use_specific_wf_tidal,(setter)WeatherReader_set_use_specific_wf_tidal, - PyDoc_STR("*float*: user specified file [0/1]\n\n**Constraints:**\nINTEGER,MIN=0,MAX=1\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), - NULL}, {NULL} /* Sentinel */ }; @@ -644,8 +629,6 @@ TidalFileReader_unassign(CmodObject *self, PyObject *args) static PyMethodDef TidalFileReader_methods[] = { {"execute", (PyCFunction)TidalFileReader_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)TidalFileReader_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)TidalFileReader_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Weather Reader': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)TidalFileReader_replace, METH_VARARGS, @@ -656,6 +639,8 @@ static PyMethodDef TidalFileReader_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)TidalFileReader_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)TidalFileReader_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Timeseq.c b/modules/Timeseq.c index e164c21a..b35fc9d8 100644 --- a/modules/Timeseq.c +++ b/modules/Timeseq.c @@ -464,8 +464,6 @@ Timeseq_unassign(CmodObject *self, PyObject *args) static PyMethodDef Timeseq_methods[] = { {"execute", (PyCFunction)Timeseq_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Timeseq_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Timeseq_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Time Sequence': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Timeseq_replace, METH_VARARGS, @@ -476,6 +474,8 @@ static PyMethodDef Timeseq_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Timeseq_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Timeseq_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/TroughPhysical.c b/modules/TroughPhysical.c index 16aa7d08..5b75e446 100644 --- a/modules/TroughPhysical.c +++ b/modules/TroughPhysical.c @@ -1455,18 +1455,6 @@ SolarField_set_nHCEt(VarGroupObject *self, PyObject *value, void *closure) return PySAM_double_setter(value, SAM_TroughPhysical_SolarField_nHCEt_nset, self->data_ptr); } -static PyObject * -SolarField_get_nSCA(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysical_SolarField_nSCA_nget, self->data_ptr); -} - -static int -SolarField_set_nSCA(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysical_SolarField_nSCA_nset, self->data_ptr); -} - static PyObject * SolarField_get_northsouth_field_sep(VarGroupObject *self, void *closure) { @@ -1909,9 +1897,6 @@ static PyGetSetDef SolarField_getset[] = { {"nHCEt", (getter)SolarField_get_nHCEt,(setter)SolarField_set_nHCEt, PyDoc_STR("*float*: Number of HCE types [none]\n\n**Required:**\nTrue"), NULL}, -{"nSCA", (getter)SolarField_get_nSCA,(setter)SolarField_set_nSCA, - PyDoc_STR("*float*: Number of SCAs in a loop [none]\n\n**Required:**\nTrue"), - NULL}, {"northsouth_field_sep", (getter)SolarField_get_northsouth_field_sep,(setter)SolarField_set_northsouth_field_sep, PyDoc_STR("*float*: North/south separation between subfields. 0 = SCAs are touching [m]\n\n**Required:**\nTrue"), NULL}, @@ -3356,13 +3341,13 @@ static PyGetSetDef Tou_getset[] = { PyDoc_STR("*float*: Max. dispatch optimization solve duration [s]\n\n**Required:**\nRequired if is_dispatch=1"), NULL}, {"dispatch_factors_ts", (getter)Tou_get_dispatch_factors_ts,(setter)Tou_set_dispatch_factors_ts, - PyDoc_STR("*sequence*: Dispatch payment factor array\n\n**Required:**\nRequired if ppa_multiplier_model=1&csp_financial_model<5&is_dispatch=1"), + PyDoc_STR("*sequence*: Dispatch payment factor array\n\n**Required:**\nRequired if sim_type=1&ppa_multiplier_model=1&csp_financial_model<5&is_dispatch=1"), NULL}, {"dispatch_sched_weekday", (getter)Tou_get_dispatch_sched_weekday,(setter)Tou_set_dispatch_sched_weekday, - PyDoc_STR("*sequence[sequence]*: 12x24 PPA pricing Weekday schedule\n\n**Required:**\nRequired if ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1"), + PyDoc_STR("*sequence[sequence]*: 12x24 PPA pricing Weekday schedule\n\n**Required:**\nRequired if sim_type=1&ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1"), NULL}, {"dispatch_sched_weekend", (getter)Tou_get_dispatch_sched_weekend,(setter)Tou_set_dispatch_sched_weekend, - PyDoc_STR("*sequence[sequence]*: 12x24 PPA pricing Weekend schedule\n\n**Required:**\nRequired if ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1"), + PyDoc_STR("*sequence[sequence]*: 12x24 PPA pricing Weekend schedule\n\n**Required:**\nRequired if sim_type=1&ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1"), NULL}, {"dispatch_series", (getter)Tou_get_dispatch_series,(setter)Tou_set_dispatch_series, PyDoc_STR("*sequence*: Time series dispatch factors"), @@ -3675,7 +3660,7 @@ FinancialSolutionMode_set_ppa_soln_mode(VarGroupObject *self, PyObject *value, v static PyGetSetDef FinancialSolutionMode_getset[] = { {"ppa_soln_mode", (getter)FinancialSolutionMode_get_ppa_soln_mode,(setter)FinancialSolutionMode_set_ppa_soln_mode, - PyDoc_STR("*float*: PPA solution mode (0=Specify IRR target, 1=Specify PPA price)\n\n**Required:**\nRequired if ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1"), + PyDoc_STR("*float*: PPA solution mode (0=Specify IRR target, 1=Specify PPA price)\n\n**Required:**\nRequired if sim_type=1&ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1"), NULL}, {NULL} /* Sentinel */ }; @@ -3949,7 +3934,7 @@ TimeOfDeliveryFactors_set_dispatch_tod_factors(VarGroupObject *self, PyObject *v static PyGetSetDef TimeOfDeliveryFactors_getset[] = { {"dispatch_tod_factors", (getter)TimeOfDeliveryFactors_get_dispatch_tod_factors,(setter)TimeOfDeliveryFactors_set_dispatch_tod_factors, - PyDoc_STR("*sequence*: TOD factors for periods 1 through 9\n\n**Info:**\nWe added this array input after SAM 2022.12.21 to replace the functionality of former single value inputs dispatch_factor1 through dispatch_factor9\n\n**Required:**\nRequired if ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1"), + PyDoc_STR("*sequence*: TOD factors for periods 1 through 9\n\n**Info:**\nWe added this array input after SAM 2022.12.21 to replace the functionality of former single value inputs dispatch_factor1 through dispatch_factor9\n\n**Required:**\nRequired if sim_type=1&ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1"), NULL}, {NULL} /* Sentinel */ }; @@ -4098,10 +4083,10 @@ Revenue_set_ppa_price_input(VarGroupObject *self, PyObject *value, void *closure static PyGetSetDef Revenue_getset[] = { {"mp_energy_market_revenue", (getter)Revenue_get_mp_energy_market_revenue,(setter)Revenue_set_mp_energy_market_revenue, - PyDoc_STR("*sequence[sequence]*: Energy market revenue input\n\n**Info:**\nLifetime x 2[Cleared Capacity(MW),Price($/MWh)]\n\n**Required:**\nRequired if csp_financial_model=6&is_dispatch=1"), + PyDoc_STR("*sequence[sequence]*: Energy market revenue input\n\n**Info:**\nLifetime x 2[Cleared Capacity(MW),Price($/MWh)]\n\n**Required:**\nRequired if sim_type=1&csp_financial_model=6&is_dispatch=1"), NULL}, {"ppa_price_input", (getter)Revenue_get_ppa_price_input,(setter)Revenue_set_ppa_price_input, - PyDoc_STR("*sequence*: PPA prices - yearly [$/kWh]\n\n**Required:**\nRequired if ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1"), + PyDoc_STR("*sequence*: PPA prices - yearly [$/kWh]\n\n**Required:**\nRequired if sim_type=1&ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1"), NULL}, {NULL} /* Sentinel */ }; @@ -5740,6 +5725,18 @@ Outputs_get_conversion_factor(VarGroupObject *self, void *closure) return PySAM_double_getter(SAM_TroughPhysical_Outputs_conversion_factor_nget, self->data_ptr); } +static PyObject * +Outputs_get_cp_battery_nameplate(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_Outputs_cp_battery_nameplate_nget, self->data_ptr); +} + +static PyObject * +Outputs_get_cp_system_nameplate(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_Outputs_cp_system_nameplate_nget, self->data_ptr); +} + static PyObject * Outputs_get_csp_dtr_cost_bop(VarGroupObject *self, void *closure) { @@ -6280,6 +6277,12 @@ Outputs_get_nLoops(VarGroupObject *self, void *closure) return PySAM_double_getter(SAM_TroughPhysical_Outputs_nLoops_nget, self->data_ptr); } +static PyObject * +Outputs_get_nSCA(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_Outputs_nSCA_nget, self->data_ptr); +} + static PyObject * Outputs_get_n_op_modes(VarGroupObject *self, void *closure) { @@ -6694,6 +6697,12 @@ Outputs_get_solzen(VarGroupObject *self, void *closure) return PySAM_array_getter(SAM_TroughPhysical_Outputs_solzen_aget, self->data_ptr); } +static PyObject * +Outputs_get_system_capacity(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysical_Outputs_system_capacity_nget, self->data_ptr); +} + static PyObject * Outputs_get_tank_losses(VarGroupObject *self, void *closure) { @@ -6950,6 +6959,12 @@ static PyGetSetDef Outputs_getset[] = { {"conversion_factor", (getter)Outputs_get_conversion_factor,(setter)0, PyDoc_STR("*float*: Gross to Net Conversion Factor [%]"), NULL}, +{"cp_battery_nameplate", (getter)Outputs_get_cp_battery_nameplate,(setter)0, + PyDoc_STR("*float*: Battery nameplate [MWe]"), + NULL}, +{"cp_system_nameplate", (getter)Outputs_get_cp_system_nameplate,(setter)0, + PyDoc_STR("*float*: System capacity for capacity payments [MWe]"), + NULL}, {"csp_dtr_cost_bop", (getter)Outputs_get_csp_dtr_cost_bop,(setter)0, PyDoc_STR("*float*: Balance of plant cost [$]"), NULL}, @@ -7220,6 +7235,9 @@ static PyGetSetDef Outputs_getset[] = { {"nLoops", (getter)Outputs_get_nLoops,(setter)0, PyDoc_STR("*float*: Number of loops in the field"), NULL}, +{"nSCA", (getter)Outputs_get_nSCA,(setter)0, + PyDoc_STR("*float*: Number of SCAs in a loop [none]"), + NULL}, {"n_op_modes", (getter)Outputs_get_n_op_modes,(setter)0, PyDoc_STR("*sequence*: Operating modes in reporting timestep"), NULL}, @@ -7427,6 +7445,9 @@ static PyGetSetDef Outputs_getset[] = { {"solzen", (getter)Outputs_get_solzen,(setter)0, PyDoc_STR("*sequence*: Resource Solar Zenith [deg]"), NULL}, +{"system_capacity", (getter)Outputs_get_system_capacity,(setter)0, + PyDoc_STR("*float*: System capacity [kWe]"), + NULL}, {"tank_losses", (getter)Outputs_get_tank_losses,(setter)0, PyDoc_STR("*sequence*: TES thermal losses [MWt]"), NULL}, @@ -7733,8 +7754,6 @@ TroughPhysical_unassign(CmodObject *self, PyObject *args) static PyMethodDef TroughPhysical_methods[] = { {"execute", (PyCFunction)TroughPhysical_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)TroughPhysical_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)TroughPhysical_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'System Control': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)TroughPhysical_replace, METH_VARARGS, @@ -7745,6 +7764,8 @@ static PyMethodDef TroughPhysical_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)TroughPhysical_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)TroughPhysical_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/TroughPhysicalCspSolver.c b/modules/TroughPhysicalCspSolver.c index b0154f87..8bd41b69 100644 --- a/modules/TroughPhysicalCspSolver.c +++ b/modules/TroughPhysicalCspSolver.c @@ -4667,8 +4667,6 @@ TroughPhysicalCspSolver_unassign(CmodObject *self, PyObject *args) static PyMethodDef TroughPhysicalCspSolver_methods[] = { {"execute", (PyCFunction)TroughPhysicalCspSolver_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)TroughPhysicalCspSolver_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)TroughPhysicalCspSolver_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'weather': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)TroughPhysicalCspSolver_replace, METH_VARARGS, @@ -4679,6 +4677,8 @@ static PyMethodDef TroughPhysicalCspSolver_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)TroughPhysicalCspSolver_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)TroughPhysicalCspSolver_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/TroughPhysicalIph.c b/modules/TroughPhysicalIph.c index a99b9c20..80577a06 100644 --- a/modules/TroughPhysicalIph.c +++ b/modules/TroughPhysicalIph.c @@ -1553,18 +1553,6 @@ SolarField_set_nHCEt(VarGroupObject *self, PyObject *value, void *closure) return PySAM_double_setter(value, SAM_TroughPhysicalIph_SolarField_nHCEt_nset, self->data_ptr); } -static PyObject * -SolarField_get_nSCA(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_TroughPhysicalIph_SolarField_nSCA_nget, self->data_ptr); -} - -static int -SolarField_set_nSCA(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_TroughPhysicalIph_SolarField_nSCA_nset, self->data_ptr); -} - static PyObject * SolarField_get_northsouth_field_sep(VarGroupObject *self, void *closure) { @@ -2001,9 +1989,6 @@ static PyGetSetDef SolarField_getset[] = { {"nHCEt", (getter)SolarField_get_nHCEt,(setter)SolarField_set_nHCEt, PyDoc_STR("*float*: Number of HCE types [none]\n\n**Required:**\nTrue"), NULL}, -{"nSCA", (getter)SolarField_get_nSCA,(setter)SolarField_set_nSCA, - PyDoc_STR("*float*: Number of SCAs in a loop [none]\n\n**Required:**\nTrue"), - NULL}, {"northsouth_field_sep", (getter)SolarField_get_northsouth_field_sep,(setter)SolarField_set_northsouth_field_sep, PyDoc_STR("*float*: North/south separation between subfields. 0 = SCAs are touching [m]\n\n**Required:**\nTrue"), NULL}, @@ -6292,6 +6277,12 @@ Outputs_get_nLoops(VarGroupObject *self, void *closure) return PySAM_double_getter(SAM_TroughPhysicalIph_Outputs_nLoops_nget, self->data_ptr); } +static PyObject * +Outputs_get_nSCA(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_TroughPhysicalIph_Outputs_nSCA_nget, self->data_ptr); +} + static PyObject * Outputs_get_n_op_modes(VarGroupObject *self, void *closure) { @@ -7202,6 +7193,9 @@ static PyGetSetDef Outputs_getset[] = { {"nLoops", (getter)Outputs_get_nLoops,(setter)0, PyDoc_STR("*float*: Number of loops in the field"), NULL}, +{"nSCA", (getter)Outputs_get_nSCA,(setter)0, + PyDoc_STR("*float*: Number of SCAs in a loop [none]"), + NULL}, {"n_op_modes", (getter)Outputs_get_n_op_modes,(setter)0, PyDoc_STR("*sequence*: Operating modes in reporting timestep"), NULL}, @@ -7718,8 +7712,6 @@ TroughPhysicalIph_unassign(CmodObject *self, PyObject *args) static PyMethodDef TroughPhysicalIph_methods[] = { {"execute", (PyCFunction)TroughPhysicalIph_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)TroughPhysicalIph_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)TroughPhysicalIph_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'System Control': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)TroughPhysicalIph_replace, METH_VARARGS, @@ -7730,6 +7722,8 @@ static PyMethodDef TroughPhysicalIph_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)TroughPhysicalIph_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)TroughPhysicalIph_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/TroughPhysicalProcessHeat.c b/modules/TroughPhysicalProcessHeat.c index 08365f43..261dc37e 100644 --- a/modules/TroughPhysicalProcessHeat.c +++ b/modules/TroughPhysicalProcessHeat.c @@ -4820,8 +4820,6 @@ TroughPhysicalProcessHeat_unassign(CmodObject *self, PyObject *args) static PyMethodDef TroughPhysicalProcessHeat_methods[] = { {"execute", (PyCFunction)TroughPhysicalProcessHeat_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)TroughPhysicalProcessHeat_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)TroughPhysicalProcessHeat_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'weather': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)TroughPhysicalProcessHeat_replace, METH_VARARGS, @@ -4832,6 +4830,8 @@ static PyMethodDef TroughPhysicalProcessHeat_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)TroughPhysicalProcessHeat_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)TroughPhysicalProcessHeat_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/UiTesCalcs.c b/modules/UiTesCalcs.c index dc7dc3b8..0c30329b 100644 --- a/modules/UiTesCalcs.c +++ b/modules/UiTesCalcs.c @@ -638,8 +638,6 @@ UiTesCalcs_unassign(CmodObject *self, PyObject *args) static PyMethodDef UiTesCalcs_methods[] = { {"execute", (PyCFunction)UiTesCalcs_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)UiTesCalcs_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)UiTesCalcs_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Common': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)UiTesCalcs_replace, METH_VARARGS, @@ -650,6 +648,8 @@ static PyMethodDef UiTesCalcs_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)UiTesCalcs_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)UiTesCalcs_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/UiUdpcChecks.c b/modules/UiUdpcChecks.c index 774872e7..67d61f85 100644 --- a/modules/UiUdpcChecks.c +++ b/modules/UiUdpcChecks.c @@ -1490,8 +1490,6 @@ UiUdpcChecks_unassign(CmodObject *self, PyObject *args) static PyMethodDef UiUdpcChecks_methods[] = { {"execute", (PyCFunction)UiUdpcChecks_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)UiUdpcChecks_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)UiUdpcChecks_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'User Defined Power Cycle': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)UiUdpcChecks_replace, METH_VARARGS, @@ -1502,6 +1500,8 @@ static PyMethodDef UiUdpcChecks_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)UiUdpcChecks_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)UiUdpcChecks_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/UserHtfComparison.c b/modules/UserHtfComparison.c index dd10da6c..9fd2a44a 100644 --- a/modules/UserHtfComparison.c +++ b/modules/UserHtfComparison.c @@ -434,8 +434,6 @@ UserHtfComparison_unassign(CmodObject *self, PyObject *args) static PyMethodDef UserHtfComparison_methods[] = { {"execute", (PyCFunction)UserHtfComparison_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)UserHtfComparison_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)UserHtfComparison_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Common': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)UserHtfComparison_replace, METH_VARARGS, @@ -446,6 +444,8 @@ static PyMethodDef UserHtfComparison_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)UserHtfComparison_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)UserHtfComparison_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Utilityrate.c b/modules/Utilityrate.c index 519f96c4..0a403feb 100644 --- a/modules/Utilityrate.c +++ b/modules/Utilityrate.c @@ -3134,8 +3134,6 @@ Utilityrate_unassign(CmodObject *self, PyObject *args) static PyMethodDef Utilityrate_methods[] = { {"execute", (PyCFunction)Utilityrate_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Utilityrate_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Utilityrate_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Common': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Utilityrate_replace, METH_VARARGS, @@ -3146,6 +3144,8 @@ static PyMethodDef Utilityrate_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Utilityrate_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Utilityrate_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Utilityrate2.c b/modules/Utilityrate2.c index 2377f320..3c473cc8 100644 --- a/modules/Utilityrate2.c +++ b/modules/Utilityrate2.c @@ -8876,8 +8876,6 @@ Utilityrate2_unassign(CmodObject *self, PyObject *args) static PyMethodDef Utilityrate2_methods[] = { {"execute", (PyCFunction)Utilityrate2_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Utilityrate2_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Utilityrate2_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Common': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Utilityrate2_replace, METH_VARARGS, @@ -8888,6 +8886,8 @@ static PyMethodDef Utilityrate2_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Utilityrate2_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Utilityrate2_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Utilityrate3.c b/modules/Utilityrate3.c index b72d8efb..87363393 100644 --- a/modules/Utilityrate3.c +++ b/modules/Utilityrate3.c @@ -15815,8 +15815,6 @@ Utilityrate3_unassign(CmodObject *self, PyObject *args) static PyMethodDef Utilityrate3_methods[] = { {"execute", (PyCFunction)Utilityrate3_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Utilityrate3_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Utilityrate3_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Common': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Utilityrate3_replace, METH_VARARGS, @@ -15827,6 +15825,8 @@ static PyMethodDef Utilityrate3_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Utilityrate3_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Utilityrate3_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Utilityrate4.c b/modules/Utilityrate4.c index ff4bd5ac..508776e0 100644 --- a/modules/Utilityrate4.c +++ b/modules/Utilityrate4.c @@ -2225,8 +2225,6 @@ Utilityrate4_unassign(CmodObject *self, PyObject *args) static PyMethodDef Utilityrate4_methods[] = { {"execute", (PyCFunction)Utilityrate4_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Utilityrate4_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Utilityrate4_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Common': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Utilityrate4_replace, METH_VARARGS, @@ -2237,6 +2235,8 @@ static PyMethodDef Utilityrate4_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Utilityrate4_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Utilityrate4_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Utilityrate5.c b/modules/Utilityrate5.c index 08bfa641..d68d2634 100644 --- a/modules/Utilityrate5.c +++ b/modules/Utilityrate5.c @@ -1049,6 +1049,293 @@ static PyTypeObject Load_Type = { }; +/* + * HybridCosts Group + */ + +static PyTypeObject HybridCosts_Type; + +static PyObject * +HybridCosts_new(SAM_Utilityrate5 data_ptr) +{ + PyObject* new_obj = HybridCosts_Type.tp_alloc(&HybridCosts_Type,0); + + VarGroupObject* HybridCosts_obj = (VarGroupObject*)new_obj; + + HybridCosts_obj->data_ptr = (SAM_table)data_ptr; + + return new_obj; +} + +/* HybridCosts methods */ + +static PyObject * +HybridCosts_assign(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + + if (!PySAM_assign_from_dict(self->data_ptr, dict, "Utilityrate5", "HybridCosts")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +HybridCosts_replace(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + PyTypeObject* tp = &HybridCosts_Type; + + if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "Utilityrate5", "HybridCosts")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +HybridCosts_export(VarGroupObject *self, PyObject *args) +{ + PyTypeObject* tp = &HybridCosts_Type; + PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); + return dict; +} + +static PyMethodDef HybridCosts_methods[] = { + {"assign", (PyCFunction)HybridCosts_assign, METH_VARARGS, + PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``HybridCosts_vals = { var: val, ...}``")}, + {"replace", (PyCFunction)HybridCosts_replace, METH_VARARGS, + PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``HybridCosts_vals = { var: val, ...}``")}, + {"export", (PyCFunction)HybridCosts_export, METH_VARARGS, + PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, + {NULL, NULL} /* sentinel */ +}; + +static PyObject * +HybridCosts_get_degradation(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Utilityrate5_HybridCosts_degradation_aget, self->data_ptr); +} + +static int +HybridCosts_set_degradation(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Utilityrate5_HybridCosts_degradation_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_land_area(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Utilityrate5_HybridCosts_land_area_nget, self->data_ptr); +} + +static int +HybridCosts_set_land_area(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Utilityrate5_HybridCosts_land_area_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_capacity(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Utilityrate5_HybridCosts_om_capacity_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_capacity(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Utilityrate5_HybridCosts_om_capacity_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_capacity_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Utilityrate5_HybridCosts_om_capacity_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_capacity_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Utilityrate5_HybridCosts_om_capacity_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fixed(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Utilityrate5_HybridCosts_om_fixed_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_fixed(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Utilityrate5_HybridCosts_om_fixed_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fixed_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Utilityrate5_HybridCosts_om_fixed_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_fixed_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Utilityrate5_HybridCosts_om_fixed_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_land_lease(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Utilityrate5_HybridCosts_om_land_lease_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_land_lease(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Utilityrate5_HybridCosts_om_land_lease_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_land_lease_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Utilityrate5_HybridCosts_om_land_lease_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_land_lease_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Utilityrate5_HybridCosts_om_land_lease_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_production(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Utilityrate5_HybridCosts_om_production_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_production(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Utilityrate5_HybridCosts_om_production_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_production_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Utilityrate5_HybridCosts_om_production_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_production_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Utilityrate5_HybridCosts_om_production_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_total_installed_cost(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Utilityrate5_HybridCosts_total_installed_cost_nget, self->data_ptr); +} + +static int +HybridCosts_set_total_installed_cost(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Utilityrate5_HybridCosts_total_installed_cost_nset, self->data_ptr); +} + +static PyGetSetDef HybridCosts_getset[] = { +{"degradation", (getter)HybridCosts_get_degradation,(setter)HybridCosts_set_degradation, + PyDoc_STR("*sequence*: Annual AC degradation [%]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"land_area", (getter)HybridCosts_get_land_area,(setter)HybridCosts_set_land_area, + PyDoc_STR("*float*: Total land area [acres]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_capacity", (getter)HybridCosts_get_om_capacity,(setter)HybridCosts_set_om_capacity, + PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_capacity_escal", (getter)HybridCosts_get_om_capacity_escal,(setter)HybridCosts_set_om_capacity_escal, + PyDoc_STR("*float*: Capacity-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fixed", (getter)HybridCosts_get_om_fixed,(setter)HybridCosts_set_om_fixed, + PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fixed_escal", (getter)HybridCosts_get_om_fixed_escal,(setter)HybridCosts_set_om_fixed_escal, + PyDoc_STR("*float*: Fixed O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_land_lease", (getter)HybridCosts_get_om_land_lease,(setter)HybridCosts_set_om_land_lease, + PyDoc_STR("*sequence*: Land lease cost [$/acre]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_land_lease_escal", (getter)HybridCosts_get_om_land_lease_escal,(setter)HybridCosts_set_om_land_lease_escal, + PyDoc_STR("*float*: Land lease cost escalation [%/yr]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_production", (getter)HybridCosts_get_om_production,(setter)HybridCosts_set_om_production, + PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_production_escal", (getter)HybridCosts_get_om_production_escal,(setter)HybridCosts_set_om_production_escal, + PyDoc_STR("*float*: Production-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"total_installed_cost", (getter)HybridCosts_get_total_installed_cost,(setter)HybridCosts_set_total_installed_cost, + PyDoc_STR("*float*: Total installed cost [$]\n\n**Required:**\nTrue"), + NULL}, + {NULL} /* Sentinel */ +}; + +static PyTypeObject HybridCosts_Type = { + /* The ob_type field must be initialized in the module init function + * to be portable to Windows without using C++. */ + PyVarObject_HEAD_INIT(NULL, 0) + "Utilityrate5.HybridCosts", /*tp_name*/ + sizeof(VarGroupObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + /* methods */ + 0, /*tp_dealloc*/ + 0, /*tp_print*/ + (getattrfunc)0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_reserved*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistofnset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + HybridCosts_methods, /*tp_methods*/ + 0, /*tp_members*/ + HybridCosts_getset, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictofnset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + 0, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ +}; + + /* * Outputs Group */ @@ -1150,6 +1437,12 @@ Outputs_get_billing_demand_wo_sys_ym(VarGroupObject *self, void *closure) return PySAM_matrix_getter(SAM_Utilityrate5_Outputs_billing_demand_wo_sys_ym_mget, self->data_ptr); } +static PyObject * +Outputs_get_cf_land_lease_expense(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Utilityrate5_Outputs_cf_land_lease_expense_aget, self->data_ptr); +} + static PyObject * Outputs_get_charge_w_sys_dc_fixed(VarGroupObject *self, void *closure) { @@ -2024,6 +2317,9 @@ static PyGetSetDef Outputs_getset[] = { {"billing_demand_wo_sys_ym", (getter)Outputs_get_billing_demand_wo_sys_ym,(setter)0, PyDoc_STR("*sequence[sequence]*: Billing demand without system [kW]"), NULL}, +{"cf_land_lease_expense", (getter)Outputs_get_cf_land_lease_expense,(setter)0, + PyDoc_STR("*sequence*: Land lease expense [$]"), + NULL}, {"charge_w_sys_dc_fixed", (getter)Outputs_get_charge_w_sys_dc_fixed,(setter)0, PyDoc_STR("*sequence*: Demand charge with system (flat) [$]"), NULL}, @@ -2532,6 +2828,10 @@ newUtilityrate5Object(void* data_ptr) PyDict_SetItemString(attr_dict, "Load", Load_obj); Py_DECREF(Load_obj); + PyObject* HybridCosts_obj = HybridCosts_new(self->data_ptr); + PyDict_SetItemString(attr_dict, "HybridCosts", HybridCosts_obj); + Py_DECREF(HybridCosts_obj); + PyObject* Outputs_obj = Outputs_new(self->data_ptr); PyDict_SetItemString(attr_dict, "Outputs", Outputs_obj); Py_DECREF(Outputs_obj); @@ -2630,8 +2930,6 @@ Utilityrate5_unassign(CmodObject *self, PyObject *args) static PyMethodDef Utilityrate5_methods[] = { {"execute", (PyCFunction)Utilityrate5_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Utilityrate5_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Utilityrate5_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Lifetime': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Utilityrate5_replace, METH_VARARGS, @@ -2642,6 +2940,8 @@ static PyMethodDef Utilityrate5_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Utilityrate5_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Utilityrate5_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; @@ -2851,6 +3151,13 @@ Utilityrate5Module_exec(PyObject *m) (PyObject*)&Load_Type); Py_DECREF(&Load_Type); + /// Add the HybridCosts type object to Utilityrate5_Type + if (PyType_Ready(&HybridCosts_Type) < 0) { goto fail; } + PyDict_SetItemString(Utilityrate5_Type.tp_dict, + "HybridCosts", + (PyObject*)&HybridCosts_Type); + Py_DECREF(&HybridCosts_Type); + /// Add the Outputs type object to Utilityrate5_Type if (PyType_Ready(&Outputs_Type) < 0) { goto fail; } PyDict_SetItemString(Utilityrate5_Type.tp_dict, diff --git a/modules/Utilityrateforecast.c b/modules/Utilityrateforecast.c index 2902e0f8..8e3990aa 100644 --- a/modules/Utilityrateforecast.c +++ b/modules/Utilityrateforecast.c @@ -1208,8 +1208,6 @@ static PyMethodDef Utilityrateforecast_methods[] = { PyDoc_STR("setup() -> None\n Setup parameters in simulation")}, {"execute", (PyCFunction)Utilityrateforecast_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Utilityrateforecast_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Utilityrateforecast_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Electricity Rates': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Utilityrateforecast_replace, METH_VARARGS, @@ -1220,6 +1218,8 @@ static PyMethodDef Utilityrateforecast_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Utilityrateforecast_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Utilityrateforecast_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/WaveFileReader.c b/modules/WaveFileReader.c index 7b475fae..791c2db1 100644 --- a/modules/WaveFileReader.c +++ b/modules/WaveFileReader.c @@ -77,18 +77,6 @@ static PyMethodDef WeatherReader_methods[] = { {NULL, NULL} /* sentinel */ }; -static PyObject * -WeatherReader_get_use_specific_wf_wave(VarGroupObject *self, void *closure) -{ - return PySAM_double_getter(SAM_WaveFileReader_WeatherReader_use_specific_wf_wave_nget, self->data_ptr); -} - -static int -WeatherReader_set_use_specific_wf_wave(VarGroupObject *self, PyObject *value, void *closure) -{ - return PySAM_double_setter(value, SAM_WaveFileReader_WeatherReader_use_specific_wf_wave_nset, self->data_ptr); -} - static PyObject * WeatherReader_get_wave_resource_filename(VarGroupObject *self, void *closure) { @@ -126,9 +114,6 @@ WeatherReader_set_wave_resource_model_choice(VarGroupObject *self, PyObject *val } static PyGetSetDef WeatherReader_getset[] = { -{"use_specific_wf_wave", (getter)WeatherReader_get_use_specific_wf_wave,(setter)WeatherReader_set_use_specific_wf_wave, - PyDoc_STR("*float*: user specified file [0/1]\n\n**Constraints:**\nINTEGER,MIN=0,MAX=1\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), - NULL}, {"wave_resource_filename", (getter)WeatherReader_get_wave_resource_filename,(setter)WeatherReader_set_wave_resource_filename, PyDoc_STR("*str*: File path with Wave Height x Period Distribution as 2-D PDF\n\n**Constraints:**\nLOCAL_FILE\n\n**Required:**\nRequired if wave_resource_model_choice=0"), NULL}, @@ -668,8 +653,6 @@ WaveFileReader_unassign(CmodObject *self, PyObject *args) static PyMethodDef WaveFileReader_methods[] = { {"execute", (PyCFunction)WaveFileReader_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)WaveFileReader_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)WaveFileReader_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Weather Reader': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)WaveFileReader_replace, METH_VARARGS, @@ -680,6 +663,8 @@ static PyMethodDef WaveFileReader_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)WaveFileReader_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)WaveFileReader_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Wfcheck.c b/modules/Wfcheck.c index bfcad88f..d7ef24bd 100644 --- a/modules/Wfcheck.c +++ b/modules/Wfcheck.c @@ -254,8 +254,6 @@ Wfcheck_unassign(CmodObject *self, PyObject *args) static PyMethodDef Wfcheck_methods[] = { {"execute", (PyCFunction)Wfcheck_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Wfcheck_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Wfcheck_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Weather File Checker': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Wfcheck_replace, METH_VARARGS, @@ -266,6 +264,8 @@ static PyMethodDef Wfcheck_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Wfcheck_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Wfcheck_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Wfcsvconv.c b/modules/Wfcsvconv.c index 933873fb..8aed99bd 100644 --- a/modules/Wfcsvconv.c +++ b/modules/Wfcsvconv.c @@ -299,8 +299,6 @@ Wfcsvconv_unassign(CmodObject *self, PyObject *args) static PyMethodDef Wfcsvconv_methods[] = { {"execute", (PyCFunction)Wfcsvconv_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Wfcsvconv_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Wfcsvconv_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Weather File Converter': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Wfcsvconv_replace, METH_VARARGS, @@ -311,6 +309,8 @@ static PyMethodDef Wfcsvconv_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Wfcsvconv_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Wfcsvconv_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Wfreader.c b/modules/Wfreader.c index 9e4978e8..192d16de 100644 --- a/modules/Wfreader.c +++ b/modules/Wfreader.c @@ -764,8 +764,6 @@ Wfreader_unassign(CmodObject *self, PyObject *args) static PyMethodDef Wfreader_methods[] = { {"execute", (PyCFunction)Wfreader_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Wfreader_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Wfreader_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Weather Reader': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Wfreader_replace, METH_VARARGS, @@ -776,6 +774,8 @@ static PyMethodDef Wfreader_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Wfreader_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Wfreader_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/WindFileReader.c b/modules/WindFileReader.c index 6456a13f..b23813b8 100644 --- a/modules/WindFileReader.c +++ b/modules/WindFileReader.c @@ -560,8 +560,6 @@ WindFileReader_unassign(CmodObject *self, PyObject *args) static PyMethodDef WindFileReader_methods[] = { {"execute", (PyCFunction)WindFileReader_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)WindFileReader_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)WindFileReader_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Weather Reader': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)WindFileReader_replace, METH_VARARGS, @@ -572,6 +570,8 @@ static PyMethodDef WindFileReader_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)WindFileReader_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)WindFileReader_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/WindObos.c b/modules/WindObos.c index e82fc956..4bf5d056 100644 --- a/modules/WindObos.c +++ b/modules/WindObos.c @@ -4013,8 +4013,6 @@ WindObos_unassign(CmodObject *self, PyObject *args) static PyMethodDef WindObos_methods[] = { {"execute", (PyCFunction)WindObos_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)WindObos_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)WindObos_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'wobos': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)WindObos_replace, METH_VARARGS, @@ -4025,6 +4023,8 @@ static PyMethodDef WindObos_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)WindObos_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)WindObos_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Windbos.c b/modules/Windbos.c index 7f762feb..653e30e9 100644 --- a/modules/Windbos.c +++ b/modules/Windbos.c @@ -998,8 +998,6 @@ Windbos_unassign(CmodObject *self, PyObject *args) static PyMethodDef Windbos_methods[] = { {"execute", (PyCFunction)Windbos_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Windbos_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Windbos_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'wind_bos': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Windbos_replace, METH_VARARGS, @@ -1010,6 +1008,8 @@ static PyMethodDef Windbos_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Windbos_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Windbos_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Windcsm.c b/modules/Windcsm.c index 0d078948..e3c8a315 100644 --- a/modules/Windcsm.c +++ b/modules/Windcsm.c @@ -731,8 +731,6 @@ Windcsm_unassign(CmodObject *self, PyObject *args) static PyMethodDef Windcsm_methods[] = { {"execute", (PyCFunction)Windcsm_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Windcsm_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Windcsm_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'wind_csm': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Windcsm_replace, METH_VARARGS, @@ -743,6 +741,8 @@ static PyMethodDef Windcsm_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Windcsm_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Windcsm_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; diff --git a/modules/Windpower.c b/modules/Windpower.c index 48b0aabf..1c310ebf 100644 --- a/modules/Windpower.c +++ b/modules/Windpower.c @@ -397,7 +397,7 @@ static PyGetSetDef Turbine_getset[] = { PyDoc_STR("*sequence*: Power curve wind speed array [m/s]\n\n**INOUT:** This variable is both an input and an output to the compute module.\n\n**Required:**\nTrue\n\nThe value of ``wind_turbine_powercurve_windspeeds`` depends on the following variables:\n\n\t - wind_resource_model_choice\n\t - wind_turbine_hub_ht\n\t - wind_turbine_max_cp\n"), NULL}, {"wind_turbine_rotor_diameter", (getter)Turbine_get_wind_turbine_rotor_diameter,(setter)Turbine_set_wind_turbine_rotor_diameter, - PyDoc_STR("*float*: Rotor diameter [m]\n\n**Constraints:**\nPOSITIVE\n\n**Required:**\nTrue\n\nThe value of the following variables depends on ``wind_turbine_rotor_diameter``:\n\n\t - system_capacity\n\t - wind_farm_xCoordinates\n\t - wind_farm_yCoordinates\n"), + PyDoc_STR("*float*: Rotor diameter [m]\n\n**Constraints:**\nPOSITIVE\n\n**Required:**\nTrue\n\nThe value of the following variables depends on ``wind_turbine_rotor_diameter``:\n\n\t - wind_farm_xCoordinates\n\t - wind_farm_yCoordinates\n"), NULL}, {NULL} /* Sentinel */ }; @@ -1295,6 +1295,293 @@ static PyTypeObject Uncertainty_Type = { }; +/* + * HybridCosts Group + */ + +static PyTypeObject HybridCosts_Type; + +static PyObject * +HybridCosts_new(SAM_Windpower data_ptr) +{ + PyObject* new_obj = HybridCosts_Type.tp_alloc(&HybridCosts_Type,0); + + VarGroupObject* HybridCosts_obj = (VarGroupObject*)new_obj; + + HybridCosts_obj->data_ptr = (SAM_table)data_ptr; + + return new_obj; +} + +/* HybridCosts methods */ + +static PyObject * +HybridCosts_assign(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + + if (!PySAM_assign_from_dict(self->data_ptr, dict, "Windpower", "HybridCosts")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +HybridCosts_replace(VarGroupObject *self, PyObject *args) +{ + PyObject* dict; + if (!PyArg_ParseTuple(args, "O:assign", &dict)){ + return NULL; + } + PyTypeObject* tp = &HybridCosts_Type; + + if (!PySAM_replace_from_dict(tp, self->data_ptr, dict, "Windpower", "HybridCosts")){ + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +HybridCosts_export(VarGroupObject *self, PyObject *args) +{ + PyTypeObject* tp = &HybridCosts_Type; + PyObject* dict = PySAM_export_to_dict((PyObject *) self, tp); + return dict; +} + +static PyMethodDef HybridCosts_methods[] = { + {"assign", (PyCFunction)HybridCosts_assign, METH_VARARGS, + PyDoc_STR("assign(dict) -> None\n Assign attributes from dictionary, overwriting but not removing values.\n\n``HybridCosts_vals = { var: val, ...}``")}, + {"replace", (PyCFunction)HybridCosts_replace, METH_VARARGS, + PyDoc_STR("replace(dict) -> None\n Replace attributes from dictionary, unassigning values not present in input ``dict``.\n\n``HybridCosts_vals = { var: val, ...}``")}, + {"export", (PyCFunction)HybridCosts_export, METH_VARARGS, + PyDoc_STR("export() -> dict\n Export attributes into dictionary.")}, + {NULL, NULL} /* sentinel */ +}; + +static PyObject * +HybridCosts_get_degradation(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Windpower_HybridCosts_degradation_aget, self->data_ptr); +} + +static int +HybridCosts_set_degradation(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Windpower_HybridCosts_degradation_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_land_area(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Windpower_HybridCosts_land_area_nget, self->data_ptr); +} + +static int +HybridCosts_set_land_area(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Windpower_HybridCosts_land_area_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_capacity(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Windpower_HybridCosts_om_capacity_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_capacity(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Windpower_HybridCosts_om_capacity_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_capacity_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Windpower_HybridCosts_om_capacity_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_capacity_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Windpower_HybridCosts_om_capacity_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fixed(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Windpower_HybridCosts_om_fixed_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_fixed(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Windpower_HybridCosts_om_fixed_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_fixed_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Windpower_HybridCosts_om_fixed_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_fixed_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Windpower_HybridCosts_om_fixed_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_land_lease(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Windpower_HybridCosts_om_land_lease_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_land_lease(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Windpower_HybridCosts_om_land_lease_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_land_lease_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Windpower_HybridCosts_om_land_lease_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_land_lease_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Windpower_HybridCosts_om_land_lease_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_production(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Windpower_HybridCosts_om_production_aget, self->data_ptr); +} + +static int +HybridCosts_set_om_production(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_array_setter(value, SAM_Windpower_HybridCosts_om_production_aset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_om_production_escal(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Windpower_HybridCosts_om_production_escal_nget, self->data_ptr); +} + +static int +HybridCosts_set_om_production_escal(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Windpower_HybridCosts_om_production_escal_nset, self->data_ptr); +} + +static PyObject * +HybridCosts_get_total_installed_cost(VarGroupObject *self, void *closure) +{ + return PySAM_double_getter(SAM_Windpower_HybridCosts_total_installed_cost_nget, self->data_ptr); +} + +static int +HybridCosts_set_total_installed_cost(VarGroupObject *self, PyObject *value, void *closure) +{ + return PySAM_double_setter(value, SAM_Windpower_HybridCosts_total_installed_cost_nset, self->data_ptr); +} + +static PyGetSetDef HybridCosts_getset[] = { +{"degradation", (getter)HybridCosts_get_degradation,(setter)HybridCosts_set_degradation, + PyDoc_STR("*sequence*: Annual AC degradation [%]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"land_area", (getter)HybridCosts_get_land_area,(setter)HybridCosts_set_land_area, + PyDoc_STR("*float*: Total land area [acres]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults.\n\nThe value of ``land_area`` depends on the following variables:\n\n\t - wind_turbine_rotor_diameter\n"), + NULL}, +{"om_capacity", (getter)HybridCosts_get_om_capacity,(setter)HybridCosts_set_om_capacity, + PyDoc_STR("*sequence*: Capacity-based O&M amount [$/kWcap]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_capacity_escal", (getter)HybridCosts_get_om_capacity_escal,(setter)HybridCosts_set_om_capacity_escal, + PyDoc_STR("*float*: Capacity-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fixed", (getter)HybridCosts_get_om_fixed,(setter)HybridCosts_set_om_fixed, + PyDoc_STR("*sequence*: Fixed O&M annual amount [$/year]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_fixed_escal", (getter)HybridCosts_get_om_fixed_escal,(setter)HybridCosts_set_om_fixed_escal, + PyDoc_STR("*float*: Fixed O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_land_lease", (getter)HybridCosts_get_om_land_lease,(setter)HybridCosts_set_om_land_lease, + PyDoc_STR("*sequence*: Land lease cost [$/acre]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_land_lease_escal", (getter)HybridCosts_get_om_land_lease_escal,(setter)HybridCosts_set_om_land_lease_escal, + PyDoc_STR("*float*: Land lease cost escalation [%/yr]\n\n**Required:**\nFalse. Automatically set to 0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_production", (getter)HybridCosts_get_om_production,(setter)HybridCosts_set_om_production, + PyDoc_STR("*sequence*: Production-based O&M amount [$/MWh]\n\n**Info:**\n!battery,!fuelcell\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"om_production_escal", (getter)HybridCosts_get_om_production_escal,(setter)HybridCosts_set_om_production_escal, + PyDoc_STR("*float*: Production-based O&M escalation [%/year]\n\n**Required:**\nFalse. Automatically set to 0.0 if not assigned explicitly or loaded from defaults."), + NULL}, +{"total_installed_cost", (getter)HybridCosts_get_total_installed_cost,(setter)HybridCosts_set_total_installed_cost, + PyDoc_STR("*float*: Total installed cost [$]\n\n**Required:**\nTrue\n\nThe value of ``total_installed_cost`` depends on the following variables:\n\n\t - wind_turbine_rotor_diameter\n"), + NULL}, + {NULL} /* Sentinel */ +}; + +static PyTypeObject HybridCosts_Type = { + /* The ob_type field must be initialized in the module init function + * to be portable to Windows without using C++. */ + PyVarObject_HEAD_INIT(NULL, 0) + "Windpower.HybridCosts", /*tp_name*/ + sizeof(VarGroupObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + /* methods */ + 0, /*tp_dealloc*/ + 0, /*tp_print*/ + (getattrfunc)0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_reserved*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistofnset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + HybridCosts_methods, /*tp_methods*/ + 0, /*tp_members*/ + HybridCosts_getset, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictofnset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + 0, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ +}; + + /* * Outputs Group */ @@ -1432,6 +1719,12 @@ Outputs_get_cf_fuelcell_replacement_cost_schedule(VarGroupObject *self, void *cl return PySAM_array_getter(SAM_Windpower_Outputs_cf_fuelcell_replacement_cost_schedule_aget, self->data_ptr); } +static PyObject * +Outputs_get_cf_land_lease_expense(VarGroupObject *self, void *closure) +{ + return PySAM_array_getter(SAM_Windpower_Outputs_cf_land_lease_expense_aget, self->data_ptr); +} + static PyObject * Outputs_get_cf_om_capacity(VarGroupObject *self, void *closure) { @@ -1610,6 +1903,9 @@ static PyGetSetDef Outputs_getset[] = { {"cf_fuelcell_replacement_cost_schedule", (getter)Outputs_get_cf_fuelcell_replacement_cost_schedule,(setter)0, PyDoc_STR("*sequence*: replacement O&M costs [$]"), NULL}, +{"cf_land_lease_expense", (getter)Outputs_get_cf_land_lease_expense,(setter)0, + PyDoc_STR("*sequence*: Land lease expense [$]"), + NULL}, {"cf_om_capacity", (getter)Outputs_get_cf_om_capacity,(setter)0, PyDoc_STR("*sequence*: capacity O&M costs [$]"), NULL}, @@ -1780,6 +2076,10 @@ newWindpowerObject(void* data_ptr) PyDict_SetItemString(attr_dict, "Uncertainty", Uncertainty_obj); Py_DECREF(Uncertainty_obj); + PyObject* HybridCosts_obj = HybridCosts_new(self->data_ptr); + PyDict_SetItemString(attr_dict, "HybridCosts", HybridCosts_obj); + Py_DECREF(HybridCosts_obj); + PyObject* Outputs_obj = Outputs_new(self->data_ptr); PyDict_SetItemString(attr_dict, "Outputs", Outputs_obj); Py_DECREF(Outputs_obj); @@ -1878,8 +2178,6 @@ Windpower_unassign(CmodObject *self, PyObject *args) static PyMethodDef Windpower_methods[] = { {"execute", (PyCFunction)Windpower_execute, METH_VARARGS, PyDoc_STR("execute(int verbosity) -> None\n Execute simulation with verbosity level 0 (default) or 1")}, - {"get_data_ptr", (PyCFunction)Windpower_get_data_ptr, METH_VARARGS, - PyDoc_STR("execute(int verbosity) -> Pointer\n Get ssc_data_t pointer")}, {"assign", (PyCFunction)Windpower_assign, METH_VARARGS, PyDoc_STR("assign(dict) -> None\n Assign attributes from nested dictionary, except for Outputs\n\n``nested_dict = { 'Resource': { var: val, ...}, ...}``")}, {"replace", (PyCFunction)Windpower_replace, METH_VARARGS, @@ -1890,6 +2188,8 @@ static PyMethodDef Windpower_methods[] = { PyDoc_STR("value(name, optional value) -> Union[None, float, dict, sequence, str]\n Get or set by name a value in any of the variable groups.")}, {"unassign", (PyCFunction)Windpower_unassign, METH_VARARGS, PyDoc_STR("unassign(name) -> None\n Unassign a value in any of the variable groups.")}, + {"get_data_ptr", (PyCFunction)Windpower_get_data_ptr, METH_VARARGS, + PyDoc_STR("get_data_ptr() -> Pointer\n Get ssc_data_t pointer")}, {NULL, NULL} /* sentinel */ }; @@ -2106,6 +2406,13 @@ WindpowerModule_exec(PyObject *m) (PyObject*)&Uncertainty_Type); Py_DECREF(&Uncertainty_Type); + /// Add the HybridCosts type object to Windpower_Type + if (PyType_Ready(&HybridCosts_Type) < 0) { goto fail; } + PyDict_SetItemString(Windpower_Type.tp_dict, + "HybridCosts", + (PyObject*)&HybridCosts_Type); + Py_DECREF(&HybridCosts_Type); + /// Add the Outputs type object to Windpower_Type if (PyType_Ready(&Outputs_Type) < 0) { goto fail; } PyDict_SetItemString(Windpower_Type.tp_dict, diff --git a/setup.py b/setup.py index 5eb9e493..122559ee 100644 --- a/setup.py +++ b/setup.py @@ -128,9 +128,16 @@ def _decode(o): continue shutil.copy(os.path.join(this_directory, "stubs", "stubs", filename), os.path.join(this_directory, "files")) stub_files.append(os.path.join(filename)) - libfiles += stub_files +hybrid_stubs = [] +for filename in os.listdir(os.path.join(this_directory, "files", "Hybrids")): + if ".pyi" not in filename: + continue + hybrid_stubs.append(os.path.join("Hybrids", filename)) +libfiles += hybrid_stubs + + # make list of all extension modules extension_modules = [Extension('PySAM.AdjustmentFactors', ['src/AdjustmentFactors.c'], @@ -143,8 +150,6 @@ def _decode(o): )] for filename in os.listdir(this_directory + "/modules"): - if "Hybrid" in filename: - continue extension_modules.append(Extension('PySAM.' + os.path.splitext(filename)[0], ['modules/' + filename], define_macros=defines, @@ -155,9 +160,8 @@ def _decode(o): extra_link_args=extra_link_args )) -# function to rename macosx distribution for Python 3.7 to be minimum version of 10.12 instead of 10.14 - +# function to rename macosx distribution for Python 3.7 to be minimum version of 10.12 instead of 10.14 class PostProcess(Command): description = "rename macosx distribution for Python 3.7 to be minimum version of 10.12 instead of 10.14" user_options = [] @@ -195,8 +199,8 @@ def read_lines(filename): author="dguittet", author_email="dguittet@nrel.gov", include_package_data=True, - packages=['PySAM'], - package_dir={'PySAM': 'files'}, + packages=['PySAM', 'PySAM.Hybrids'], + package_dir={'PySAM': 'files', 'PySAM.Hybrids': 'files/Hybrids'}, package_data={ '': libfiles}, setup_requires=["pytest-runner"], diff --git a/src/PySAM_utils.h b/src/PySAM_utils.h index 545050e7..4c2e51cd 100644 --- a/src/PySAM_utils.h +++ b/src/PySAM_utils.h @@ -914,9 +914,6 @@ static int PySAM_assign_from_nested_dict(PyObject* self, PyObject* x_attr, void if (strcmp(name, "Outputs") == 0) continue; - if (strcmp(name, "HybridTech") == 0) - continue; - if(!PyDict_Check(value)){ PySAM_error_set_with_context("Mismatch between provided input and expected structure. PySAM modules are assigned using nested dictionaries. Restructure your input or double check which object to which you are assigning the input."); goto fail; diff --git a/stubs/stubs/Battery.pyi b/stubs/stubs/Battery.pyi index bcbc7523..686d0d7b 100644 --- a/stubs/stubs/Battery.pyi +++ b/stubs/stubs/Battery.pyi @@ -14,6 +14,9 @@ class Battery(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass @@ -418,6 +421,31 @@ class Battery(object): grid_interconnection_limit_kwac = float + class HybridCosts(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + add_om_num_types = float + degradation = tuple + land_area = float + om_batt_capacity_cost = tuple + om_batt_fixed_cost = tuple + om_batt_nameplate = float + om_capacity_escal = float + om_fixed_escal = float + om_land_lease = tuple + om_land_lease_escal = float + om_production1_values = tuple + total_installed_cost = float + + class Outputs(object): def assign(self): pass @@ -497,6 +525,7 @@ class Battery(object): cf_battery_replacement_cost_schedule = tuple cf_energy_net = tuple cf_fuelcell_replacement_cost_schedule = tuple + cf_land_lease_expense = tuple cf_om_capacity = tuple cf_om_fixed = tuple cf_om_fuel_cost = tuple diff --git a/stubs/stubs/BatteryStateful.pyi b/stubs/stubs/BatteryStateful.pyi index 843be431..883de667 100644 --- a/stubs/stubs/BatteryStateful.pyi +++ b/stubs/stubs/BatteryStateful.pyi @@ -14,6 +14,9 @@ class BatteryStateful(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Battwatts.pyi b/stubs/stubs/Battwatts.pyi index 5ac6a59e..25d60c2d 100644 --- a/stubs/stubs/Battwatts.pyi +++ b/stubs/stubs/Battwatts.pyi @@ -14,6 +14,9 @@ class Battwatts(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Belpe.pyi b/stubs/stubs/Belpe.pyi index 37eed7e0..74b246c5 100644 --- a/stubs/stubs/Belpe.pyi +++ b/stubs/stubs/Belpe.pyi @@ -14,6 +14,9 @@ class Belpe(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Biomass.pyi b/stubs/stubs/Biomass.pyi index ea0c3501..9ee0087a 100644 --- a/stubs/stubs/Biomass.pyi +++ b/stubs/stubs/Biomass.pyi @@ -14,6 +14,9 @@ class Biomass(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Cashloan.pyi b/stubs/stubs/Cashloan.pyi index 65b8eb75..11c99e6e 100644 --- a/stubs/stubs/Cashloan.pyi +++ b/stubs/stubs/Cashloan.pyi @@ -14,6 +14,9 @@ class Cashloan(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/CbConstructionFinancing.pyi b/stubs/stubs/CbConstructionFinancing.pyi index 996dea26..c75690a8 100644 --- a/stubs/stubs/CbConstructionFinancing.pyi +++ b/stubs/stubs/CbConstructionFinancing.pyi @@ -14,6 +14,9 @@ class CbConstructionFinancing(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/CbEmpiricalHceHeatLoss.pyi b/stubs/stubs/CbEmpiricalHceHeatLoss.pyi index ea3a2639..546a18bc 100644 --- a/stubs/stubs/CbEmpiricalHceHeatLoss.pyi +++ b/stubs/stubs/CbEmpiricalHceHeatLoss.pyi @@ -14,6 +14,9 @@ class CbEmpiricalHceHeatLoss(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/CbMsptSystemCosts.pyi b/stubs/stubs/CbMsptSystemCosts.pyi index 69e9a108..2fb31a4f 100644 --- a/stubs/stubs/CbMsptSystemCosts.pyi +++ b/stubs/stubs/CbMsptSystemCosts.pyi @@ -14,6 +14,9 @@ class CbMsptSystemCosts(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Communitysolar.pyi b/stubs/stubs/Communitysolar.pyi index 91fe1e19..95aba01a 100644 --- a/stubs/stubs/Communitysolar.pyi +++ b/stubs/stubs/Communitysolar.pyi @@ -14,6 +14,9 @@ class Communitysolar(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/CspDsgLfUi.pyi b/stubs/stubs/CspDsgLfUi.pyi index d0fe33c0..9c630a2d 100644 --- a/stubs/stubs/CspDsgLfUi.pyi +++ b/stubs/stubs/CspDsgLfUi.pyi @@ -14,6 +14,9 @@ class CspDsgLfUi(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/CspSubcomponent.pyi b/stubs/stubs/CspSubcomponent.pyi index bfc028e4..72efe655 100644 --- a/stubs/stubs/CspSubcomponent.pyi +++ b/stubs/stubs/CspSubcomponent.pyi @@ -14,6 +14,9 @@ class CspSubcomponent(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Equpartflip.pyi b/stubs/stubs/Equpartflip.pyi index dbbe47c6..f4488426 100644 --- a/stubs/stubs/Equpartflip.pyi +++ b/stubs/stubs/Equpartflip.pyi @@ -14,6 +14,9 @@ class Equpartflip(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/EtesElectricResistance.pyi b/stubs/stubs/EtesElectricResistance.pyi index e34c385d..1ff739a7 100644 --- a/stubs/stubs/EtesElectricResistance.pyi +++ b/stubs/stubs/EtesElectricResistance.pyi @@ -14,6 +14,9 @@ class EtesElectricResistance(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/EtesPtes.pyi b/stubs/stubs/EtesPtes.pyi index 78687f7c..276b7ce7 100644 --- a/stubs/stubs/EtesPtes.pyi +++ b/stubs/stubs/EtesPtes.pyi @@ -14,6 +14,9 @@ class EtesPtes(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/FresnelPhysical.pyi b/stubs/stubs/FresnelPhysical.pyi index 708508dd..2abd846d 100644 --- a/stubs/stubs/FresnelPhysical.pyi +++ b/stubs/stubs/FresnelPhysical.pyi @@ -14,6 +14,9 @@ class FresnelPhysical(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/FresnelPhysicalIph.pyi b/stubs/stubs/FresnelPhysicalIph.pyi index 52eae282..236a6712 100644 --- a/stubs/stubs/FresnelPhysicalIph.pyi +++ b/stubs/stubs/FresnelPhysicalIph.pyi @@ -14,6 +14,9 @@ class FresnelPhysicalIph(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Fuelcell.pyi b/stubs/stubs/Fuelcell.pyi index cad6e835..e773c60f 100644 --- a/stubs/stubs/Fuelcell.pyi +++ b/stubs/stubs/Fuelcell.pyi @@ -14,6 +14,9 @@ class Fuelcell(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass @@ -111,6 +114,37 @@ class Fuelcell(object): fuelcell_unit_min_power = float + class HybridCosts(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + add_om_num_types = float + degradation = tuple + land_area = float + om_capacity_escal = float + om_fixed_escal = float + om_fuel_cost = tuple + om_fuel_cost_escal = float + om_fuelcell_capacity_cost = tuple + om_fuelcell_fixed_cost = tuple + om_fuelcell_nameplate = float + om_fuelcell_replacement_cost = tuple + om_fuelcell_variable_cost = tuple + om_land_lease = tuple + om_land_lease_escal = float + om_production2_values = tuple + om_production_escal = float + om_replacement_cost_escal = float + total_installed_cost = float + + class Outputs(object): def assign(self): pass @@ -130,6 +164,7 @@ class Fuelcell(object): cf_battery_replacement_cost_schedule = tuple cf_energy_net = tuple cf_fuelcell_replacement_cost_schedule = tuple + cf_land_lease_expense = tuple cf_om_capacity = tuple cf_om_fixed = tuple cf_om_fuel_cost = tuple diff --git a/stubs/stubs/GenericSystem.pyi b/stubs/stubs/GenericSystem.pyi index f894c818..225baed0 100644 --- a/stubs/stubs/GenericSystem.pyi +++ b/stubs/stubs/GenericSystem.pyi @@ -14,6 +14,9 @@ class GenericSystem(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass @@ -88,6 +91,33 @@ class GenericSystem(object): sf_periods = tuple sf_timeindex = tuple + class HybridCosts(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + annual_fuel_usage_lifetime = tuple + degradation = tuple + land_area = float + om_capacity = tuple + om_capacity_escal = float + om_fixed = tuple + om_fixed_escal = float + om_fuel_cost = tuple + om_fuel_cost_escal = float + om_land_lease = tuple + om_land_lease_escal = float + om_production = tuple + om_production_escal = float + total_installed_cost = float + + class Outputs(object): def assign(self): pass @@ -106,6 +136,7 @@ class GenericSystem(object): cf_battery_replacement_cost_schedule = tuple cf_energy_net = tuple cf_fuelcell_replacement_cost_schedule = tuple + cf_land_lease_expense = tuple cf_om_capacity = tuple cf_om_fixed = tuple cf_om_fuel_cost = tuple diff --git a/stubs/stubs/Geothermal.pyi b/stubs/stubs/Geothermal.pyi index 3cbe9892..1ee311d2 100644 --- a/stubs/stubs/Geothermal.pyi +++ b/stubs/stubs/Geothermal.pyi @@ -14,6 +14,9 @@ class Geothermal(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/GeothermalCosts.pyi b/stubs/stubs/GeothermalCosts.pyi index 02f5bf3c..856e2862 100644 --- a/stubs/stubs/GeothermalCosts.pyi +++ b/stubs/stubs/GeothermalCosts.pyi @@ -14,6 +14,9 @@ class GeothermalCosts(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Grid.pyi b/stubs/stubs/Grid.pyi index dd205000..9c18b6a4 100644 --- a/stubs/stubs/Grid.pyi +++ b/stubs/stubs/Grid.pyi @@ -14,6 +14,9 @@ class Grid(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass @@ -98,6 +101,30 @@ class Grid(object): grid_interconnection_limit_kwac = float + class HybridCosts(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + degradation = tuple + land_area = float + om_capacity = tuple + om_capacity_escal = float + om_fixed = tuple + om_fixed_escal = float + om_land_lease = tuple + om_land_lease_escal = float + om_production = tuple + om_production_escal = float + total_installed_cost = float + + class Outputs(object): def assign(self): pass @@ -118,6 +145,7 @@ class Grid(object): annual_energy_pre_interconnect_ac = float capacity_factor_curtailment_ac = float capacity_factor_interconnect_ac = float + cf_land_lease_expense = tuple full_load = tuple gen = tuple system_pre_curtailment_kwac = tuple diff --git a/stubs/stubs/Hcpv.pyi b/stubs/stubs/Hcpv.pyi index 55fdb6df..90d213dc 100644 --- a/stubs/stubs/Hcpv.pyi +++ b/stubs/stubs/Hcpv.pyi @@ -14,6 +14,9 @@ class Hcpv(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/HostDeveloper.pyi b/stubs/stubs/HostDeveloper.pyi index 329702b3..95ab1527 100644 --- a/stubs/stubs/HostDeveloper.pyi +++ b/stubs/stubs/HostDeveloper.pyi @@ -14,6 +14,9 @@ class HostDeveloper(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass @@ -586,6 +589,21 @@ class HostDeveloper(object): fuelcell_replacement = tuple + class HybridCosts(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + degradation = tuple + total_installed_cost = float + + class Outputs(object): def assign(self): pass diff --git a/stubs/stubs/Hybrid.pyi b/stubs/stubs/Hybrid.pyi index 75acc540..c87fb591 100644 --- a/stubs/stubs/Hybrid.pyi +++ b/stubs/stubs/Hybrid.pyi @@ -14,6 +14,9 @@ class Hybrid(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/HybridSteps.pyi b/stubs/stubs/HybridSteps.pyi index c1cd2a5c..5d6cba44 100644 --- a/stubs/stubs/HybridSteps.pyi +++ b/stubs/stubs/HybridSteps.pyi @@ -14,6 +14,9 @@ class HybridSteps(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Iec61853interp.pyi b/stubs/stubs/Iec61853interp.pyi index b701daa4..f149a978 100644 --- a/stubs/stubs/Iec61853interp.pyi +++ b/stubs/stubs/Iec61853interp.pyi @@ -14,6 +14,9 @@ class Iec61853interp(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Iec61853par.pyi b/stubs/stubs/Iec61853par.pyi index e37dfb0e..1f9c2239 100644 --- a/stubs/stubs/Iec61853par.pyi +++ b/stubs/stubs/Iec61853par.pyi @@ -14,6 +14,9 @@ class Iec61853par(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/InvCecCg.pyi b/stubs/stubs/InvCecCg.pyi index 52052261..86e86792 100644 --- a/stubs/stubs/InvCecCg.pyi +++ b/stubs/stubs/InvCecCg.pyi @@ -14,6 +14,9 @@ class InvCecCg(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/IphToLcoefcr.pyi b/stubs/stubs/IphToLcoefcr.pyi index bcd8d514..4ced410e 100644 --- a/stubs/stubs/IphToLcoefcr.pyi +++ b/stubs/stubs/IphToLcoefcr.pyi @@ -14,6 +14,9 @@ class IphToLcoefcr(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Ippppa.pyi b/stubs/stubs/Ippppa.pyi index eb55a65d..74324db3 100644 --- a/stubs/stubs/Ippppa.pyi +++ b/stubs/stubs/Ippppa.pyi @@ -14,6 +14,9 @@ class Ippppa(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Irradproc.pyi b/stubs/stubs/Irradproc.pyi index 2fc022d9..b1b69130 100644 --- a/stubs/stubs/Irradproc.pyi +++ b/stubs/stubs/Irradproc.pyi @@ -14,6 +14,9 @@ class Irradproc(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Layoutarea.pyi b/stubs/stubs/Layoutarea.pyi index 20047206..5f8d1047 100644 --- a/stubs/stubs/Layoutarea.pyi +++ b/stubs/stubs/Layoutarea.pyi @@ -14,6 +14,9 @@ class Layoutarea(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Lcoefcr.pyi b/stubs/stubs/Lcoefcr.pyi index ecdc3c64..08682c3d 100644 --- a/stubs/stubs/Lcoefcr.pyi +++ b/stubs/stubs/Lcoefcr.pyi @@ -14,6 +14,9 @@ class Lcoefcr(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/LcoefcrDesign.pyi b/stubs/stubs/LcoefcrDesign.pyi index 7c334c98..55ae5b44 100644 --- a/stubs/stubs/LcoefcrDesign.pyi +++ b/stubs/stubs/LcoefcrDesign.pyi @@ -14,6 +14,9 @@ class LcoefcrDesign(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Levpartflip.pyi b/stubs/stubs/Levpartflip.pyi index 1d585022..9094efd2 100644 --- a/stubs/stubs/Levpartflip.pyi +++ b/stubs/stubs/Levpartflip.pyi @@ -14,6 +14,9 @@ class Levpartflip(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/LinearFresnelDsgIph.pyi b/stubs/stubs/LinearFresnelDsgIph.pyi index dc3f2a0a..e73a7823 100644 --- a/stubs/stubs/LinearFresnelDsgIph.pyi +++ b/stubs/stubs/LinearFresnelDsgIph.pyi @@ -14,6 +14,9 @@ class LinearFresnelDsgIph(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Merchantplant.pyi b/stubs/stubs/Merchantplant.pyi index 919f5a77..29013a2c 100644 --- a/stubs/stubs/Merchantplant.pyi +++ b/stubs/stubs/Merchantplant.pyi @@ -14,6 +14,9 @@ class Merchantplant(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/MhkCosts.pyi b/stubs/stubs/MhkCosts.pyi index 77dcc4e8..09a0d55b 100644 --- a/stubs/stubs/MhkCosts.pyi +++ b/stubs/stubs/MhkCosts.pyi @@ -14,6 +14,9 @@ class MhkCosts(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/MhkTidal.pyi b/stubs/stubs/MhkTidal.pyi index bbc91a9f..8ff5e870 100644 --- a/stubs/stubs/MhkTidal.pyi +++ b/stubs/stubs/MhkTidal.pyi @@ -14,6 +14,9 @@ class MhkTidal(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/MhkWave.pyi b/stubs/stubs/MhkWave.pyi index b63b8d1c..e66587e7 100644 --- a/stubs/stubs/MhkWave.pyi +++ b/stubs/stubs/MhkWave.pyi @@ -14,6 +14,9 @@ class MhkWave(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/MsptIph.pyi b/stubs/stubs/MsptIph.pyi index fcfcc7b2..f86b5d8a 100644 --- a/stubs/stubs/MsptIph.pyi +++ b/stubs/stubs/MsptIph.pyi @@ -14,6 +14,9 @@ class MsptIph(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/MsptSfAndRecIsolated.pyi b/stubs/stubs/MsptSfAndRecIsolated.pyi index 6d0595dd..cabfea85 100644 --- a/stubs/stubs/MsptSfAndRecIsolated.pyi +++ b/stubs/stubs/MsptSfAndRecIsolated.pyi @@ -14,6 +14,9 @@ class MsptSfAndRecIsolated(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/PtesDesignPoint.pyi b/stubs/stubs/PtesDesignPoint.pyi index 8989693e..a9e9c2be 100644 --- a/stubs/stubs/PtesDesignPoint.pyi +++ b/stubs/stubs/PtesDesignPoint.pyi @@ -14,6 +14,9 @@ class PtesDesignPoint(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Pv6parmod.pyi b/stubs/stubs/Pv6parmod.pyi index 2994c265..0c7a82e5 100644 --- a/stubs/stubs/Pv6parmod.pyi +++ b/stubs/stubs/Pv6parmod.pyi @@ -14,6 +14,9 @@ class Pv6parmod(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/PvGetShadeLossMpp.pyi b/stubs/stubs/PvGetShadeLossMpp.pyi index dd99bbcb..652f5b35 100644 --- a/stubs/stubs/PvGetShadeLossMpp.pyi +++ b/stubs/stubs/PvGetShadeLossMpp.pyi @@ -14,6 +14,9 @@ class PvGetShadeLossMpp(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Pvsamv1.pyi b/stubs/stubs/Pvsamv1.pyi index c8c04480..08d5f2d8 100644 --- a/stubs/stubs/Pvsamv1.pyi +++ b/stubs/stubs/Pvsamv1.pyi @@ -14,6 +14,9 @@ class Pvsamv1(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass @@ -59,6 +62,7 @@ class Pvsamv1(object): calculate_rack_shading = float dcoptimizer_loss = float en_snow_model = float + snow_slide_coefficient = float subarray1_dcwiring_loss = float subarray1_diodeconn_loss = float subarray1_electrical_mismatch = float @@ -823,6 +827,7 @@ class Pvsamv1(object): enable_subhourly_clipping = float + enable_subinterval_distribution = float subhourly_clipping_matrix = tuple @@ -1108,6 +1113,29 @@ class Pvsamv1(object): grid_interconnection_limit_kwac = float + class HybridCosts(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + degradation = tuple + land_area = float + om_capacity = tuple + om_capacity_escal = float + om_fixed = tuple + om_fixed_escal = float + om_land_lease = tuple + om_land_lease_escal = float + om_production = tuple + total_installed_cost = float + + class Outputs(object): def assign(self): pass @@ -1167,6 +1195,8 @@ class Pvsamv1(object): annual_dc_tracking_loss_percent = float annual_dc_wiring_loss = float annual_dc_wiring_loss_percent = float + annual_distribution_clipping_loss = float + annual_distribution_clipping_loss_percent = float annual_energy = float annual_energy_distribution_time = tuple annual_export_to_grid_energy = tuple @@ -1300,6 +1330,7 @@ class Pvsamv1(object): cf_battery_replacement_cost_schedule = tuple cf_energy_net = tuple cf_fuelcell_replacement_cost_schedule = tuple + cf_land_lease_expense = tuple cf_om_capacity = tuple cf_om_fixed = tuple cf_om_fuel_cost = tuple @@ -1314,6 +1345,7 @@ class Pvsamv1(object): dc_snow_loss = tuple df = tuple df_calc = tuple + distribution_clipping_loss = tuple dn = tuple dn_calc = tuple elev = float diff --git a/stubs/stubs/Pvsandiainv.pyi b/stubs/stubs/Pvsandiainv.pyi index 9cff2e3d..adc7ee58 100644 --- a/stubs/stubs/Pvsandiainv.pyi +++ b/stubs/stubs/Pvsandiainv.pyi @@ -14,6 +14,9 @@ class Pvsandiainv(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Pvwattsv5.pyi b/stubs/stubs/Pvwattsv5.pyi index 726490ea..67c6e59a 100644 --- a/stubs/stubs/Pvwattsv5.pyi +++ b/stubs/stubs/Pvwattsv5.pyi @@ -14,6 +14,9 @@ class Pvwattsv5(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Pvwattsv51ts.pyi b/stubs/stubs/Pvwattsv51ts.pyi index 3ac68429..23e62f40 100644 --- a/stubs/stubs/Pvwattsv51ts.pyi +++ b/stubs/stubs/Pvwattsv51ts.pyi @@ -14,6 +14,9 @@ class Pvwattsv51ts(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Pvwattsv7.pyi b/stubs/stubs/Pvwattsv7.pyi index 0761286e..7ea85911 100644 --- a/stubs/stubs/Pvwattsv7.pyi +++ b/stubs/stubs/Pvwattsv7.pyi @@ -14,6 +14,9 @@ class Pvwattsv7(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Pvwattsv8.pyi b/stubs/stubs/Pvwattsv8.pyi index b9f12599..74a2e9d0 100644 --- a/stubs/stubs/Pvwattsv8.pyi +++ b/stubs/stubs/Pvwattsv8.pyi @@ -14,6 +14,9 @@ class Pvwattsv8(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass @@ -145,6 +148,30 @@ class Pvwattsv8(object): sf_periods = tuple sf_timeindex = tuple + class HybridCosts(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + degradation = tuple + land_area = float + om_capacity = tuple + om_capacity_escal = float + om_fixed = tuple + om_fixed_escal = float + om_land_lease = tuple + om_land_lease_escal = float + om_production = tuple + om_production_escal = float + total_installed_cost = float + + class Outputs(object): def assign(self): pass @@ -170,6 +197,7 @@ class Pvwattsv8(object): cf_battery_replacement_cost_schedule = tuple cf_energy_net = tuple cf_fuelcell_replacement_cost_schedule = tuple + cf_land_lease_expense = tuple cf_om_capacity = tuple cf_om_fixed = tuple cf_om_fuel_cost = tuple diff --git a/stubs/stubs/Saleleaseback.pyi b/stubs/stubs/Saleleaseback.pyi index b4175716..7aae4f85 100644 --- a/stubs/stubs/Saleleaseback.pyi +++ b/stubs/stubs/Saleleaseback.pyi @@ -14,6 +14,9 @@ class Saleleaseback(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Sco2AirCooler.pyi b/stubs/stubs/Sco2AirCooler.pyi index dfe9915e..a5fa61b0 100644 --- a/stubs/stubs/Sco2AirCooler.pyi +++ b/stubs/stubs/Sco2AirCooler.pyi @@ -14,6 +14,9 @@ class Sco2AirCooler(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Sco2CompCurves.pyi b/stubs/stubs/Sco2CompCurves.pyi index 73fa778a..2e0abeb2 100644 --- a/stubs/stubs/Sco2CompCurves.pyi +++ b/stubs/stubs/Sco2CompCurves.pyi @@ -14,6 +14,9 @@ class Sco2CompCurves(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Sco2CspSystem.pyi b/stubs/stubs/Sco2CspSystem.pyi index d5153fed..9c33256a 100644 --- a/stubs/stubs/Sco2CspSystem.pyi +++ b/stubs/stubs/Sco2CspSystem.pyi @@ -14,6 +14,9 @@ class Sco2CspSystem(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Sco2CspUdPcTables.pyi b/stubs/stubs/Sco2CspUdPcTables.pyi index 8a495491..7c4a2103 100644 --- a/stubs/stubs/Sco2CspUdPcTables.pyi +++ b/stubs/stubs/Sco2CspUdPcTables.pyi @@ -14,6 +14,9 @@ class Sco2CspUdPcTables(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Singlediode.pyi b/stubs/stubs/Singlediode.pyi index 5bb01ea0..dd0ac832 100644 --- a/stubs/stubs/Singlediode.pyi +++ b/stubs/stubs/Singlediode.pyi @@ -14,6 +14,9 @@ class Singlediode(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Singlediodeparams.pyi b/stubs/stubs/Singlediodeparams.pyi index 4e2bc930..6a1f9d70 100644 --- a/stubs/stubs/Singlediodeparams.pyi +++ b/stubs/stubs/Singlediodeparams.pyi @@ -14,6 +14,9 @@ class Singlediodeparams(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Singleowner.pyi b/stubs/stubs/Singleowner.pyi index 8303127d..ecd73a67 100644 --- a/stubs/stubs/Singleowner.pyi +++ b/stubs/stubs/Singleowner.pyi @@ -14,6 +14,9 @@ class Singleowner(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass @@ -387,6 +390,32 @@ class Singleowner(object): en_electricity_rates = float rate_escalation = tuple + ur_annual_min_charge = float + ur_billing_demand_lookback_percentages = tuple + ur_billing_demand_lookback_period = float + ur_billing_demand_minimum = float + ur_dc_billing_demand_periods = tuple + ur_dc_enable = float + ur_dc_flat_mat = tuple + ur_dc_sched_weekday = tuple + ur_dc_sched_weekend = tuple + ur_dc_tou_mat = tuple + ur_ec_sched_weekday = tuple + ur_ec_sched_weekend = tuple + ur_ec_tou_mat = tuple + ur_en_ts_buy_rate = float + ur_en_ts_sell_rate = float + ur_enable_billing_demand = float + ur_metering_option = float + ur_monthly_fixed_charge = float + ur_monthly_min_charge = float + ur_nm_credit_month = float + ur_nm_credit_rollover = float + ur_nm_yearend_sell_rate = float + ur_sell_eq_buy = float + ur_ts_buy_rate = tuple + ur_ts_sell_rate = tuple + ur_yearzero_usage_peaks = tuple class SystemOutput(object): @@ -565,6 +594,21 @@ class Singleowner(object): monthly_energy = tuple + class HybridCosts(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + degradation = tuple + total_installed_cost = float + + class Outputs(object): def assign(self): pass diff --git a/stubs/stubs/SixParsolve.pyi b/stubs/stubs/SixParsolve.pyi index c56563f2..0a1f075b 100644 --- a/stubs/stubs/SixParsolve.pyi +++ b/stubs/stubs/SixParsolve.pyi @@ -14,6 +14,9 @@ class SixParsolve(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Snowmodel.pyi b/stubs/stubs/Snowmodel.pyi index e3e5edbf..1b4bd9b1 100644 --- a/stubs/stubs/Snowmodel.pyi +++ b/stubs/stubs/Snowmodel.pyi @@ -14,6 +14,9 @@ class Snowmodel(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass @@ -31,6 +34,7 @@ class Snowmodel(object): pass + snow_slide_coefficient = float snowdepth = tuple subarray1_nmody = float subarray1_poa_shaded = tuple diff --git a/stubs/stubs/Solarpilot.pyi b/stubs/stubs/Solarpilot.pyi index f06ad005..ffbcff0d 100644 --- a/stubs/stubs/Solarpilot.pyi +++ b/stubs/stubs/Solarpilot.pyi @@ -14,6 +14,9 @@ class Solarpilot(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Swh.pyi b/stubs/stubs/Swh.pyi index f6201664..97c93af7 100644 --- a/stubs/stubs/Swh.pyi +++ b/stubs/stubs/Swh.pyi @@ -14,6 +14,9 @@ class Swh(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/TcsMSLF.pyi b/stubs/stubs/TcsMSLF.pyi index 1a591765..b85aca28 100644 --- a/stubs/stubs/TcsMSLF.pyi +++ b/stubs/stubs/TcsMSLF.pyi @@ -14,6 +14,9 @@ class TcsMSLF(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/TcsgenericSolar.pyi b/stubs/stubs/TcsgenericSolar.pyi index 3b1b3a6e..b6fa3a42 100644 --- a/stubs/stubs/TcsgenericSolar.pyi +++ b/stubs/stubs/TcsgenericSolar.pyi @@ -14,6 +14,9 @@ class TcsgenericSolar(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/TcslinearFresnel.pyi b/stubs/stubs/TcslinearFresnel.pyi index fe430ea0..95f501c6 100644 --- a/stubs/stubs/TcslinearFresnel.pyi +++ b/stubs/stubs/TcslinearFresnel.pyi @@ -14,6 +14,9 @@ class TcslinearFresnel(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/TcsmoltenSalt.pyi b/stubs/stubs/TcsmoltenSalt.pyi index 4475c064..f1c250c0 100644 --- a/stubs/stubs/TcsmoltenSalt.pyi +++ b/stubs/stubs/TcsmoltenSalt.pyi @@ -14,6 +14,9 @@ class TcsmoltenSalt(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/TcstroughEmpirical.pyi b/stubs/stubs/TcstroughEmpirical.pyi index e5308654..52de303f 100644 --- a/stubs/stubs/TcstroughEmpirical.pyi +++ b/stubs/stubs/TcstroughEmpirical.pyi @@ -14,6 +14,9 @@ class TcstroughEmpirical(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/TcstroughPhysical.pyi b/stubs/stubs/TcstroughPhysical.pyi index 20ad43f1..79684b8f 100644 --- a/stubs/stubs/TcstroughPhysical.pyi +++ b/stubs/stubs/TcstroughPhysical.pyi @@ -14,6 +14,9 @@ class TcstroughPhysical(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/TestUdPowerCycle.pyi b/stubs/stubs/TestUdPowerCycle.pyi index 8f1b0b41..ba24c077 100644 --- a/stubs/stubs/TestUdPowerCycle.pyi +++ b/stubs/stubs/TestUdPowerCycle.pyi @@ -14,6 +14,9 @@ class TestUdPowerCycle(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Thermalrate.pyi b/stubs/stubs/Thermalrate.pyi index 46abc96b..fc0d2ff7 100644 --- a/stubs/stubs/Thermalrate.pyi +++ b/stubs/stubs/Thermalrate.pyi @@ -14,6 +14,9 @@ class Thermalrate(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Thirdpartyownership.pyi b/stubs/stubs/Thirdpartyownership.pyi index 6ee08c06..285c1858 100644 --- a/stubs/stubs/Thirdpartyownership.pyi +++ b/stubs/stubs/Thirdpartyownership.pyi @@ -14,6 +14,9 @@ class Thirdpartyownership(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/TidalFileReader.pyi b/stubs/stubs/TidalFileReader.pyi index ba79764d..c94c8a5d 100644 --- a/stubs/stubs/TidalFileReader.pyi +++ b/stubs/stubs/TidalFileReader.pyi @@ -14,6 +14,9 @@ class TidalFileReader(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass @@ -33,7 +36,6 @@ class TidalFileReader(object): tidal_resource_filename = str tidal_resource_model_choice = float - use_specific_wf_tidal = float class Outputs(object): diff --git a/stubs/stubs/Timeseq.pyi b/stubs/stubs/Timeseq.pyi index e5a9303a..34edc49b 100644 --- a/stubs/stubs/Timeseq.pyi +++ b/stubs/stubs/Timeseq.pyi @@ -14,6 +14,9 @@ class Timeseq(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/TroughPhysical.pyi b/stubs/stubs/TroughPhysical.pyi index 1527e18e..eafad432 100644 --- a/stubs/stubs/TroughPhysical.pyi +++ b/stubs/stubs/TroughPhysical.pyi @@ -14,6 +14,9 @@ class TroughPhysical(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass @@ -150,7 +153,6 @@ class TroughPhysical(object): nColt = float nHCEVar = float nHCEt = float - nSCA = float northsouth_field_sep = float offset_xpan_hdr = float p_start = float @@ -543,6 +545,8 @@ class TroughPhysical(object): bop_design = float capacity_factor = float conversion_factor = float + cp_battery_nameplate = float + cp_system_nameplate = float csp_dtr_cost_bop = float csp_dtr_cost_contingency = float csp_dtr_cost_epc_total = float @@ -633,6 +637,7 @@ class TroughPhysical(object): month = tuple monthly_energy = tuple nLoops = float + nSCA = float n_op_modes = tuple nameplate = float op_mode_1 = tuple @@ -702,6 +707,7 @@ class TroughPhysical(object): solar_mult = float solazi = tuple solzen = tuple + system_capacity = float tank_losses = tuple tdry = tuple tes_avail_vol = float diff --git a/stubs/stubs/TroughPhysicalCspSolver.pyi b/stubs/stubs/TroughPhysicalCspSolver.pyi index f33b0c6c..553fc88a 100644 --- a/stubs/stubs/TroughPhysicalCspSolver.pyi +++ b/stubs/stubs/TroughPhysicalCspSolver.pyi @@ -14,6 +14,9 @@ class TroughPhysicalCspSolver(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/TroughPhysicalIph.pyi b/stubs/stubs/TroughPhysicalIph.pyi index 73dccb00..c6e02a1e 100644 --- a/stubs/stubs/TroughPhysicalIph.pyi +++ b/stubs/stubs/TroughPhysicalIph.pyi @@ -14,6 +14,9 @@ class TroughPhysicalIph(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass @@ -161,7 +164,6 @@ class TroughPhysicalIph(object): nColt = float nHCEVar = float nHCEt = float - nSCA = float northsouth_field_sep = float offset_xpan_hdr = float p_start = float @@ -646,6 +648,7 @@ class TroughPhysicalIph(object): month = tuple monthly_energy = tuple nLoops = float + nSCA = float n_op_modes = tuple nameplate = float op_mode_1 = tuple diff --git a/stubs/stubs/TroughPhysicalProcessHeat.pyi b/stubs/stubs/TroughPhysicalProcessHeat.pyi index ced9b8c9..c5f29d8c 100644 --- a/stubs/stubs/TroughPhysicalProcessHeat.pyi +++ b/stubs/stubs/TroughPhysicalProcessHeat.pyi @@ -14,6 +14,9 @@ class TroughPhysicalProcessHeat(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/UiTesCalcs.pyi b/stubs/stubs/UiTesCalcs.pyi index 6db930c7..9f7855f5 100644 --- a/stubs/stubs/UiTesCalcs.pyi +++ b/stubs/stubs/UiTesCalcs.pyi @@ -14,6 +14,9 @@ class UiTesCalcs(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/UiUdpcChecks.pyi b/stubs/stubs/UiUdpcChecks.pyi index 1db31a36..b14dab2d 100644 --- a/stubs/stubs/UiUdpcChecks.pyi +++ b/stubs/stubs/UiUdpcChecks.pyi @@ -14,6 +14,9 @@ class UiUdpcChecks(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/UserHtfComparison.pyi b/stubs/stubs/UserHtfComparison.pyi index 461be9f6..6e01669e 100644 --- a/stubs/stubs/UserHtfComparison.pyi +++ b/stubs/stubs/UserHtfComparison.pyi @@ -14,6 +14,9 @@ class UserHtfComparison(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Utilityrate.pyi b/stubs/stubs/Utilityrate.pyi index d360e00d..f0758e96 100644 --- a/stubs/stubs/Utilityrate.pyi +++ b/stubs/stubs/Utilityrate.pyi @@ -14,6 +14,9 @@ class Utilityrate(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Utilityrate2.pyi b/stubs/stubs/Utilityrate2.pyi index db80d33d..326dedeb 100644 --- a/stubs/stubs/Utilityrate2.pyi +++ b/stubs/stubs/Utilityrate2.pyi @@ -14,6 +14,9 @@ class Utilityrate2(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Utilityrate3.pyi b/stubs/stubs/Utilityrate3.pyi index 1eca6b0b..c418c9a3 100644 --- a/stubs/stubs/Utilityrate3.pyi +++ b/stubs/stubs/Utilityrate3.pyi @@ -14,6 +14,9 @@ class Utilityrate3(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Utilityrate4.pyi b/stubs/stubs/Utilityrate4.pyi index 16697a70..26f8b004 100644 --- a/stubs/stubs/Utilityrate4.pyi +++ b/stubs/stubs/Utilityrate4.pyi @@ -14,6 +14,9 @@ class Utilityrate4(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Utilityrate5.pyi b/stubs/stubs/Utilityrate5.pyi index c14931af..aa425333 100644 --- a/stubs/stubs/Utilityrate5.pyi +++ b/stubs/stubs/Utilityrate5.pyi @@ -14,6 +14,9 @@ class Utilityrate5(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass @@ -109,6 +112,30 @@ class Utilityrate5(object): load_escalation = tuple + class HybridCosts(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + degradation = tuple + land_area = float + om_capacity = tuple + om_capacity_escal = float + om_fixed = tuple + om_fixed_escal = float + om_land_lease = tuple + om_land_lease_escal = float + om_production = tuple + om_production_escal = float + total_installed_cost = float + + class Outputs(object): def assign(self): pass @@ -125,6 +152,7 @@ class Utilityrate5(object): bill_load = tuple billing_demand_w_sys_ym = tuple billing_demand_wo_sys_ym = tuple + cf_land_lease_expense = tuple charge_w_sys_dc_fixed = tuple charge_w_sys_dc_fixed_ym = tuple charge_w_sys_dc_tou = tuple diff --git a/stubs/stubs/Utilityrateforecast.pyi b/stubs/stubs/Utilityrateforecast.pyi index c936661a..eb4de096 100644 --- a/stubs/stubs/Utilityrateforecast.pyi +++ b/stubs/stubs/Utilityrateforecast.pyi @@ -14,6 +14,9 @@ class Utilityrateforecast(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/WaveFileReader.pyi b/stubs/stubs/WaveFileReader.pyi index 22810f9a..203671b3 100644 --- a/stubs/stubs/WaveFileReader.pyi +++ b/stubs/stubs/WaveFileReader.pyi @@ -14,6 +14,9 @@ class WaveFileReader(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass @@ -31,7 +34,6 @@ class WaveFileReader(object): pass - use_specific_wf_wave = float wave_resource_filename = str wave_resource_filename_ts = str wave_resource_model_choice = float diff --git a/stubs/stubs/Wfcheck.pyi b/stubs/stubs/Wfcheck.pyi index 1bc56d93..30414114 100644 --- a/stubs/stubs/Wfcheck.pyi +++ b/stubs/stubs/Wfcheck.pyi @@ -14,6 +14,9 @@ class Wfcheck(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Wfcsvconv.pyi b/stubs/stubs/Wfcsvconv.pyi index d45b7d0c..483b81d1 100644 --- a/stubs/stubs/Wfcsvconv.pyi +++ b/stubs/stubs/Wfcsvconv.pyi @@ -14,6 +14,9 @@ class Wfcsvconv(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Wfreader.pyi b/stubs/stubs/Wfreader.pyi index 7aa4577d..defce168 100644 --- a/stubs/stubs/Wfreader.pyi +++ b/stubs/stubs/Wfreader.pyi @@ -14,6 +14,9 @@ class Wfreader(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/WindFileReader.pyi b/stubs/stubs/WindFileReader.pyi index a36ee373..19fe6f96 100644 --- a/stubs/stubs/WindFileReader.pyi +++ b/stubs/stubs/WindFileReader.pyi @@ -14,6 +14,9 @@ class WindFileReader(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/WindObos.pyi b/stubs/stubs/WindObos.pyi index 07539e25..c26315c7 100644 --- a/stubs/stubs/WindObos.pyi +++ b/stubs/stubs/WindObos.pyi @@ -14,6 +14,9 @@ class WindObos(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Windbos.pyi b/stubs/stubs/Windbos.pyi index 7ecfa231..d843a57f 100644 --- a/stubs/stubs/Windbos.pyi +++ b/stubs/stubs/Windbos.pyi @@ -14,6 +14,9 @@ class Windbos(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Windcsm.pyi b/stubs/stubs/Windcsm.pyi index 9e98e5ab..f8562b31 100644 --- a/stubs/stubs/Windcsm.pyi +++ b/stubs/stubs/Windcsm.pyi @@ -14,6 +14,9 @@ class Windcsm(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass diff --git a/stubs/stubs/Windpower.pyi b/stubs/stubs/Windpower.pyi index 41e9ce97..cf2cf4e0 100644 --- a/stubs/stubs/Windpower.pyi +++ b/stubs/stubs/Windpower.pyi @@ -14,6 +14,9 @@ class Windpower(object): def export(self): pass + def get_data_ptr(self): + pass + def __getattribute__(self, *args, **kwargs): pass @@ -164,6 +167,30 @@ class Windpower(object): total_uncert = float + class HybridCosts(object): + def assign(self): + pass + + def export(self) -> dict: + pass + + def __init__(self, *args, **kwargs): + pass + + + degradation = tuple + land_area = float + om_capacity = tuple + om_capacity_escal = float + om_fixed = tuple + om_fixed_escal = float + om_land_lease = tuple + om_land_lease_escal = float + om_production = tuple + om_production_escal = float + total_installed_cost = float + + class Outputs(object): def assign(self): pass @@ -186,6 +213,7 @@ class Windpower(object): cf_battery_replacement_cost_schedule = tuple cf_energy_net = tuple cf_fuelcell_replacement_cost_schedule = tuple + cf_land_lease_expense = tuple cf_om_capacity = tuple cf_om_fixed = tuple cf_om_fuel_cost = tuple diff --git a/tests/test_hybrid.py b/tests/test_hybrid.py new file mode 100644 index 00000000..24365fa2 --- /dev/null +++ b/tests/test_hybrid.py @@ -0,0 +1,101 @@ +import pytest +from pathlib import Path +import os +import json + +from PySAM.Hybrids import * +import PySAM.Battery as batt +import PySAM.Windpower as wind +import PySAM.Pvwattsv8 as pv +import PySAM.GenericSystem as gensys +import PySAM.Fuelcell as fuelcell +import PySAM.Singleowner as so +import PySAM.HostDeveloper as hd +import PySAM.Utilityrate5 as ur +from PySAM.Hybrids.HybridSystem import HybridSystem + + +SSCDIR = Path(os.getenv("SSCDIR")) +solar_resource_path = SSCDIR / "test/input_cases/general_data/phoenix_az_33.450495_-111.983688_psmv3_60_tmy.csv" +wind_resource_path = SSCDIR / "test/input_cases/general_data/AZ Eastern-Rolling Hills.srw" + +def test_PVWattsv8WindBatterySingleOwner(): + nfc1 = SSCDIR / "test/input_json/hybrids/PVWatts Wind Battery Hybrid_Single Owner.json" + + with open(nfc1, "r") as f: + defs = json.load(f)['input'] + + m = HybridSystem([pv, wind, batt], [so]) + m.new() + m.pvwatts.SolarResource.solar_resource_file = str(solar_resource_path) + m.wind.Resource.wind_resource_filename = str(wind_resource_path) + + unassigned = m.assign(defs) + assert len(unassigned) <= 3 + + m.execute() + + pvannualenergy = m.pvwatts.Outputs.annual_energy + windannualenergy = m.wind.Outputs.annual_energy + battannualenergy = m.battery.value("annual_energy") + npv = m.singleowner.Outputs.project_return_aftertax_npv + + assert pvannualenergy == pytest.approx(211907455, 1e-2) + assert windannualenergy == pytest.approx(366975552, 1e-2) + assert battannualenergy == pytest.approx(570565000, 1e-2) + assert npv == pytest.approx(-242777472, 1e-2) + + +def test_PVWattsv8WindBatteryHostDeveloper(): + nfc1 = SSCDIR / "test/input_json/hybrids/PVWatts Wind Battery Hybrid_Host Developer.json" + + with open(nfc1, "r") as f: + defs = json.load(f)['input'] + + m = HybridSystem([pv, wind, batt], [ur, hd]) + m.new() + m.pvwatts.SolarResource.solar_resource_file = str(solar_resource_path) + m.wind.Resource.wind_resource_filename = str(wind_resource_path) + + unassigned = m.assign(defs) + assert len(unassigned) <= 3 + + m.execute() + + pvannualenergy = m.pvwatts.Outputs.annual_energy + windannualenergy = m.wind.Outputs.annual_energy + battannualenergy = m.battery.value("annual_energy") + npv = m.host_developer.Outputs.project_return_aftertax_npv + + assert pvannualenergy == pytest.approx(938557, 1e-2) + assert windannualenergy == pytest.approx(187767, 1e-2) + assert npv == pytest.approx(-174953, 1e-2) + + +def test_GenericPVWattsWindFuelCellBatteryHybrid_SingleOwner(): + nfc1 = SSCDIR / "test/input_json/hybrids/Generic PVWatts Wind FuelCell Battery Hybrid_Single Owner.json" + + with open(nfc1, "r") as f: + defs = json.load(f)['input'] + + m = HybridSystem([gensys, pv, wind, fuelcell, batt], [so]) + m.new() + m.pvwatts.SolarResource.solar_resource_file = str(solar_resource_path) + m.wind.Resource.wind_resource_filename = str(wind_resource_path) + + unassigned = m.assign(defs) + assert len(unassigned) <= 3 + + m.execute() + + gensysannualenergy = m.gensys.Outputs.annual_energy + pvannualenergy = m.pvwatts.Outputs.annual_energy + windannualenergy = m.wind.Outputs.annual_energy + battannualenergy = m.battery.value("annual_energy") + npv = m.singleowner.Outputs.project_return_aftertax_npv + + assert gensysannualenergy == pytest.approx(756864000, 1e-2) + assert pvannualenergy == pytest.approx(211907456, 1e-2) + assert windannualenergy == pytest.approx(366975552, 1e-2) + assert battannualenergy == pytest.approx(1331720000, 1e-2) + assert npv == pytest.approx(-1748593536, 1e-2) diff --git a/tests/test_pysam_all.py b/tests/test_pysam_all.py index 198a6e36..8a408259 100644 --- a/tests/test_pysam_all.py +++ b/tests/test_pysam_all.py @@ -1,5 +1,6 @@ import os import sys +import pytest from pathlib import Path import glob import importlib @@ -38,7 +39,8 @@ def test_adjustment_factors(): adj.sf_timeindex = [0] adj.export() -def test_pyssc(): +@pytest.mark.parametrize("execution_number", range(150)) +def test_pyssc(execution_number): var = ssc.var_create() ssc.var_set_value(var, 0) assert int(ssc.var_get_number(var)) == 0 From 77c971bff9f2865febf901f44154a351b5a55963 Mon Sep 17 00:00:00 2001 From: Darice Date: Wed, 13 Mar 2024 14:02:24 -0600 Subject: [PATCH 02/22] update files --- Examples/BatteryStateful.ipynb | 26 +- Examples/BatteryWithCustomDispatch.py | 2 +- Examples/FetchResourceFileExample.py | 2 +- Examples/GenericSystemSingleOwnerExample.py | 2 +- Examples/LoadToolsExample.py | 2 +- .../WaveFileReader_example.ipynb | 8 +- Examples/NonAnnualSimulation.ipynb | 6 +- Examples/PySAMWorkshop.ipynb | 2 +- .../ResidentialPVBatteryWithCustomDispatch.py | 2 +- Examples/SAMsimPVWattsCommercialExample.py | 2 +- ...ing the NREL bifacial PV HSAT system.ipynb | 6908 +++++++++-------- Examples/UtilityRateForecastExample.py | 2 +- Examples/UtilityRatesExample.py | 2 +- .../Windpower Example/windpower-example.py | 2 +- RELEASE.md | 4 + build_unix.sh | 4 +- docs/version_changes/5.1.0.rst | 1156 +++ docs/versions.rst | 1 + files/Hybrids/BatteryHybrid.py | 6 + files/Hybrids/FuelCellHybrid.py | 3 + files/Hybrids/GenericSystemHybrid.py | 3 + files/Hybrids/HybridBase.py | 9 +- files/Hybrids/HybridSystem.py | 55 +- files/Hybrids/PVHybrid.py | 3 + files/Hybrids/PVWattsHybrid.py | 3 + files/Hybrids/WindHybrid.py | 3 + files/version.py | 2 +- modules/Hybrid.c | 2 +- 28 files changed, 4755 insertions(+), 3467 deletions(-) create mode 100644 docs/version_changes/5.1.0.rst diff --git a/Examples/BatteryStateful.ipynb b/Examples/BatteryStateful.ipynb index f17377c0..63b2c09e 100644 --- a/Examples/BatteryStateful.ipynb +++ b/Examples/BatteryStateful.ipynb @@ -2,14 +2,14 @@ "cells": [ { "cell_type": "code", - "execution_count": 6, + "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "5.0.0\n" + "5.1.0\n" ] } ], @@ -23,7 +23,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -88,22 +88,22 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[]" + "[]" ] }, - "execution_count": 8, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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6CKMjIxgbGwMF198MaampiI8ivbgd+zveMc7HNfBeeedZ3tNGo/9yiuvxIte9CIMDw9j8eLFuOCCC7B582bba4Jc41u3bsX555+PgYEBLF68GB/60IdQrVajPJSWEeTYX/GKVzi+93e/+92216Tx2L/2ta/hpJNOksXg1q5di1/84hfy+V79zgH/Y0/1d24y2sLVV19tFgoF81vf+pb50EMPmZdccok5NjZm7ty5M+6hhYZPfOIT5vHHH28+//zz8t/u3bvl8+9+97vNlStXmjfffLN59913m2eccYZ55plnxjji9nHDDTeYH/vYx8wf//jHJgDzuuuusz3/2c9+1hwdHTV/8pOfmPfff7/5R3/0R+ahhx5qzs7Oytecd9555sknn2zecccd5m9/+1vziCOOMN/ylrdEfCStw+/Y3/72t5vnnXee7TrYt2+f7TVpPPZzzz3X/Pa3v21u2rTJvO+++8zXvOY15qpVq8ypqSn5Gr9rvFqtmieccIK5bt0689577zVvuOEGc+HChebll18exyEFRpBjf/nLX25ecskltu99fHxcPp/WY/9//+//mT//+c/Nxx57zNy8ebP50Y9+1Mzn8+amTZtM0+zd79w0/Y89zd85k5k28eIXv9hcv369/L1Wq5nLly83r7zyyhhHFS4+8YlPmCeffLL2uQMHDpj5fN689tpr5WOPPPKICcDcsGFDRCPsDtQFvV6vm0uXLjU///nPy8cOHDhgFotF84c//KFpmqb58MMPmwDMu+66S77mF7/4hWkYhvncc89FNvZO4UZm/viP/9j1b3rl2Hft2mUCMG+77TbTNINd4zfccIOZyWTMHTt2yNd87WtfM0dGRsxSqRTtAXQA9dhNs7Gwve9973P9m145dtM0zXnz5pn//u//flB95wLi2E0z3d85h5naQLlcxsaNG7Fu3Tr5WCaTwbp167Bhw4YYRxY+Hn/8cSxfvhyHHXYYLrroImzduhUAsHHjRlQqFds5OOaYY7Bq1aqeOwdPPfUUduzYYTvW0dFRnH766fJYN2zYgLGxMZx22mnyNevWrUMmk8Gdd94Z+ZjDxq233orFixfj6KOPxnve8x7s3btXPtcrxz4+Pg4AmD9/PoBg1/iGDRtw4oknYsmSJfI15557LiYmJvDQQw9FOPrOoB67wPe//30sXLgQJ5xwAi6//HLMzMzI53rh2Gu1Gq6++mpMT09j7dq1B9V3rh67QFq/84Oi0WTY2LNnD2q1mu0LBYAlS5bg0UcfjWlU4eP000/Hd77zHRx99NF4/vnn8alPfQove9nLsGnTJuzYsQOFQgFjY2O2v1myZAl27NgRz4C7BHE8uu9bPLdjxw4sXrzY9nwul8P8+fNTfz7OO+88vOENb8Chhx6KJ554Ah/96Efx6le/Ghs2bEA2m+2JY6/X67jsssvwkpe8BCeccAIABLrGd+zYob0uxHNpgO7YAeCtb30rVq9ejeXLl+OBBx7Ahz/8YWzevBk//vGPAaT72B988EGsXbsWc3NzGBoawnXXXYfjjjsO9913X89/527HDqT7O2cyw3DFq1/9avnzSSedhNNPPx2rV6/Gf//3f6O/vz/GkTGixJvf/Gb584knnoiTTjoJhx9+OG699VacffbZMY4sPKxfvx6bNm3C7373u7iHEjncjv1d73qX/PnEE0/EsmXLcPbZZ+OJJ57A4YcfHvUwQ8XRRx+N++67D+Pj4/if//kfvP3tb8dtt90W97AigduxH3fccan+zjnM1AYWLlyIbDbrcLjv3LkTS5cujWlU3cfY2BiOOuoobNmyBUuXLkW5XMaBAwdsr+nFcyCOx+v7Xrp0KXbt2mV7vlqtYt++fT13Pg477DAsXLgQW7ZsAZD+Y7/00kvxs5/9DL/+9a+xYsUK+XiQa3zp0qXa60I8l3S4HbsOp59+OgDYvve0HnuhUMARRxyBU089FVdeeSVOPvlkfPnLXz4ovnO3Y9chTd85k5k2UCgUcOqpp+Lmm2+Wj9Xrddx888222GOvYWpqCk888QSWLVuGU089Ffl83nYONm/ejK1bt/bcOTj00EOxdOlS27FOTEzgzjvvlMe6du1aHDhwABs3bpSvueWWW1Cv1+WE0Ct49tlnsXfvXixbtgxAeo/dNE1ceumluO6663DLLbfg0EMPtT0f5Bpfu3YtHnzwQRuZu+mmmzAyMiKl+yTC79h1uO+++wDA9r2n8dh1qNfrKJVKPf2du0Ecuw6p+s5jtR+nGFdffbVZLBbN73znO+bDDz9svutd7zLHxsZsLu+044Mf/KB56623mk899ZT5+9//3ly3bp25cOFCc9euXaZpNlIYV61aZd5yyy3m3Xffba5du9Zcu3ZtzKNuD5OTk+a9995r3nvvvSYA84tf/KJ57733ms8884xpmo3U7LGxMfP66683H3jgAfOP//iPtanZp5xyinnnnXeav/vd78wjjzwy8enJpul97JOTk+bf/u3fmhs2bDCfeuop81e/+pX5whe+0DzyyCPNubk5+R5pPPb3vOc95ujoqHnrrbfaUlFnZmbka/yucZGqes4555j33Xef+ctf/tJctGhRIlJVveB37Fu2bDE//elPm3fffbf51FNPmddff7152GGHmWeddZZ8j7Qe+0c+8hHztttuM5966inzgQceMD/ykY+YhmGYN954o2mavfudm6b3saf9O2cy0wG++tWvmqtWrTILhYL54he/2LzjjjviHlKoeNOb3mQuW7bMLBQK5iGHHGK+6U1vMrds2SKfn52dNf/6r//anDdvnjkwMGC+/vWvN59//vkYR9w+fv3rX5sAHP/e/va3m6bZSM/++7//e3PJkiVmsVg0zz77bHPz5s2299i7d6/5lre8xRwaGjJHRkbMd77znebk5GQMR9MavI59ZmbGPOecc8xFixaZ+XzeXL16tXnJJZc4SHsaj113zADMb3/72/I1Qa7xp59+2nz1q19t9vf3mwsXLjQ/+MEPmpVKJeKjaQ1+x75161bzrLPOMufPn28Wi0XziCOOMD/0oQ/Zao6YZjqP/S/+4i/M1atXm4VCwVy0aJF59tlnSyJjmr37nZum97Gn/Ts3TNM0o9OBGAwGg8FgMMIFe2YYDAaDwWCkGkxmGAwGg8FgpBpMZhgMBoPBYKQaTGYYDAaDwWCkGkxmGAwGg8FgpBpMZhgMBoPBYKQaTGYYDAaDwWCkGkxmGAwGg8FgpBpMZhgMBoPBYKQaTGYYDAaDwWCkGkxmGAwGg8FgpBpMZhgMBoPBYKQa/z80/FegoYcRtgAAAABJRU5ErkJggg==", + "image/png": "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", "text/plain": [ "
" ] @@ -130,22 +130,22 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 9, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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MjLSmDlzZomrrZ86dcp46qmnjHr16hk1atQw2rdv77zi+8VqOpe3rgrucRRLSkoqZ5wCAHiFYUjFJ3zz3P41JIulXIe47bbb1LJlSy1dulQDBw4s8fjBgweVkJCg7t27a/To0QoKCtLgwYNLtBUXFysxMVEdOnTQF198oWrVqunFF19U9+7dtW3bNmcPTVpamoKDg7Vq1SpJcnu/NWvWKCoqSmvWrNHPP/+sXr16qVWrVho0aJCkMyMaGzZs0OzZs9WyZUtlZGQoJydHknTs2DHddtttGjhwoP7yl7/o5MmTGjNmjB566CGtXr3a7d/Vnj17tHz5cv373//W77//roceekjTpk3T5MmTS2zbsWNHzZo1S+PHj3ee1RwUFOR8zZMmTVLTpk116NAhJScnq2/fvlqxYoXLMcaOHavp06erUaNGCgsLU3JystavX6+PPvpIERERGj9+vDZv3uwy52n48OH68ccf9e6776pevXpatmyZunfvru3bt1+0popQrn6mU6dOqaioyKXtUpchBwB4SfEJaUo93zz3swckW81yH6ZZs2batm1bqY9FRkaqWrVqCgoKcg5XBQUFlWj75z//KYfDoTfffFOW/wau+fPnKzQ0VGvXrlW3bt0kSTVr1tSbb77pDC3u7hcWFqY5c+bIarWqWbNmuuuuu5SWlqZBgwZp9+7dWrJkiVatWqWEhARJUqNGjZyvYc6cOWrdurWmTJnibJs3b56io6O1e/duNWnSxK3fk8Ph0IIFC1SrVi1J0mOPPaa0tLRSw43NZlNISIgsFkuJYb7+/fs7f27UqJFmz56tdu3aKT8/3yVsTJw4Ubfffrsk6fjx43r77be1aNEide3a1fl7qlfvj7+9zMxMzZ8/X5mZmc720aNHa+XKlZo/f76mTJlywZoqgsfhpqCgQGPGjNGSJUtKPWvKbrd7pTAAgPkZhuEMFmW1detW/fzzz84v/rNOnTqlPXv2OO+3aNHCZZ6Nu/tdd911slqtzvtRUVHavn27JGnLli2yWq3q3LnzBWtbs2ZNqb0Ue/bscTvcxMbGutQZFRWlQ4cOubXvudLT0/XCCy9o69at+v33350TujMzM3Xttdc6t2vbtq3z519++UXFxcVq3769sy0kJMRlOZjt27fLbreXeD2FhYW66qqrPK6zvDwON88884zWrFmj1157TY899phS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", + "image/png": "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qRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqRBuAACAqbg93KSkpCgyMlI+Pj7q0KGDNm/efNXtZ8+erSZNmqhGjRoKDw/X6NGjde7cuetULQAAqOzcGm6WLFmixMREJSUlaevWrYqJiVF8fLyOHj1a6vbvvfeexo8fr6SkJO3evVvvvPOOlixZoj/96U/XuXIAAFBZuTXczJo1S4MHD1b//v116623at68eapZs6bmz59f6vZfffWV7rjjDj3xxBOKjIxUt27d1KdPn2v29gAAgBuH28JNYWGh0tPTFRcX91sxHh6Ki4vTpk2bSt2nU6dOSk9Pt4eZH3/8UatWrdJ99913xecpKChQbm5usRsAADCvau564uPHj8tqtSo4OLhYe3BwsPbs2VPqPk888YSOHz+u3/3udzIMQ+fPn9eQIUOueloqOTlZkyZNcmntAACg8nL7gGJnrFu3TtOmTdPf/vY3bd26VcuXL9enn36qKVOmXHGfCRMmKCcnx347dOjQdawYAABcb27rualbt648PT2VnZ1drD07O1shISGl7vPiiy/qqaee0qBBgyRJLVq0UH5+vv7f//t/+vOf/ywPj5JZzdvbW97e3q5/AQAAoFJyW8+Nl5eX2rZtq7S0NHubzWZTWlqaOnbsWOo+Z86cKRFgPD09JUmGYVRcsQAAoMpwW8+NJCUmJiohIUHt2rVTbGysZs+erfz8fPXv31+S1LdvX4WFhSk5OVmS1LNnT82aNUutW7dWhw4dtH//fr344ovq2bOnPeQAAIAbW5nCzalTp/Thhx/qwIEDev7551WnTh1t3bpVwcHBCgsLc/g4vXv31rFjxzRx4kRlZWWpVatWSk1NtQ8yzszMLNZT88ILL8hiseiFF17QL7/8onr16qlnz56aOnVqWV4GAAAwIYvh5PmcnTt3Ki4uTv7+/jp48KD27t2rqKgovfDCC8rMzNSiRYsqqlaXyM3Nlb+/v3JycuTn5+fucgAAgAOc+f52esxNYmKi+vXrpx9++EE+Pj729vvuu09ffPGF89UCAAC4kNPh5ttvv9XTTz9doj0sLExZWVkuKQoAAKCsnA433t7epc7yu2/fPtWrV88lRQEAAJSV0+GmV69emjx5soqKiiRJFotFmZmZGjdunB555BGXFwgAAOAMp8PNzJkzlZeXp6CgIJ09e1adO3dWdHS0ateuzVVLAADA7Zy+FNzf31+rV6/Wxo0btWPHDuXl5alNmzbFFsAEAABwF6cvBa/quBQcAICqp0IvBR8xYoTmzJlTon3u3LkaNWqUs4cDAABwKafDzbJly3THHXeUaO/UqZM+/PBDlxQFAABQVk6HmxMnTsjf379Eu5+fn44fP+6SogAAAMrK6XATHR2t1NTUEu3/+c9/FBUV5ZKiAAAAysrpq6USExM1fPhwHTt2THfffbckKS0tTTNnztTs2bNdXR8AAIBTnA43AwYMUEFBgaZOnaopU6ZIkiIjI/XGG2+ob9++Li8QAADAGeW6FPzYsWOqUaOGfH19XVlTheJScAAAqh5nvr+d7rm5FGtJAQCAysbpAcXZ2dl66qmnVL9+fVWrVk2enp7FbgAAAO7kdM9Nv379lJmZqRdffFGhoaGyWCwVURcAAECZOB1uNmzYoC+//FKtWrWqgHIAAADKx+nTUuHh4brBlqMCAABViNPhZvbs2Ro/frwOHjxYAeUAAACUj9OnpXr37q0zZ87olltuUc2aNVW9evVij588edJlxQEAADjL6XDDLMQAAKAyczrcJCQkVEQdAAAALuH0mBtJOnDggF544QX16dNHR48elXRh4czvv//epcUBAAA4y+lws379erVo0ULffPONli9frry8PEnSjh07lJSU5PICAQAAnOF0uBk/frxefvllrV69Wl5eXvb2u+++W19//bVLiwMAAHCW0+Fm165deuihh0q0BwUF6fjx4y4pCgAAoKycDjcBAQE6cuRIifZt27YpLCzMJUUBAACUldPh5vHHH9e4ceOUlZUli8Uim82mjRs3asyYMerbt29F1AgAAOAwp8PNtGnT1LRpU4WHhysvL0+33nqr7rrrLnXq1EkvvPBCRdQIAADgMIvhxEJRhmHo0KFDqlevno4fP65du3YpLy9PrVu3VqNGjSqyTpfJzc2Vv7+/cnJy5Ofn5+5yAACAA5z5/nZqEj/DMBQdHa3v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fn2dPn26/NUBAAA4yelw06VLFz399NPatm2bvW3btm165plndPfdd0uSdu3apYYNG7quSgAAAAc5HW7eeecd1alTR23btpW3t7e8vb3Vrl071alTx75kvK+vr2bOnOnyYgEAAK7FqTE3hmGosLBQK1euVGZmpn0J+CZNmqhJkyb27bp06eLaKgEAABzkdLiJjo7W999/XyLQAAAAVAZOnZby8PBQo0aNdOLEiYqqBwBwA7NYLFqxYoX95z179uj222+Xj4+PWrVqdcU2M1m4cKECAgLcXUaV5vSYm+nTp+v555/Xd999VxH1AABMpl+/frJYLLJYLKpevbqCg4N1zz33aP78+cUWtZQuXJF777332n9OSkpSrVq1tHfvXqWlpV2xzUx69+6tffv2lesYlTEgXc+anJ7npm/fvjpz5oxiYmLk5eVVYon3kydPuqw4AIA5dO/eXQsWLJDValV2drZSU1M1cuRIffjhh1q5cqWqVbvwdRQSElJsvwMHDuj+++9XRETEVducVVhYKC8vrzLvX5Fq1KhR4rvVXQzDkNVqtb8/VYazK3YuXLjwqrfKjlXBAVRFVXlV8ISEBOOBBx4o0Z6WlmZIMt566y17myTjo48+st+/9JaUlFRqm2EYRmZmpvGHP/zB8Pf3NwIDA41evXoZGRkZJWp4+eWXjdDQUCMyMtKp/V577TUjJCTEqFOnjjF06FCjsLDQvs25c+eMsWPHGjfffLPh5eVl3HLLLcbbb79tf3zXrl1G9+7djVq1ahlBQUHGH//4R+PYsWNX/H1dXP38oqSkJCMmJsZYtGiRERERYfj5+Rm9e/c2cnNzS93/4srmpf2eFi1aZLRt29bw9fU1goODjT59+hjZ2dkl9l21apXRpk0bo3r16sbatWuN3Nxc44knnjBq1qxphISEGLNmzSqx2vq5c+eM5557zqhfv75Rs2ZNIzY21r7i+9VqupSrVgV3OoolJCSUM04BAFzCMKSiM+557uo1JYulXIe4++67FRMTo+XLl2vQoEElHj9y5Iji4uLUvXt3jRkzRr6+vhoyZEiJtqKiIsXHx6tjx4768ssvVa1aNb388svq3r27du7cae+hSUtLk5+fn1avXi1JDu+3du1ahYaGau3atdq/f7969+6tVq1aafDgwZIunNHYtGmT5syZo5iYGGVkZOj48eOSpFOnTunuu+/WoEGD9Je//EVnz57VuHHj9Nhjj2nNmjUO/64OHDigFStW6N///rd+/fVXPfbYY5o+fbqmTp1aYttOnTpp9uzZmjhxov2qZl9fX/trnjJlipo0aaKjR48qMTFR/fr106pVq4odY/z48ZoxY4aioqIUGBioxMREbdy4UStXrlRwcLAmTpyorVu3FhvzNHz4cP33v//V+++/r/r16+ujjz5S9+7dtWvXrqvWVBHK1c907tw5FRYWFmu71jLkAAAXKTojTavvnuf+02HJq1a5D9O0aVPt3Lmz1MdCQkJUrVo1+fr62k9X+fr6lmj75z//KZvNprfffluW/wWuBQsWKCAgQOvWrVO3bt0kSbVq1dLbb79tDy2O7hcYGKi5c+fK09NTTZs21f3336+0tDQNHjxY+/bt09KlS7V69WrFxcVJkqKiouyvYe7cuWrdurWmTZtmb5s/f77Cw8O1b98+NW7c2KHfk81m08KFC1W7dm1J0lNPPaW0tLRSw42Xl5f8/f1lsVhKnOYbMGCA/X5UVJTmzJmj9u3bKy8vr1jYmDx5su655x5J0unTp/Xuu+/qvffeU9euXe2/p/r1f/vby8zM1IIFC5SZmWlvHzNmjFJTU7VgwQJNmzbtijVVBKfDTX5+vsaNG6elS5eWetWU1Wp1SWEAAPMzDMMeLMpqx44d2r9/v/2L/6Jz587pwIED9p9btGhRbJyNo/s1b95cnp6e9p9DQ0O1a9cuSdL27dvl6empzp07X7G2tWvXltpLceDAAYfDTWRkZLE6Q0NDdfToUYf2vVR6erpeeukl7dixQ7/++qt9QHdmZqZuvfVW+3bt2rWz3//xxx9VVFSk2NhYe5u/v3+x6WB27dolq9Va4vUUFBTopptucrrO8nI63IwdO1Zr167VG2+8oaeeekopKSn65Zdf9Pe//13Tp0+viBoBAKWpXvNCD4q7ntsFdu/eXe7levLy8tS2bVstXry4xGP16tWz369Vq3hPk6P7Va9evdhjFovFHgquNfA3Ly9PPXv21CuvvFLisdDQ0Kvue6mr1eCo/Px8xcfHKz4+XosXL1a9evWUmZmp+Pj4EmdhLv9dXUteXp48PT2Vnp5eLAhKFXv66UqcDjeffPKJFi1apN///vfq37+/7rzzTkVHRysiIkKLFy/Wk08+WRF1AgAuZ7G45NSQu6xZs0a7du3S6NGjy3WcNm3aaMmSJQoKCnJqaERZ97tUixYtZLPZtH79evtpqcufY9myZYqMjLyuVxx5eXmVOJOyZ88enThxQtOnT1d4eLgkacuWLdc8VlRUlKpXr65vv/1WDRo0kCTl5ORo3759uuuuuyRJrVu3ltVq1dGjR3XnnXc6XFNFcXqem5MnT9rPJ/r5+dkv/f7d736nL774wrXVAQBMoaCgQFlZWfrll1+0detWTZs2TQ888IB69Oihvn37luvYTz75pOrWrasHHnhAX375pTIyMrRu3TqNGDFCP//8s8v3u1RkZKQSEhI0YMAArVixwn6MpUuXSpKGDRumkydPqk+fPvr222914MABffbZZ+rfv3+FftFHRkYqLy9PaWlpOn78uM6cOaMGDRrIy8tLr7/+un788UetXLlSU6ZMueaxateurYSEBD3//PNau3atvv/+ew0cOFAeHh72U4qNGzfWk08+qb59+2r58uXKyMjQ5s2blZycrE8//fSKNVUUp8NNVFSUMjIyJF0YCHbxDfzkk08q3YRBAIDKITU1VaGhoYqMjFT37t21du1azZkzRx9//HGJ0xjOqlmzpr744gs1aNBADz/8sJo1a6aBAwfq3LlzV+2RKet+l3vjjTf06KOPaujQoWratKkGDx6s/Px8SVL9+vW1ceNGWa1WdevWTS1atNCoUaMUEBAgDw+nv4Id1qlTJw0ZMkS9e/dWvXr19Oqrr6pevXpauHChPvjgA916662aPn26ZsyY4dDxZs2apY4dO6pHjx6Ki4vTHXfcoWbNmsnHx8e+zYIFC9S3b18999xzatKkiR588MFivT2l1VRRLIZhGI5s6OnpqSNHjmjx4sXy9PTUiBEj9Pnnn6tnz54yDENFRUWaNWuWRo4cWWHFukJubq78/f2Vk5PDlV0Aqoxz584pIyNDDRs2LPaFArhDfn6+wsLCNHPmTA0cONBlx73a37kz398OnwC8mIEuPTcaFxenPXv2KD09XdHR0WrZsqUzrwEAAFQB27Zt0549exQbG6ucnBxNnjxZkvTAAw+4ubLSlXt0U0RERLmmwAYAAJXfjBkztHfvXnl5ealt27b68ssvVbduXXeXVSqnws3bb799zUu6RowYUa6CAABA5dK6dWulp6e7uwyHORVu5s2bd9WBXxaLhXADAADcyqlws2XLFgUFBVVULQCAa3Dw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", "text/plain": [ "
" ] @@ -180,7 +180,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -205,7 +205,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.17" + "version": "3.10.13" }, "vscode": { "interpreter": { diff --git a/Examples/BatteryWithCustomDispatch.py b/Examples/BatteryWithCustomDispatch.py index 6ef299a7..8ca04d06 100644 --- a/Examples/BatteryWithCustomDispatch.py +++ b/Examples/BatteryWithCustomDispatch.py @@ -4,7 +4,7 @@ Additional financial models, inputs, and outputs can be found at https://nrel-pysam.readthedocs.io/en/master/modules/Battery.html -Most recently tested against PySAM 5.0.0 +Most recently tested against PySAM 5.1.0 @author: brtietz """ diff --git a/Examples/FetchResourceFileExample.py b/Examples/FetchResourceFileExample.py index f83971fd..160a55de 100644 --- a/Examples/FetchResourceFileExample.py +++ b/Examples/FetchResourceFileExample.py @@ -10,7 +10,7 @@ To use the `FetchResourceFile` function, register an email address to receive a free API key at at https://developer.nrel.gov/signup/. -Most recently tested against PySAM 5.0.0 +Most recently tested against PySAM 5.1.0 @authors: skoeb, cpaulgilman ''' diff --git a/Examples/GenericSystemSingleOwnerExample.py b/Examples/GenericSystemSingleOwnerExample.py index ed5a01a2..1862e38e 100755 --- a/Examples/GenericSystemSingleOwnerExample.py +++ b/Examples/GenericSystemSingleOwnerExample.py @@ -3,7 +3,7 @@ """ Created on Wed Mar 4 13:47:58 2020 -Most recently tested against PySAM 5.0.0 +Most recently tested against PySAM 5.1.0 @author: frohro """ diff --git a/Examples/LoadToolsExample.py b/Examples/LoadToolsExample.py index 94de602e..0de7abb2 100644 --- a/Examples/LoadToolsExample.py +++ b/Examples/LoadToolsExample.py @@ -7,7 +7,7 @@ """ A usage example for LoadTools.get_monthly peaks with hourly annual data Requires PySAM 4.2.0 or greater -Recently tested with 5.0.0 +Recently tested with 5.1.0 """ if __name__ == "__main__": df = pd.read_csv(str(Path(__file__).parent / "sample_load.csv"), dtype=float) diff --git a/Examples/Marine energy examples/WaveFileReader_example.ipynb b/Examples/Marine energy examples/WaveFileReader_example.ipynb index 1b65654b..01afffb1 100644 --- a/Examples/Marine energy examples/WaveFileReader_example.ipynb +++ b/Examples/Marine energy examples/WaveFileReader_example.ipynb @@ -20,7 +20,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "5.0.0\n" + "5.1.0\n" ] } ], @@ -110,8 +110,8 @@ "output_type": "stream", "text": [ "112636010.70000158 kWh\n", - "(19734.6, 24942.599999999995, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 17707.2, 17707.2, 15075.3, 10983.3, 10983.3, 7793.4, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 14926.499999999998, 20645.999999999996, 26142.3, 24942.599999999995, 24942.599999999995, 19734.6, 15075.3, 15075.3, 10983.3, 10983.3, 10983.3, 7793.4, 7793.4, 7793.4, 7793.4, 7328.4, 10815.9, 11448.3, 11448.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 15075.3, 17707.2, 22366.5, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23714.999999999996, 23714.999999999996, 19269.6, 19269.6, 15251.999999999998, 15251.999999999998, 22366.5, 22366.5, 22366.5, 17707.2, 22366.5, 19269.6, 16191.299999999997, 19929.9, 16507.5, 16507.5, 19929.9, 23714.999999999996, 23714.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23584.8, 23584.8, 23584.8, 23584.8, 23584.8, 19902.0, 19902.0, 19929.9, 19929.9, 23714.999999999996, 23714.999999999996, 19269.6, 19269.6, 19269.6, 17707.2, 24942.599999999995, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 17707.2, 17707.2, 17707.2, 13531.5, 13531.5, 10983.3, 10983.3, 15744.900000000001, 24951.9, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24012.6, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 19902.0, 24012.6, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24012.6, 24012.6, 19929.9, 16191.299999999997, 19269.6, 15251.999999999998, 22366.5, 22366.5, 17707.2, 17707.2, 17707.2, 17707.2, 17707.2, 17707.2, 17707.2, 15251.999999999998, 16191.299999999997, 16191.299999999997, 19929.9, 19929.9, 16191.299999999997, 19269.6, 15251.999999999998, 15251.999999999998, 11643.599999999999, 13531.5, 13531.5, 9867.3, 9867.3, 10983.3, 19641.6, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23714.999999999996, 22366.5, 22366.5, 17707.2, 13531.5, 13531.5, 9867.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 11448.3, 14926.499999999998, 14926.499999999998, 20645.999999999996, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23714.999999999996, 23714.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 19269.6, 19269.6, 15251.999999999998, 15251.999999999998, 15251.999999999998, 11643.599999999999, 11643.599999999999, 11643.599999999999, 9867.3, 9867.3, 6733.200000000001, 7495.799999999998, 7495.799999999998, 4798.8, 6082.200000000001, 6082.200000000001, 10815.9, 10815.9, 11448.3, 11448.3, 11448.3, 10983.3, 10983.3, 13531.5, 15251.999999999998, 22366.5, 22366.5, 24942.599999999995, 19734.6, 19734.6, 15075.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 6733.200000000001, 6733.200000000001, 6733.200000000001, 6733.200000000001, 7793.4, 14926.499999999998, 19641.6, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 24942.599999999995, 19734.6, 19734.6, 17707.2, 17707.2, 17707.2, 17707.2, 15251.999999999998, 16191.299999999997, 16191.299999999997, 16191.299999999997, 19929.9, 16191.299999999997, 16191.299999999997, 15251.999999999998, 11643.599999999999, 11643.599999999999, 13531.5, 13531.5, 15075.3, 15075.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7793.4, 9021.0, 19641.6, 20645.999999999996, 19734.6, 17707.2, 13531.5, 13531.5, 15075.3, 20645.999999999996, 24942.599999999995, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23584.8, 24012.6, 24012.6, 19929.9, 16191.299999999997, 19269.6, 22366.5, 24942.599999999995, 26597.999999999996, 24942.599999999995, 22366.5, 17707.2, 17707.2, 17707.2, 22366.5, 17707.2, 17707.2, 13531.5, 13531.5, 9867.3, 9867.3, 10983.3, 7495.799999999998, 7793.4, 7495.799999999998, 6733.200000000001, 9867.3, 9867.3, 9867.3, 10983.3, 10983.3, 10983.3, 10983.3, 13531.5, 13531.5, 13531.5, 13531.5, 11643.599999999999, 11643.599999999999, 11643.599999999999, 11643.599999999999, 11643.599999999999, 8490.9, 9867.3, 9867.3, 6733.200000000001, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4157.099999999999, 6733.200000000001, 5793.9, 7114.5, 7114.5, 7114.5, 7114.5, 11643.599999999999, 11643.599999999999, 11643.599999999999, 13531.5, 15075.3, 15744.900000000001, 20645.999999999996, 26142.3, 19734.6, 15075.3, 10983.3, 10983.3, 9867.3, 9867.3, 11643.599999999999, 9765.0, 12796.8, 12796.8, 12796.8, 15251.999999999998, 15251.999999999998, 15251.999999999998, 13531.5, 13531.5, 15075.3, 15075.3, 15075.3, 15075.3, 15075.3, 15075.3, 15075.3, 14926.499999999998, 24951.9, 26142.3, 26142.3, 20645.999999999996, 19734.6, 19734.6, 15075.3, 15075.3, 13531.5, 13531.5, 13531.5, 15251.999999999998, 16191.299999999997, 13401.299999999997, 16191.299999999997, 19269.6, 19269.6, 17707.2, 17707.2, 13531.5, 10983.3, 10983.3, 11448.3, 10815.9, 15744.900000000001, 20645.999999999996, 24942.599999999995, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24012.6, 19902.0, 19902.0, 19436.999999999996, 19436.999999999996, 19902.0, 19902.0, 19929.9, 19269.6, 22366.5, 22366.5, 22366.5, 22366.5, 23714.999999999996, 23714.999999999996, 19269.6, 17707.2, 13531.5, 13531.5, 9867.3, 9867.3, 9867.3, 6733.200000000001, 6733.200000000001, 6733.200000000001, 10983.3, 17707.2, 16191.299999999997, 23714.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 15251.999999999998, 11643.599999999999, 11643.599999999999, 8490.9, 8490.9, 9867.3, 6733.200000000001, 6733.200000000001, 5793.9, 4854.6, 4826.7, 8704.8, 11020.5, 13401.299999999997, 13401.299999999997, 12796.8, 12796.8, 22366.5, 26597.999999999996, 26597.999999999996, 24942.599999999995, 22366.5, 17707.2, 13531.5, 13531.5, 9867.3, 9867.3, 10983.3, 20645.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24012.6, 19929.9, 23714.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23584.8, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23714.999999999996, 22366.5, 17707.2, 19734.6, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 19269.6, 16191.299999999997, 16507.5, 16507.5, 16507.5, 24012.6, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 17707.2, 15075.3, 10983.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 7793.4, 7793.4, 7495.799999999998, 7495.799999999998, 10983.3, 10983.3, 10983.3, 11448.3, 10983.3, 10983.3, 11448.3, 11448.3, 19641.6, 26142.3, 24942.599999999995, 19734.6, 19734.6, 19734.6, 15744.900000000001, 15744.900000000001, 15744.900000000001, 15744.900000000001, 15744.900000000001, 15075.3, 15075.3, 10983.3, 9867.3, 9867.3, 9867.3, 6733.200000000001, 6733.200000000001, 5793.9, 5793.9, 4854.6, 4854.6, 3998.9999999999995, 3998.9999999999995, 5877.599999999999, 5877.599999999999, 8072.399999999999, 9765.0, 15251.999999999998, 17707.2, 24942.599999999995, 17707.2, 13531.5, 15075.3, 19734.6, 22366.5, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 20645.999999999996, 20645.999999999996, 15744.900000000001, 15744.900000000001, 11448.3, 11448.3, 11448.3, 11448.3, 11448.3, 11448.3, 11448.3, 15744.900000000001, 20645.999999999996, 24942.599999999995, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23584.8, 23584.8, 23584.8, 19902.0, 19902.0, 16507.5, 19929.9, 16191.299999999997, 16191.299999999997, 16191.299999999997, 12796.8, 15251.999999999998, 17707.2, 19734.6, 19734.6, 15075.3, 13531.5, 20645.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24012.6, 23714.999999999996, 26597.999999999996, 26597.999999999996, 23714.999999999996, 23714.999999999996, 26597.999999999996, 26597.999999999996, 24012.6, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 19734.6, 19734.6, 19734.6, 13531.5, 13531.5, 13531.5, 13531.5, 13531.5, 13531.5, 15075.3, 15075.3, 13531.5, 13531.5, 19734.6, 19734.6, 26142.3, 26142.3, 24942.599999999995, 24942.599999999995, 19734.6, 19734.6, 15075.3, 15075.3, 19734.6, 19734.6, 17707.2, 17707.2, 17707.2, 17707.2, 13531.5, 13531.5, 9867.3, 9867.3, 6733.200000000001, 6733.200000000001, 6733.200000000001, 6733.200000000001, 9867.3, 15075.3, 19734.6, 17707.2, 17707.2, 19734.6, 19734.6, 15075.3, 10983.3, 10983.3, 11448.3, 11448.3, 11448.3, 11448.3, 11448.3, 11448.3, 10815.9, 10815.9, 11448.3, 11448.3, 11448.3, 10983.3, 11448.3, 10983.3, 10983.3, 10983.3, 10983.3, 9867.3, 6733.200000000001, 6733.200000000001, 6733.200000000001, 5793.9, 5793.9, 5793.9, 5793.9, 3571.2, 3571.2, 2994.6000000000004, 4854.6, 4854.6, 4854.6, 4854.6, 4854.6, 4854.6, 4854.6, 4854.6, 4854.6, 4854.6, 4854.6, 2994.6000000000004, 2994.6000000000004, 5793.9, 6733.200000000001, 6733.200000000001, 5793.9, 5793.9, 6733.200000000001, 6733.200000000001, 6733.200000000001, 7495.799999999998, 7495.799999999998, 7793.4, 7793.4, 10815.9, 14926.499999999998, 15744.900000000001, 15744.900000000001, 15075.3, 15075.3, 10983.3, 13531.5, 13531.5, 13531.5, 11643.599999999999, 11643.599999999999, 11643.599999999999, 9765.0, 12796.8, 10583.4, 13401.299999999997, 16191.299999999997, 12796.8, 12796.8, 15251.999999999998, 15251.999999999998, 11643.599999999999, 11643.599999999999, 8490.9, 9867.3, 9867.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 6733.200000000001, 5793.9, 4854.6, 3998.9999999999995, 5877.599999999999, 5877.599999999999, 7114.5, 8490.9, 13531.5, 15075.3, 15075.3, 19734.6, 24942.599999999995, 26597.999999999996, 26597.999999999996, 23714.999999999996, 23714.999999999996, 19269.6, 15251.999999999998, 17707.2, 13531.5, 10983.3, 10983.3, 11448.3, 10815.9, 10815.9, 14926.499999999998, 20645.999999999996, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 24942.599999999995, 19734.6, 19734.6, 19734.6, 19734.6, 19734.6, 19734.6, 17707.2, 19734.6, 17707.2, 17707.2, 17707.2, 17707.2, 17707.2, 22366.5, 22366.5, 22366.5, 22366.5, 17707.2, 17707.2, 19734.6, 15075.3, 15075.3, 15075.3, 13531.5, 9867.3, 9867.3, 9867.3, 6733.200000000001, 6733.200000000001, 7793.4, 7793.4, 7793.4, 10815.9, 10815.9, 11448.3, 11448.3, 11448.3, 11448.3, 11448.3, 11448.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7793.4, 7328.4, 10815.9, 10815.9, 14926.499999999998, 14926.499999999998, 14926.499999999998, 14926.499999999998, 14926.499999999998, 14926.499999999998, 10815.9, 11448.3, 11448.3, 11448.3, 11448.3, 7793.4, 7793.4, 7793.4, 7793.4, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 2408.7, 2408.7, 2166.9, 2166.9, 2166.9, 1859.9999999999998, 1859.9999999999998, 2166.9, 2408.7, 4798.8, 4798.8, 4798.8, 4622.099999999999, 4798.8, 4798.8, 4798.8, 4491.9, 4491.9, 4491.9, 2325.0, 2325.0, 2492.4, 2325.0, 2325.0, 2325.0, 2492.4, 2492.4, 2492.4, 2492.4, 2492.4, 2325.0, 3710.7, 6082.200000000001, 6082.200000000001, 10815.9, 11448.3, 15744.900000000001, 11448.3, 11448.3, 7328.4, 7328.4, 7328.4, 4491.9, 4491.9, 4491.9, 4491.9, 2325.0, 2325.0, 2325.0, 2325.0, 2325.0, 4798.8, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 2166.9, 2166.9, 2166.9, 2166.9, 2166.9, 2166.9, 2166.9, 2166.9, 2408.7, 2408.7, 2408.7, 2408.7, 4798.8, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4798.8, 4798.8, 4491.9, 4798.8, 4798.8, 4798.8, 4491.9, 4491.9, 4491.9, 4491.9, 6082.200000000001, 7328.4, 7328.4, 7328.4, 7328.4, 7793.4, 7793.4, 7495.799999999998, 7495.799999999998, 14926.499999999998, 20645.999999999996, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26142.3, 26142.3, 20645.999999999996, 15744.900000000001, 15744.900000000001, 15744.900000000001, 11448.3, 11448.3, 11448.3, 15744.900000000001, 11448.3, 15744.900000000001, 15744.900000000001, 20645.999999999996, 15744.900000000001, 15744.900000000001, 11448.3, 11448.3, 11448.3, 11448.3, 7793.4, 7793.4, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 9867.3, 15251.999999999998, 15251.999999999998, 15251.999999999998, 17707.2, 13531.5, 13531.5, 15075.3, 10983.3, 10983.3, 10983.3, 9867.3, 9867.3, 9867.3, 9867.3, 9867.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4157.099999999999, 4157.099999999999, 4622.099999999999, 4622.099999999999, 2408.7, 2492.4, 2492.4, 2492.4, 2408.7, 2408.7, 2492.4, 2492.4, 2325.0, 3710.7, 6082.200000000001, 7328.4, 10815.9, 11448.3, 11448.3, 11448.3, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 7495.799999999998, 4622.099999999999, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7793.4, 7328.4, 7793.4, 7793.4, 7793.4, 7328.4, 7328.4, 10815.9, 14926.499999999998, 19641.6, 15744.900000000001, 15744.900000000001, 15744.900000000001, 15744.900000000001, 15744.900000000001, 15075.3, 15075.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 9867.3, 9867.3, 9867.3, 9867.3, 9867.3, 9867.3, 9867.3, 10983.3, 10983.3, 7495.799999999998, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7793.4, 7793.4, 7793.4, 4798.8, 4798.8, 4491.9, 7328.4, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 7328.4, 7328.4, 4798.8, 4798.8, 4798.8, 4798.8, 2408.7, 2408.7, 2408.7, 2166.9, 2166.9, 2408.7, 2325.0, 3710.7, 4491.9, 7328.4, 7793.4, 11448.3, 11448.3, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4491.9, 4491.9, 4491.9, 2325.0, 2325.0, 2492.4, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4622.099999999999, 6733.200000000001, 9867.3, 9867.3, 13531.5, 13531.5, 13531.5, 9867.3, 9867.3, 9867.3, 9867.3, 9867.3, 9867.3, 6733.200000000001, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7793.4, 7793.4, 7793.4, 7793.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 11448.3, 11448.3, 11448.3, 11448.3, 10983.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4798.8, 4798.8, 4798.8, 4798.8, 4491.9, 4491.9, 4491.9, 4798.8, 4798.8, 4798.8, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 2408.7, 2408.7, 2492.4, 2492.4, 2492.4, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 2492.4, 2492.4, 2408.7, 2408.7, 2166.9, 4157.099999999999, 6733.200000000001, 9867.3, 10983.3, 10983.3, 10983.3, 10983.3, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 2408.7, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 2166.9, 2166.9, 1859.9999999999998, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 7793.4, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 2408.7, 2408.7, 2492.4, 2492.4, 2492.4, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4491.9, 4491.9, 4491.9, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4491.9, 4798.8, 4798.8, 4798.8, 4798.8, 4491.9, 4491.9, 4798.8, 4798.8, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7793.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 7328.4, 7328.4, 6082.200000000001, 6082.200000000001, 7328.4, 6082.200000000001, 6082.200000000001, 3710.7, 3710.7, 3710.7, 3710.7, 3710.7, 3710.7, 3710.7, 3710.7, 3710.7, 3710.7, 3710.7, 1906.4999999999998, 1906.4999999999998, 2325.0, 2325.0, 1906.4999999999998, 1906.4999999999998, 3710.7, 4491.9, 4491.9, 4798.8, 4798.8, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 10983.3, 10983.3, 9867.3, 9867.3, 9867.3, 9867.3, 10983.3, 10983.3, 10983.3, 10983.3, 11448.3, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4491.9, 4491.9, 4491.9, 4491.9, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 2492.4, 2492.4, 4798.8, 4491.9, 4491.9, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 7793.4, 7793.4, 7793.4, 7793.4, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7793.4, 4798.8, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 3710.7, 3710.7, 3710.7, 3710.7, 3710.7, 6082.200000000001, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 10815.9, 7328.4, 7328.4, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 2325.0, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 10815.9, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4798.8, 4798.8, 4622.099999999999, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4491.9, 4491.9, 4491.9, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 7328.4, 4491.9, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4798.8, 4798.8, 4622.099999999999, 4622.099999999999, 2408.7, 2408.7, 2408.7, 2408.7, 4622.099999999999, 4798.8, 4798.8, 4798.8, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 2408.7, 4798.8, 4798.8, 4491.9, 4491.9, 4491.9, 4798.8, 4798.8, 4798.8, 4491.9, 4491.9, 4491.9, 3710.7, 3710.7, 3710.7, 6082.200000000001, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7793.4, 7793.4, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4798.8, 4491.9, 4491.9, 4798.8, 4798.8, 4798.8, 2492.4, 2408.7, 2408.7, 2408.7, 2408.7, 2166.9, 2166.9, 2166.9, 2166.9, 2166.9, 2166.9, 2166.9, 2166.9, 2166.9, 2166.9, 2492.4, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4798.8, 4798.8, 4491.9, 4491.9, 4491.9, 4491.9, 4798.8, 4798.8, 4622.099999999999, 4622.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 3571.2, 3571.2, 4157.099999999999, 4157.099999999999, 4157.099999999999, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 2994.6000000000004, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 1859.9999999999998, 1859.9999999999998, 1859.9999999999998, 1859.9999999999998, 2166.9, 3571.2, 3571.2, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 3571.2, 3571.2, 1859.9999999999998, 2166.9, 2166.9, 2166.9, 4157.099999999999, 4622.099999999999, 4622.099999999999, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4157.099999999999, 4157.099999999999, 2408.7, 4622.099999999999, 4798.8, 4491.9, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7793.4, 7793.4, 4798.8, 4491.9, 7328.4, 7328.4, 7328.4, 7328.4, 10815.9, 10815.9, 10815.9, 11448.3, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 7328.4, 10815.9, 10815.9, 11448.3, 11448.3, 11448.3, 11448.3, 11448.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4798.8, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 3710.7, 3710.7, 4491.9, 2325.0, 3710.7, 2325.0, 4491.9, 4491.9, 7328.4, 7793.4, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7793.4, 7793.4, 7793.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4491.9, 4491.9, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 2492.4, 2492.4, 2492.4, 2492.4, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 2408.7, 2408.7, 2408.7, 2408.7, 2408.7, 2166.9, 2408.7, 2408.7, 4798.8, 4798.8, 4798.8, 4798.8, 7328.4, 7328.4, 10815.9, 14926.499999999998, 19641.6, 15744.900000000001, 11448.3, 11448.3, 7793.4, 7793.4, 7793.4, 7793.4, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4157.099999999999, 4157.099999999999, 4622.099999999999, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 3571.2, 4157.099999999999, 4622.099999999999, 4622.099999999999, 7793.4, 11448.3, 11448.3, 7793.4, 7793.4, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 2408.7, 2408.7, 2408.7, 2408.7, 2408.7, 2408.7, 2408.7, 2166.9, 2166.9, 2166.9, 2408.7, 2492.4, 4491.9, 6082.200000000001, 6082.200000000001, 7328.4, 4491.9, 7328.4, 7793.4, 13531.5, 19269.6, 19269.6, 15251.999999999998, 17707.2, 19734.6, 20645.999999999996, 20645.999999999996, 20645.999999999996, 26142.3, 24942.599999999995, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23714.999999999996, 23714.999999999996, 19929.9, 19929.9, 16191.299999999997, 16191.299999999997, 16191.299999999997, 15251.999999999998, 15251.999999999998, 17707.2, 13531.5, 15075.3, 15744.900000000001, 20645.999999999996, 19734.6, 17707.2, 15251.999999999998, 13401.299999999997, 16507.5, 16507.5, 16191.299999999997, 12796.8, 9765.0, 11643.599999999999, 11643.599999999999, 8490.9, 8490.9, 8490.9, 5793.9, 4854.6, 4854.6, 4854.6, 5877.599999999999, 5877.599999999999, 9867.3, 8490.9, 8072.399999999999, 5877.599999999999, 5877.599999999999, 5877.599999999999, 6630.9, 6630.9, 6630.9, 8072.399999999999, 5877.599999999999, 5877.599999999999, 5877.599999999999, 3998.9999999999995, 3998.9999999999995, 4854.6, 4854.6, 4854.6, 5793.9, 8490.9, 8490.9, 9765.0, 10583.4, 10583.4, 10583.4, 12796.8, 9765.0, 9765.0, 8490.9, 8490.9, 8490.9, 8490.9, 15075.3, 15075.3, 15075.3, 15075.3, 15075.3, 10983.3, 10983.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4157.099999999999, 6733.200000000001, 6733.200000000001, 6733.200000000001, 6733.200000000001, 6733.200000000001, 6733.200000000001, 6733.200000000001, 5793.9, 5793.9, 5793.9, 6733.200000000001, 6733.200000000001, 6733.200000000001, 7495.799999999998, 7793.4, 11448.3, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 10815.9, 19641.6, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 24942.599999999995, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 22366.5, 17707.2, 19734.6, 15075.3, 15075.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 13531.5, 9867.3, 9867.3, 9867.3, 9867.3, 9867.3, 6733.200000000001, 6733.200000000001, 9867.3, 11643.599999999999, 11643.599999999999, 8490.9, 8490.9, 9867.3, 10983.3, 10983.3, 15075.3, 15075.3, 15075.3, 15075.3, 15075.3, 10983.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 7495.799999999998, 6733.200000000001, 9867.3, 11643.599999999999, 11643.599999999999, 11643.599999999999, 9867.3, 9867.3, 9867.3, 9867.3, 9867.3, 8490.9, 8490.9, 7114.5, 7114.5, 9765.0, 8072.399999999999, 8072.399999999999, 7114.5, 7114.5, 7114.5, 8490.9, 9867.3, 10983.3, 15744.900000000001, 15744.900000000001, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 19734.6, 15744.900000000001, 19641.6, 26597.999999999996, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 19734.6, 15075.3, 15075.3, 10983.3, 10983.3, 11448.3, 14926.499999999998, 19641.6, 26597.999999999996, 26597.999999999996, 26597.999999999996, 19734.6, 19734.6, 19734.6, 17707.2, 19269.6, 19269.6, 17707.2, 13531.5, 15075.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7793.4, 7793.4, 7328.4, 7793.4, 7328.4, 7328.4, 10815.9, 15744.900000000001, 15744.900000000001, 15075.3, 15075.3, 10983.3, 10983.3, 10983.3, 10983.3, 15744.900000000001, 24951.9, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23584.8, 23157.0, 26597.999999999996, 26030.699999999997, 26030.699999999997, 26597.999999999996, 24700.8, 22710.599999999995, 19436.999999999996, 16395.9, 19902.0, 19929.9, 16191.299999999997, 12796.8, 15251.999999999998, 11643.599999999999, 13531.5, 13531.5, 15075.3, 19734.6, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 17707.2, 17707.2, 17707.2, 15251.999999999998, 15251.999999999998, 15251.999999999998, 15251.999999999998, 11643.599999999999, 11643.599999999999, 11643.599999999999, 9867.3, 9867.3, 11448.3, 14926.499999999998, 26142.3, 19734.6, 15075.3, 15744.900000000001, 15744.900000000001, 15744.900000000001, 15744.900000000001, 19734.6, 19734.6, 19734.6, 17707.2, 17707.2, 17707.2, 15251.999999999998, 15251.999999999998, 17707.2, 17707.2, 17707.2, 13531.5, 13531.5, 13531.5, 20645.999999999996, 26142.3, 26142.3, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23584.8, 23584.8, 16507.5, 16191.299999999997, 16191.299999999997, 12796.8, 11643.599999999999, 11643.599999999999, 9867.3, 15744.900000000001, 14926.499999999998, 15744.900000000001, 15744.900000000001, 15075.3, 15075.3, 13531.5, 12796.8, 13401.299999999997, 13401.299999999997, 13401.299999999997, 13401.299999999997, 12796.8, 15251.999999999998, 13531.5, 19734.6, 19734.6, 19734.6, 17707.2, 17707.2, 17707.2, 17707.2, 15075.3, 15075.3, 15075.3, 15075.3, 15075.3, 15075.3, 15075.3, 15075.3, 15075.3, 10983.3, 10983.3, 15075.3, 15075.3, 15744.900000000001, 20645.999999999996, 20645.999999999996, 26142.3, 24942.599999999995, 24942.599999999995, 22366.5, 22366.5, 17707.2, 17707.2, 13531.5, 15075.3, 15744.900000000001, 20645.999999999996, 20645.999999999996, 19734.6, 24942.599999999995, 24942.599999999995, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 20645.999999999996, 15744.900000000001, 15744.900000000001, 14926.499999999998, 19641.6, 20645.999999999996, 20645.999999999996, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 26142.3, 20645.999999999996, 20645.999999999996, 20645.999999999996, 24951.9, 26597.999999999996, 26142.3, 20645.999999999996, 14926.499999999998, 10815.9, 10815.9, 14926.499999999998, 19641.6, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 20645.999999999996, 15744.900000000001, 11448.3, 10815.9, 10815.9, 7328.4, 4491.9, 3710.7, 6082.200000000001, 6082.200000000001, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 2325.0, 2325.0, 3710.7, 3710.7, 9021.0, 14926.499999999998, 14926.499999999998, 15744.900000000001, 15744.900000000001, 20645.999999999996, 26142.3, 24942.599999999995, 24942.599999999995, 22366.5, 22366.5, 17707.2, 17707.2, 17707.2, 17707.2, 17707.2, 17707.2, 24942.599999999995, 19734.6, 19734.6, 13531.5, 15075.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7793.4, 7328.4, 9021.0, 9021.0, 10815.9, 19641.6, 26142.3, 26597.999999999996, 26597.999999999996, 24942.599999999995, 24942.599999999995, 24942.599999999995, 24942.599999999995, 19734.6, 19734.6, 17707.2, 17707.2, 17707.2, 17707.2, 13531.5, 17707.2, 15251.999999999998, 15251.999999999998, 11643.599999999999, 11643.599999999999, 13531.5, 9867.3, 9867.3, 9867.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7793.4, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 9867.3, 13531.5, 13531.5, 15075.3, 15744.900000000001, 15744.900000000001, 11448.3, 10815.9, 10815.9, 10815.9, 10815.9, 19641.6, 26142.3, 20645.999999999996, 15744.900000000001, 15744.900000000001, 11448.3, 10815.9, 10815.9, 14926.499999999998, 14926.499999999998, 15744.900000000001, 15075.3, 13531.5, 17707.2, 17707.2, 17707.2, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 24942.599999999995, 19734.6, 26597.999999999996, 26597.999999999996, 24942.599999999995, 19734.6, 19734.6, 15075.3, 15744.900000000001, 11448.3, 11448.3, 11448.3, 11448.3, 7793.4, 7328.4, 10815.9, 14926.499999999998, 19641.6, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 24942.599999999995, 19734.6, 19734.6, 15075.3, 15075.3, 15075.3, 10983.3, 10983.3, 15744.900000000001, 15744.900000000001, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 24942.599999999995, 19734.6, 19734.6, 19734.6, 15075.3, 15075.3, 10983.3, 11448.3, 11448.3, 11448.3, 11448.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 9867.3, 9867.3, 9867.3, 11448.3, 15744.900000000001, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26142.3, 20645.999999999996, 15744.900000000001, 15744.900000000001, 14926.499999999998, 15744.900000000001, 14926.499999999998, 15744.900000000001, 14926.499999999998, 11448.3, 20645.999999999996, 26597.999999999996, 24942.599999999995, 19734.6, 20645.999999999996, 15744.900000000001, 14926.499999999998, 14926.499999999998, 10815.9, 7328.4, 7793.4, 7793.4, 7793.4, 7793.4, 10815.9, 10815.9, 7328.4, 7328.4, 7328.4, 10815.9, 14926.499999999998, 24951.9, 20645.999999999996, 20645.999999999996, 20645.999999999996, 26142.3, 19734.6, 19734.6, 26597.999999999996, 26597.999999999996, 24942.599999999995, 24942.599999999995, 24942.599999999995, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 22366.5, 17707.2, 17707.2, 17707.2, 17707.2, 17707.2, 19734.6, 19734.6, 20645.999999999996, 20645.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 19734.6, 20645.999999999996, 20645.999999999996, 26142.3, 26142.3, 20645.999999999996, 15744.900000000001, 15744.900000000001, 15744.900000000001, 11448.3, 11448.3, 11448.3, 11448.3, 10815.9, 14926.499999999998, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 24942.599999999995, 19734.6, 20645.999999999996, 20645.999999999996, 15744.900000000001, 15075.3, 15075.3, 15075.3, 13531.5, 13531.5, 11643.599999999999, 9867.3, 10983.3, 15744.900000000001, 15744.900000000001)\n", - "2920\n" + "(19734.6, 24942.599999999995, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 17707.2, 17707.2, 15075.3, 10983.3, 10983.3, 7793.4, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 14926.499999999998, 20645.999999999996, 26142.3, 24942.599999999995, 24942.599999999995, 19734.6, 15075.3, 15075.3, 10983.3, 10983.3, 10983.3, 7793.4, 7793.4, 7793.4, 7793.4, 7328.4, 10815.9, 11448.3, 11448.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 15075.3, 17707.2, 22366.5, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23714.999999999996, 23714.999999999996, 19269.6, 19269.6, 15251.999999999998, 15251.999999999998, 22366.5, 22366.5, 22366.5, 17707.2, 22366.5, 19269.6, 16191.299999999997, 19929.9, 16507.5, 16507.5, 19929.9, 23714.999999999996, 23714.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23584.8, 23584.8, 23584.8, 23584.8, 23584.8, 19902.0, 19902.0, 19929.9, 19929.9, 23714.999999999996, 23714.999999999996, 19269.6, 19269.6, 19269.6, 17707.2, 24942.599999999995, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 17707.2, 17707.2, 17707.2, 13531.5, 13531.5, 10983.3, 10983.3, 15744.900000000001, 24951.9, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24012.6, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 19902.0, 24012.6, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24012.6, 24012.6, 19929.9, 16191.299999999997, 19269.6, 15251.999999999998, 22366.5, 22366.5, 17707.2, 17707.2, 17707.2, 17707.2, 17707.2, 17707.2, 17707.2, 15251.999999999998, 16191.299999999997, 16191.299999999997, 19929.9, 19929.9, 16191.299999999997, 19269.6, 15251.999999999998, 15251.999999999998, 11643.599999999999, 13531.5, 13531.5, 9867.3, 9867.3, 10983.3, 19641.6, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23714.999999999996, 22366.5, 22366.5, 17707.2, 13531.5, 13531.5, 9867.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 11448.3, 14926.499999999998, 14926.499999999998, 20645.999999999996, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23714.999999999996, 23714.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 19269.6, 19269.6, 15251.999999999998, 15251.999999999998, 15251.999999999998, 11643.599999999999, 11643.599999999999, 11643.599999999999, 9867.3, 9867.3, 6733.200000000001, 7495.799999999998, 7495.799999999998, 4798.8, 6082.200000000001, 6082.200000000001, 10815.9, 10815.9, 11448.3, 11448.3, 11448.3, 10983.3, 10983.3, 13531.5, 15251.999999999998, 22366.5, 22366.5, 24942.599999999995, 19734.6, 19734.6, 15075.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 6733.200000000001, 6733.200000000001, 6733.200000000001, 6733.200000000001, 7793.4, 14926.499999999998, 19641.6, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 24942.599999999995, 19734.6, 19734.6, 17707.2, 17707.2, 17707.2, 17707.2, 15251.999999999998, 16191.299999999997, 16191.299999999997, 16191.299999999997, 19929.9, 16191.299999999997, 16191.299999999997, 15251.999999999998, 11643.599999999999, 11643.599999999999, 13531.5, 13531.5, 15075.3, 15075.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7793.4, 9021.0, 19641.6, 20645.999999999996, 19734.6, 17707.2, 13531.5, 13531.5, 15075.3, 20645.999999999996, 24942.599999999995, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23584.8, 24012.6, 24012.6, 19929.9, 16191.299999999997, 19269.6, 22366.5, 24942.599999999995, 26597.999999999996, 24942.599999999995, 22366.5, 17707.2, 17707.2, 17707.2, 22366.5, 17707.2, 17707.2, 13531.5, 13531.5, 9867.3, 9867.3, 10983.3, 7495.799999999998, 7793.4, 7495.799999999998, 6733.200000000001, 9867.3, 9867.3, 9867.3, 10983.3, 10983.3, 10983.3, 10983.3, 13531.5, 13531.5, 13531.5, 13531.5, 11643.599999999999, 11643.599999999999, 11643.599999999999, 11643.599999999999, 11643.599999999999, 8490.9, 9867.3, 9867.3, 6733.200000000001, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4157.099999999999, 6733.200000000001, 5793.9, 7114.5, 7114.5, 7114.5, 7114.5, 11643.599999999999, 11643.599999999999, 11643.599999999999, 13531.5, 15075.3, 15744.900000000001, 20645.999999999996, 26142.3, 19734.6, 15075.3, 10983.3, 10983.3, 9867.3, 9867.3, 11643.599999999999, 9765.0, 12796.8, 12796.8, 12796.8, 15251.999999999998, 15251.999999999998, 15251.999999999998, 13531.5, 13531.5, 15075.3, 15075.3, 15075.3, 15075.3, 15075.3, 15075.3, 15075.3, 14926.499999999998, 24951.9, 26142.3, 26142.3, 20645.999999999996, 19734.6, 19734.6, 15075.3, 15075.3, 13531.5, 13531.5, 13531.5, 15251.999999999998, 16191.299999999997, 13401.299999999997, 16191.299999999997, 19269.6, 19269.6, 17707.2, 17707.2, 13531.5, 10983.3, 10983.3, 11448.3, 10815.9, 15744.900000000001, 20645.999999999996, 24942.599999999995, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24012.6, 19902.0, 19902.0, 19436.999999999996, 19436.999999999996, 19902.0, 19902.0, 19929.9, 19269.6, 22366.5, 22366.5, 22366.5, 22366.5, 23714.999999999996, 23714.999999999996, 19269.6, 17707.2, 13531.5, 13531.5, 9867.3, 9867.3, 9867.3, 6733.200000000001, 6733.200000000001, 6733.200000000001, 10983.3, 17707.2, 16191.299999999997, 23714.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 15251.999999999998, 11643.599999999999, 11643.599999999999, 8490.9, 8490.9, 9867.3, 6733.200000000001, 6733.200000000001, 5793.9, 4854.6, 4826.7, 8704.8, 11020.5, 13401.299999999997, 13401.299999999997, 12796.8, 12796.8, 22366.5, 26597.999999999996, 26597.999999999996, 24942.599999999995, 22366.5, 17707.2, 13531.5, 13531.5, 9867.3, 9867.3, 10983.3, 20645.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24012.6, 19929.9, 23714.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23584.8, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23714.999999999996, 22366.5, 17707.2, 19734.6, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 19269.6, 16191.299999999997, 16507.5, 16507.5, 16507.5, 24012.6, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 17707.2, 15075.3, 10983.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 7793.4, 7793.4, 7495.799999999998, 7495.799999999998, 10983.3, 10983.3, 10983.3, 11448.3, 10983.3, 10983.3, 11448.3, 11448.3, 19641.6, 26142.3, 24942.599999999995, 19734.6, 19734.6, 19734.6, 15744.900000000001, 15744.900000000001, 15744.900000000001, 15744.900000000001, 15744.900000000001, 15075.3, 15075.3, 10983.3, 9867.3, 9867.3, 9867.3, 6733.200000000001, 6733.200000000001, 5793.9, 5793.9, 4854.6, 4854.6, 3998.9999999999995, 3998.9999999999995, 5877.599999999999, 5877.599999999999, 8072.399999999999, 9765.0, 15251.999999999998, 17707.2, 24942.599999999995, 17707.2, 13531.5, 15075.3, 19734.6, 22366.5, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 20645.999999999996, 20645.999999999996, 15744.900000000001, 15744.900000000001, 11448.3, 11448.3, 11448.3, 11448.3, 11448.3, 11448.3, 11448.3, 15744.900000000001, 20645.999999999996, 24942.599999999995, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23584.8, 23584.8, 23584.8, 19902.0, 19902.0, 16507.5, 19929.9, 16191.299999999997, 16191.299999999997, 16191.299999999997, 12796.8, 15251.999999999998, 17707.2, 19734.6, 19734.6, 15075.3, 13531.5, 20645.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24012.6, 23714.999999999996, 26597.999999999996, 26597.999999999996, 23714.999999999996, 23714.999999999996, 26597.999999999996, 26597.999999999996, 24012.6, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 19734.6, 19734.6, 19734.6, 13531.5, 13531.5, 13531.5, 13531.5, 13531.5, 13531.5, 15075.3, 15075.3, 13531.5, 13531.5, 19734.6, 19734.6, 26142.3, 26142.3, 24942.599999999995, 24942.599999999995, 19734.6, 19734.6, 15075.3, 15075.3, 19734.6, 19734.6, 17707.2, 17707.2, 17707.2, 17707.2, 13531.5, 13531.5, 9867.3, 9867.3, 6733.200000000001, 6733.200000000001, 6733.200000000001, 6733.200000000001, 9867.3, 15075.3, 19734.6, 17707.2, 17707.2, 19734.6, 19734.6, 15075.3, 10983.3, 10983.3, 11448.3, 11448.3, 11448.3, 11448.3, 11448.3, 11448.3, 10815.9, 10815.9, 11448.3, 11448.3, 11448.3, 10983.3, 11448.3, 10983.3, 10983.3, 10983.3, 10983.3, 9867.3, 6733.200000000001, 6733.200000000001, 6733.200000000001, 5793.9, 5793.9, 5793.9, 5793.9, 3571.2, 3571.2, 2994.6000000000004, 4854.6, 4854.6, 4854.6, 4854.6, 4854.6, 4854.6, 4854.6, 4854.6, 4854.6, 4854.6, 4854.6, 2994.6000000000004, 2994.6000000000004, 5793.9, 6733.200000000001, 6733.200000000001, 5793.9, 5793.9, 6733.200000000001, 6733.200000000001, 6733.200000000001, 7495.799999999998, 7495.799999999998, 7793.4, 7793.4, 10815.9, 14926.499999999998, 15744.900000000001, 15744.900000000001, 15075.3, 15075.3, 10983.3, 13531.5, 13531.5, 13531.5, 11643.599999999999, 11643.599999999999, 11643.599999999999, 9765.0, 12796.8, 10583.4, 13401.299999999997, 16191.299999999997, 12796.8, 12796.8, 15251.999999999998, 15251.999999999998, 11643.599999999999, 11643.599999999999, 8490.9, 9867.3, 9867.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 6733.200000000001, 5793.9, 4854.6, 3998.9999999999995, 5877.599999999999, 5877.599999999999, 7114.5, 8490.9, 13531.5, 15075.3, 15075.3, 19734.6, 24942.599999999995, 26597.999999999996, 26597.999999999996, 23714.999999999996, 23714.999999999996, 19269.6, 15251.999999999998, 17707.2, 13531.5, 10983.3, 10983.3, 11448.3, 10815.9, 10815.9, 14926.499999999998, 20645.999999999996, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 24942.599999999995, 19734.6, 19734.6, 19734.6, 19734.6, 19734.6, 19734.6, 17707.2, 19734.6, 17707.2, 17707.2, 17707.2, 17707.2, 17707.2, 22366.5, 22366.5, 22366.5, 22366.5, 17707.2, 17707.2, 19734.6, 15075.3, 15075.3, 15075.3, 13531.5, 9867.3, 9867.3, 9867.3, 6733.200000000001, 6733.200000000001, 7793.4, 7793.4, 7793.4, 10815.9, 10815.9, 11448.3, 11448.3, 11448.3, 11448.3, 11448.3, 11448.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7793.4, 7328.4, 10815.9, 10815.9, 14926.499999999998, 14926.499999999998, 14926.499999999998, 14926.499999999998, 14926.499999999998, 14926.499999999998, 10815.9, 11448.3, 11448.3, 11448.3, 11448.3, 7793.4, 7793.4, 7793.4, 7793.4, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 2408.7, 2408.7, 2166.9, 2166.9, 2166.9, 1859.9999999999998, 1859.9999999999998, 2166.9, 2408.7, 4798.8, 4798.8, 4798.8, 4622.099999999999, 4798.8, 4798.8, 4798.8, 4491.9, 4491.9, 4491.9, 2325.0, 2325.0, 2492.4, 2325.0, 2325.0, 2325.0, 2492.4, 2492.4, 2492.4, 2492.4, 2492.4, 2325.0, 3710.7, 6082.200000000001, 6082.200000000001, 10815.9, 11448.3, 15744.900000000001, 11448.3, 11448.3, 7328.4, 7328.4, 7328.4, 4491.9, 4491.9, 4491.9, 4491.9, 2325.0, 2325.0, 2325.0, 2325.0, 2325.0, 4798.8, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 2166.9, 2166.9, 2166.9, 2166.9, 2166.9, 2166.9, 2166.9, 2166.9, 2408.7, 2408.7, 2408.7, 2408.7, 4798.8, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4798.8, 4798.8, 4491.9, 4798.8, 4798.8, 4798.8, 4491.9, 4491.9, 4491.9, 4491.9, 6082.200000000001, 7328.4, 7328.4, 7328.4, 7328.4, 7793.4, 7793.4, 7495.799999999998, 7495.799999999998, 14926.499999999998, 20645.999999999996, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26142.3, 26142.3, 20645.999999999996, 15744.900000000001, 15744.900000000001, 15744.900000000001, 11448.3, 11448.3, 11448.3, 15744.900000000001, 11448.3, 15744.900000000001, 15744.900000000001, 20645.999999999996, 15744.900000000001, 15744.900000000001, 11448.3, 11448.3, 11448.3, 11448.3, 7793.4, 7793.4, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 9867.3, 15251.999999999998, 15251.999999999998, 15251.999999999998, 17707.2, 13531.5, 13531.5, 15075.3, 10983.3, 10983.3, 10983.3, 9867.3, 9867.3, 9867.3, 9867.3, 9867.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4157.099999999999, 4157.099999999999, 4622.099999999999, 4622.099999999999, 2408.7, 2492.4, 2492.4, 2492.4, 2408.7, 2408.7, 2492.4, 2492.4, 2325.0, 3710.7, 6082.200000000001, 7328.4, 10815.9, 11448.3, 11448.3, 11448.3, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 7495.799999999998, 4622.099999999999, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7793.4, 7328.4, 7793.4, 7793.4, 7793.4, 7328.4, 7328.4, 10815.9, 14926.499999999998, 19641.6, 15744.900000000001, 15744.900000000001, 15744.900000000001, 15744.900000000001, 15744.900000000001, 15075.3, 15075.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 9867.3, 9867.3, 9867.3, 9867.3, 9867.3, 9867.3, 9867.3, 10983.3, 10983.3, 7495.799999999998, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7793.4, 7793.4, 7793.4, 4798.8, 4798.8, 4491.9, 7328.4, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 7328.4, 7328.4, 4798.8, 4798.8, 4798.8, 4798.8, 2408.7, 2408.7, 2408.7, 2166.9, 2166.9, 2408.7, 2325.0, 3710.7, 4491.9, 7328.4, 7793.4, 11448.3, 11448.3, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4491.9, 4491.9, 4491.9, 2325.0, 2325.0, 2492.4, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4622.099999999999, 6733.200000000001, 9867.3, 9867.3, 13531.5, 13531.5, 13531.5, 9867.3, 9867.3, 9867.3, 9867.3, 9867.3, 9867.3, 6733.200000000001, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7793.4, 7793.4, 7793.4, 7793.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 11448.3, 11448.3, 11448.3, 11448.3, 10983.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4798.8, 4798.8, 4798.8, 4798.8, 4491.9, 4491.9, 4491.9, 4798.8, 4798.8, 4798.8, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 2408.7, 2408.7, 2492.4, 2492.4, 2492.4, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 2492.4, 2492.4, 2408.7, 2408.7, 2166.9, 4157.099999999999, 6733.200000000001, 9867.3, 10983.3, 10983.3, 10983.3, 10983.3, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 2408.7, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 2166.9, 2166.9, 1859.9999999999998, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 7793.4, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 2408.7, 2408.7, 2492.4, 2492.4, 2492.4, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4491.9, 4491.9, 4491.9, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4491.9, 4798.8, 4798.8, 4798.8, 4798.8, 4491.9, 4491.9, 4798.8, 4798.8, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7793.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 7328.4, 7328.4, 6082.200000000001, 6082.200000000001, 7328.4, 6082.200000000001, 6082.200000000001, 3710.7, 3710.7, 3710.7, 3710.7, 3710.7, 3710.7, 3710.7, 3710.7, 3710.7, 3710.7, 3710.7, 1906.4999999999998, 1906.4999999999998, 2325.0, 2325.0, 1906.4999999999998, 1906.4999999999998, 3710.7, 4491.9, 4491.9, 4798.8, 4798.8, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 10983.3, 10983.3, 9867.3, 9867.3, 9867.3, 9867.3, 10983.3, 10983.3, 10983.3, 10983.3, 11448.3, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4491.9, 4491.9, 4491.9, 4491.9, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 2492.4, 2492.4, 4798.8, 4491.9, 4491.9, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 7793.4, 7793.4, 7793.4, 7793.4, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7793.4, 4798.8, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 3710.7, 3710.7, 3710.7, 3710.7, 3710.7, 6082.200000000001, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 10815.9, 7328.4, 7328.4, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 2325.0, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 10815.9, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4798.8, 4798.8, 4622.099999999999, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4491.9, 4491.9, 4491.9, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 7328.4, 4491.9, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4798.8, 4798.8, 4622.099999999999, 4622.099999999999, 2408.7, 2408.7, 2408.7, 2408.7, 4622.099999999999, 4798.8, 4798.8, 4798.8, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 2408.7, 4798.8, 4798.8, 4491.9, 4491.9, 4491.9, 4798.8, 4798.8, 4798.8, 4491.9, 4491.9, 4491.9, 3710.7, 3710.7, 3710.7, 6082.200000000001, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7793.4, 7793.4, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 10815.9, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4798.8, 4491.9, 4491.9, 4798.8, 4798.8, 4798.8, 2492.4, 2408.7, 2408.7, 2408.7, 2408.7, 2166.9, 2166.9, 2166.9, 2166.9, 2166.9, 2166.9, 2166.9, 2166.9, 2166.9, 2166.9, 2492.4, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4798.8, 4798.8, 4491.9, 4491.9, 4491.9, 4491.9, 4798.8, 4798.8, 4622.099999999999, 4622.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 3571.2, 3571.2, 4157.099999999999, 4157.099999999999, 4157.099999999999, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 2994.6000000000004, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 3571.2, 1859.9999999999998, 1859.9999999999998, 1859.9999999999998, 1859.9999999999998, 2166.9, 3571.2, 3571.2, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 3571.2, 3571.2, 1859.9999999999998, 2166.9, 2166.9, 2166.9, 4157.099999999999, 4622.099999999999, 4622.099999999999, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4157.099999999999, 4157.099999999999, 2408.7, 4622.099999999999, 4798.8, 4491.9, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7793.4, 7793.4, 4798.8, 4491.9, 7328.4, 7328.4, 7328.4, 7328.4, 10815.9, 10815.9, 10815.9, 11448.3, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 7328.4, 10815.9, 10815.9, 11448.3, 11448.3, 11448.3, 11448.3, 11448.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4798.8, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 3710.7, 3710.7, 4491.9, 2325.0, 3710.7, 2325.0, 4491.9, 4491.9, 7328.4, 7793.4, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7793.4, 7793.4, 7793.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 7328.4, 4491.9, 4491.9, 4491.9, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 2492.4, 2492.4, 2492.4, 2492.4, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 2408.7, 2408.7, 2408.7, 2408.7, 2408.7, 2166.9, 2408.7, 2408.7, 4798.8, 4798.8, 4798.8, 4798.8, 7328.4, 7328.4, 10815.9, 14926.499999999998, 19641.6, 15744.900000000001, 11448.3, 11448.3, 7793.4, 7793.4, 7793.4, 7793.4, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4157.099999999999, 4157.099999999999, 4622.099999999999, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 3571.2, 4157.099999999999, 4622.099999999999, 4622.099999999999, 7793.4, 11448.3, 11448.3, 7793.4, 7793.4, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 2408.7, 2408.7, 2408.7, 2408.7, 2408.7, 2408.7, 2408.7, 2166.9, 2166.9, 2166.9, 2408.7, 2492.4, 4491.9, 6082.200000000001, 6082.200000000001, 7328.4, 4491.9, 7328.4, 7793.4, 13531.5, 19269.6, 19269.6, 15251.999999999998, 17707.2, 19734.6, 20645.999999999996, 20645.999999999996, 20645.999999999996, 26142.3, 24942.599999999995, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23714.999999999996, 23714.999999999996, 19929.9, 19929.9, 16191.299999999997, 16191.299999999997, 16191.299999999997, 15251.999999999998, 15251.999999999998, 17707.2, 13531.5, 15075.3, 15744.900000000001, 20645.999999999996, 19734.6, 17707.2, 15251.999999999998, 13401.299999999997, 16507.5, 16507.5, 16191.299999999997, 12796.8, 9765.0, 11643.599999999999, 11643.599999999999, 8490.9, 8490.9, 8490.9, 5793.9, 4854.6, 4854.6, 4854.6, 5877.599999999999, 5877.599999999999, 9867.3, 8490.9, 8072.399999999999, 5877.599999999999, 5877.599999999999, 5877.599999999999, 6630.9, 6630.9, 6630.9, 8072.399999999999, 5877.599999999999, 5877.599999999999, 5877.599999999999, 3998.9999999999995, 3998.9999999999995, 4854.6, 4854.6, 4854.6, 5793.9, 8490.9, 8490.9, 9765.0, 10583.4, 10583.4, 10583.4, 12796.8, 9765.0, 9765.0, 8490.9, 8490.9, 8490.9, 8490.9, 15075.3, 15075.3, 15075.3, 15075.3, 15075.3, 10983.3, 10983.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4157.099999999999, 6733.200000000001, 6733.200000000001, 6733.200000000001, 6733.200000000001, 6733.200000000001, 6733.200000000001, 6733.200000000001, 5793.9, 5793.9, 5793.9, 6733.200000000001, 6733.200000000001, 6733.200000000001, 7495.799999999998, 7793.4, 11448.3, 7793.4, 7793.4, 7793.4, 7793.4, 7793.4, 10815.9, 19641.6, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 24942.599999999995, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 22366.5, 17707.2, 19734.6, 15075.3, 15075.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 13531.5, 9867.3, 9867.3, 9867.3, 9867.3, 9867.3, 6733.200000000001, 6733.200000000001, 9867.3, 11643.599999999999, 11643.599999999999, 8490.9, 8490.9, 9867.3, 10983.3, 10983.3, 15075.3, 15075.3, 15075.3, 15075.3, 15075.3, 10983.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4157.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 4622.099999999999, 7495.799999999998, 6733.200000000001, 9867.3, 11643.599999999999, 11643.599999999999, 11643.599999999999, 9867.3, 9867.3, 9867.3, 9867.3, 9867.3, 8490.9, 8490.9, 7114.5, 7114.5, 9765.0, 8072.399999999999, 8072.399999999999, 7114.5, 7114.5, 7114.5, 8490.9, 9867.3, 10983.3, 15744.900000000001, 15744.900000000001, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 19734.6, 15744.900000000001, 19641.6, 26597.999999999996, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 19734.6, 15075.3, 15075.3, 10983.3, 10983.3, 11448.3, 14926.499999999998, 19641.6, 26597.999999999996, 26597.999999999996, 26597.999999999996, 19734.6, 19734.6, 19734.6, 17707.2, 19269.6, 19269.6, 17707.2, 13531.5, 15075.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7793.4, 7793.4, 7328.4, 7793.4, 7328.4, 7328.4, 10815.9, 15744.900000000001, 15744.900000000001, 15075.3, 15075.3, 10983.3, 10983.3, 10983.3, 10983.3, 15744.900000000001, 24951.9, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23584.8, 23157.0, 26597.999999999996, 26030.699999999997, 26030.699999999997, 26597.999999999996, 24700.8, 22710.599999999995, 19436.999999999996, 16395.9, 19902.0, 19929.9, 16191.299999999997, 12796.8, 15251.999999999998, 11643.599999999999, 13531.5, 13531.5, 15075.3, 19734.6, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 17707.2, 17707.2, 17707.2, 15251.999999999998, 15251.999999999998, 15251.999999999998, 15251.999999999998, 11643.599999999999, 11643.599999999999, 11643.599999999999, 9867.3, 9867.3, 11448.3, 14926.499999999998, 26142.3, 19734.6, 15075.3, 15744.900000000001, 15744.900000000001, 15744.900000000001, 15744.900000000001, 19734.6, 19734.6, 19734.6, 17707.2, 17707.2, 17707.2, 15251.999999999998, 15251.999999999998, 17707.2, 17707.2, 17707.2, 13531.5, 13531.5, 13531.5, 20645.999999999996, 26142.3, 26142.3, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 23584.8, 23584.8, 16507.5, 16191.299999999997, 16191.299999999997, 12796.8, 11643.599999999999, 11643.599999999999, 9867.3, 15744.900000000001, 14926.499999999998, 15744.900000000001, 15744.900000000001, 15075.3, 15075.3, 13531.5, 12796.8, 13401.299999999997, 13401.299999999997, 13401.299999999997, 13401.299999999997, 12796.8, 15251.999999999998, 13531.5, 19734.6, 19734.6, 19734.6, 17707.2, 17707.2, 17707.2, 17707.2, 15075.3, 15075.3, 15075.3, 15075.3, 15075.3, 15075.3, 15075.3, 15075.3, 15075.3, 10983.3, 10983.3, 15075.3, 15075.3, 15744.900000000001, 20645.999999999996, 20645.999999999996, 26142.3, 24942.599999999995, 24942.599999999995, 22366.5, 22366.5, 17707.2, 17707.2, 13531.5, 15075.3, 15744.900000000001, 20645.999999999996, 20645.999999999996, 19734.6, 24942.599999999995, 24942.599999999995, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 20645.999999999996, 15744.900000000001, 15744.900000000001, 14926.499999999998, 19641.6, 20645.999999999996, 20645.999999999996, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 26142.3, 20645.999999999996, 20645.999999999996, 20645.999999999996, 24951.9, 26597.999999999996, 26142.3, 20645.999999999996, 14926.499999999998, 10815.9, 10815.9, 14926.499999999998, 19641.6, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 20645.999999999996, 15744.900000000001, 11448.3, 10815.9, 10815.9, 7328.4, 4491.9, 3710.7, 6082.200000000001, 6082.200000000001, 4491.9, 4491.9, 4491.9, 4491.9, 4491.9, 2325.0, 2325.0, 3710.7, 3710.7, 9021.0, 14926.499999999998, 14926.499999999998, 15744.900000000001, 15744.900000000001, 20645.999999999996, 26142.3, 24942.599999999995, 24942.599999999995, 22366.5, 22366.5, 17707.2, 17707.2, 17707.2, 17707.2, 17707.2, 17707.2, 24942.599999999995, 19734.6, 19734.6, 13531.5, 15075.3, 10983.3, 10983.3, 7495.799999999998, 7495.799999999998, 7793.4, 7328.4, 9021.0, 9021.0, 10815.9, 19641.6, 26142.3, 26597.999999999996, 26597.999999999996, 24942.599999999995, 24942.599999999995, 24942.599999999995, 24942.599999999995, 19734.6, 19734.6, 17707.2, 17707.2, 17707.2, 17707.2, 13531.5, 17707.2, 15251.999999999998, 15251.999999999998, 11643.599999999999, 11643.599999999999, 13531.5, 9867.3, 9867.3, 9867.3, 10983.3, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7495.799999999998, 7793.4, 4798.8, 4798.8, 4798.8, 4798.8, 4798.8, 9867.3, 13531.5, 13531.5, 15075.3, 15744.900000000001, 15744.900000000001, 11448.3, 10815.9, 10815.9, 10815.9, 10815.9, 19641.6, 26142.3, 20645.999999999996, 15744.900000000001, 15744.900000000001, 11448.3, 10815.9, 10815.9, 14926.499999999998, 14926.499999999998, 15744.900000000001, 15075.3, 13531.5, 17707.2, 17707.2, 17707.2, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 24942.599999999995, 19734.6, 26597.999999999996, 26597.999999999996, 24942.599999999995, 19734.6, 19734.6, 15075.3, 15744.900000000001, 11448.3, 11448.3, 11448.3, 11448.3, 7793.4, 7328.4, 10815.9, 14926.499999999998, 19641.6, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 24942.599999999995, 19734.6, 19734.6, 15075.3, 15075.3, 15075.3, 10983.3, 10983.3, 15744.900000000001, 15744.900000000001, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 24942.599999999995, 19734.6, 19734.6, 19734.6, 15075.3, 15075.3, 10983.3, 11448.3, 11448.3, 11448.3, 11448.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 10983.3, 9867.3, 9867.3, 9867.3, 11448.3, 15744.900000000001, 26142.3, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26142.3, 20645.999999999996, 15744.900000000001, 15744.900000000001, 14926.499999999998, 15744.900000000001, 14926.499999999998, 15744.900000000001, 14926.499999999998, 11448.3, 20645.999999999996, 26597.999999999996, 24942.599999999995, 19734.6, 20645.999999999996, 15744.900000000001, 14926.499999999998, 14926.499999999998, 10815.9, 7328.4, 7793.4, 7793.4, 7793.4, 7793.4, 10815.9, 10815.9, 7328.4, 7328.4, 7328.4, 10815.9, 14926.499999999998, 24951.9, 20645.999999999996, 20645.999999999996, 20645.999999999996, 26142.3, 19734.6, 19734.6, 26597.999999999996, 26597.999999999996, 24942.599999999995, 24942.599999999995, 24942.599999999995, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 22366.5, 22366.5, 17707.2, 17707.2, 17707.2, 17707.2, 17707.2, 19734.6, 19734.6, 20645.999999999996, 20645.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 19734.6, 20645.999999999996, 20645.999999999996, 26142.3, 26142.3, 20645.999999999996, 15744.900000000001, 15744.900000000001, 15744.900000000001, 11448.3, 11448.3, 11448.3, 11448.3, 10815.9, 14926.499999999998, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 26597.999999999996, 24942.599999999995, 24942.599999999995, 19734.6, 20645.999999999996, 20645.999999999996, 15744.900000000001, 15075.3, 15075.3, 15075.3, 13531.5, 13531.5, 11643.599999999999, 9867.3, 10983.3, 15744.900000000001, 15744.900000000001, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)\n", + "8760\n" ] } ], @@ -162,7 +162,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.17" + "version": "3.10.13" }, "vscode": { "interpreter": { diff --git a/Examples/NonAnnualSimulation.ipynb b/Examples/NonAnnualSimulation.ipynb index 34bf6fa0..00b81789 100644 --- a/Examples/NonAnnualSimulation.ipynb +++ b/Examples/NonAnnualSimulation.ipynb @@ -6,7 +6,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Most recently tested against PySAM 5.0.0\n", + "# Most recently tested against PySAM 5.1.0\n", "\n", "import pandas as pd\n", "import json\n", @@ -401,7 +401,7 @@ }, { "data": { - "image/png": "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cSs+WFSfqbt7azTeTGQMBCinCMG1OCVNMpD8zfPXYuLXN4XXtlcAJgu2HivDg59uEW6ls8zZJSYbZYCyFLey5ox4kn9zicls8XtcRadrBLcRI59vCZLRKlP9QTfBasbQLk2RnuT70Oq17FjhklmaDJl2JFSeE4TgQd5j2Sk7CjgMBFjHMFG17Lz00kvIz8/H/PnzxX2tW/sCsXiex6uvvoonn3wSI0aMAAB8+OGHyMnJwVdffYXRo0dj165dWLZsGTZu3Chag9544w0MHToUL7/8ssyy0VhYsmQJzp49iwkTJiA1NVV2bNSoUZg3bx7uuecePPPMMxg4cCDatm2L0aNHw+Vy4dtvv8Xjjz8OQKizs3r1aowePRo2mw1NmjTBgAEDcOrUKcyaNQs33HADli1bhu+++w4pKSniPdq3b4///Oc/6NWrF8rLy/Hoo48GZUVKTk7GI488gocffhgcx+Hiiy9GWVkZ1q5di5SUFDEGJxBPP/00hg8fjhYtWuCGG24Ay7L4888/sX37djz33HO6591///2YOHEievXqhYsuugiLFi3C1q1b0aaNPOZh8ODBSElJwXPPPYfp06cbfj6CiDjKdO/qs773NeXAV/cCna8DLrwx/Pd2qi0wiaxS7KjdWJu5tuiBY8Ch1UDXm9XX1bPslBz0VUruKrjtd5zwBQO7dcTOmUrfnFiWAThPnR2VZUf7tv6ysQDAbAqwvCouwKW1AnPvOhyuZFH61aPodlZo9HmWT8YNPfU/5PGs7z5izA5ckCX3G0hukc6+qsaOTACFfCYccU1grTktxEPl99E7PeaJqmXn66+/Rq9evXDjjTciOzsb3bt3x/vv+9rcHzx4EIWFhRg0aJC4LzU1FX379sW6desACEXz0tLSZHEXgwYNAsuy+O233zTva7fbUV5eLvtqSMybNw+DBg1SCR1AEDu///47tm7digEDBuCzzz7D119/jW7duuGKK67Ahg0bxLHTp0/HoUOH0LZtW2RlZQEAOnXqhLfeegtz585F165dsWHDBjzyyCOq+589exY9evTA7bffjgceeADZ2dlBPcOMGTPw1FNPYebMmejUqROGDBmCpUuXysRwIAYPHowlS5bg+++/R+/evdGvXz+88soraNmypd/zxowZg6lTp+KRRx5Bjx49cPDgQYwfP17m+gIEl9748ePhdrsxduzY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", + "image/png": "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cSs+WFSfqbt7azTeTGQMBCinCMG1OCVNMpD8zfPXYuLXN4XXtlcAJgu2HivDg59uEW6ls8zZJSYbZYCyFLey5ox4kn9zicls8XtcRadrBLcRI59vCZLRKlP9QTfBasbQLk2RnuT70Oq17FjhklmaDJl2JFSeE4TgQd5j2Sk7CjgMBFjHMFG17Lz00kvIz8/H/PnzxX2tW/sCsXiex6uvvoonn3wSI0aMAAB8+OGHyMnJwVdffYXRo0dj165dWLZsGTZu3Chag9544w0MHToUL7/8ssyy0VhYsmQJzp49iwkTJiA1NVV2bNSoUZg3bx7uuecePPPMMxg4cCDatm2L0aNHw+Vy4dtvv8Xjjz8OQKizs3r1aowePRo2mw1NmjTBgAEDcOrUKcyaNQs33HADli1bhu+++w4pKSniPdq3b4///Oc/6NWrF8rLy/Hoo48GZUVKTk7GI488gocffhgcx+Hiiy9GWVkZ1q5di5SUFDEGJxBPP/00hg8fjhYtWuCGG24Ay7L4888/sX37djz33HO6591///2YOHEievXqhYsuugiLFi3C1q1b0aaNPOZh8ODBSElJwXPPPYfp06cbfj6CiDjKdO/qs773NeXAV/cCna8DLrwx/Pd2qi0wiaxS7KjdWJu5tuiBY8Ch1UDXm9XX1bPslBz0VUruKrjtd5zwBQO7dcTOmUrfnFiWAThPnR2VZUf7tv6ysQDAbAqwvCouwKW1AnPvOhyuZFH61aPodlZo9HmWT8YNPfU/5PGs7z5izA5ckCX3G0hukc6+qsaOTACFfCYccU1grTktxEPl99E7PeaJqmXn66+/Rq9evXDjjTciOzsb3bt3x/vv+9rcHzx4EIWFhRg0aJC4LzU1FX379sW6desACEXz0tLSZHEXgwYNAsuy+O233zTva7fbUV5eLvtqSMybNw+DBg1SCR1AEDu///47tm7digEDBuCzzz7D119/jW7duuGKK67Ahg0bxLHTp0/HoUOH0LZtW2RlZQEAOnXqhLfeegtz585F165dsWHDBjzyyCOq+589exY9evTA7bffjgceeADZ2dlBPcOMGTPw1FNPYebMmejUqROGDBmCpUuXysRwIAYPHowlS5bg+++/R+/evdGvXz+88soraNmypd/zxowZg6lTp+KRRx5Bjx49cPDgQYwfP17m+gIEl9748ePhdrsxduzY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", "text/plain": [ "
" ] @@ -434,7 +434,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.17" + "version": "3.10.13" }, "vscode": { "interpreter": { diff --git a/Examples/PySAMWorkshop.ipynb b/Examples/PySAMWorkshop.ipynb index 2eab52fd..f36f6719 100644 --- a/Examples/PySAMWorkshop.ipynb +++ b/Examples/PySAMWorkshop.ipynb @@ -13,7 +13,7 @@ "\n", "https://sam.nrel.gov/software-development-kit-sdk/pysam.html\n", "\n", - "Edit: Most recently tested with Version 5.0.0" + "Edit: Most recently tested with Version 5.1.0" ] }, { diff --git a/Examples/ResidentialPVBatteryWithCustomDispatch.py b/Examples/ResidentialPVBatteryWithCustomDispatch.py index b616c988..246a13e1 100644 --- a/Examples/ResidentialPVBatteryWithCustomDispatch.py +++ b/Examples/ResidentialPVBatteryWithCustomDispatch.py @@ -8,7 +8,7 @@ * PV: https://nrel-pysam.readthedocs.io/en/master/modules/Pvsamv1.html * Battery: https://nrel-pysam.readthedocs.io/en/master/modules/Battery.html -Most recently tested against PySAM 5.0.0 +Most recently tested against PySAM 5.1.0 @author: brtietz """ diff --git a/Examples/SAMsimPVWattsCommercialExample.py b/Examples/SAMsimPVWattsCommercialExample.py index 4f50c275..714973ad 100755 --- a/Examples/SAMsimPVWattsCommercialExample.py +++ b/Examples/SAMsimPVWattsCommercialExample.py @@ -13,7 +13,7 @@ Run the simulations. Print the results. -Most recently tested against PySAM 5.0.0 +Most recently tested against PySAM 5.1.0 @author: frohro """ diff --git a/Examples/SelectingModuleandInverterExample/Modeling the NREL bifacial PV HSAT system.ipynb b/Examples/SelectingModuleandInverterExample/Modeling the NREL bifacial PV HSAT system.ipynb index df46dbd3..d99cf49c 100644 --- a/Examples/SelectingModuleandInverterExample/Modeling the NREL bifacial PV HSAT system.ipynb +++ b/Examples/SelectingModuleandInverterExample/Modeling the NREL bifacial PV HSAT system.ipynb @@ -54,8 +54,6 @@ "metadata": {}, "outputs": [], "source": [ - "\n", - "\n", "import PySAM.Pvsamv1 as pv\n", "import PySAM\n", "import xlsxwriter\n", @@ -74,7 +72,7 @@ { "data": { "text/plain": [ - "'5.0.0'" + "'5.1.0'" ] }, "execution_count": 3, @@ -4138,7 +4136,11 @@ " ...),\n", " 'load_escalation': (0.0,)},\n", " 'PVLosses': {'enable_subhourly_clipping': 0.0},\n", - " 'AdjustmentFactors': {},\n", + " 'AdjustmentFactors': {'constant': 0.0,\n", + " 'en_periods': 0.0,\n", + " 'en_timeindex': 0.0,\n", + " 'periods': ((0.0, 0.0, 0.0),),\n", + " 'timeindex': (0.0,)},\n", " 'BatteryCell': {},\n", " 'BatteryDispatch': {},\n", " 'SystemCosts': {'om_production_escal': 0.0},\n", @@ -8361,6 +8363,7 @@ " 1e+38,\n", " ...),\n", " 'grid_interconnection_limit_kwac': 100000.0},\n", + " 'HybridCosts': {},\n", " 'Outputs': {}}" ] }, @@ -9080,7 +9083,16 @@ "execution_count": 16, "id": "5c9a6b68", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/2089502906.py:1: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " masterdate = mymod['Date'][0]\n" + ] + } + ], "source": [ "masterdate = mymod['Date'][0]" ] @@ -9090,7 +9102,16 @@ "execution_count": 17, "id": "65800ef5", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/3381241117.py:7: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " otherbranchdate = mymod['Date'][0]\n" + ] + } + ], "source": [ "# use an older CEC Modules.csv file than master in order to find the right Module\n", "url = 'https://raw.githubusercontent.com/NREL/SAM/7f36ab42df330ebeddfb80dd0c405cc578fcdafc/deploy/libraries/CEC%20Modules.csv'\n", @@ -9174,7 +9195,52 @@ "execution_count": 20, "id": "3d6d1159", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/3652071070.py:1: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " cec_a_ref = float(mymod.a_ref[0]) # 1.885731\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/3652071070.py:2: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " cec_adjust = float(mymod.Adjust[0]) # 10.400029\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/3652071070.py:3: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " cec_alpha_sc = float(mymod.alpha_sc[0]) # 0.004675\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/3652071070.py:4: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " cec_area = float(mymod.A_c[0]) # 1.979\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/3652071070.py:6: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " cec_beta_oc = float(mymod.beta_oc[0]) # -0.139925\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/3652071070.py:7: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " cec_gamma_r = float(mymod.gamma_r[0]) # -0.4028\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/3652071070.py:8: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " cec_i_l_ref = float(mymod.I_L_ref[0]) # 9.80468\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/3652071070.py:9: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " cec_i_mp_ref = float(mymod.I_mp_ref[0]) # 9.26\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/3652071070.py:10: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " cec_i_o_ref = float(mymod.I_o_ref[0]) # 7.72903e-11 # NOT THE SAME, DB says \"0.0\"\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/3652071070.py:11: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " cec_i_sc_ref = float(mymod.I_sc_ref[0]) # 9.8\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/3652071070.py:12: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " cec_is_bifacial = int(mymod.Bifacial[0]) # 1\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/3652071070.py:13: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " cec_module_length = float(mymod.Length[0]) # 2.011\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/3652071070.py:14: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " cec_module_width = float(mymod.Width[0]) # 0.984\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/3652071070.py:18: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " cec_n_s = float(mymod.N_s[0]) # 72\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/3652071070.py:19: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " cec_r_s = float(mymod.R_s[0]) #0.396799\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/3652071070.py:20: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " cec_r_sh_ref = float(mymod.R_sh_ref[0]) # 830.975492\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/3652071070.py:21: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " cec_t_noct = float(mymod.T_NOCT[0]) # 47.4\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/3652071070.py:22: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " cec_v_mp_ref = float(mymod.V_mp_ref[0]) # 38.9\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/3652071070.py:23: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " cec_v_oc_ref = float(mymod.V_oc_ref[0]) # 48.2\n" + ] + } + ], "source": [ "cec_a_ref = float(mymod.a_ref[0]) # 1.885731\n", "cec_adjust = float(mymod.Adjust[0]) # 10.400029\n", @@ -9442,29 +9508,29 @@ "name": "stderr", "output_type": "stream", "text": [ - "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_37191/1142250567.py:1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/1142250567.py:1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", " inv_snl_c0 = float(myinv['C0'])\n", - "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_37191/1142250567.py:2: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/1142250567.py:2: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", " inv_snl_c1 = float(myinv['C1'])\n", - "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_37191/1142250567.py:3: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/1142250567.py:3: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", " inv_snl_c2 = float(myinv['C2'])\n", - "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_37191/1142250567.py:4: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/1142250567.py:4: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", " inv_snl_c3 = float(myinv['C3'])\n", - "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_37191/1142250567.py:5: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/1142250567.py:5: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", " inv_snl_paco = float(myinv['Paco'])\n", - "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_37191/1142250567.py:6: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/1142250567.py:6: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", " inv_snl_pdco = float(myinv['Pdco'])\n", - "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_37191/1142250567.py:7: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/1142250567.py:7: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", " inv_snl_pnt = float(myinv['Pnt'])\n", - "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_37191/1142250567.py:8: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/1142250567.py:8: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", " inv_snl_pso = float(myinv['Pso'])\n", - "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_37191/1142250567.py:9: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/1142250567.py:9: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", " inv_snl_vdcmax = float(myinv['Vdcmax'])\n", - "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_37191/1142250567.py:10: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/1142250567.py:10: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", " inv_snl_vdco = float(myinv['Vdco'])\n", - "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_37191/1142250567.py:11: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/1142250567.py:11: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", " mppt_low_inverter = float(myinv['Mppt_low'])\n", - "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_37191/1142250567.py:12: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + "/var/folders/yh/xvlf1svn0xq6r2l4hzsggz2xt3qfdr/T/ipykernel_13742/1142250567.py:12: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", " mppt_hi_inverter = float(myinv['Mppt_high'])\n" ] } @@ -9920,7 +9986,7 @@ " \n", " 2020-01-01 16:00:00\n", " 1.067853\n", - " 23.427947\n", + " 23.427948\n", " 0.023301\n", " 64.097702\n", " 13.479426\n", @@ -10011,7 +10077,7 @@ "2020-01-01 13:00:00 32.694059 421.819334 0.486002 514.294067 142.040833 \n", "2020-01-01 14:00:00 28.891263 547.718436 0.626405 695.355957 87.838135 \n", "2020-01-01 15:00:00 5.155149 454.193254 0.503637 704.084229 39.767941 \n", - "2020-01-01 16:00:00 1.067853 23.427947 0.023301 64.097702 13.479426 \n", + "2020-01-01 16:00:00 1.067853 23.427948 0.023301 64.097702 13.479426 \n", "2020-01-01 17:00:00 0.000000 0.000000 0.000000 0.118982 0.056990 \n", "2020-01-01 18:00:00 0.000000 0.000000 0.000000 0.074463 0.000000 \n", "2020-01-01 19:00:00 0.000000 0.000000 0.000000 0.040330 0.011045 \n", @@ -10079,7 +10145,7 @@ "outputs": [ { "data": { - "image/png": "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bt1ahYeHq82bN6u3335btW3bttxQqbPas2ePGjJkiNLpdGrBggVKKVXpnCfrv/1NN92kHnvssXLHnFll7TeZTOXaNn36dLVly5Zyz/vggw+Ul5eXSk1NbdR4G0JNvgd27typJkyYoO68807b74LCwkLVrFkzNW/evEaP2Z7++usv1atXL9WhQwfVv39/FRMTo+67775y15hMJqWUUj/88IMaPHiwmjFjhiNCdSiXS4Lef/991bdvX5WVlaXy8vLUtm3bVHBwsLr99tuV0WhUK1euVBdccIF65plnyj3vf//7n+rYsaOKj493TOB2VNU9uPPOO8vNeTj3h/3ff/+twsLC1P/+97/GDtmuqvseyM3NVbt371a9e/dWkZGRtucUFxerrKws1a5dO/Xuu+86MPr6O1/7c3Nz1ffff6+mT5+u3n77bVty+Nprr6kLL7xQGY1GB7egfvbu3auuvvpqde2116qbb75ZtWnTRhUVFSmlKp/rUlRUpCIjI9UPP/xgO5aUlNRo8dpbZe23/puazWbbPcjLy6vw3J9++klFRESoDRs2NGrM9na+e2CVlpamYmNj1datW5VSyvZ/oW/fvmrSpEmNHre9rFu3TvXt21c98sgjKjs7W6WkpKgPPvhARUdHV0h8ldLuycMPP6wGDx6s1q9fr5RSatu2bUop1/ijoDouNRymlGLZsmV07dqVoKAgfH196du3Lx9//DHff/89n3/+OSNGjGDYsGEsX76czz77zPbcjIwM/P39adWqlQNbUH/V3YNvv/2WFStW2Lo6zx3z3rlzJ61bt2bo0KGOCN0uzvc98PXXX9OjRw/uueceMjIyePrppwFtmGzXrl0EBAQwcuRIB7ei7s7X/q+++gofHx+uvvpqXn31Ve6//358fHwwmUzs2rWLtm3b2oaInFVMTAy9evXi6aef5oEHHsDX19e2DFhVUgJgw4YN6PV6Ro4cyZkzZ5gyZQrdunWzlY1wNpW1//HHHwe09lvn+/j6+tqeY70ve/fupW3btvTq1avxA7ej890DK+sw4Z49ewDw8fFh165dmM1mJkyY4JDY7SEzM5MePXowffp0AgMDiYiI4MILLyQoKIizZ8+Wu9ZisaDX65k4cSKBgYG8/vrrjB8/nv79+3Po0CGXnBtVjuPyL/uyZveTJ09WQ4YMUUqVdvUppdRVV12lhgwZorKzs1VCQoK6//77lV6vV1OmTFEPP/ywCgkJUS+++KIym81Om/nW5B4MHTpUJSYm2o5lZ2erU6dOqVdeeUW1bt1avfLKKxW6zZ1FTdp/ySWXqDNnzqisrCz13//+VxkMBjVs2DB19913q7CwMHX//fergoICl23/uf/+KSkpKjU1Vb344ouqbdu26rfffmvcoO3M+u9mHfotKipSr776qgoKClKHDh1SSpW/J0opNX/+fHXFFVfYrhs8eLA6cOBA4wZuJ3Vp/+nTp1VKSoqaM2eOiomJUfPnzy/3Ws6mJvfAOix2+vRp9eCDDyo/Pz/1wAMPqMcee0yFh4erm266yamHhU+ePKnOnj1b7lhubq4KCwuz9XqdKysrSw0cOFDpdDo1ZswY25QRV+cySZDVN998o5o3b27r8issLFRKaePDOp1Obdy4USml/Ud555131L333qtGjBihfvzxR4fFbG/nuwfWOS87duxQzz//vOrWrZvq0KGD+vnnnx0Wsz3V9HtAKaW+/fZb9eyzz6qJEyeqZcuWOSRee6vpv39xcbFaunSpatu2rWrXrp365ZdfHBZzQ7AmhQcPHlSXXHKJuvLKKyu9bsyYMUqn06l27dqpb7/9tjFDbFA1af/hw4fV888/r9q3b+9SPwOsanIPMjIy1IwZM9T111+vRo8e7VL3oGwi+8svv6jY2FiVnZ1dYVh4165dKioqyiX+EKotp0qCsrOz1RtvvKH+/PPPKq/Zt2+fGjNmjLr66qttx6x/+VxwwQXqySefbOgwG5Q970Fubq766quv1Oeff96gMduTu38P2Lv96enpTlcwryb3oCyz2ayWLl2qgoKC1PLly5VSWgJoNBqV0WhUzz77rHr//fcbMmS7skf7jUajbaL8r7/+qr744ouGDNnu7HUPrHPFlFLlHjd1tWm/NRF6/PHH1VVXXVXpNWazWS1cuNCuMToLp5kT9NprrxEREcHKlSvJzMykuLi40uu6du3KhAkT2L59Ox9++CGgLYNNT0+noKCA1q1bA865PYC974G/vz8TJkxg4sSJjdaG+rB3+52NvdtvsVho2bIl48aNa6wm1FtN74GVKpkDM3ToUK666ir+85//kJSUxK233spHH32Ep6cnM2fO5M4772ykFtSPvdo/adIkPvjgAzw9PRk1ahTXX399I7Wg/ux5D5YsWYLZbAZwmvII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", + "image/png": "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bt1ahYeHq82bN6u3335btW3bttxQqbPas2ePGjJkiNLpdGrBggVKKVXpnCfrv/1NN92kHnvssXLHnFll7TeZTOXaNn36dLVly5Zyz/vggw+Ul5eXSk1NbdR4G0JNvgd27typJkyYoO68807b74LCwkLVrFkzNW/evEaP2Z7++usv1atXL9WhQwfVv39/FRMTo+67775y15hMJqWUUj/88IMaPHiwmjFjhiNCdSiXS4Lef/991bdvX5WVlaXy8vLUtm3bVHBwsLr99tuV0WhUK1euVBdccIF65plnyj3vf//7n+rYsaOKj493TOB2VNU9uPPOO8vNeTj3h/3ff/+twsLC1P/+97/GDtmuqvseyM3NVbt371a9e/dWkZGRtucUFxerrKws1a5dO/Xuu+86MPr6O1/7c3Nz1ffff6+mT5+u3n77bVty+Nprr6kLL7xQGY1GB7egfvbu3auuvvpqde2116qbb75ZtWnTRhUVFSmlKp/rUlRUpCIjI9UPP/xgO5aUlNRo8dpbZe23/puazWbbPcjLy6vw3J9++klFRESoDRs2NGrM9na+e2CVlpamYmNj1datW5VSyvZ/oW/fvmrSpEmNHre9rFu3TvXt21c98sgjKjs7W6WkpKgPPvhARUdHV0h8ldLuycMPP6wGDx6s1q9fr5RSatu2bUop1/ijoDouNRymlGLZsmV07dqVoKAgfH196du3Lx9//DHff/89n3/+OSNGjGDYsGEsX76czz77zPbcjIwM/P39adWqlQNbUH/V3YNvv/2WFStW2Lo6zx3z3rlzJ61bt2bo0KGOCN0uzvc98PXXX9OjRw/uueceMjIyePrppwFtmGzXrl0EBAQwcuRIB7ei7s7X/q+++gofHx+uvvpqXn31Ve6//358fHwwmUzs2rWLtm3b2oaInFVMTAy9evXi6aef5oEHHsDX19e2DFhVUgJgw4YN6PV6Ro4cyZkzZ5gyZQrdunWzlY1wNpW1//HHHwe09lvn+/j6+tqeY70ve/fupW3btvTq1avxA7ej890DK+sw4Z49ewDw8fFh165dmM1mJkyY4JDY7SEzM5MePXowffp0AgMDiYiI4MILLyQoKIizZ8+Wu9ZisaDX65k4cSKBgYG8/vrrjB8/nv79+3Po0CGXnBtVjuPyL/uyZveTJ09WQ4YMUUqVdvUppdRVV12lhgwZorKzs1VCQoK6//77lV6vV1OmTFEPP/ywCgkJUS+++KIym81Om/nW5B4MHTpUJSYm2o5lZ2erU6dOqVdeeUW1bt1avfLKKxW6zZ1FTdp/ySWXqDNnzqisrCz13//+VxkMBjVs2DB19913q7CwMHX//fergoICl23/uf/+KSkpKjU1Vb344ouqbdu26rfffmvcoO3M+u9mHfotKipSr776qgoKClKHDh1SSpW/J0opNX/+fHXFFVfYrhs8eLA6cOBA4wZuJ3Vp/+nTp1VKSoqaM2eOiomJUfPnzy/3Ws6mJvfAOix2+vRp9eCDDyo/Pz/1wAMPqMcee0yFh4erm266yamHhU+ePKnOnj1b7lhubq4KCwuz9XqdKysrSw0cOFDpdDo1ZswY25QRV+cySZDVN998o5o3b27r8issLFRKaePDOp1Obdy4USml/Ud555131L333qtGjBihfvzxR4fFbG/nuwfWOS87duxQzz//vOrWrZvq0KGD+vnnnx0Wsz3V9HtAKaW+/fZb9eyzz6qJEyeqZcuWOSRee6vpv39xcbFaunSpatu2rWrXrp365ZdfHBZzQ7AmhQcPHlSXXHKJuvLKKyu9bsyYMUqn06l27dqpb7/9tjFDbFA1af/hw4fV888/r9q3b+9SPwOsanIPMjIy1IwZM9T111+vRo8e7VL3oGwi+8svv6jY2FiVnZ1dYVh4165dKioqyiX+EKotp0qCsrOz1RtvvKH+/PPPKq/Zt2+fGjNmjLr66qttx6x/+VxwwQXqySefbOgwG5Q970Fubq766quv1Oeff96gMduTu38P2Lv96enpTlcwryb3oCyz2ayWLl2qgoKC1PLly5VSWgJoNBqV0WhUzz77rHr//fcbMmS7skf7jUajbaL8r7/+qr744ouGDNnu7HUPrHPFlFLlHjd1tWm/NRF6/PHH1VVXXVXpNWazWS1cuNCuMToLp5kT9NprrxEREcHKlSvJzMykuLi40uu6du3KhAkT2L59Ox9++CGgLYNNT0+noKCA1q1bA865PYC974G/vz8TJkxg4sSJjdaG+rB3+52NvdtvsVho2bIl48aNa6wm1FtN74GVKpkDM3ToUK666ir+85//kJSUxK233spHH32Ep6cnM2fO5M4772ykFtSPvdo/adIkPvjgAzw9PRk1ahTXX399I7Wg/ux5D5YsWYLZbAZwmvIItW2/dQ7oli1bGDx4MAC5ubncc889ttp4er2e22+/vWEDb6ocm4PVzLfffqv69Omjvv7663LHzx2ztn6dnp6u/vOf/yhPT081f/58tXPnTjV37lzVvn17tX379kaL257c/R5I+927/UrV/B5U5fvvv1c6nU7pdDrVoUMHp5v34+7tV0ruQV3bf+bMGdWhQwe1c+dOtWjRItWiRQvVunVrdejQIaed+2UvTToJso5b3nLLLbb6BocPH1bz589Xv//+u63se1X/iA8//LDq2bOnat++vYqKinLK8X53vwfSfvduv1L1vwcmk0mtWLFCRUREqDZt2qiffvqpcQK3E3dvv1JyD+rb/s8++0zpdDoVHh6uQkJCKuyb6M6adBKklDbDv1OnTmrFihXqk08+Uc2aNVOXXHKJio6OVp06dbLt91RW2W+EvLy8KmfDOwt3vwfSfvduv1J1uwdWRUVF6u6773bq/QHdvf1KyT2oT/uXLFmi/P391YsvvtiIETsHnVJNZ3LMkiVLSE1NZdCgQQwYMAA/Pz8ArrrqKsxmM0FBQUyaNIlLL72UtLQ0/u///o/mzZvz9ddfExAQUOH1rPUPnIm73wNpv3u3H+x7D6ztN5lMeHh4OKI5tebu7Qe5B/b+OZCYmEizZs0qPef2HJ2FKaV16/Xt21e1bdtWDR48WEVERKirr75aFRcXK7PZrJ599lkVHh6uevTooc6ePWvrGty5c6fS6XRq9+7dSinnrWuhlNwDab97t18puQfu3n6l5B64e/sdoUn8ifjjjz/i5eXF/v37Wb58Od9//z2//fYbDz/8MMXFxYwdO5bQ0FDy8/MJCQlBr9djNpuJjIwkOjqaHTt2ABUrIDsTd78H0n73bj/IPXD39oPcA3dvv0M4OgszGo1q+PDh6p577lFKlU4A++STT1SLFi3Ul19+qZRS6o033lAGg0HNmTPH9twVK1ao3r17q5MnTzZ+4Hbk7vdA2u/e7VdK7oG7t18puQfu3n5HcWgSZO2yu/baa9XYsWOVUuV3+R0+fLgaNWqUysnJURkZGWrWrFnKw8NDjRw5Ut15552qefPm6rHHHrMV/nJG7n4PpP3u3X6l5B64e/uVknvg7u13JIf3BClVmunu3btXKVVa5n/Tpk3lxjmVUurLL79UM2fOVDfccINatWqVQ+JtCO5+D6T97t1+peQeuHv7lZJ74O7tdwSHJkFGo1EppdS2bdvU0KFD1cSJE23nrF2BnTp1Ui+//LJD4msM7n4PpP3u3X6l5B64e/uVknvg7u13pAadGP3tt9+SmZlZ4bi1TLmnpycAffv2ZeLEiaxdu5Yvv/wS0Mp4JyQkYDQaiYmJacgwG5S73wNpv3u3H+QeuHv7Qe6Bu7e/SWuIzGrt2rWqa9euSqfTqXnz5lV53Zdffqk8PT3VN998ozIyMtTDDz+s/Pz81Pvvv6/27NmjXn75ZdW5c2e1f//+hgizQbn7PZD2u3f7lZJ74O7tV0rugbu33xnYPQmKj49XN9xwg7r33nvVfffdp6KiolRSUpLtvMViUVlZWWrixImqZcuW6tVXXy23e+8999yjevToodq1a6diYmLUL7/8Yu8QG5y73wNpv3u3Xym5B+7efqXkHrh7+52F3ZOg9PR09eGHH6o9e/aovLw81bp1a/Xggw+Wu6aoqEh98cUXKjU11XbMOqPdYrGo3Nxc9ddff9k7tEbj7vdA2u/e7VdK7oG7t18puQfu3n5nUe8kKDMzs8Ix60QupZT6+OOPlZeXl9q2bZtS6vyVLMs+11m4+z2Q9rt3+5WSe+Du7VdK7oG7t99Z1TkJWrlyperWrZt64YUXVEFBQbXXDh48WF1xxRW2GfCuwt3vgbTfvduvlNwDd2+/UnIP3L39zq7WSVBxcbH64IMPVNeuXVWnTp1UTEyM2rFjR7XP2bhxo9Lr9erbb79VSmkZ7unTp+sWcRPg7vdA2u/e7VdK7oG7t18puQfu3n5XUesl8kVFRRQVFXHzzTezbds2zGYz8+fPJycnp8rnxMXFceutt/Lss8+yevVqxo4dy2uvvUZRUVG9VrY5irvfA2m/e7cf5B64e/tB7oG7t99l1CVzSkhIUDk5OUoppb7++mvl4eGhVq5cWe1ztmzZonQ6ndLpdGrkyJHqzJkzdXnrJsPd74G0373br5TcA3dvv1JyD9y9/a6gXhOjrRO34uLi1MiRI8vNcC97zWeffaa8vb1V//79XW6mu7vfA2m/e7dfKbkH7t5+peQeuHv7nVm9kiCTyaSUUmr37t1Kp9OpxYsX274ZrDPfc3Nz1dy5c9W7775bz1CbJne/B9J+926/UnIP3L39Ssk9cPf2OzOdUkrVZzjNbDZjMBiYMmUK69evZ8WKFRQWFrJq1Spuu+02AgIC7DVy12S5+z2Q9rt3+0Hugbu3H+QeuHv7nVZ9syhrtms0GlVAQIDq06eP0ul06sYbb1S5ubnnrYXgCtz9Hkj73bv9Ssk9cPf2KyX3wN3b76w86ptE6fV6cnNz+emnnzAajQAsX76c0aNH1ztBcxbufg+k/e7dfpB74O7tB7kH7t5+p2WPTOqHH35QBoNBvfLKK/Z4Oafk7vdA2u/e7VdK7oG7t18puQfu3n5nVO85QQBZWVn4+fnh6elpj7zMKbn7PZD2u3f7Qe6Bu7cf5B64e/udkV2SICGEEEIIZ1PritFCCCGEEK5AkiAhhBBCuCVJgoQQQgjhliQJEkIIIYRbkiRICCGEEG5JkiAhhBBCuCVJgoQQQgjhliQJEkIIIYRbkiRICCGEEG5JkiAhhBBCuCVJgoQQQgjhlv4fLC6/WG7900kAAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -10111,7 +10177,7 @@ "outputs": [ { "data": { - "image/png": "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IiguLm5wrsViQa/XM2HCBMLDw5k3bx7jx49n4MCB/Pnnn612vpaN53I097P+p3D99derIUOGKKWOdisqpdRFF12khgwZosrKylR2draaOnWq0uv1avLkyeqee+5RUVFR6sknn1Rms9krM2h72j9s2DB14MAB27GysjJ15MgR9cwzz6jU1FT1zDPPHNc9703suQdDhw5VhYWFqrS0VD377LPKYDCo4cOHq1tuuUXFx8erqVOnqurqaq+8B835HsjJyVG5ubnqySefVB06dFDfffede4N2MuvXzTrUXFtbq5577jkVERGh/vzzT6VUw3uilFKvvvqquuCCC2znDR48WO3atcu9gTtJc9pfUFCgcnJy1Ny5c1VKSop69dVXGzyXN7Gn/dYhuIKCAnXXXXepkJAQdeedd6r7779fJSQkqIkTJ3r98POhQ4dUcXFxg2MVFRUqPj7e1oP2d6WlpWrQoEFKp9OpMWPG2KantHY+lShZffLJJyomJsbWvVhTU6OU0sasdTqd+uWXX5RS2g/Uyy+/rG677TY1cuRI9cUXX3gsZmc6Vfut8282bdqknnjiCdWjRw/VqVMn9b///c9jMTubvd8DSim1dOlS9dhjj6kJEyaor776yiPxOpu93wN1dXVqyZIlqkOHDio9PV19/fXXHovZFayJ4549e9TQoUPVhRdeeMLzxowZo3Q6nUpPT1dLly51Z4guZU/79+7dq5544gnVsWPHVvd7wJ72FxUVqYceekhdeeWVavTo0a2q/Uo1THa//vprlZaWpsrKyo4bgt6yZYtKTk5uFf8sNVWrS5SqqqrU3r17T1rrY8eOHWrMmDHqkksusR2z/gfVt29f9fDDD7slVldwZvsrKirURx99pN5//33XB+5E8j3g3Pbn5+d7XdFBe+7Bscxms1qyZImKiIhQ33zzjVJKSxKNRqMyGo3qscceU2+88YbL43YWZ7TfaDTaJvd/++236oMPPnB53M7irPZb560ppRp87A2acg+sydIDDzygLrroohOeYzab1cKFC50fqBdoVYnS7NmzVVpamurXr58aMGCA2rJli1Lq+G5kpZT6z3/+o1JSUtSbb75pO5aXl6e6dOmiXn/9daWU93UrO7v93sjX74Gz2++NRQWbcg+UOvpznpOToyZOnKhOO+00deDAAXXVVVfZVkN50+8CZ7bfG38OnNn+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", + "image/png": "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IiguLm5wrsViQa/XM2HCBMLDw5k3bx7jx49n4MCB/Pnnn612vpaN53I097P+p3D99derIUOGKKWOdisqpdRFF12khgwZosrKylR2draaOnWq0uv1avLkyeqee+5RUVFR6sknn1Rms9krM2h72j9s2DB14MAB27GysjJ15MgR9cwzz6jU1FT1zDPPHNc9703suQdDhw5VhYWFqrS0VD377LPKYDCo4cOHq1tuuUXFx8erqVOnqurqaq+8B835HsjJyVG5ubnqySefVB06dFDfffede4N2MuvXzTrUXFtbq5577jkVERGh/vzzT6VUw3uilFKvvvqquuCCC2znDR48WO3atcu9gTtJc9pfUFCgcnJy1Ny5c1VKSop69dVXGzyXN7Gn/dYhuIKCAnXXXXepkJAQdeedd6r7779fJSQkqIkTJ3r98POhQ4dUcXFxg2MVFRUqPj7e1oP2d6WlpWrQoEFKp9OpMWPG2KantHY+lShZffLJJyomJsbWvVhTU6OU0sasdTqd+uWXX5RS2g/Uyy+/rG677TY1cuRI9cUXX3gsZmc6Vfut8282bdqknnjiCdWjRw/VqVMn9b///c9jMTubvd8DSim1dOlS9dhjj6kJEyaor776yiPxOpu93wN1dXVqyZIlqkOHDio9PV19/fXXHovZFayJ4549e9TQoUPVhRdeeMLzxowZo3Q6nUpPT1dLly51Z4guZU/79+7dq5544gnVsWPHVvd7wJ72FxUVqYceekhdeeWVavTo0a2q/Uo1THa//vprlZaWpsrKyo4bgt6yZYtKTk5uFf8sNVWrS5SqqqrU3r17T1rrY8eOHWrMmDHqkksusR2z/gfVt29f9fDDD7slVldwZvsrKirURx99pN5//33XB+5E8j3g3Pbn5+d7XdFBe+7Bscxms1qyZImKiIhQ33zzjVJKSxKNRqMyGo3qscceU2+88YbL43YWZ7TfaDTaJvd/++236oMPPnB53M7irPZb560ppRp87A2acg+sydIDDzygLrroohOeYzab1cKFC50fqBdoVYnS7NmzVVpamurXr58aMGCA2rJli1Lq+G5kpZT6z3/+o1JSUtSbb75pO5aXl6e6dOmiXn/9daWU93UrO7v93sjX74Gz2++NRQWbcg+UOvpznpOToyZOnKhOO+00deDAAXXVVVfZVkN50+8CZ7bfG38OnNn+N954o9HrWrKm3gPr8XPPPVc9/fTTSimlysvL1S233NKg8KyvahWJknXLhR49eqhvvvlGffzxx2r48OHqrLPOOu5c6w9Ffn6++te//qX8/f3Vq6++qjZv3qzmz5+vOnbsqDZu3OjuJjjE19uvlNwDX2+/Uk27B4357LPPlE6nUzqdTnXq1Mmr5iFJ+327/Uo5dg8KCwtVp06d1ObNm9Xbb7+tYmNjVWpqqvrzzz+96h8FV2gVidLvv/+uunXrpn799Vfbsblz56rx48fb/iNu7D/je+65R/Xu3Vt17NhRJScne+X8A19vv1JyD3y9/Uo5dg9MJpNatmyZSkxMVO3bt1dffvmlW2J2Jmm/b7dfKcfuweLFi5VOp1MJCQkqKirquH0ufZlXlwdQ9cs4TSYTu3fvbrC79XfffUdKSgqrV68Gji+3b7123rx5/Prrr7z//vscOnSISy+91E3RO87X2w9yD3y9/eDYPbAym818+umn3HzzzWRlZXHhhRe6PnAnkfb7dvvBOffAWpH9zjvvpLi4mIkTJ7o+cG/hmfys+d555x319NNPq5UrV9qKoWVnZ6tzzz1XJSQkqBtvvFGFh4ervn37qgsuuEAlJCSoK6+8stGlnN42B8PX26+U3ANfb79Szr0H1vafqCp3SyXt9+32K+X83wPZ2dm2DX9FQ16TKO3du1f1799fdejQQQ0ePFglJiaqiy++2DYJrbS0VP34449qyJAh6pFHHlFKad2p27dvVzqdTv3www9KKe+alHksX2+/UnIPfL39Ssk9kPb7dvuVknvgCV6TKM2bN0+deeaZqrq6WpWVlalff/1VBQcHqzvvvFPl5eUppbR9eZKTk1V2drZSSvvmMJvNqm3btmrWrFmeDN9hvt5+peQe+Hr7lZJ7IO337fYrJffAE7xijlJdXR3/+9//6NevH0FBQYSGhjJo0CDeeOMNPvjgA1asWGE7r02bNmRmZgLart8rV64kKirK68acj+Xr7Qe5B77efpB7IO337faD3ANPafGJklIKf39/IiMjOXDgAIBtL7JrrrmG3r178+6771JeXk5ERASdO3fmuuuu49lnn+XBBx9kwoQJDBs2jO7du3uyGc3m6+0HuQe+3n6QeyDt9+32g9wDj/JcZ1bTvPfeeyo2NtZW/Mq65cLatWuVTqezFdTavHmzuu6669T555+vzj33XPX99997LGZn8vX2KyX3wNfbr5TcA2m/b7dfKbkHntDiEyWj0aiUUmrDhg1q2LBhasKECbbHrKsVunTpoubMmdPgOm/fsNDK19uvlNwDX2+/UnIPpP2+3X6l5B54kseH3pYuXUpJSclxx81mMwD+/v4A9O/fnwkTJvDTTz/x4YcfAlo9iOzsbIxGI6mpqcDRehIRERFuiN5xvt5+kHvg6+0HuQfSft9uP8g9aNE8laH99NNPqnv37kqn06lXXnml0fM+/PBD5e/vrz755BNVVFSk7rnnHhUSEqLeeOMNtW3bNvX000+rrl27qp07d7oxesf5evuVknvg6+1XSu6BtN+326+U3ANv4JFEaffu3eqqq65St912m7r99ttVcnKyOnjwoO1xi8WiSktL1YQJE1RcXJx67rnnGuzcfOutt6pevXqp9PR0lZKSor7++mtPNKPZfL39Ssk98PX2KyX3QNrv2+1XSu6Bt/BIopSfn6/+85//qG3btqnKykqVmpqq7rrrrgbn1NbWqg8++EDl5ubajlkLZFksFlVRUaHWr1/vzrCdxtfbr5TcA19vv1JyD6T9vt1+peQeeAu3JEolJSXHHTt224R3331XBQQEqA0bNiilTl0x1Nu2XPD19isl98DX26+U3ANpv2+3Xym5B97KpYnS8uXLVY8ePdTs2bNVdXX1Sc8dPHiwuuCCC2wz+1sDX2+/UnIPfL39Ssk9kPb7dvuVknvg7VySKNXV1ak333xTde/eXXXp0kWlpKSoTZs2nfSaX375Ren1erV06VKllJYpFxQUuCI8l/P19isl98DX26+U3ANpv2+3Xym5B62FS8oD1NbWUltbyzXXXMOGDRswm828+uqrlJeXN3pNRkYG1113HY899hgrVqxg7NixPP/889TW1roiRJfy9faD3ANfbz/IPZD2+3b7Qe5Bq+GqDCw7O1uVl5crpZT6+OOPlZ+fn1q+fPlJr1m3bp3S6XRKp9OpUaNGqcLCQleF53K+3n6l5B74evuVknsg7fft9isl96A1cPlkbutks4yMDDVq1KgGM/ePPWfx4sUqMDBQDRw4sFXN4Pf19isl98DX26+U3ANpv2+3Xym5B97M5YmSyWRSSim1detWpdPp1DvvvGP7hrHO6K+oqFDz589Xr732mqvDcTtfb79Scg98vf1KyT2Q9vt2+5WSe+DNdErV1zl3IbPZjMFgYPLkyfz8888sW7aMmpoavv/+e2644QbCwsJcHYJH+Xr7Qe6Br7cf5B5I+327/SD3wGu5IxuzZs1Go1GFhYWp0047Tel0OnX11VerioqKU9aK8Ha+3n6l5B74evuVknsg7fft9isl98Bb+bkjGdPr9VRUVPDll19iNBoB+Oabbxg9erQ7Xt7jfL39IPfA19sPcg+k/b7dfpB74LXclZF9/vnnymAwqGeeecZdL9mi+Hr7lZJ74OvtV0rugbTft9uvlNwDb+SWOUoApaWlhISE4O/v746Xa3F8vf0g98DX2w9yD6T9vt1+kHvgjdyWKAkhhBBCeBuXVOYWQgghhGgNJFESQgghhGiEJEpCCCGEEI2QREkIIYQQohGSKAkhhBBCNEISJSGEEEKIRkiiJIQQQgjRCEmUhBBCCCEaIYmSEEIIIUQjJFESQgghhGiEJEpCCCGEEI34f+c6+G92k0DaAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -18942,16 +19008,16 @@ 0, 0, 0, - 0.0111112703796746, - 0.07277171687227013, - 0.48705175319405947, - 0.17034080280505, - 0.15973975419841374, - 0.16220293377023162, - 0.48600200236628477, + 0.011111270398829653, + 0.07277171687196633, + 0.4870517531940597, + 0.17034080280505007, + 0.15973975419841072, + 0.16220293368595987, + 0.486002002366275, 0.6264046697104111, 0.5036368024224662, - 0.023300586299804346, + 0.023300586827893183, 0, 0, 0, @@ -18966,16 +19032,16 @@ 0, 0, 0, - 0.009193864853621139, - 0.10333239322391767, - 0.723972142931642, - 0.6724974949385697, - 0.5967403007466325, - 0.59118092298749, + 0.009193864842137692, + 0.10333239322174612, + 0.7239721429333653, + 0.6724974949410113, + 0.5967403007494596, + 0.5911809178359669, 0.6582411742156383, - 0.6945693033769464, - 0.522568393722113, - 0.03287449805331394, + 0.6945693033769466, + 0.5225683937221156, + 0.03287449867484171, 0, 0, 0, @@ -18990,16 +19056,16 @@ 0, 0, 0, - 0.026631775997970456, - 0.45327841681931447, - 0.690786472120292, - 0.6146305288398127, - 0.5877745339498891, - 0.5870879549283865, - 0.652357761419237, - 0.7084002108074068, + 0.02663177599797046, + 0.45327841681931463, + 0.6907864721218977, + 0.6146305288419204, + 0.5877745447231075, + 0.5870879519579516, + 0.6523577614169138, + 0.7084002108054326, 0.45217508144009877, - 0.04029244656763926, + 0.04029244709710052, 0, 0, 0, @@ -19014,15 +19080,15 @@ 0, 0, 0, - 0.02759191250951821, + 0.027591912509518247, 0.25857832507407574, - 0.6541799737982448, - 0.6631475996387995, - 0.47061082437213275, - 0.44501507631463977, - 0.6325388860491429, - 0.5559062186291793, - 0.5370045805315344, + 0.6541799737982449, + 0.6631476078135119, + 0.4706108200947339, + 0.4450150763140382, + 0.6325388860471284, + 0.5559062186277132, + 0.5370045805390079, 0.055989284976208545, 0, 0, @@ -19038,16 +19104,16 @@ 0, 0, 0, - 0.027826398182993997, - 0.45786625061890646, - 0.7370170701370133, + 0.02782639840242974, + 0.4578662506189066, + 0.7370170701370136, 0.7278719758971478, 0.6427612060216814, 0.5952724472163612, 0.49326884337449023, - 0.6825725367823327, - 0.5514982037376186, - 0.04458376284225162, + 0.6825725367805433, + 0.5514982037454815, + 0.0445837626507763, 0, 0, 0, @@ -19062,14 +19128,14 @@ 0, 0, 0, - 0.03386442924934507, - 0.3182958235125013, - 0.5877481259395956, + 0.03386442948868888, + 0.3182958209934344, + 0.5877481259395959, 0.6827090136766713, 0.6115123111199482, - 0.6076897131663324, - 0.6686933158393542, - 0.7252014493018418, + 0.6076897239416326, + 0.668693315839354, + 0.725201449301842, 0.574218238736707, 0.05021606927284108, 0, @@ -19086,16 +19152,16 @@ 0, 0, 0, - 0.028099194663657782, - 0.45634263009499576, - 0.751213980186169, - 0.6956737462633241, - 0.6259176577372687, - 0.5522076950314583, + 0.028099195532683936, + 0.45634263008588954, + 0.7512139801878921, + 0.6956737368239935, + 0.6259176487055987, + 0.5522076945944754, 0.7159469438081907, - 0.7474953995813469, - 0.580347945749411, - 0.050898449161715445, + 0.7474953995813346, + 0.5803479457494887, + 0.050898449161715466, 0, 0, 0, @@ -19110,16 +19176,16 @@ 0, 0, 0, - 0.013100910588799279, + 0.01310091067039379, 0.3215168517217903, - 0.6163508463303617, - 0.6878439279367343, - 0.6146200319343375, - 0.566843716828541, - 0.4872108166108307, - 0.7416968198731085, + 0.6163508463318321, + 0.6878439279417091, + 0.614620039248158, + 0.5668437225435831, + 0.4872108166086609, + 0.7416968198711498, 0.5971951507094037, - 0.05546015926850077, + 0.05546016033557134, 0, 0, 0, @@ -19134,16 +19200,16 @@ 0, 0, 0, - 0.016718675370450502, + 0.016718675370450506, 0.44795408704870815, 0.7210063084111384, 0.6032324553232726, - 0.5999028535149242, - 0.5975071758587533, - 0.681848203273652, - 0.26832507910704123, - 0.07983377208876423, - 0.01860740410908985, + 0.5999028603427516, + 0.5975071868239702, + 0.6818482032692634, + 0.26832507910600356, + 0.07983377208702619, + 0.018607404110711125, 0, 0, 0, @@ -19159,14 +19225,14 @@ 0, 0, 0.008908949688594977, - 0.40982216335034516, + 0.40982216335034544, 0.672894801169186, 0.36454247304066845, - 0.5974318310326723, - 0.5633838257045193, - 0.4944349432169094, - 0.3710665335673984, - 0.5536146004751579, + 0.5974318310326875, + 0.5633838287892208, + 0.4944349432169018, + 0.3710665335652653, + 0.5536146004820843, 0.05580990250535752, 0, 0, @@ -19182,16 +19248,16 @@ 0, 0, 0, - 0.025432021542933166, - 0.3171934234853841, - 0.7273382239459822, + 0.025432021273174777, + 0.3171934234797585, + 0.7273382239460019, 0.6827697466989426, - 0.6261868370956805, - 0.6060401123024013, - 0.5969914673217378, + 0.6261868461027172, + 0.606040111901752, + 0.5969914572935164, 0.4285896366292516, 0.08155233161474684, - 0.011940402145581905, + 0.011940402146147297, 0, 0, 0, @@ -19206,16 +19272,16 @@ 0, 0, 0, - 0.02818452310934109, - 0.46795268423035224, - 0.7448105064009761, - 0.7012960011362647, - 0.6398985201289654, - 0.6268315609904347, - 0.6565722838992466, - 0.35263988737462115, + 0.028184523104500717, + 0.4679526842120135, + 0.7448105064044339, + 0.7012960011412135, + 0.6398985125286792, + 0.6268315609904345, + 0.656572283899234, + 0.35263988737461444, 0.46932525585243134, - 0.08671618629309662, + 0.08671618707529792, 0, 0, 0, @@ -19230,13 +19296,13 @@ 0, 0, 0, - 0.02681438205263064, - 0.3994996651037703, - 0.728109397647592, - 0.6825782879501698, - 0.23514079106702707, - 0.21504945083953286, - 0.6734469763725791, + 0.026814382052630648, + 0.3994996619747543, + 0.7281093976509736, + 0.682578287954674, + 0.23514079106663285, + 0.21504945127029454, + 0.6734469763704152, 0.7397801219750096, 0.6520750112708894, 0.07330322173959113, @@ -19258,11 +19324,11 @@ 0.47846320694883737, 0.7543530596340966, 0.712096183931145, - 0.6448279475346923, - 0.6289410351784457, - 0.6790338677346033, - 0.7327167803706676, - 0.6437143212509451, + 0.6448279382361504, + 0.62894102530513, + 0.6790338792185355, + 0.7327167803666406, + 0.6437143274913634, 0.07718274059407432, 0, 0, @@ -19278,16 +19344,16 @@ 0, 0, 0, - 0.030496857316044287, + 0.030496857316044294, 0.48127896087017674, 0.753697096540296, 0.7047587801314787, 0.6381845469188396, - 0.6193079550059133, + 0.6193079550059126, 0.6703271927731759, - 0.7273253601615942, - 0.6374020639477269, - 0.07967102753863942, + 0.727325360157622, + 0.6374020639553848, + 0.07967102628563989, 0, 0, 0, @@ -19302,16 +19368,16 @@ 0, 0, 0, - 0.017420623587870363, - 0.4043211118959561, - 0.569635319676916, + 0.017420623587870367, + 0.4043211145488108, + 0.5696353196769157, 0.4464851623749336, 0.40879450336281403, 0.38529405996400595, 0.30974337717552325, 0.22382999908288684, - 0.13207519778355054, - 0.02523791377049714, + 0.13207519778355087, + 0.02523791376539242, 0, 0, 0, @@ -19326,16 +19392,16 @@ 0, 0, 0, - 0.032365049376719926, - 0.4934879657555358, - 0.7402140702041834, - 0.6878084461168981, - 0.6624601648045993, - 0.6561391324203196, - 0.6854613212212564, - 0.6554738391940831, - 0.5037652813620619, - 0.14084026356243567, + 0.032365049782102896, + 0.4934879711325594, + 0.740214070205832, + 0.6878084461192084, + 0.6624601753589293, + 0.6561391324203206, + 0.6854613212212668, + 0.6554738391940834, + 0.5037652813620618, + 0.14084026356243565, 0.001583379461877725, 0, 0, @@ -19350,16 +19416,16 @@ 0, 0, 0, - 0.014157512492574664, - 0.45044349821579255, - 0.7432808024352416, - 0.6181825512200625, - 0.6530009393069472, - 0.6473496909475155, - 0.5703580463707831, + 0.014157512557779348, + 0.4504434982009174, + 0.7432808024368183, + 0.6181825512219391, + 0.6530009393099169, + 0.6473496821140604, + 0.5703580389680292, 0.43263132292340606, - 0.33060989541511776, - 0.05698405454659924, + 0.3306098954151179, + 0.05698405487952108, 0, 0, 0, @@ -19374,17 +19440,17 @@ 0, 0, 0, - 0.031208060717651226, + 0.031208060854255783, 0.42193429904710295, 0.6995200876180595, - 0.6879041606053122, - 0.6379659570533456, - 0.6269017984203141, - 0.6776791279934778, - 0.721445508899424, - 0.6701034036033556, - 0.11317195057570574, - 0.0012094850310830415, + 0.6879041689569045, + 0.6379659570546714, + 0.6269017984194627, + 0.6776791173749432, + 0.7214455088974516, + 0.6701034036026704, + 0.11317194982347006, + 0.001209485031043615, 0, 0, 0, @@ -19403,11 +19469,11 @@ 0.5550949369562849, 0.6132075698631518, 0.6608535117917735, - 0.6907457383767549, - 0.6667693147392758, - 0.5050093584386486, - 0.24015404954486413, - 0.042930277471187044, + 0.6907457383767551, + 0.666769305036515, + 0.5050093584371197, + 0.24015404954320285, + 0.042930277515256944, 0, 0, 0, @@ -19422,16 +19488,16 @@ 0, 0, 0, - 0.005990918530897637, - 0.05149923613524147, - 0.125820692070319, + 0.005990918530897639, + 0.051499236135636256, + 0.12582069207031896, 0.2436550132740642, - 0.3223097977825703, + 0.32230979778257024, 0.1939387770115408, 0.12922345771272273, 0.30466352114257417, 0.18461239348004937, - 0.07848658177935572, + 0.07848658193794329, 0, 0, 0, @@ -19446,17 +19512,17 @@ 0, 0, 0, - 0.01415292254607504, - 0.1118533004221375, - 0.14756705725244834, - 0.2982327863909601, - 0.4013447569222365, - 0.5906558398876933, + 0.014152922546075036, + 0.11185330042301096, + 0.14756705725296057, + 0.2982327875736025, + 0.40134475692214144, + 0.5906558398876932, 0.27772461765293677, - 0.415078326287562, + 0.41507832628756197, 0.14085544703565278, 0.08806277447700828, - 0.0025586280018234297, + 0.0025586280018247065, 0, 0, 0, @@ -19470,17 +19536,17 @@ 0, 0, 0, - 0.022610143957434638, - 0.0755710446865445, - 0.14351676861948884, - 0.2551838852551089, - 0.3570859564779389, - 0.5911615327373528, - 0.3773562396691132, - 0.3518079853186352, + 0.022610143884683742, + 0.07557104468717367, + 0.1435167686199647, + 0.2551838852555399, + 0.357085953656568, + 0.5911615327362825, + 0.37735623966860715, + 0.35180798531862795, 0.6797541448288331, - 0.16212617779015198, - 0.001903395053958021, + 0.16212617779015204, + 0.0019033950535403865, 0, 0, 0, @@ -19494,16 +19560,16 @@ 0, 0, 0, - 0.04351090972653039, - 0.5459768276062297, - 0.6944917804716447, - 0.6402650880004759, - 0.6868127020171182, - 0.7074625774836871, - 0.7208918315490354, - 0.6269163219252428, - 0.11600295922867919, - 0.03182947039932278, + 0.04351090909660572, + 0.5459768276062298, + 0.694491780471645, + 0.640265080732803, + 0.6868127107923628, + 0.7074625805814352, + 0.720891841972153, + 0.6269163219219298, + 0.11600295922763627, + 0.03182947044250157, 0, 0, 0, @@ -19518,17 +19584,17 @@ 0, 0, 0, - 0.03543589940199758, + 0.035435898791166605, 0.5428253149763237, 0.784607683115634, 0.7457734446494513, 0.6852057368943937, - 0.6708963031550127, - 0.7250568472316787, - 0.5426304404552503, - 0.25563890424346386, - 0.1068994049873499, - 0.0019187272094088026, + 0.6708963025376341, + 0.7250568472275073, + 0.542630440452292, + 0.2556389042414163, + 0.10689940487670868, + 0.001918727209570399, 0, 0, 0, @@ -19542,17 +19608,17 @@ 0, 0, 0, - 0.050991466402332736, - 0.5956700800393201, + 0.05099146600624972, + 0.5956700859435932, 0.5534288730804761, - 0.676898904078367, - 0.42877944641103927, - 0.4162641555052741, - 0.21742727327952502, + 0.6768989040783473, + 0.4287794429017265, + 0.4162641555052756, + 0.2174272738062099, 0.19913429162554713, - 0.4267668879925966, - 0.11898123545550472, - 0.006449469611142275, + 0.4267668879925967, + 0.11898123545665436, + 0.006449469611018571, 0, 0, 0, @@ -19566,16 +19632,16 @@ 0, 0, 0, - 0.013407669091586019, - 0.03555994206922291, - 0.09768164009926428, - 0.12314175144541782, - 0.21935467273490278, - 0.3944985545970284, - 0.07707299478796802, - 0.12232268941586118, + 0.013407669091586024, + 0.035559942069642254, + 0.09768164009962851, + 0.12314175144475312, + 0.21935467292428143, + 0.3944985544740653, + 0.07707299479688834, + 0.12232268941586115, 0.06179182642635145, - 0.02131301331369238, + 0.021313013313692383, 0, 0, 0, @@ -19590,17 +19656,17 @@ 0, 0, 0, - 0.054580373805565595, - 0.5822779433203153, - 0.8053595556031405, - 0.7625284526986911, - 0.7027600066538683, - 0.6851901958976389, - 0.7332731995794465, + 0.05458037380556561, + 0.5822779433030112, + 0.8053595556063043, + 0.7625284527010817, + 0.7027600066565853, + 0.6851901958963517, + 0.7332731995774097, 0.7963382717371409, 0.7731292389547101, 0.2301038913162806, - 0.0025548953087646043, + 0.002554895308768731, 0, 0, 0, @@ -19614,16 +19680,16 @@ 0, 0, 0, - 0.007690420423286721, - 0.06264317652143059, + 0.007690420423286722, + 0.06264317656745304, 0.13974839900038663, - 0.24185284238029228, - 0.43303412791134216, - 0.6069062642395447, - 0.559390603808532, - 0.4061977554414541, - 0.40278158641487993, - 0.06289134287131429, + 0.24185284238029223, + 0.43303413113774564, + 0.6069062642390635, + 0.5593906096307556, + 0.40619775543874287, + 0.40278158641314754, + 0.06289134274997195, 0.0019028084284810737, 0, 0, @@ -19638,17 +19704,17 @@ 0, 0, 0, - 0.05610000466531267, - 0.24290278258661482, + 0.056100004665312654, + 0.24290278258661493, 0.6442507219293729, 0.629802307400686, - 0.6536421718426453, + 0.6536421718426452, 0.20866744206779791, - 0.14885492387729007, - 0.21680222229947868, - 0.1284464918283147, - 0.03227157225658922, - 0.0012473486293615834, + 0.14885492373499667, + 0.21680222229829008, + 0.1284464918276698, + 0.03227157225343569, + 0.0012473486293615847, 0, 0, 0, @@ -19663,16 +19729,16 @@ 0, 0, 0.07222583595576124, - 0.5728465458303509, + 0.572846545817124, 0.39153113614734264, - 0.616866873113481, - 0.6812771611464209, - 0.477486816636188, + 0.6168668731134969, + 0.6812771599942936, + 0.47748681663618825, 0.4736754422633089, 0.5242375239892563, - 0.4099126036448292, - 0.14355511979594765, - 0.005538802552975926, + 0.409912603644829, + 0.1435551189467666, + 0.005538802552638963, 0, 0, 0, @@ -19686,17 +19752,17 @@ 0, 0, 0, - 0.03329625009253504, - 0.1504947537422295, - 0.507778384162806, - 0.6216119919884171, - 0.513774618179069, + 0.033296250091092716, + 0.1504947537433766, + 0.5077783841642193, + 0.6216119848862183, + 0.5137746181790688, 0.6525684169690907, 0.5607141013144213, - 0.3197950119480759, - 0.12657864427395757, - 0.07591983739084852, - 0.003106075256090349, + 0.319795011948067, + 0.1265786442739512, + 0.07591983739085009, + 0.003106075256211835, 0, 0, 0, @@ -19710,17 +19776,17 @@ 0, 0, 0, - 0.06884502545047029, - 0.6496356424916697, - 0.8475475608017103, - 0.8007097329310146, - 0.7412954573696855, - 0.7237577578189778, - 0.7717201738245875, + 0.06884502544119916, + 0.6496356424825318, + 0.8475475608033508, + 0.8007097453138945, + 0.741295463965524, + 0.7237577592203879, + 0.7717201738205421, 0.8398625657209653, 0.8287768799274425, - 0.3170461562483225, - 0.004220439360351604, + 0.3170461562483241, + 0.004220439360351605, 0, 0, 0, @@ -19734,17 +19800,17 @@ 0, 0, 0, - 0.0058557806555708854, + 0.005855780656068981, 0.030306871096541184, 0.05774128294611079, - 0.08860424609360769, - 0.10541337827593313, - 0.1588464600329666, - 0.14867067621454902, - 0.17459467064569967, - 0.10510925522049042, - 0.039772306608992294, - 0.004439731386712789, + 0.08860424609304983, + 0.105413378259708, + 0.15884646003311823, + 0.1486706762153188, + 0.17459467064534528, + 0.10510925521972635, + 0.03977230661795044, + 0.004439731385997852, 0, 0, 0, @@ -19758,17 +19824,17 @@ 0, 0, 0, - 0.0321037117638336, + 0.03210371176383362, 0.1461604798696814, 0.21091593162380834, - 0.44729520156996827, - 0.46966635622076963, - 0.37368415269347327, - 0.4136500691982547, - 0.34720852676438174, - 0.2870964865828627, - 0.10544845692431082, - 0.007773433928281275, + 0.44729520156996844, + 0.46966635835677156, + 0.37368415264165694, + 0.4136500691988132, + 0.34720852676306213, + 0.2870964865781458, + 0.10544845722943513, + 0.007773433929384968, 0, 0, 0, @@ -19782,17 +19848,17 @@ 0, 0, 0, - 0.09236583994079889, - 0.712387870074488, + 0.09236583994079892, + 0.7123878700648432, 0.8871774832218313, 0.8345353339333257, - 0.7806093617870025, + 0.780609355291886, 0.7547698418614103, - 0.8031433319557736, + 0.8031433319557737, 0.8600791033271755, 0.8489965191407172, - 0.3058498996575797, - 0.006470567601933885, + 0.30584989967356857, + 0.0064705676019338855, 0, 0, 0, @@ -19807,16 +19873,16 @@ 0, 0, 0.024951752138255515, - 0.11375585931421041, - 0.1917701155031583, - 0.2787938728717155, + 0.11375585931545469, + 0.1917701155044683, + 0.27879387194766236, 0.3600367188558135, - 0.46907193505432027, + 0.4690719346448729, 0.3819133755762809, 0.38941572653430634, 0.4130674688714636, - 0.1645321337492756, - 0.004586092018795901, + 0.16453213374927564, + 0.0045860920187959, 0, 0, 0, @@ -19830,17 +19896,17 @@ 0, 0, 0, - 0.011932186782144848, - 0.05829660346069353, - 0.11221818798277522, - 0.13885492329726173, - 0.2101360197552523, - 0.2579025639558357, - 0.26963764577057825, + 0.01193218678214485, + 0.058296603461344444, + 0.11221818798317401, + 0.1388549232965614, + 0.2101360199159244, + 0.2579025639562172, + 0.26963764633038356, 0.1670149758467505, 0.07605629587525316, 0.040798279889120145, - 0.0024128343840752902, + 0.002412834382700285, 0, 0, 0, @@ -19854,17 +19920,17 @@ 0, 0, 0, - 0.08543930093357872, + 0.08543930093357867, 0.751394397006987, 0.8901268462342908, - 0.8484396791130373, - 0.7892297607930584, - 0.7733013225633231, - 0.8191102118854111, - 0.8808393972150652, - 0.8725725687888979, - 0.3786431065579796, - 0.0068386199951172375, + 0.8484396791177374, + 0.7892297607957173, + 0.7733013225621206, + 0.8191102021670406, + 0.880839406498464, + 0.8725725687865987, + 0.3786431065579797, + 0.006838619995016942, 0, 0, 0, @@ -19878,16 +19944,16 @@ 0, 0, 0, - 0.03049879839300914, - 0.14060640573817224, - 0.2999329409585734, + 0.030498798393009126, + 0.14060640573817226, + 0.299932940958581, 0.42312710989437063, - 0.5463952250039483, + 0.5463952262082564, 0.7048184327050645, - 0.7756935141978123, - 0.24858621437156328, - 0.0967222384315091, - 0.04779087430924502, + 0.7756935141969393, + 0.24858621504746395, + 0.0967222384312508, + 0.047790874308969784, 0.004473216397718112, 0, 0, @@ -19902,17 +19968,17 @@ 0, 0, 0, - 0.07553756707881801, - 0.730265436023855, + 0.07553756707460942, + 0.7302654360238552, 0.7949610454087509, 0.8442000727299317, - 0.5606009136002539, - 0.6532358489767356, - 0.5079213773354229, - 0.38278448292185135, - 0.19952144616279055, - 0.06975619145234092, - 0.0059043163892314445, + 0.5606009136002538, + 0.6532358489767355, + 0.5079213773354226, + 0.382784482921846, + 0.19952144616279047, + 0.06975619145186193, + 0.005904316388542021, 0, 0, 0, @@ -19926,16 +19992,16 @@ 0, 0, 0, - 0.10730947425169375, - 0.7653028303795539, - 0.923562087679856, - 0.8794683926717707, + 0.10730947424618388, + 0.7653028303610511, + 0.9235620876816193, + 0.8794683926740936, 0.8284270664614329, 0.8058078563139153, 0.844479435182974, 0.9014599875864786, 0.8913261884914112, - 0.468130822094125, + 0.46813082209412477, 0.01225070236960221, 0, 0, @@ -19950,17 +20016,17 @@ 0, 0, 0, - 0.058999035277208275, - 0.09072646101162468, - 0.2614885521362434, - 0.39780977235700504, - 0.3365189679166003, - 0.1911943236789909, - 0.1353842525255697, + 0.05899903527723242, + 0.09072646110823793, + 0.2614885521371767, + 0.3978097723572384, + 0.33651896868011705, + 0.19119432367914488, + 0.13538425252591677, 0.22370921227182605, - 0.18925469237358378, - 0.1278076506752739, - 0.007796061021628685, + 0.18925469237358383, + 0.12780765067527383, + 0.0077960610206622835, 0, 0, 0, @@ -19974,17 +20040,17 @@ 0, 0, 0, - 0.033538620439804386, + 0.0335386204163035, 0.16769341571841645, - 0.49834389514261795, - 0.6598275493646075, - 0.5763010734814537, - 0.5263197216184268, - 0.5874209143515905, - 0.6898851272732486, - 0.8808820940817685, - 0.4398403013855141, - 0.014616409693866237, + 0.49834389514261784, + 0.6598275493658198, + 0.576301073481538, + 0.5263197233336874, + 0.5874209182824167, + 0.6898851325175416, + 0.8808820940813471, + 0.43984030138551505, + 0.014616409833784082, 0, 0, 0, @@ -19997,18 +20063,18 @@ 0, 0, 0, - 0.001714999440275183, - 0.18593657032456384, - 0.8421234146797258, - 0.9379934172011593, + 0.0017149994402742843, + 0.18593657032456398, + 0.8421234146796804, + 0.9379934172011823, 0.8972133211212744, 0.8675507555352507, - 0.8238673452584209, - 0.8506749517331651, - 0.913463339988192, - 0.7943005088993761, - 0.49975745403371347, - 0.019137689491549887, + 0.823867345258421, + 0.850674951729422, + 0.9134633399857229, + 0.7943005088985314, + 0.4997574516826185, + 0.019137689713272194, 0, 0, 0, @@ -20021,18 +20087,18 @@ 0, 0, 0, - 0.0013497337637437452, - 0.16929994472183305, - 0.8211868976822269, + 0.0013497337640646532, + 0.16929994471410256, + 0.8211868976822273, 0.9091806991856094, - 0.8697018581325744, + 0.869701847136928, 0.8195629462902533, - 0.8606610177601336, - 0.7787063205420969, - 0.6659262479772358, - 0.9137381263616904, - 0.5083197661805674, - 0.014200667506662391, + 0.8606610133006375, + 0.7787063139272711, + 0.6659262479772294, + 0.9137381263598967, + 0.5083197661992687, + 0.014200667506662396, 0, 0, 0, @@ -20045,18 +20111,18 @@ 0, 0, 0, - 0.0015402021246191915, - 0.07991743256044262, - 0.24847286268090352, - 0.73834163972581, - 0.7764765919898059, + 0.0015402021246191918, + 0.07991743255976017, + 0.24847286268229374, + 0.7383416397272993, + 0.7764765919913104, 0.7278257247850063, - 0.8426040613941835, + 0.8426040613941831, 0.7873166912798644, - 0.5045383955425476, + 0.5045383955425475, 0.7365818393056089, 0.2675265736986106, - 0.011075396480709576, + 0.011075396480527855, 0, 0, 0, @@ -20070,17 +20136,17 @@ 0, 0, 0.0017358602441579609, - 0.20379239892954176, - 0.734660153941671, - 0.8937719733056607, - 0.8677138461938698, - 0.8250864673497669, - 0.7611087926873497, + 0.2037923989132794, + 0.7346601539419572, + 0.893771973309161, + 0.8677138461980182, + 0.825086467350905, + 0.7611087922810333, 0.620711602954826, - 0.3575915844795979, - 0.2512611384995694, - 0.2411688407252813, - 0.010365980900703843, + 0.357591584479595, + 0.2512611384995564, + 0.24116884072528852, + 0.010365980900703845, 0, 0, 0, @@ -20093,18 +20159,18 @@ 0, 0, 0, - 0.001466762750829101, + 0.0014667627508288925, 0.06788122987036523, - 0.4336443351029177, + 0.43364433510291767, 0.5993089595075698, - 0.912830203498176, - 0.8475560884298925, - 0.8287150674432737, - 0.8631024431413242, - 0.8722162494135618, - 0.6501666831679349, + 0.9128302035025946, + 0.8475560884323219, + 0.8287150674420455, + 0.8631024489974717, + 0.8722162494091039, + 0.6501666831661728, 0.23239494577553962, - 0.015336886183347248, + 0.015336886183347253, 0, 0, 0, @@ -20118,17 +20184,17 @@ 0, 0, 0, - 0.027464133073699267, + 0.027464133075844197, 0.08774032999617257, 0.17837915465386064, 0.26360561168882735, 0.3004797070181022, - 0.2546676556846232, - 0.2808688386581782, - 0.17421560301166253, - 0.1271884233867593, - 0.05920159199383494, - 0.009219035175267261, + 0.2546676556613248, + 0.2808688386586347, + 0.17421560301218583, + 0.12718842338603878, + 0.05920159199341587, + 0.009219035174835383, 0, 0, 0, @@ -20141,18 +20207,18 @@ 0, 0, 0, - 0.0029755351590397246, - 0.2505643604067021, + 0.0029755351717607598, + 0.2505643614306846, 0.8852593595673844, 0.9831806446784594, 0.932279884148459, 0.8762087443336665, - 0.8625614256634336, - 0.8979189293766903, - 0.9511458879149365, - 0.9598950933637952, - 0.595657951498866, - 0.03393922061343777, + 0.8625614256634437, + 0.8979189293766882, + 0.951145887914936, + 0.9598950933616804, + 0.5956579515088483, + 0.03393922061343778, 0, 0, 0, @@ -20165,13 +20231,13 @@ 0, 0, 0, - 0.0034630062241502477, - 0.2822666473011045, - 0.9138983763151959, - 0.9855689495166395, - 0.937709806597146, + 0.003463006224150249, + 0.2822666500617213, + 0.9138983763156977, + 0.9855689495185217, + 0.9377098066015254, 0.8825750049203916, - 0.8685244338002766, + 0.8685244338003221, 0.8872036476455598, 0.9609804335901316, 0.9512431064618384, @@ -20189,18 +20255,18 @@ 0, 0, 0, - 0.0020765876869844697, - 0.0869781181849033, - 0.39424806332404366, - 0.572814097246383, - 0.7286369636845557, - 0.718601783059199, - 0.7280482296932771, - 0.7251362864803219, + 0.0020765876869844714, + 0.08697811840966849, + 0.39424806332591217, + 0.572814097248057, + 0.7286369636856564, + 0.7186017866296621, + 0.7280482284751201, + 0.7251362864803216, 0.4904732837699936, 0.4378368983560683, - 0.13704028784465316, - 0.020123035214827292, + 0.1370402878446531, + 0.02012303521474431, 0, 0, 0, @@ -20215,16 +20281,16 @@ 0, 0, 0.01864713667633953, - 0.05658590459785271, - 0.0815364633385085, - 0.1379928562964654, - 0.27353253641511177, - 0.3945691703814782, - 0.4001595828338942, - 0.4485908254127713, - 0.2661246145909566, + 0.05658590459785279, + 0.08153646333850871, + 0.1379928563821454, + 0.27353253641474184, + 0.39456917056643587, + 0.4001595821270714, + 0.4485908254121451, + 0.26612461458976006, 0.3768222335813496, - 0.027181835164899002, + 0.02718183516541387, 0, 0, 0, @@ -20237,18 +20303,18 @@ 0, 0, 0, - 0.006102733671962849, - 0.17721297569670702, + 0.006102733671962847, + 0.177212975696707, 0.156287940054173, 0.20072146551638712, 0.7200791842682165, 0.8395983737677638, 0.8862404601243807, - 0.9132500649530613, - 0.9640258479863265, - 0.972180576842054, - 0.6634830101699486, - 0.04702726339299726, + 0.9132500649513365, + 0.9640258479840192, + 0.9721805768409918, + 0.6634830101905606, + 0.047027263392997266, 0, 0, 0, @@ -20261,17 +20327,17 @@ 0, 0, 0, - 0.0019306717307406916, - 0.022679485879895593, + 0.001930671730608736, + 0.022679485880681305, 0.057893809378177244, - 0.1576366524641074, + 0.15763665246410857, 0.26537223683681244, 0.4178924890130937, - 0.4717100123897632, - 0.4378431043823205, + 0.4717100123897633, + 0.4378431043823207, 0.4140652352283181, - 0.30319962122853666, - 0.17529853019890726, + 0.3031996212273179, + 0.175298530199826, 0.029190938840602546, 0, 0, @@ -20285,18 +20351,18 @@ 0, 0, 0, - 0.0070755135896400125, - 0.3635554148263631, - 0.9336403903177056, - 0.9416218316768925, - 0.9356387989825621, - 0.9001893680033052, - 0.791391904432159, + 0.0070755135883645215, + 0.3635554124644504, + 0.9336403903183743, + 0.9416218316804688, + 0.9356387989845883, + 0.900189368003305, + 0.7913919044321592, 0.5578381486685535, - 0.20358747508451286, - 0.6966504019152161, - 0.6738716176190724, - 0.05547005059936215, + 0.20358747508451486, + 0.696650401915214, + 0.6738716217784761, + 0.05547004991045498, 0, 0, 0, @@ -20309,18 +20375,18 @@ 0, 0, 0, - 0.006909016772995983, - 0.36716393087391674, - 0.9146559603781903, - 0.975768126144042, - 0.9331830342061869, - 0.9000436760234752, - 0.62318808676195, + 0.006909016818553537, + 0.3671639308636516, + 0.9146559603785908, + 0.9757681261458825, + 0.933183034208181, + 0.9000436760257062, + 0.6231880867614302, 0.7852569645619925, 0.5608674023904484, 0.3217998888116384, - 0.7840387764405198, - 0.08870397616710812, + 0.7840387764405201, + 0.08870397616710811, 0, 0, 0, @@ -20333,18 +20399,18 @@ 0, 0, 0, - 0.009094832327772489, - 0.3914568260141289, + 0.009094832368713819, + 0.39145682601408, 0.9271071064371345, 0.9824447908407965, - 0.9393503312513225, - 0.895114399691699, - 0.8793078527339847, - 0.9134775750976303, - 0.9654763687577869, - 0.9698804735486183, - 0.6942270791603232, - 0.05773061644016572, + 0.9393503312552992, + 0.8951143947903295, + 0.8793078511323954, + 0.9134775750941675, + 0.9654763687555601, + 0.9698804735475727, + 0.6942270791604271, + 0.05773061644016575, 0, 0, 0, @@ -20357,17 +20423,17 @@ 0, 0, 0, - 0.0036898289745582267, - 0.10258348229439826, - 0.23300259791527775, + 0.0036898289668319197, + 0.10258348229411435, + 0.2330025979152822, 0.48315916529946845, - 0.16897270510061227, + 0.16897270510061224, 0.4161362717571933, 0.6383371785622944, - 0.28101658845946725, - 0.2621000685517607, - 0.15987253330785986, - 0.05322028267656501, + 0.2810165884594672, + 0.2621000685517608, + 0.15987253330699727, + 0.05322028267620369, 0.009195778906479272, 0, 0, @@ -20381,14 +20447,14 @@ 0, 0, 0, - 0.005738972871330023, - 0.12605256703426204, - 0.3198134709839874, - 0.9672243229544367, - 0.950227498517791, - 0.908880019076414, - 0.8965508238057004, - 0.8801363314045975, + 0.0057389728708592365, + 0.12605256703629053, + 0.31981347098630863, + 0.9672243229562718, + 0.9502274985177913, + 0.9088800270245216, + 0.8965508238057095, + 0.8801363359892949, 0.8917474374158763, 0.21213044444737952, 0.22393608638567908, @@ -20405,18 +20471,18 @@ 0, 0, 0, - 0.014791901520107061, - 0.4563985426003867, - 0.9536520947953657, - 0.9966676681780373, - 0.9510209983203929, - 0.9063652625532223, - 0.8943693631970785, + 0.014791901424710721, + 0.45639854258127244, + 0.9536520947958099, + 0.9966676681818072, + 0.9510209983242411, + 0.9063652625542336, + 0.8943693707583151, 0.9316674757586302, - 0.9842126947089308, - 0.9613885966134662, + 0.9842126947089309, + 0.9613885966134664, 0.7593091995512649, - 0.08970272471407147, + 0.08970272401672562, 0, 0, 0, @@ -20431,16 +20497,16 @@ 0, 0.017775333523135105, 0.48632640094947455, - 1.0033637731418261, + 1.0033637731418266, 1.0749859862256743, - 1.0352703647490544, - 0.8693849989714774, - 0.5762675095429528, - 0.3300078773536372, - 0.9714150104578074, - 1.065398809996306, + 1.0352703553945928, + 0.86938499494968, + 0.5762675095426518, + 0.3300078771889385, + 0.9714150104544681, + 1.0653988099941885, 0.7777626152487016, - 0.09624964432265191, + 0.0962496451749293, 0, 0, 0, @@ -20456,15 +20522,15 @@ 0.008984468076303813, 0.45794598484846283, 0.9441428210902327, - 0.9882375988776685, - 0.9506634775787015, + 0.9882375988776906, + 0.9506634863272125, 0.9097797230093169, - 0.9004649283730314, - 0.9295095427508024, - 0.9742465139996066, - 0.9733635537537717, - 0.7401690797646665, - 0.09375598503668307, + 0.9004649298472474, + 0.9295095427492583, + 0.9742465139975328, + 0.9733635537527422, + 0.7401690797744379, + 0.09375598503668306, 0, 0, 0, @@ -20478,17 +20544,17 @@ 0, 0, 0.024997070161853995, - 0.38584822474612884, + 0.3858482243776002, 0.9514572736383141, 0.7227322853631414, 0.8382681115950394, 0.6030671839580907, - 0.7337134388652735, - 0.7395056581708385, - 0.6748687359412722, - 0.8615688990462883, - 0.6030675529415862, - 0.08255765409430116, + 0.7337134388652736, + 0.7395056581708388, + 0.6748687359412686, + 0.8615688990452313, + 0.6030675561604673, + 0.08255765453441295, 0, 0, 0, @@ -20501,18 +20567,18 @@ 0, 0, 0, - 0.023092339027213648, - 0.4831626211427853, - 0.91600872397404, - 1.0376575950178826, + 0.023092339027213655, + 0.4831626211340856, + 0.9160087239747676, + 1.037657595021321, 0.9136340763809799, - 0.8686891408600026, - 0.8592141073576495, + 0.8686891442361924, + 0.8592141000001894, 0.9468510081388639, 0.9681576216478591, - 0.782814284033435, + 0.7828142840334349, 0.6260014351876183, - 0.11522181493746492, + 0.11522181419528886, 0, 0, 0, @@ -20526,16 +20592,16 @@ 0, 0, 0.011251229434592941, - 0.5129221899304016, - 0.984131909321994, - 0.9841805704688841, - 0.9735737363462694, - 0.9349194148069744, - 0.9434615323809612, - 0.2768007649463134, - 0.10152784107910927, + 0.5129221884785217, + 0.9841319093229933, + 0.9841805704707164, + 0.9735737363480713, + 0.9349194097499017, + 0.9434615323804267, + 0.2768007649463133, + 0.10152784107910932, 0.08614113688136123, - 0.06892462887820777, + 0.06892462887820103, 0.029251423357621733, 0, 0, @@ -20549,17 +20615,17 @@ 0, 0, 0, - 0.016948997254282214, + 0.016948997254282457, 0.43923989358394067, 0.965450875210596, 0.8821806003895389, - 0.9653020669075496, - 0.9304551442885987, - 0.9248814221583251, - 0.8996653797298388, - 0.8625682654355742, - 0.4491483437699244, - 0.09917434502643548, + 0.9653020586715224, + 0.9304551386428158, + 0.924881415887865, + 0.8996653797283719, + 0.8625682654339875, + 0.44914834376895335, + 0.09917434502643523, 0.03562555174115247, 0, 0, @@ -20575,16 +20641,16 @@ 0, 0.026427021971538223, 0.2684392077955164, - 0.8755595587638765, - 1.0113086320207638, + 0.8755595587638857, + 1.011308625287078, 0.8559595356829279, 0.764624784612838, - 0.7943712476740116, - 0.7601328568467827, - 0.9437090422515512, - 1.0093309160805575, - 0.8135056771726158, - 0.07964205432064123, + 0.7943712525059964, + 0.7601328568456306, + 0.9437090482869734, + 1.0093309160795294, + 0.8135056771925835, + 0.07964205451675184, 0, 0, 0, @@ -20601,14 +20667,14 @@ 0.413203907208244, 0.8999432366661022, 0.9505462079843499, - 0.9920796256674834, - 0.9439927604335239, + 0.9920796256674596, + 0.943992761678041, 0.9308294425876115, - 0.31843958530917466, - 0.8985518865218962, - 0.41309623819672525, - 0.09648229526000693, - 0.05365169450842583, + 0.3184395853091747, + 0.8985518865218916, + 0.41309623819485075, + 0.09648229525901124, + 0.053651694508381836, 0, 0, 0, @@ -20622,17 +20688,17 @@ 0, 0, 0.021365079455551012, - 0.23115157768809103, - 0.30609070726380494, - 0.4324104714818946, - 0.5959242432477101, - 0.5664595551956874, + 0.23115157768859665, + 0.3060907072651826, + 0.432410471482503, + 0.5959242432477143, + 0.5664595551956875, 0.48840379370336917, - 0.4538955247424706, - 0.3457808197493936, + 0.45389552538261374, + 0.34578081974939384, 0.24197394109650114, 0.1450976855797619, - 0.03466438033827263, + 0.03466438035357372, 0, 0, 0, @@ -20645,17 +20711,17 @@ 0, 0, 0, - 0.002268360892438537, - 0.015713765817399732, - 0.08432953671676817, - 0.11269810368170631, - 0.20371083129222595, - 0.20828304312079118, - 0.35370742797145865, - 0.20696095668820652, - 0.2347656370413534, - 0.12293241605307141, - 0.04700432224577587, + 0.0022683608924385376, + 0.01571376581755047, + 0.08432953671687946, + 0.11269810368121531, + 0.2037108312914514, + 0.2082830431572098, + 0.3537074282019325, + 0.20696095672297798, + 0.23476563704135572, + 0.12293241605306954, + 0.04700432224577054, 0.015486357252558477, 0, 0, @@ -20669,18 +20735,18 @@ 0, 0, 0, - 0.008499544812180602, + 0.008499544812180642, 0.050061479564771375, 0.09928725385092384, - 0.2904197584645786, - 0.37993301989932854, - 0.6696432221134607, - 0.8942259037856335, - 0.8553954265640837, - 0.7133936007579111, + 0.29041975803673037, + 0.3799330198985393, + 0.6696432221138313, + 0.8942259003844277, + 0.8553954214263113, + 0.7133936007559735, 0.9634185197388935, - 0.7059355269066848, - 0.08714612626794467, + 0.7059355269066849, + 0.08714612626794463, 0, 0, 0, @@ -20694,18 +20760,18 @@ 0, 0, 0.013504970640718537, - 0.2190166059613929, + 0.21901660596139122, 0.7398968162793124, - 0.7804323652837589, + 0.7804323611632006, 0.9118119556320945, 0.9286895510531772, - 0.9475264143555014, - 0.9154593227431519, - 0.965495985643908, - 0.7157694192736687, - 0.322544826625382, - 0.06295896407504113, - 0.00121482024328659, + 0.947526420165231, + 0.9154593185891745, + 0.9654959856403663, + 0.7157694192718951, + 0.32254482662557005, + 0.0629589641796457, + 0.0012148202432865902, 0, 0, 0, @@ -20717,18 +20783,18 @@ 0, 0, 0, - 0.0726838628386759, - 0.7045913580499212, + 0.07268386283867591, + 0.7045913580499215, 1.0441349464396108, 0.8616112068264922, - 0.8734973863068484, + 0.8734973863068483, 0.7231119500532995, - 0.9201714718246292, + 0.9201714707788614, 1.0302513244731935, 0.8427104991239599, - 0.3988059390814145, - 0.11517552472896507, - 0.051304629834363666, + 0.3988059390806974, + 0.1151755247272725, + 0.05130462981150817, 0, 0, 0, @@ -20741,19 +20807,19 @@ 0, 0, 0, - 0.004511943641578623, - 0.024669715959788067, - 0.10552834974735874, - 0.1516780947141313, - 0.2635117668901362, + 0.004511943641520903, + 0.024669715959937152, + 0.10552834974770806, + 0.15167809471360202, + 0.2635117668901361, 0.6397791960940206, - 0.8615018793630989, + 0.8615018797630009, 0.7936904143180278, - 0.3552603881437983, + 0.35526038814379834, 0.19970433776704216, 0.08256947567139061, - 0.04961564550258619, - 0.0015654990529369737, + 0.04961564550313789, + 0.00156549905290754, 0, 0, 0, @@ -20765,18 +20831,18 @@ 0, 0, 0, - 0.09300819998768864, - 0.7399690781577317, - 1.0489209235812005, - 1.058204086762129, - 1.0277820164639977, - 0.7472976459858695, - 0.8668442889923366, + 0.0930082003095717, + 0.7399690781472195, + 1.0489209235823191, + 1.0582040805325654, + 1.027782016465602, + 0.747297645987116, + 0.8668442889918784, 0.6122870361895765, 0.48525049390478747, 0.204127114394065, 0.05617874680352718, - 0.026325416949678618, + 0.02632541694967861, 0, 0, 0, @@ -20789,19 +20855,19 @@ 0, 0, 0, - 0.0051875316170251744, + 0.0051875316169523004, 0.01793840915747907, - 0.03800226902826798, - 0.06263204302508887, - 0.24984660723631816, - 0.16119221701476535, - 0.14782271482895118, - 0.13687478454449623, - 0.13246358930675925, - 0.1347916652963535, + 0.038002269028268025, + 0.0626320430246817, + 0.2498466072359066, + 0.16119221699401812, + 0.14782271483303008, + 0.13687478457067553, + 0.1324635893070488, + 0.13479166529635353, 0.12808034329363338, - 0.050655781000041644, - 0.0011149086023072013, + 0.0506557810000386, + 0.0011149086023072017, 0, 0, 0, @@ -20813,19 +20879,19 @@ 0, 0, 0, - 0.017115532694657723, - 0.07641856868452329, + 0.017115532694485035, + 0.07641856868452332, 0.159321883547174, 0.18855751855166467, 0.31049288917034257, 0.3494098277391746, - 0.46934416476922164, - 0.3584008697627528, - 0.33140452827385125, - 0.38343227718737194, - 0.17273175051494918, - 0.040906677743646015, - 0.0025175061253803056, + 0.4693441644541506, + 0.35840086948715727, + 0.3314045282740515, + 0.38343227718583034, + 0.17273175051298958, + 0.04090667774921145, + 0.002517506125383583, 0, 0, 0, @@ -20837,18 +20903,18 @@ 0, 0, 0, - 0.11692904401100676, + 0.11692904409932367, 0.8280703701541435, - 1.1195542092233943, - 1.1082969451581213, - 1.0729227931835918, - 0.9617746760155451, + 1.1195542092234054, + 1.1082969390605462, + 1.0729227931836136, + 0.9617746748995559, 0.972532536825071, 0.7738760894465326, 0.4680142729804414, - 0.31697470000631317, - 0.19928882474705048, - 0.14855796854895895, + 0.3169747000044268, + 0.1992888247444645, + 0.1485579686518387, 0.007712560116807908, 0, 0, @@ -20861,19 +20927,19 @@ 0, 0, 0, - 0.10048359969294937, - 0.7376011051848936, - 0.5338493491573609, - 0.898228004687895, + 0.10048359950719789, + 0.7376011051666601, + 0.5338493491588541, + 0.8982280046909751, 1.0364134607689104, 1.0474486296007788, 1.0613936086056313, 1.0558560374064174, - 0.9657546904098812, - 0.9173584987809478, + 0.9657546904098764, + 0.9173584987809461, 0.9466950820227492, - 0.18456580819194918, - 0.0030766811860114983, + 0.18456580820301902, + 0.003076681186011499, 0, 0, 0, @@ -20885,15 +20951,15 @@ 0, 0, 0, - 0.14575073912794156, - 0.8529794498120797, - 0.9546912506530393, - 1.0864865841737525, - 1.0972838529703401, - 0.6312311667988645, - 0.5298366426146682, - 0.5610598105920167, - 0.5521631253295715, + 0.14575073911166103, + 0.8529794470363008, + 0.9546912506535632, + 1.0864865899912781, + 1.0972838594260679, + 0.6312311667991786, + 0.5298366436590292, + 0.561059808766797, + 0.5521631253295713, 0.4766531184775568, 0.0726212435153791, 0.02039801582290025, @@ -20909,19 +20975,19 @@ 0, 0, 0, - 0.17974488689704418, - 0.8530177659068734, + 0.179744886976302, + 0.853017765906873, 1.0753947753944484, - 1.0886212272841598, - 0.904450422708993, - 0.9633262684436941, - 0.9993889902326584, - 1.0021881858547763, - 1.0403349373907944, - 1.0767448486714006, + 1.0886212272877998, + 0.9044504227117102, + 0.9633262684450525, + 0.9993889973299505, + 1.0021881858534911, + 1.0403349373873674, + 1.0767448486714009, 0.7695457677056496, - 0.27800670470132777, - 0.0032404003536516558, + 0.2780067047013276, + 0.00324040035365461, 0, 0, 0, @@ -20932,20 +20998,20 @@ 0, 0, 0, - 0.0011950767966764045, + 0.0011950767966681316, 0.19635134668279072, 0.8280827399168266, 1.0043621440127197, 0.938390556066976, 1.0239245246023312, - 0.9852165914929335, - 0.87980156961811, - 1.1003449038383681, - 1.077424499093832, - 0.8750643872092584, - 0.6859465578785245, - 0.1362089170237657, - 0.003929232870492665, + 0.9852165933931908, + 0.8798015696169915, + 1.1003449081407808, + 1.077424493826542, + 0.8750643872082994, + 0.685946557878481, + 0.13620891705360408, + 0.003929232870492667, 0, 0, 0, @@ -20956,20 +21022,20 @@ 0, 0, 0, - 0.0015875465290891787, - 0.19803759065867663, - 0.8390407505467238, + 0.0015875465292383769, + 0.19803759052169811, + 0.8390407505462785, 0.9664841689281354, 1.0148248016563017, 1.0490308393369694, 0.9103309091242731, 1.0107842210457179, - 1.0295408684327139, - 1.0579847195526342, - 1.0552593060488853, - 0.8775689438406804, - 0.26271427476539067, - 0.003962207772239346, + 1.029540872430945, + 1.057984719549263, + 1.0552593060479336, + 0.8775689438409267, + 0.26271427477274856, + 0.003962207772239348, 0, 0, 0, @@ -20981,18 +21047,18 @@ 0, 0, 0, - 0.01278916733793149, - 0.025115419035478558, - 0.05417750103350309, - 0.13636254577893975, + 0.012789167337915278, + 0.025115419035783168, + 0.05417750103353266, + 0.13636254581755922, 0.14147581457240146, - 0.14338088654979875, - 0.12488697352999278, - 0.08474054578971045, - 0.08980039222620351, + 0.14338088655780817, + 0.12488697352999355, + 0.08474054578971182, + 0.0898003922262035, 0.08585484375014071, 0.1344200033307923, - 0.010020668016028607, + 0.010020668015972125, 0, 0, 0, @@ -21004,20 +21070,20 @@ 0, 0, 0, - 0.0011570776361901306, - 0.134481252981095, - 0.9428924213901969, - 1.141078431724408, - 1.086268009613714, - 1.1349894835924823, - 1.0534080525116265, + 0.001157077636190131, + 0.13448125301826086, + 0.9428924213795098, + 1.1410784317251148, + 1.0862680096154087, + 1.1349894835939547, + 1.0534080591848176, 1.0596000940784922, 1.0807826447621705, 1.1104516799108965, 1.1159682438924734, 0.9927832815155101, 0.26322456988463444, - 0.00482280859432664, + 0.004822808594326639, 0, 0, 0, @@ -21028,20 +21094,20 @@ 0, 0, 0, - 0.0022645715578159566, - 0.249296085137521, + 0.00226457155781588, + 0.24929608513752094, 0.3881485877340343, 0.35822761220092547, - 0.6237416520681505, - 0.8774131299357821, - 0.8243078597222843, - 0.5709211571461915, - 1.006507648532028, - 1.0263945333431659, + 0.623741652068778, + 0.8774131299374403, + 0.8243078607371663, + 0.5709211571461807, + 1.0065076485298694, + 1.0263945333416606, 0.6820328430643673, 0.33574670329320433, 0.127519717118726, - 0.00452598466414358, + 0.0045259846641238985, 0, 0, 0, @@ -21052,20 +21118,20 @@ 0, 0, 0, - 0.0014090422367863428, + 0.001409042236786343, 0.10810494346975544, - 0.14378425240129006, - 0.22535168868667632, - 0.8347010424807053, - 1.0185264033314925, + 0.14378425240129009, + 0.22535168868667635, + 0.8347010424807184, + 1.0185264033315091, 1.015624389035419, - 0.9980508948366759, - 0.3009270457306753, - 0.5808859628995315, - 0.8596037520641275, - 0.9342809172621308, - 0.22460343490433524, - 0.0054669290015183945, + 0.998050888368493, + 0.300927045731436, + 0.5808859628989173, + 0.8596037520622759, + 0.9342809172629788, + 0.22460343490941115, + 0.0054669290016367235, 0, 0, 0, @@ -21077,18 +21143,18 @@ 0, 0, 0, - 0.028122786067862157, + 0.028122786067606563, 0.7636840377025231, - 1.0020560291641663, - 0.7352120766540171, + 1.0020560291641665, + 0.7352120766540176, 1.0996932627128364, 1.0710877643950856, - 0.9603269604294954, + 0.9603269618873415, 1.0855419898259644, - 0.9161126897645769, - 0.3180742693983864, - 0.17355966460703448, - 0.41664196146268817, + 0.9161126897618556, + 0.318074269397447, + 0.1735596646062043, + 0.4166419618091557, 0.01707385880331216, 0, 0, @@ -21101,18 +21167,18 @@ 0, 0, 0, - 0.0445941719318083, - 0.20628048378732444, - 0.48656347064564054, - 0.8130511738234805, + 0.044594171932103396, + 0.20628048378844618, + 0.48656347064645816, + 0.8130511738245542, 0.8888463181696482, - 0.9694769301702703, - 0.9874937680165354, - 1.002360982873122, + 0.9694769316130972, + 0.9874937731181538, + 1.0023609796048834, 0.7560564171253346, - 0.4083977336444224, + 0.40839773364442233, 0.25689205132575876, - 0.24987301359208958, + 0.24987301359419403, 0.018863782431053515, 0, 0, @@ -21125,19 +21191,19 @@ 0, 0, 0, - 0.014194264154766534, - 0.04808745037067727, - 0.08958676499282035, - 0.1094201103793896, - 0.124036306566731, - 0.1480058920676154, + 0.014194264154773697, + 0.04808745037070541, + 0.08958676499288099, + 0.10942011037889703, + 0.12403630656624165, + 0.14800589207551276, 0.12644609679182167, 0.18126972629722665, 0.14276041378099424, 0.07729766264867498, 0.05268755649333625, - 0.06641070600337011, - 0.011281156278365284, + 0.06641070600336602, + 0.011281156277847005, 0, 0, 0, @@ -21152,16 +21218,16 @@ 0.0492410263183234, 0.2799664708470483, 0.5499153675667866, - 0.9727929285803733, - 0.5997663677350549, - 0.4979402162711943, - 0.37648995293311055, - 0.3823079370886065, - 0.40855511258682603, - 0.6352346435934091, + 0.9727929316759766, + 0.5997663669927241, + 0.4979402162265735, + 0.3764899527098653, + 0.3823079370890289, + 0.4085551136696686, + 0.635234643593409, 0.5728400107965411, - 0.08333722336358623, - 0.009214746531696927, + 0.08333722336358622, + 0.009214746531567586, 0, 0, 0, @@ -21174,18 +21240,18 @@ 0, 0.001456724874061584, 0.255533645621382, - 0.9054867228683304, - 1.067320063452612, + 0.9054867228683307, + 1.067320063452622, 1.0760814639634253, - 1.0787332820339979, + 1.078733282033998, 1.0052363593816243, - 1.0353220778536016, - 0.9819352589393097, - 0.9698781053578083, - 0.8800083848599901, - 0.8422630190442015, - 0.1910083227145261, - 0.010729789578106105, + 1.0353220813872879, + 0.9819352589382081, + 0.9698781053565727, + 0.8800083848590814, + 0.8422630190442713, + 0.19100832269571627, + 0.010729789576488156, 0, 0, 0, @@ -21197,18 +21263,18 @@ 0, 0, 0, - 0.2476654865710588, + 0.24766548655795284, 0.9011283597843568, - 1.0655496122709027, + 1.0655496122709025, 1.0840267676947677, 1.0995928208357095, 1.123137046730582, 0.7769507848634354, - 0.43806441204212804, - 0.42826864594747277, - 0.31321308655150026, - 0.6274930362553154, - 0.5514298864031367, + 0.4380644120421296, + 0.4282686448417813, + 0.3132130865506631, + 0.6274930362538883, + 0.5514298864312066, 0.030872227396111902, 0, 0, @@ -21220,20 +21286,20 @@ 0, 0, 0, - 0.0024254335527992767, - 0.30985322898166556, - 0.942220037529601, - 1.0866529509846847, - 1.1035176911348852, + 0.002425433552799278, + 0.3098532289387112, + 0.942220037529087, + 1.0866529509861391, + 1.1035176911379263, 1.081621423191674, - 1.071697669465352, + 1.0716976679117907, 1.0752550104839889, - 1.105066972686983, + 1.105066976248878, 1.158330992985892, - 1.1383061713498461, + 1.1383061713498466, 0.9918999535155058, - 0.5086546964095792, - 0.022786526210142558, + 0.5086546964203847, + 0.022786526290462492, 0, 0, 0, @@ -21244,20 +21310,20 @@ 0, 0, 0, - 0.002754052784373396, - 0.3217950635288861, - 0.9532690019087654, - 1.096342010557785, - 1.115861374376878, - 1.0997556139307938, - 1.078787586321606, - 1.0744079431730864, + 0.002754052784373397, + 0.3217950635205848, + 0.9532690019082567, + 1.096342010559219, + 1.115861374378394, + 1.0997556139320126, + 1.078787584443788, + 1.0744079439491283, 1.1050857469520532, 0.7725117694667352, 0.36343850401342404, - 1.056270827566252, + 1.0562708275662518, 0.5135960550111349, - 0.0314433248697212, + 0.031443324869721206, 0, 0, 0, @@ -21268,20 +21334,20 @@ 0, 0, 0, - 0.0032876112633273427, + 0.003287611263327343, 0.33512995620247815, 0.9501277781424041, 1.0898179972855506, - 1.0972161782785934, - 0.9607842822607606, - 1.062209707058397, - 1.0469126563273274, - 1.0588855908095691, - 1.0996652335336499, + 1.097216178280064, + 0.9607842791870289, + 1.062209705747116, + 1.0469126521194467, + 1.0588855908084838, + 1.099665239482467, 1.1500462978929091, 1.0132137200146922, 0.5192465527395407, - 0.03330561013712491, + 0.03330561013715251, 0, 0, 0, @@ -21292,20 +21358,20 @@ 0, 0, 0, - 0.0036157060102374344, + 0.0036157060102374352, 0.13347327236698142, - 0.533499834683197, - 1.04589976010059, + 0.5334998346831988, + 1.0458997601005897, 1.0855975022544513, 1.0728434118983092, - 1.0648748657838556, - 1.0374746619360606, - 1.1198898402521198, - 1.0919867124223688, - 1.0525219313657685, - 0.9365259321431799, - 0.2730220883405841, - 0.011012081854444878, + 1.064874865784373, + 1.0374746575681624, + 1.119889840249805, + 1.0919867124209137, + 1.052521931363843, + 0.9365259321441114, + 0.2730220883446447, + 0.011012081854584693, 0, 0, 0, @@ -21317,19 +21383,19 @@ 0, 0, 0.0034381575318819537, - 0.22138607333746355, + 0.22138607339898517, 0.9446336400909562, - 1.0917808186713402, + 1.0917808186713405, 1.1092545151683189, 1.0447802982283287, - 0.9292819068664686, - 0.7056434422157939, + 0.9292819068664794, + 0.7056434448479876, 0.5032551771148779, - 0.9757034468654295, - 0.29227934708049147, - 0.2131736588575219, - 0.45028481792522235, - 0.036788622429110254, + 0.9757034422882045, + 0.2922793470793692, + 0.21317365885712583, + 0.4502848178423083, + 0.03678862242911026, 0, 0, 0, @@ -21340,20 +21406,20 @@ 0, 0, 0, - 0.006016704927002059, - 0.40000443409838227, - 0.9761920193593636, - 1.11413303825497, + 0.006016704941744521, + 0.4000044342329028, + 0.9761920193583898, + 1.1141330382557018, 1.1294908119612492, - 1.117637194085672, + 1.117637199023347, 1.1229098108491673, 1.0404631425316826, 0.4695211488968334, - 1.1326013154397798, + 1.1326013211082537, 1.2308716284481669, 0.6469582936923585, - 0.2920558772821897, - 0.04403090849305973, + 0.29205587728738736, + 0.04403090849305967, 0, 0, 0, @@ -21364,20 +21430,20 @@ 0, 0, 0, - 0.0033598118480715924, - 0.0359862665442736, - 0.20634445174904617, - 0.17113527704022177, - 0.28584608956397917, - 0.21753560784831377, - 0.27747870908964417, - 0.3592214699359313, - 0.36313328039824916, - 0.4375787146903584, + 0.00335981184793256, + 0.03598626654431626, + 0.2063444517508022, + 0.171135277040478, + 0.28584608956337776, + 0.21753560792429832, + 0.2774787091695154, + 0.3592214699471803, + 0.36313328021768876, + 0.4375787153751676, 0.2364903169671168, 0.1352635811271158, - 0.08561291459447107, - 0.012542512750198681, + 0.08561291459447111, + 0.012542512750193125, 0, 0, 0, @@ -21388,20 +21454,20 @@ 0, 0, 0, - 0.0030826555915143676, + 0.0030826555910222694, 0.044082501471352245, 0.11751954018929808, 0.26239445079779783, - 0.2804124321467583, - 0.5036218294523479, - 0.5639978349512293, - 0.47301274121309506, - 0.38189101170501016, - 0.46973276936246366, + 0.2804124321461365, + 0.5036218298185535, + 0.5639978353204218, + 0.47301274148682587, + 0.38189101131518627, + 0.4697327701073778, 0.5765145091154034, 0.27797013740617477, - 0.14160129912294325, - 0.019743452659515073, + 0.1416012991229433, + 0.019743452659474647, 0, 0, 0, @@ -21412,18 +21478,18 @@ 0, 0, 0, - 0.011468186480906003, - 0.44353540571638206, - 0.9958287469450847, + 0.011468186478891623, + 0.4435354057163819, + 0.9958287469450845, 1.1652092302356833, 1.1716001084559533, 1.1545919234904027, - 1.1313734641161224, - 1.1291488692625247, - 1.1531499087832013, - 1.0862548601443356, - 0.9505963657356392, - 0.1438786014896614, + 1.1313734603715153, + 1.1291488688653408, + 1.1531499054624805, + 1.086254860141702, + 0.9505963657347561, + 0.14387860148916706, 0.3962975999960895, 0.06500684698176373, 0, @@ -21436,19 +21502,19 @@ 0, 0, 0, - 0.016806106119189142, - 0.5026907473378877, - 0.5986082034528242, + 0.016806106117016436, + 0.5026907470720876, + 0.5986082034528241, 1.0924882620570984, - 1.1554152325433915, - 0.8465318139299675, + 1.1554152325434064, + 0.8465318130855715, 0.5829524694472348, - 0.3006573051861605, + 0.3006573051955072, 0.2655577320929696, - 0.4337247987603382, - 0.6125639140413697, - 0.14168521205574378, - 0.05174386923900938, + 0.4337247987602883, + 0.612563914040516, + 0.14168521205522747, + 0.051743869238911645, 0.004381621922274648, 0, 0, @@ -21460,20 +21526,20 @@ 0, 0, 0, - 0.0015385104810913901, - 0.03852636805930207, - 0.23369290216423452, - 0.3123998469766745, - 0.29683416041724614, - 0.276058557810435, + 0.0015385104808560354, + 0.03852636805955581, + 0.23369290216547148, + 0.3123998469783224, + 0.296834160659697, + 0.2760585579336217, 0.2703139179437954, - 0.3955575470605724, + 0.3955575467425012, 0.5868603365080031, - 0.4354769683315304, + 0.43547696833153154, 0.27219634638620377, - 0.24795068767697775, - 0.10157718815878024, - 0.016210781578993392, + 0.24795068767427259, + 0.10157718815802173, + 0.016210781579732055, 0, 0, 0, @@ -21484,20 +21550,20 @@ 0, 0, 0, - 0.017875528062353006, - 0.5088023978879995, - 1.03962568465477, - 1.1709839809752263, - 1.1864856211838328, - 1.1764231843727206, - 1.1594691905361965, + 0.01787552809815004, + 0.5088023981880087, + 1.0396256846542398, + 1.170983980976891, + 1.1864856211852186, + 1.1764231875781013, + 1.1594691905366596, 1.1577742550943113, - 1.1812409137753777, + 1.1812409124409877, 1.1982094000106391, 1.1932567113305232, 1.098632360768729, - 0.6217515226296996, - 0.06976763784035786, + 0.6217515226296987, + 0.06976763817474003, 0, 0, 0, @@ -21508,19 +21574,19 @@ 0, 0, 0, - 0.006864874072052149, - 0.4732139521247018, - 1.0011935871425028, + 0.006864874098367514, + 0.4732139521246593, + 1.001193587142502, 0.603815587344483, - 0.4496663393518174, - 0.5138800183021814, - 0.48329099043679746, - 0.5586416727211108, - 0.6857167534315137, - 0.3976005358288243, - 0.10497331756642712, - 0.15918496215045805, - 0.527226779028027, + 0.4496663393516575, + 0.5138800188465552, + 0.4832909908619573, + 0.5586416732815134, + 0.685716753431049, + 0.39760053661972233, + 0.10497331756642655, + 0.1591849621504538, + 0.5272267790280829, 0.0173469956171236, 0, 0, @@ -21537,15 +21603,15 @@ 0.9840526482092222, 1.1193995414772202, 0.8993439720824238, - 0.8843065542049168, - 1.0914617872933532, - 1.1169665522119383, - 1.019533160219207, - 0.7012978613813962, - 1.0739161045706223, - 0.42493694237275254, - 0.12647343841739875, - 0.0422732661448458, + 0.8843065523088612, + 1.0914617857466271, + 1.1169665486428801, + 1.0195331578258497, + 0.7012978613808065, + 1.0739161045692776, + 0.42493694237156904, + 0.12647343841739878, + 0.04227326624379368, 0, 0, 0, @@ -21556,20 +21622,20 @@ 0, 0, 0, - 0.02628487777653145, + 0.02628487777653146, 0.3010521448825356, - 0.9602211598653146, + 0.9602211598653144, 1.1201242233650386, - 0.9372475007797567, - 1.14522879094384, + 0.9372475047596162, + 1.1452287897286513, 1.1443756337482478, 0.8996552594782159, 1.1548834134282357, - 1.2147748102600582, - 0.6702647775640095, - 0.2622025860062142, - 0.11806560956526915, - 0.06846915018429332, + 1.214774810257291, + 0.6702647775623384, + 0.2622025860054108, + 0.11806560961303551, + 0.06846915018429335, 0, 0, 0, @@ -21581,19 +21647,19 @@ 0, 0, 0.026170976708976192, - 0.5275997684955526, - 0.9973515778799492, - 1.1007958089813215, + 0.5275997690577121, + 0.9973515778790685, + 1.1007958089820982, 1.107002440948587, - 1.1174571170908174, + 1.1174571142603795, 1.1143766980314738, - 1.1063667996937705, + 1.1063667996937707, 1.0053827730002098, 0.6396204177572528, 0.29102349602133004, - 0.19299426752985505, - 0.06465665890736375, - 0.033056763666377574, + 0.19299426752913765, + 0.06465665891152296, + 0.03305676366637759, 0, 0, 0, @@ -21604,20 +21670,20 @@ 0, 0, 0, - 0.03054427207537769, - 0.5611872051601803, - 0.8112847846644976, - 0.43086748319354334, - 0.5223635166756667, - 0.5947922773769725, - 0.701236465360672, - 0.34112538301929257, - 0.9592745628818415, + 0.03054427207536694, + 0.5611872051424469, + 0.8112847846644522, + 0.43086748319537416, + 0.5223635166760547, + 0.5947922765587242, + 0.7012364636357856, + 0.34112538344468957, + 0.9592745649087135, 1.1441320059454945, 0.998741180772955, 0.32737213537829396, - 0.46651185350878377, - 0.042038739415206965, + 0.4665118535087841, + 0.042038739418640995, 0, 0, 0, @@ -21628,20 +21694,20 @@ 0, 0, 0, - 0.031209496739863007, - 0.32921591005228024, + 0.031209496739863018, + 0.3292159100522801, 0.40875106916301224, - 0.5127026306023716, - 0.2942504244485312, - 1.1223785652507123, - 0.30409888489544223, - 0.30313975010246036, - 0.780987454703231, - 0.8087893994085891, - 0.9395530659198233, + 0.5127026306041836, + 0.2942504244482613, + 1.1223785619398943, + 0.30409888489513287, + 0.30313975024200446, + 0.7809874566653914, + 0.808789396907984, + 0.9395530659198186, 1.0345957886094461, 0.301724685839283, - 0.0978335910332445, + 0.09783359099131914, 0, 0, 0, @@ -21652,20 +21718,20 @@ 0, 0, 0, - 0.011217482402451079, + 0.011217482402451085, 0.2185438549899249, - 0.6525376403614394, - 0.9774101687319879, - 1.1212484230342497, - 0.7951032430346812, - 0.7294583116309088, - 0.910363381565443, - 0.3958760835853194, - 0.8300195210553926, - 0.7953540749532674, - 0.7842051481992716, - 0.6253871362118434, - 0.06792637771093538, + 0.6525376403614395, + 0.9774101687319958, + 1.1212484230342625, + 0.7951032430346888, + 0.7294583116316806, + 0.9103633815649083, + 0.39587608358506443, + 0.8300195182605262, + 0.795354074952252, + 0.7842051481985306, + 0.6253871370271786, + 0.06792637771091362, 0, 0, 0, @@ -21677,18 +21743,18 @@ 0, 0, 0.007406445396859905, - 0.14583112831357517, + 0.14583112831356995, 0.8415570443590397, 1.1040759243448386, - 0.7034324777763833, + 0.7034324777763834, 0.9793372509492841, 0.6999747396885567, - 1.0728774469702635, - 1.1124705550599907, - 1.2340378904690952, - 1.1819109597320767, - 1.0900422024868248, - 0.48583932968840243, + 1.0728774472956335, + 1.1124705575871052, + 1.2340378904678413, + 1.181910959731299, + 1.090042202487903, + 0.48583932969540944, 0.05679039504362691, 0, 0, @@ -21701,19 +21767,19 @@ 0, 0, 0.014798147331881555, - 0.11187579101039768, - 0.5524062538071306, - 0.8689421518182404, + 0.11187579101105521, + 0.5524062538076197, + 0.8689421518190783, 1.064429907414559, 1.0080639908830655, - 0.5353341709577408, + 0.5353341709577409, 0.5547257570183122, 0.601091614346401, - 0.7642725579198684, + 0.7642725601593325, 0.2176662376835948, - 0.08809502310007133, - 0.12005279546866736, - 0.01578734144855812, + 0.08809502309983362, + 0.12005279551575967, + 0.015787341450455242, 0, 0, 0, @@ -21725,19 +21791,19 @@ 0, 0, 0.04835369298286836, - 0.6254721445550232, - 1.025191558656012, - 1.126393936066404, - 1.1331597231762642, - 1.1306847753947833, - 1.1226996250903967, + 0.6254721445458625, + 1.0251915586551046, + 1.1263939360671782, + 1.1331597231773982, + 1.1306847728343525, + 1.1226996300637087, 1.1407070503838987, 1.1530110871946029, - 1.17252387423516, - 1.01221866570644, + 1.1725238742351607, + 1.0122186657064403, 0.9969992382319867, - 0.5604403880746314, - 0.06453338545574977, + 0.5604403880746313, + 0.06453338545574973, 0, 0, 0, @@ -21748,20 +21814,20 @@ 0, 0, 0, - 0.03768676006901093, + 0.037686760387554336, 0.6068626959189646, 0.9018527229894439, - 1.1338942228628908, - 1.193475298576181, - 1.192654602087316, - 1.21142940853538, - 1.1897354560398719, - 1.207148654383757, + 1.1338942228636761, + 1.1934752985785273, + 1.192654602089355, + 1.2114294116461184, + 1.1897354555016089, + 1.2071486581430684, 1.0565446659316016, 1.105890281320415, 1.1096717163925387, - 0.6401697060408816, - 0.09157400790986528, + 0.6401697060408814, + 0.09157400790986499, 0, 0, 0, @@ -21772,20 +21838,20 @@ 0, 0, 0, - 0.061412646587197896, - 0.6748553782539585, - 1.058833565347351, - 1.1491408301066868, + 0.06141264719011744, + 0.6748553782539586, + 1.058833565347349, + 1.1491408301066945, 1.157329061820592, 1.1457265538494183, - 1.131264231852261, - 1.1407312864256514, - 1.157107629614312, - 1.174505046246664, - 1.10584731818197, - 1.0751830093645263, - 0.7231361357978576, - 0.10210447110166192, + 1.1312642299933804, + 1.1407312834194714, + 1.157107629613395, + 1.174505046244376, + 1.1058473181805315, + 1.0751830093650845, + 0.7231361370938661, + 0.10210447043970464, 0, 0, 0, @@ -21796,20 +21862,20 @@ 0, 0, 0, - 0.022449860563824343, - 0.08240676064893397, - 0.14885409733313776, - 0.21334240055038312, - 0.2695271328262879, - 0.350611980382236, - 0.30396439818942306, - 0.3911970552956073, - 0.6672386388884876, - 0.5503965491155733, - 0.45872762796430633, - 0.47465486046203725, - 0.5106684593651234, - 0.12709499980038308, + 0.02244986048098265, + 0.08240676066401749, + 0.14885409733313779, + 0.21334240055038314, + 0.269527132826288, + 0.35061198046230413, + 0.30396439818956145, + 0.3911970552957733, + 0.6672386397781166, + 0.5503965491152395, + 0.4587276279632967, + 0.474654860460875, + 0.5106684593722082, + 0.1270949998003831, 0, 0, 0, @@ -21820,19 +21886,19 @@ 0, 0, 0, - 0.06450757593672331, - 0.5736981262206231, - 1.022066738821582, - 1.1169733661414207, + 0.0645075764118489, + 0.5736981271716135, + 1.0220667388211604, + 1.1169733661422598, 1.1155941437583912, 1.0854352738366573, 1.1215105243520118, 0.7710017294562233, - 0.69973531704375, - 0.356149349486065, + 0.6997353170437501, + 0.3561493494860648, 0.8505054967990727, - 0.8119538831152514, - 0.44820593957032573, + 0.8119538831155519, + 0.44820594036140465, 0.10957770639214326, 0, 0, @@ -21844,20 +21910,20 @@ 0, 0, 0, - 0.0029219806119010878, - 0.012046988120432553, - 0.027577467666998857, - 0.15738670226907014, - 0.2604403033469352, - 0.17405650992266702, - 0.23966148461732834, - 0.43365375648968035, - 0.6307284652740773, - 0.6233782678913631, - 0.23167666070428594, - 0.18015847728389503, + 0.002921980611854873, + 0.01204698812051702, + 0.02757746766700664, + 0.15738670226935297, + 0.26044030334659873, + 0.1740565099364174, + 0.23966148462591946, + 0.433653756543732, + 0.6307284652740774, + 0.6233782692729312, + 0.23167666070428278, + 0.18015847728389509, 0.13073958813423905, - 0.027300416882886615, + 0.027300416865885028, 0, 0, 0, @@ -21869,19 +21935,19 @@ 0, 0, 0.0738205581769428, - 0.6819528580224199, + 0.681952859308901, 1.0308206146817984, - 1.1264981004438266, - 1.1484828510433451, - 1.1382790873101578, - 1.1248092550865065, - 1.134758308441149, - 1.1474742332314727, + 1.126498100444603, + 1.148482851044393, + 1.1382790913074854, + 1.1248092548336757, + 1.1347583084407622, + 1.1474742332295544, 1.0040502504221598, 0.45264287097069317, 0.6049032860061642, - 0.5398531132377191, - 0.10821364968864094, + 0.5398531132377189, + 0.10821364969905704, 0, 0, 0, @@ -21892,19 +21958,19 @@ 0, 0, 0, - 0.017739468657864715, - 0.5230881578579573, + 0.01773946864584639, + 0.523088157857957, 1.0243856119114318, 1.132694534773819, - 1.114502792345148, - 1.0918488798120876, - 1.1486310799839758, - 1.1558591332094827, - 1.1687305977055649, - 1.1841672717984677, - 1.184158387149322, - 1.1081645139624792, - 0.7809015739594427, + 1.114502795900909, + 1.0918488761976954, + 1.1486310760278502, + 1.1558591332087327, + 1.1687306000954816, + 1.1841672717974023, + 1.184158387147941, + 1.1081645139636571, + 0.7809015739594432, 0.13045623892136288, 0, 0, @@ -21916,19 +21982,19 @@ 0, 0, 0, - 0.10041317077772789, + 0.10041317170905724, 0.7580829736870289, 1.082119983179869, 1.1609626530859982, - 1.1848276995991494, + 1.18482769959915, 1.1788829664048, - 1.1515062502441171, - 1.1952418948158778, - 0.9304963906743591, - 0.8557018251337671, - 1.2091088087100168, - 0.7567610510098404, - 0.7231444837225758, + 1.1515062469975113, + 1.195241894815881, + 0.9304963922930282, + 0.8557018251325401, + 1.2091088087083595, + 0.7567610510098638, + 0.7231444851269587, 0.17564031330058286, 0, 0, @@ -21940,21 +22006,21 @@ 0, 0, 0, - 0.09699139126977688, - 0.7223429821371087, - 0.9895248208692549, - 1.0826676584765944, - 1.1266350848128168, - 1.1411384093252137, - 1.0871655567347849, + 0.09699139233599861, + 0.7223429806226707, + 0.9895248208688752, + 1.082667656725845, + 1.1266350848128173, + 1.1411384114535439, + 1.087165556734785, 1.1128432078716497, 0.9659010029300911, - 0.8546011883579887, + 0.8546011883579886, 0.48555472300610686, - 0.24015942418647096, - 0.3154561575547468, - 0.1031216505152426, - 0.0033423071213112493, + 0.24015942418557695, + 0.31545615755339285, + 0.10312165125711317, + 0.0033423071213082183, 0, 0, 0, @@ -21964,21 +22030,21 @@ 0, 0, 0, - 0.08901184451533678, - 0.6785457536664382, - 1.0220221344608613, - 1.123058043977194, - 1.1506794923436645, - 1.1424225044657061, - 1.1408104751602595, - 1.1421441836255444, - 1.1571081936833723, - 1.1685963852198895, + 0.08901184444940498, + 0.6785457550835882, + 1.0220221344600549, + 1.1230580421962062, + 1.1506794923446648, + 1.1424225044664982, + 1.140810475794995, + 1.142144180426493, + 1.1571081914802535, + 1.16859638521989, 1.1708550937356368, 1.1049984638252037, - 0.8018775666240604, + 0.8018775666240612, 0.15260101993938321, - 0.0033334412470439312, + 0.0033334412469634613, 0, 0, 0, @@ -21988,21 +22054,21 @@ 0, 0, 0, - 0.008273585454955386, + 0.008273585454955384, 0.062385230536763446, 0.17689894664435507, - 0.2001567505203764, - 0.6444290490785378, - 0.7621768809732314, - 1.0776402944640155, - 1.1481015945651565, - 1.1580603886992284, + 0.2001567505199894, + 0.6444290490791392, + 0.7621768826831001, + 1.0776402972397103, + 1.1481015921059559, + 1.158060388698409, 1.1694739348757797, 1.1662242259715982, - 0.9118243992024272, - 0.23282746942471916, + 0.911824399202427, + 0.23282746942471727, 0.052587934074735325, - 0.0019439076766825318, + 0.0019439076766825322, 0, 0, 0, @@ -22012,19 +22078,19 @@ 0, 0, 0, - 0.12102709955928319, - 0.7284843713034641, + 0.12102709955928248, + 0.7284843713034638, 0.9024969591786931, 0.48173686723874776, 0.5079082616209006, - 0.7702393771287679, - 0.9170912484113959, - 1.116016253485801, - 1.0228921217736462, - 1.166704912920591, - 0.9868794908200382, - 0.4269609101800956, - 0.14594197869187536, + 0.7702393781499011, + 0.9170912484118345, + 1.1160162534852662, + 1.022892121772806, + 1.1667049129195102, + 0.986879490819378, + 0.4269609101797737, + 0.1459419786918754, 0.022951169735999512, 0, 0, @@ -22036,21 +22102,21 @@ 0, 0, 0, - 0.12423419288308653, + 0.12423419287364847, 0.7595624865060471, 1.0381339616412337, - 1.1356695960808785, - 1.1342663197889058, - 1.1295162163537045, - 1.1272407000449416, + 1.1356695944120936, + 1.1342663197889158, + 1.1295162163537051, + 1.1272407040379215, 1.149578676262064, - 1.169696771167824, - 1.1617664910865078, - 1.1514797850237295, - 0.7963223291319315, - 0.4192550328123908, - 0.047000311074910726, - 0.0025072432103774465, + 1.16969676903632, + 1.1617664877174727, + 1.1514797850229965, + 0.7963223291320835, + 0.4192550318868939, + 0.047000311074824955, + 0.002507243210396211, 0, 0, 0, @@ -22060,20 +22126,20 @@ 0, 0, 0, - 0.020206422842192713, - 0.058685041280058046, - 0.04354092495141511, - 0.04307749199132586, + 0.02020642284218322, + 0.058685041281201895, + 0.04354092495142742, + 0.043077491991346036, 0.08466272249807132, - 0.12198290732103308, - 0.33881184219543775, - 0.37930891398230654, - 0.2287577320159414, - 0.7708071857285911, + 0.1219829073210331, + 0.33881184209105786, + 0.37930891381850307, + 0.22875773205039301, + 0.7708071857285874, 1.0408961548521367, - 0.34688348396643337, - 0.16131652406622962, - 0.03275129133569862, + 0.3468834839642839, + 0.16131652406485877, + 0.03275129133551683, 0, 0, 0, @@ -22084,21 +22150,21 @@ 0, 0, 0, - 0.003249755511673687, - 0.04703734433245651, - 0.11110053879131973, - 0.22448621340899913, - 0.9840294391846494, - 1.16226682167081, + 0.0032497555116542906, + 0.047037344332942155, + 0.11110053879146678, + 0.22448621345551778, + 0.9840294391849016, + 1.162266825085694, 0.9172009619889031, - 1.1605625581897399, + 1.1605625592510227, 0.8032977870784792, - 0.39139447466308847, + 0.3913944746630885, 0.3420771630718638, 0.6157024470373071, 0.2809756717126995, - 0.12508620345792248, - 0.00405238471300116, + 0.1250862031596014, + 0.004052384712965634, 0, 0, 0, @@ -22108,21 +22174,21 @@ 0, 0, 0, - 0.027685414930688424, + 0.027685414930688153, 0.07373651300874252, - 0.23982208132028554, - 0.37815412783067964, - 0.9397184997841412, - 1.184806762570591, - 1.1543854179211739, - 1.0013987772545254, - 0.785853000078754, - 0.31171484352654993, - 0.2439409395070241, - 0.40052193188673196, + 0.2398220813202896, + 0.3781541280465045, + 0.9397185022430395, + 1.1848067660541166, + 1.154385413860245, + 1.0013987805839086, + 0.7858529990731761, + 0.3117148433620135, + 0.2439409395070253, + 0.40052193188672114, 0.691750732445724, - 0.14294333553675917, - 0.004547882338609534, + 0.1429433355367592, + 0.004547882337008509, 0, 0, 0, @@ -22135,18 +22201,18 @@ 0.0408590632669307, 0.20812547305278584, 0.9025017974137409, - 0.7269476179581689, - 0.44977839051930546, - 0.5973669048026042, - 0.8047240393543627, - 1.182900423587343, - 0.6408025838295379, - 1.0232360309012691, - 1.071497956062678, + 0.7269476179581691, + 0.4497783905193058, + 0.5973669039392179, + 0.804724039354662, + 1.1829004201701816, + 0.6408025838291916, + 1.023236033460947, + 1.0714979572863612, 0.4860605202429242, - 0.35967943196400237, - 0.043238514769644965, - 0.002495059234917185, + 0.35967943196400265, + 0.04323851476964497, + 0.002495059234917197, 0, 0, 0, @@ -22156,20 +22222,20 @@ 0, 0, 0, - 0.029252462310121588, - 0.17874520990074025, + 0.029252462214658013, + 0.17874520973980945, 0.20953182475727286, - 0.4020907711211948, - 0.2671533374944877, - 0.358756445101742, - 0.4929842152271324, - 0.2812248200971172, - 0.21260073890954106, - 0.5704309673201514, - 0.34669503494706994, - 0.8188747429140089, - 0.23915661561607873, - 0.007876822704916858, + 0.4020907711211946, + 0.2671533373986493, + 0.35875644521053535, + 0.49298421534675224, + 0.28122482009711725, + 0.21260073898006415, + 0.5704309673197632, + 0.34669503494692083, + 0.8188747429140733, + 0.23915661594356982, + 0.007876822706074465, 0, 0, 0, @@ -22180,21 +22246,21 @@ 0, 0, 0, - 0.03021202383314875, - 0.05677765891686823, - 0.1362238520574242, - 0.9286747461069197, + 0.030212023823855357, + 0.05677765891737436, + 0.13622385205783527, + 0.9286747461075531, 1.133698294007061, 1.148970608003988, 1.15656326563101, - 1.1599557292373905, - 1.111462083319187, + 1.1599557292373917, + 1.1114620833191833, 1.0550678131101665, - 0.6062456330286977, - 0.6221867322145015, - 0.16537652881814766, - 0.02872342937679325, - 0.0032145793090851606, + 0.6062456324893247, + 0.622186732214298, + 0.1653765286688675, + 0.028723429376834645, + 0.0032145793091189275, 0, 0, 0, @@ -22204,21 +22270,21 @@ 0, 0, 0, - 0.17539270476995028, - 0.8106149579999145, - 1.0399671749438693, - 1.1009603856618566, - 1.1460144641565704, - 1.1414600300398243, - 1.0663224914921148, - 1.0941644597151863, - 0.9934764314959174, + 0.17539270475818378, + 0.810614957981564, + 1.0399671749430035, + 1.1009603843503781, + 1.1460144611841607, + 1.1414600282500675, + 1.066322491492171, + 1.094164462857478, + 0.993476431495917, 1.0098838295185941, 0.9960674314219832, 0.7455891733777574, - 0.6855720255927743, - 0.08131454611432971, - 0.004127411065448908, + 0.6855720255928358, + 0.08131454598021302, + 0.0041274110658008, 0, 0, 0, @@ -22228,21 +22294,21 @@ 0, 0, 0, - 0.055410429011646126, + 0.055410429011646105, 0.13093155985989224, 0.6605583603266031, - 1.141352639801294, - 1.157979293636896, - 1.1512484586095533, - 1.1436163436627929, - 1.1335336821231892, - 1.1534788412167365, - 1.1556925941597809, - 1.1315317611053641, - 1.08414699084486, - 0.7797643165306914, + 1.1413526398029163, + 1.1579792936386795, + 1.1512484586102691, + 1.143616345014173, + 1.1335336832168985, + 1.153478837972437, + 1.1556925970667453, + 1.131531761105364, + 1.0841469908448604, + 0.7797643165306919, 0.25051628298234435, - 0.011862536407958904, + 0.011862536407958908, 0, 0, 0, @@ -22252,21 +22318,21 @@ 0, 0, 0, - 0.17711849736853846, + 0.1771184973685369, 0.8272148934261614, 1.0468462406130998, - 1.13037792983109, - 1.1540727014739376, - 1.1561149553469523, - 0.969838794602692, - 0.8207192983224052, - 0.9305018646038277, - 0.7428395307535164, - 0.7225666460821988, + 1.1303779298310972, + 1.1540727014739467, + 1.1561149584274444, + 0.9698387926634294, + 0.8207192983220895, + 0.9305018657294172, + 0.7428395292440186, + 0.7225666466562792, 0.8247337889810704, - 0.7072385562858097, - 0.17694146883999473, - 0.003793805191432248, + 0.7072385562858094, + 0.17694146883999523, + 0.003793805191432249, 0, 0, 0, @@ -22276,21 +22342,21 @@ 0, 0, 0, - 0.1754943832453874, - 0.8167043145823852, + 0.17549438323480593, + 0.8167043145823761, 1.065434158148669, 1.1540990006004515, - 1.2086239765538862, + 1.2086239794125888, 1.0588624520617431, 1.1454894866505925, - 1.1906039774699586, - 1.1947103468497158, - 1.1284581611940114, - 1.1914162594896969, - 1.120456143062696, - 0.8265657324540759, - 0.2422314094488787, - 0.0070869078672787834, + 1.1906039785920723, + 1.1947103487314223, + 1.1284581611931683, + 1.1914162606494523, + 1.1204561430638518, + 0.8265657324636333, + 0.24223141085015637, + 0.007086907912579096, 0, 0, 0, @@ -22300,21 +22366,21 @@ 0, 0, 0, - 0.20621227485739, - 0.855032869819391, - 1.0884516388064893, - 1.1648260183408679, - 1.1877349706795766, - 1.1778259572851602, - 1.1695234275028754, + 0.20621227324877112, + 0.8550328698182154, + 1.0884516388055099, + 1.1648260183408676, + 1.187734967782375, + 1.177825953725632, + 1.1695234275028814, 1.169417712726265, 0.9458330686384679, - 0.31257661292709954, + 0.31257661292710087, 0.15904940520466485, - 0.06866091517078683, - 0.019779114009604887, - 0.04470489518334492, - 0.006257982409523994, + 0.06866091517076646, + 0.01977911400938239, + 0.04470489521894394, + 0.006257982409523996, 0, 0, 0, @@ -22324,21 +22390,21 @@ 0, 0, 0, - 0.17847569793723012, - 0.8309111764018836, - 1.0676768167717812, - 1.1615993526741608, - 1.1880655956455353, - 1.1894734525958857, + 0.178475697932079, + 0.83091117640049, + 1.067676816770872, + 1.1615993526748853, + 1.1880655956472437, + 1.1894734525972732, 1.1764561523866481, 1.1775689573579684, - 1.1401542757393988, - 1.1745123697412971, + 1.1401542774187574, + 1.1745123697412965, 0.5424255662774438, 1.1981004772710395, 0.5115857469068015, - 0.08168947368278863, - 0.0037535894760119025, + 0.08168947349053633, + 0.0037535894760119034, 0, 0, 0, @@ -22350,19 +22416,19 @@ 0, 0.03623495321195898, 0.5187718815827708, - 0.8561598161344882, - 1.145223606873408, - 1.176976736397146, - 1.0250351601024468, - 0.8372351105169287, - 0.8524271646926157, - 0.6577134363772188, + 0.8561598161340735, + 1.1452236079907614, + 1.1769767363988557, + 1.025035160104044, + 0.8372351086382273, + 0.8524271661894248, + 0.6577134369627727, 0.6706961454875343, 0.40776370766048137, 0.16317289169392427, - 0.09247515066726034, + 0.09247515066726042, 0.04045248199138804, - 0.00880761301259841, + 0.00880761301300141, 0, 0, 0, @@ -22375,17 +22441,17 @@ 0.029812113679491256, 0.16447553676897597, 0.4806279785296904, - 0.1697615384229041, + 0.16976153842290256, 0.16010227622682688, - 0.29019212285793655, - 0.571031675426241, - 0.18763833986593503, - 0.02766640920937222, - 0.011266142822728241, - 0.021825325329755823, + 0.2901921228576307, + 0.5710316749422244, + 0.18763833983412176, + 0.027666409210221298, + 0.011266142822773348, + 0.021825325329802366, 0.009960950207035578, - 0.018345884728917187, - 0.013173200953639774, + 0.01834588472891496, + 0.013173200953639764, 0, 0, 0, @@ -22396,20 +22462,20 @@ 0, 0, 0, - 0.09766718237257419, + 0.09766718237066317, 0.37282017012319896, 0.9630192383317581, 1.1542874891324861, 1.1776851525580188, 1.1377524491881217, 0.9682439107385249, - 0.8250709855763171, - 0.8117888071472105, - 0.711538430216606, - 0.7407722704845202, - 0.676242455045803, - 0.26025854113282093, - 0.2574220947381952, + 0.8250709838446962, + 0.8117888088908324, + 0.7115384312646652, + 0.7407722704840032, + 0.6762424550453661, + 0.26025854113311864, + 0.25742209474651745, 0.007962999955181689, 0, 0, @@ -22420,20 +22486,20 @@ 0, 0, 0, - 0.24156539935027402, - 0.8718943045723264, - 1.0829000356979492, - 1.1522765727366615, - 0.9946804595250386, - 1.1627111928755391, - 1.1551365315936113, + 0.24156540104987645, + 0.8718943045708492, + 1.0829000356974283, + 1.1522765727366673, + 0.9946804574314535, + 1.1627111928755463, + 1.1551365315936117, 1.157639974898706, 0.9769052585097264, 1.1979310344528946, - 1.1612391036808094, - 1.0963767422494468, - 0.8472251977208376, - 0.13971087688800193, + 1.161239103680137, + 1.09637674225057, + 0.8472251977220283, + 0.1397108768913887, 0.008897354405936786, 0, 0, @@ -22443,22 +22509,22 @@ 0, 0, 0, - 0.0015935538274213063, - 0.2412265054062234, - 0.8475120787109014, - 1.0561100164177428, - 1.1323781474911914, - 1.1475860522312606, - 1.1586443755508553, + 0.001593553818364375, + 0.24122650489742847, + 0.8475120787094702, + 1.0561100164172406, + 1.1323781474918442, + 1.147586054768482, + 1.1586443743640842, 1.0605309768523374, 0.9026200313012273, - 0.6773541528981206, + 0.6773541528981204, 0.7825737446595011, 0.2932618876784303, - 0.72886990448077, - 0.04337043737172362, - 0.1702229181356167, - 0.012326634475424666, + 0.7288699044807697, + 0.04337043737172363, + 0.17022291813790089, + 0.0123266344853077, 0, 0, 0, @@ -22467,21 +22533,21 @@ 0, 0, 0, - 0.001248220297575384, - 0.03970969901289634, - 0.7921487908092063, - 1.032093866590231, - 1.116841581522509, - 0.9109071325418144, - 1.0768382111990713, - 0.8946524015030592, - 1.0174980632399937, + 0.0012482203075677933, + 0.039709699012896345, + 0.7921487908092064, + 1.0320938665894526, + 1.1168415805919494, + 0.9109071325424847, + 1.0768382134068346, + 0.8946524007956829, + 1.0174980632393087, 0.7505350568316084, 0.7502249413648755, - 1.0296097645087672, - 0.8907475892959383, + 1.0296097652452774, + 0.8907475892959387, 0.29303119838522224, - 0.060863191796151926, + 0.06086319187213822, 0.011801155626135032, 0, 0, @@ -22491,22 +22557,22 @@ 0, 0, 0, - 0.001751117892520738, - 0.22860207013863815, - 0.8357734693372486, + 0.0017511178810612246, + 0.22860206881350287, + 0.8357734693372374, 1.033989179991314, - 1.083674632025334, + 1.0836746320253343, 1.1365653228971981, - 1.151911156199427, - 1.1550784910717649, - 1.12093634983821, - 1.1610163184427342, - 1.0682098919589105, - 0.3778844330242102, + 1.1519111562007414, + 1.1550784910720369, + 1.1209363489223172, + 1.1610163200379586, + 1.068209891957296, + 0.37788443302402097, 0.06482717395302785, - 0.08596903267177704, - 0.2337955817732708, - 0.007444054273190655, + 0.08596903267177705, + 0.2337955817732709, + 0.007444054272745617, 0, 0, 0, @@ -22516,21 +22582,21 @@ 0, 0, 0, - 0.21912062435280247, + 0.21912062435272353, 0.8143756787651228, 1.0278374262732293, 1.1052781864913872, 1.1799470436898178, 1.161426525019742, - 0.8902997573232421, + 0.8902997573232465, 1.067365038640206, - 0.7051052598635914, - 0.2117838086411716, - 0.06158586808738185, - 0.14665788245577302, - 0.11240123244687628, - 0.0411133796320094, - 0.0031754901127533817, + 0.7051052598630522, + 0.21178380864107382, + 0.06158586808763676, + 0.1466578824555307, + 0.11240123244590612, + 0.04111337963180319, + 0.003175490112753382, 0, 0, 0, @@ -22539,22 +22605,22 @@ 0, 0, 0, - 0.001119417467608189, - 0.17839190902592034, - 0.6913139734766223, - 0.8846076313305865, - 1.0539863156985656, + 0.0011194174665072156, + 0.17839190924500686, + 0.6913139734756804, + 0.8846076313303848, + 1.0539863156985654, 1.1105148230490278, 1.144255372428134, 1.0602362406710875, 0.23584085488883755, 0.2446898141336385, 0.2537446279020347, - 0.21567145662838177, - 0.5683015445561643, - 0.5348151061731777, - 0.21126272682785086, - 0.01613695163383018, + 0.21567145662858347, + 0.5683015445551769, + 0.5348151061687371, + 0.21126272601799653, + 0.016136951634076288, 0, 0, 0, @@ -22563,21 +22629,21 @@ 0, 0, 0, - 0.0011623561054520933, - 0.1777229128904725, - 0.8400808319652513, - 1.039479295137419, - 1.0799400631133458, - 1.1310942016169474, - 1.1276310554667994, - 1.1603118621025126, - 0.8829773905908913, - 0.22444896498303135, - 0.32332509969239376, + 0.0011623561054520937, + 0.1777229141236011, + 0.840080831962517, + 1.0394792951369718, + 1.0799400631139713, + 1.1310942016177108, + 1.127631054002395, + 1.1603118612738272, + 0.8829773886246588, + 0.2244489649830338, + 0.3233250996923939, 0.5243103377532712, 0.7133863251392952, 0.4441340559942875, - 0.11105331420861055, + 0.11105331420801606, 0.009933963574329728, 0, 0, @@ -22587,22 +22653,22 @@ 0, 0, 0, - 0.0020676532272164384, - 0.08958814883487166, + 0.0020676532260017456, + 0.08958814883487164, 0.6051335264136787, - 0.8052618570432635, - 1.1422267756758078, - 0.971048026015821, - 0.8695549858418414, - 0.8785262710657081, - 0.8414534494567902, + 0.8052618570432513, + 1.1422267756765176, + 0.9710480277395983, + 0.8695549858420104, + 0.8785262717206902, + 0.8414534502381978, 1.1752611749120754, 1.149975959667944, - 0.6065419100163381, + 0.6065419100163382, 0.7218497535396211, - 0.5831661018464295, - 0.2850983512649946, - 0.007999852994166166, + 0.5831661018464336, + 0.2850983496433338, + 0.00799985298902199, 0, 0, 0, @@ -22611,22 +22677,22 @@ 0, 0, 0, - 0.0016308406140455069, + 0.0016308406271853557, 0.21752615176661894, 0.5561798415885525, 1.0448553334606963, 1.127118640788026, 1.1607752155855906, - 1.054701301289209, - 1.1492496677534898, - 0.8358790545788201, - 0.9808741124432255, - 0.7683779066580092, - 0.8407703549029977, + 1.054701303950883, + 1.1492496656083941, + 0.8358790545783977, + 0.9808741149024207, + 0.7683779066574234, + 0.8407703549020297, 0.11162870578561986, 0.035737076977128225, - 0.19493581627109996, - 0.019582339343682226, + 0.1949358162711, + 0.01958233927940516, 0, 0, 0, @@ -22635,22 +22701,22 @@ 0, 0, 0, - 0.00218338617201105, - 0.22623813156649158, + 0.0021833861719879367, + 0.2262381315664915, 0.7970875064063618, - 1.0257913804789467, - 1.1131205597086982, - 0.9745044181577401, - 0.7408531481696575, - 0.7342561893500913, + 1.0257913804789465, + 1.113120559708704, + 0.9745044198487562, + 0.7408531493940721, + 0.7342561893500914, 0.6666764535173235, - 0.29371397143035766, - 0.6498106140449562, - 0.2014285619330033, - 0.2972199096335711, - 0.3845891954904481, - 0.4200785782471662, - 0.02421707258330526, + 0.2937139715157715, + 0.6498106148366998, + 0.201428561933433, + 0.2972199096326486, + 0.3845891954907774, + 0.4200785748510969, + 0.024217072664433636, 0, 0, 0, @@ -22659,22 +22725,22 @@ 0, 0, 0, - 0.0014836543226795986, - 0.1733236809702772, - 0.8220011253161295, - 0.977298547714882, + 0.0014836543226796623, + 0.17332368096270023, + 0.822001125314852, + 0.9772985477145175, 1.1338232401135768, 1.1608544450883267, 1.141024697738593, 1.0897157004561075, 0.6110836566340935, - 0.6858721092544331, - 0.40266296417484665, - 0.4424566589853925, - 0.24717011624741905, - 0.17277964250852415, - 0.05063574959982509, - 0.0029158669703902742, + 0.6858721092544328, + 0.4026629645947874, + 0.4424566591491411, + 0.24717011624687452, + 0.1727796425065143, + 0.05063574959196432, + 0.0029158669703902747, 0, 0, 0, @@ -22684,20 +22750,20 @@ 0, 0, 0, - 0.023646089122726813, - 0.045430083153860594, - 0.07118823779628393, - 0.060781630538705105, - 0.1383558317289554, - 0.20968130040163438, + 0.023646089122877953, + 0.04543008315387406, + 0.07118823779630372, + 0.06078163053858114, + 0.13835583171794413, + 0.2096813004011342, 0.3646402873177057, 0.7740703491963162, 1.1428189476094126, 0.22417475560016017, - 0.03688106868660526, + 0.03688106868660525, 0.10067893359506498, - 0.2538793563216555, - 0.3494665439051556, + 0.2538793563216556, + 0.3494665439131123, 0.015720720202371738, 0, 0, @@ -22707,22 +22773,22 @@ 0, 0, 0, - 0.002753765890237303, - 0.2738529243369457, - 0.8755561206138657, - 1.0861782127113297, - 1.1611984660323553, - 1.1762998930072488, - 1.1802590071112025, - 1.1786711347749397, - 0.9422225629127939, + 0.002753765890237304, + 0.27385292335184297, + 0.875556120613853, + 1.0861782127107618, + 1.161198466032939, + 1.176299893008718, + 1.1802590045081642, + 1.1786711347751873, + 0.9422225615672706, 1.115440485027057, 1.022172700364784, - 1.218075963289918, + 1.2180759639989711, 1.1794827779131638, 0.9651649738249605, 0.28284422682297006, - 0.012280346568098914, + 0.01228034656875582, 0, 0, 0, @@ -22731,22 +22797,22 @@ 0, 0, 0, - 0.002721721774645615, + 0.0027217217308816107, 0.2653623736392561, 0.8453392928479182, - 1.0582141759081003, - 1.1393246894181164, + 1.0582141759081005, + 1.1393246894181157, 1.1601301032822604, - 1.1634783144769802, - 1.1570007702639469, - 1.1087179758843444, - 1.1699094761104019, - 0.8878688625651755, - 0.44662850446733166, + 1.163478311547132, + 1.1570007672813822, + 1.1087179759892014, + 1.1699094761096063, + 0.8878688625639288, + 0.44662850446719266, 0.6671084664864375, 0.5803976961137197, 0.23076953748924978, - 0.011072651992946478, + 0.011072651993890955, 0, 0, 0, @@ -22756,21 +22822,21 @@ 0, 0, 0, - 0.006878727583549152, - 0.04723157130332145, - 0.09983468423915604, + 0.006878727583549149, + 0.04723157130332157, + 0.09983468423915608, 0.2184380793047431, - 0.33781971816495937, + 0.33781971828804, 0.7241629000703281, - 0.7812477819885345, - 0.7756070605994069, - 1.1792148015581259, - 1.2023213116509703, - 1.1794998983063874, - 1.119324649959414, - 0.9566382835205118, + 0.7812477826557277, + 0.7756070593791168, + 1.1792148040377441, + 1.2023213116502223, + 1.1794998983057976, + 1.1193246499605454, + 0.9566382835221434, 0.397458980320963, - 0.01596927238860703, + 0.015969272383035818, 0, 0, 0, @@ -22779,22 +22845,22 @@ 0, 0, 0, - 0.003093191046638488, - 0.2959562549795854, - 0.8820249544559688, - 1.0897597656768445, + 0.003093191104354326, + 0.29595625629111766, + 0.8820249544529257, + 1.0897597656762639, 1.1579341306227875, - 1.1845587178735164, + 1.1845587178735162, 1.170177971971313, - 1.181855892842559, - 1.1866079910028335, - 1.197009099850121, + 1.1818558902665401, + 1.1866079910028324, + 1.1970090998501208, 0.8321940497240248, - 0.7032861463793519, - 0.7140314312701883, - 0.8329061161108744, - 0.27446876905010925, - 0.01877204782513673, + 0.7032861463786003, + 0.7140314312700337, + 0.8329061161123487, + 0.274468770111061, + 0.018772047825136744, 0, 0, 0, @@ -22803,22 +22869,22 @@ 0, 0, 0, - 0.0031113384644058132, - 0.2871354217953987, - 0.873552617817286, - 1.082219657602655, - 1.156561501960131, - 1.1732613611417244, - 1.17529483084633, + 0.0031113384644058137, + 0.2871354204921598, + 0.8735526178157808, + 1.0822196576020786, + 1.1565615019613111, + 1.1732613611424456, + 1.1752948308463305, 1.1762568023582198, 1.2157489066949425, 0.9694297042821607, 1.0279765048701823, 0.5115006826702989, 0.4837665077645682, - 0.18398660202182734, - 0.10456316465663089, - 0.01282979893602652, + 0.18398660202182102, + 0.10456316510045778, + 0.012829798952863201, 0, 0, 0, @@ -22828,21 +22894,21 @@ 0, 0, 0.0025693791168505836, - 0.2659132972293449, - 0.858788862151296, - 1.071233637195592, - 1.1512266726253677, - 1.1672621938738343, - 1.1639452390657608, - 1.1633561557405776, - 1.1658397893888428, - 1.1731860224370614, - 1.1173056492060913, - 0.2616650269177914, + 0.26591329722934554, + 0.8587888621512959, + 1.0712336371950417, + 1.1512266726259346, + 1.167262193874553, + 1.1639452390669742, + 1.1633561561926544, + 1.1658397893885923, + 1.1731860249078316, + 1.117305649206084, + 0.26166502691779137, 0.9368480674170384, 0.6898966314763793, 0.34402166919672883, - 0.010059776751912998, + 0.010059776751873056, 0, 0, 0, @@ -22851,22 +22917,22 @@ 0, 0, 0, - 0.003254350664977075, - 0.18649254656134667, - 0.18567793935376026, + 0.003254350660054272, + 0.1864925465613466, + 0.1856779393537602, 0.978395581276689, - 1.1250324280409927, - 1.1369786672725295, - 0.8607294550081996, - 0.7351393385177211, - 0.47348602512204957, - 0.49997160798976403, - 0.08702798805441331, - 0.825136806199762, + 1.1250324280409971, + 1.1369786672725362, + 0.8607294541293203, + 0.7351393371774106, + 0.473486024753273, + 0.499971608568352, + 0.08702798805457179, + 0.8251368061987977, 0.3288329775534544, - 0.3127769093519925, - 0.05226088206180935, - 0.005357040049036959, + 0.3127769093519924, + 0.05226088208799628, + 0.005357040048449753, 0, 0, 0, @@ -22875,22 +22941,22 @@ 0, 0, 0, - 0.0011633649173087325, - 0.19806826429958527, - 0.7876764948466765, + 0.0011633649173088242, + 0.1980682628180764, + 0.7876764948466767, 1.0086000551653924, 1.108112576765229, 1.157644535273777, 1.1853024801866796, 1.0418858925324432, - 1.1954870810255844, - 1.2415081194354347, - 1.2503719490308565, - 1.1913127903246048, - 0.7653426119414766, - 0.12528809049302134, - 0.3460145007336256, - 0.03269310999064134, + 1.1954870788175052, + 1.2415081183720944, + 1.2503719490291012, + 1.19131279032331, + 0.7653426119414737, + 0.12528809049206005, + 0.34601450073362555, + 0.03269310999064133, 0, 0, 0, @@ -22899,22 +22965,22 @@ 0, 0, 0, - 0.00298058159233789, - 0.26790929556803966, - 0.8382896746605388, - 0.8677808218917133, + 0.002980581608217105, + 0.267909295554998, + 0.8382896746573458, + 0.867780821891577, 1.0972681037563772, - 1.1640282734577427, - 1.1651527433520477, - 1.162962065844687, - 1.162174716379251, + 1.1640282754800781, + 1.1651527433520543, + 1.1629620659634825, + 1.1621747174492227, 1.17017446927494, - 1.1854154390220528, - 0.7923339829389137, - 0.5572227760595929, - 0.187167122255986, - 0.07141528325329118, - 0.013034546307063551, + 1.1854154411011288, + 0.7923339829385017, + 0.5572227760591273, + 0.18716712225533377, + 0.07141528314039737, + 0.013034546307423109, 0, 0, 0, @@ -22923,22 +22989,22 @@ 0, 0, 0, - 0.0027770480638260537, - 0.13496910321891234, - 0.6058072550638814, - 0.7712325102505645, - 0.9703774709456928, - 1.1593829057623821, + 0.0027770480638258975, + 0.1349691032152113, + 0.605807255064075, + 0.7712325102505619, + 0.9703774709466497, + 1.1593829057638518, 1.1145346082684944, - 1.0516631218750212, - 0.8590998578433703, + 1.0516631218750216, + 0.8590998578433702, 0.9730495765201408, 0.8434182641524964, - 0.7783729824740364, - 0.7259917379641605, + 0.778372982834674, + 0.725991737964158, 0.554317104824311, - 0.24100701427747492, - 0.01695763286772452, + 0.2410070142810351, + 0.016957632868072538, 0, 0, 0, @@ -22947,22 +23013,22 @@ 0, 0, 0, - 0.00188951643005661, + 0.001889516430056611, 0.23038105213135093, 0.8302001392352985, - 1.0667756971101774, - 1.1332199859988175, - 1.1573257555291465, - 1.1568208996171538, - 1.1533995715109013, - 1.131171649517734, - 1.1442884186947542, - 1.0802747634639414, + 1.066775697109692, + 1.1332199859999745, + 1.157325755529874, + 1.1568208982310193, + 1.153399571511163, + 1.1311716495174922, + 1.1442884186947488, + 1.0802747634639416, 0.6968905774579554, 0.15244257514335602, 0.09895742174734273, - 0.06062446788709262, - 0.01815747302115233, + 0.0606244678870926, + 0.0181574730211499, 0, 0, 0, @@ -22971,21 +23037,21 @@ 0, 0, 0, - 0.0018281050524215487, + 0.0018281050507556716, 0.13167811441845123, 0.4148429868693893, - 0.912988037876153, - 1.0935425542076949, - 1.1261978846093381, - 1.1301566341857021, - 1.1345593907600453, - 1.1754485568114619, - 0.4169309834193391, - 0.2778234066929299, - 0.23972924579029176, + 0.9129880378761487, + 1.0935425542076946, + 1.1261978846100407, + 1.1301566351839272, + 1.134559393434108, + 1.1754485568110202, + 0.4169309831577656, + 0.27782340669326255, + 0.23972924579049792, 0.23423288186920824, - 0.047266904293359606, - 0.0176927736664102, + 0.04726690429335947, + 0.017692773666410207, 0, 0, 0, @@ -22996,21 +23062,21 @@ 0, 0, 0, - 0.012629217205628708, + 0.01262921720562871, 0.04765788322030096, 0.15499839469890409, 0.6281710580818771, - 0.5744643886944422, - 0.3740854420037342, - 0.13967700566220112, - 0.4448713878133857, - 0.28859603275762485, - 0.10430157453512426, - 0.2473382050559763, - 0.42665907727091923, - 0.7684097664093523, - 0.3555891793322717, - 0.033604134593677275, + 0.5744643886944404, + 0.3740854420037341, + 0.13967700566220176, + 0.4448713878136532, + 0.2885960327582116, + 0.10430157453531398, + 0.24733820505638898, + 0.4266590772684338, + 0.76840976640914, + 0.35558917933227197, + 0.03360413459367728, 0, 0, 0, @@ -23019,22 +23085,22 @@ 0, 0, 0, - 0.0028470706100438693, - 0.2806787964027447, - 0.8727521087007922, - 1.0934008203792556, - 1.0572834559827387, + 0.002847070609888132, + 0.28067879822287445, + 0.8727521086977854, + 1.0934008203792553, + 1.057283455982739, 1.1411603977855622, - 1.2290539448287203, - 1.1753679652063036, - 1.187554891067946, + 1.2290539448287208, + 1.1753679655968667, + 1.1875548878054223, 1.173200635132559, 1.130854280285385, - 0.8483541870668198, - 0.5025623331697368, - 0.13748891135337915, - 0.14507860202367448, - 0.01447720594758119, + 0.8483541866271198, + 0.5025623331693537, + 0.13748891135256316, + 0.14507860260812308, + 0.01447720589172815, 0, 0, 0, @@ -23043,21 +23109,21 @@ 0, 0, 0, - 0.003087213563269302, - 0.06065024244951657, - 0.027722234650521628, - 0.07014081619263773, - 0.1345085170441463, - 0.22591038967889687, + 0.003087213563269303, + 0.06065024244714648, + 0.027722234650535763, + 0.07014081619267716, + 0.13450851704371775, + 0.22591038967827703, 0.19740829592918807, - 0.15861166510306152, + 0.15861166511875308, 0.14731415224443747, - 0.5966400580584772, + 0.5966400587800945, 0.8159915888686909, 0.43224717531962037, 0.08008086865017305, - 0.3335054978220887, - 0.20103959855742107, + 0.3335054978208763, + 0.2010395998668716, 0.019267427402329514, 0, 0, @@ -23067,21 +23133,21 @@ 0, 0, 0, - 0.0019459265967516942, + 0.0019459265967516947, 0.236825572886959, - 0.8157145257519085, - 1.0274629412428213, - 1.109136971294251, - 1.1426361172846076, - 1.0609042678919605, - 1.1469761818628272, - 1.1859479515912026, + 0.8157145257519088, + 1.0274629412422602, + 1.1091369712953134, + 1.1426361172852986, + 1.060904267892538, + 1.1469761800678822, + 1.1859479495150125, 1.143399520346347, 1.2012229047945782, - 1.1074873443047877, + 1.107487343678246, 1.021044332438328, - 0.6122781082540443, - 0.2305769351365603, + 0.6122781082540396, + 0.23057693450504263, 0.01505922313306557, 0, 0, @@ -23091,22 +23157,22 @@ 0, 0, 0, - 0.0019285906529979396, - 0.22961130960262338, - 0.8028177165841696, - 1.018612034321953, + 0.0019285906585982458, + 0.2296113096025796, + 0.8028177165841697, + 1.0186120343219531, 1.1091632481793225, - 1.1403565176987454, - 1.1461251032053446, - 1.1444425952028718, - 1.1381006135684562, - 1.1434660949705746, - 1.144617767855082, + 1.1403565176994406, + 1.146125104618644, + 1.1444425935644906, + 1.1381006135682246, + 1.1434660973031467, + 1.1446177678543648, 0.9727097429971101, 0.37761590488841973, 0.057381034399960056, - 0.1691223908739505, - 0.041132390354704285, + 0.1691223916623939, + 0.0411323903547043, 0, 0, 0, @@ -23115,22 +23181,22 @@ 0, 0, 0, - 0.002264198114099527, + 0.0022641980747576135, 0.2602541607899236, 0.8400872667372996, 1.0471857342700852, - 1.1275831532935274, - 1.1710387341567656, - 1.156919932388898, + 1.127583153293523, + 1.1710387341567536, + 1.1569199323888877, 1.1533104973901696, - 1.1611064403308209, - 1.1753337162432254, - 1.1679887592682394, - 0.3019335558125792, - 0.39035293452653336, - 0.028182529348330976, - 0.012549112839408308, - 0.0174175056304774, + 1.16110644104766, + 1.1753337162420208, + 1.167988761289232, + 0.3019335557486542, + 0.39035293452555714, + 0.028182529348324603, + 0.01254911283940831, + 0.017417505605460182, 0, 0, 0, @@ -23139,22 +23205,22 @@ 0, 0, 0, - 0.001854979618824624, - 0.2091774031960637, - 0.9052574932457808, - 1.0744049637244777, - 0.9782064809703973, + 0.0018549796188246244, + 0.2091774031869746, + 0.9052574932440066, + 1.0744049637244772, + 0.9782064809703975, 0.4919375746482675, - 0.9781425168541051, + 0.9781425168544848, 0.6940179436974206, - 0.39989397501629276, + 0.399893974953961, 0.2242559616835273, 0.13731634000600795, - 0.6426194537108183, - 1.0811086136438284, - 0.6386159756864541, - 0.04601135963306555, - 0.007453791824184874, + 0.642619453709941, + 1.081108613644478, + 0.6386159756865373, + 0.04601135963260547, + 0.00745379182380121, 0, 0, 0, @@ -23164,20 +23230,20 @@ 0, 0, 0.0017730646168137244, - 0.2173792698990471, - 0.672178676721917, - 0.9915447372410722, - 1.0927636373671183, - 1.0898338013131876, - 1.1021867971861823, - 0.44773844117296563, - 0.09099719125071708, + 0.21737926989339043, + 0.6721786767209532, + 0.9915447372400821, + 1.0927636368650346, + 1.0898337994206646, + 1.1021867971861818, + 0.44773844031022164, + 0.09099719125075702, 0.1281815544658338, - 0.1317103746897888, - 0.055961052631642715, + 0.13171037468978883, + 0.055961052632038016, 0.05213109718409439, - 0.020503047274034365, - 0.004287761871137473, + 0.020503047274025285, + 0.00428776186965089, 0.0036320114246409367, 0, 0, @@ -23187,21 +23253,21 @@ 0, 0, 0, - 0.0012847516803859555, - 0.240280766902464, - 0.8273978083730347, - 0.9559708850742783, - 1.1253584568654362, - 1.1675726059483156, - 1.1475873138536739, - 1.1167720523609037, - 1.0839765526806004, - 1.0049418833101385, - 0.5624831765041856, - 0.49849874553796747, - 0.4204309107048974, + 0.0012847516876194932, + 0.24028076690246417, + 0.8273978083730346, + 0.9559708850734115, + 1.1253584568659825, + 1.1675726059497398, + 1.1475873138542916, + 1.116772053738042, + 1.083976554414379, + 1.0049418833101382, + 0.5624831765041883, + 0.4984987455379698, + 0.42043091070490435, 0.24962777042569612, - 0.2706560223199496, + 0.2706560223196864, 0.049314673695107246, 0, 0, @@ -23212,21 +23278,21 @@ 0, 0, 0, - 0.15299727314696956, + 0.1529972731469696, 0.8180245138071442, - 0.864349961270676, + 0.8643499612706763, 0.9062627486531809, - 0.6696089329225016, - 0.9165997778851488, - 0.7815966331509474, - 0.8104850254644135, - 0.7062592488586373, - 0.3050070425378039, + 0.6696089321572708, + 0.9165997778857471, + 0.7815966334541861, + 0.8104850239440469, + 0.7062592488582934, + 0.3050070425377969, 0.18915590597793974, 0.4718356806282914, 0.08761573516594659, 0.05724818071617902, - 0.017798570567209012, + 0.017798570563532654, 0, 0, 0, @@ -23235,22 +23301,22 @@ 0, 0, 0, - 0.001100629348992949, - 0.03595505322625824, - 0.1423509114294161, - 0.9111129466336917, + 0.0011006293529909317, + 0.035955053214402455, + 0.14235091142940748, + 0.9111129466336938, 0.9615310911855693, - 0.5530055573315539, - 0.7451597782645266, - 0.8446932795625666, - 0.7700897965376653, - 0.9228612288949721, - 0.739876817121893, - 0.6981839822422656, - 0.8022547768200073, - 0.28296381406170557, - 0.21221537224647394, - 0.016990624709938545, + 0.5530055573315537, + 0.7451597776604519, + 0.8446932804999144, + 0.7700897952242793, + 0.922861229734654, + 0.73987681624615, + 0.6981839822417544, + 0.8022547768185986, + 0.2829638140605257, + 0.21221537187814482, + 0.016990624711024086, 0, 0, 0, @@ -23259,22 +23325,22 @@ 0, 0, 0, - 0.0015002241508139643, - 0.18133825168172202, - 0.7334044739823089, - 0.9939308784107702, + 0.0015002241508139647, + 0.18133825167238377, + 0.7334044739800546, + 0.9939308784107704, 0.9949970854126478, 0.4852512473451401, 1.1978863071809351, 1.1739569207750569, 1.1831171019990947, - 1.2096171417944266, - 1.0337754837417785, - 0.3721755561340105, - 0.453500280418438, - 0.243708891822044, - 0.05391300787429128, - 0.024531325359152693, + 1.209617140725281, + 1.033775481949825, + 0.3721755561338103, + 0.45350028041760276, + 0.24370889182172417, + 0.05391300785043728, + 0.02453132487782907, 0, 0, 0, @@ -23283,22 +23349,22 @@ 0, 0, 0, - 0.0014244918108496634, - 0.20211323948263807, - 0.8156743137737266, - 1.050786889535169, - 1.139096965249046, - 1.169834827836272, + 0.0014244918130273975, + 0.20211324102175016, + 0.8156743137708106, + 1.0507868895345944, + 1.139096965250176, + 1.1698348257085818, 1.1695398352115753, 1.16419694032515, 1.1584629809142433, - 1.1600960914371985, - 1.1629993646340624, + 1.1600960900378272, + 1.16299936682457, 1.1466117930204822, - 1.0902806439843542, - 0.9064997903710397, - 0.3041211343428233, - 0.01223656641288917, + 1.0902806439843538, + 0.9064997903739495, + 0.3041211343559979, + 0.012236566412889173, 0, 0, 0, @@ -23307,22 +23373,22 @@ 0, 0, 0, - 0.0012269931293977198, + 0.0012269931293969285, 0.19349317319381082, - 0.7597582416007007, - 1.0016404448097949, - 1.0988644735041537, - 1.1397902848988628, - 1.1378866366716307, - 1.1452746840072565, - 0.6418375767974479, - 0.4315653238501292, - 0.8123031592873383, - 0.9414615553074452, - 0.6011330071979786, + 0.7597582415994962, + 1.001640444809305, + 1.098864473504723, + 1.1397902828358442, + 1.1378866356200315, + 1.145274684007575, + 0.6418375782302115, + 0.4315653233828263, + 0.8123031580108431, + 0.9414615553074448, + 0.6011330071979785, 0.890881462651733, - 0.11285743951763064, - 0.010564628710586325, + 0.11285743951763069, + 0.010564628710586329, 0, 0, 0, @@ -23335,18 +23401,18 @@ 0.15615186052772342, 0.7435017547563199, 0.9975964312046588, - 1.0462037535961117, - 1.1275390210520306, - 0.7348043944441942, - 0.8317253941133456, - 0.36404110858228433, - 0.605446422673782, - 0.22144877122104145, + 1.046203753596107, + 1.1275390210527645, + 0.73480439444482, + 0.8317253952665834, + 0.36404110855745314, + 0.6054464230503281, + 0.2214487712213522, 0.30884414032712326, 0.4230792654052114, 0.9067007812259253, - 0.3685744851144663, - 0.03149248590744602, + 0.36857448511446655, + 0.031492486414805565, 0, 0, 0, @@ -23356,21 +23422,21 @@ 0, 0, 0.001358029280214194, - 0.13374146597656533, + 0.1337414666899759, 0.7252293873596792, 1.0093501255724613, 1.039650958944743, - 0.5351001674897249, + 0.5351001679220803, 0.7993683744079949, 0.8335508294032518, - 0.3759608728826076, - 0.3510018287269793, - 0.4873404915345046, - 0.9902857222855127, - 0.12646955522042447, - 0.13699408940977253, + 0.3759608727423468, + 0.35100182872729885, + 0.4873404915345481, + 0.9902857222850224, + 0.12646955522031922, + 0.13699408940925728, 0.15165379243688507, - 0.021120522883772804, + 0.021120522884433616, 0, 0, 0, @@ -23380,21 +23446,21 @@ 0, 0, 0, - 0.19971386917694084, - 0.4892904193474644, + 0.19971386945629313, + 0.48929041934680273, 0.8523047052797443, 1.099565325042426, - 1.1283828939760625, - 1.1486616839967512, + 1.1283828939760623, + 1.1486616866318449, 1.2004499443169585, - 1.2379801274061155, + 1.2379801268873316, 0.9599666732078461, - 0.2692829290044317, - 0.098053917440317, - 0.7113414929160122, - 0.5581754719708819, - 0.38772814818352846, - 0.021294908065805005, + 0.26928292893859734, + 0.09805391744050716, + 0.7113414929158381, + 0.5581754719712418, + 0.387728146735936, + 0.021294907847668274, 0, 0, 0, @@ -23404,21 +23470,21 @@ 0, 0, 0, - 0.19779072123476726, - 0.8048506700246398, - 1.0359436941643936, - 1.1203783353366912, - 1.1603209304861204, + 0.19779072167522527, + 0.8048506700221828, + 1.0359436941637734, + 1.1203783353378143, + 1.1603209327030217, 1.189672297074763, 1.1639991917442454, - 0.9622384448866325, + 0.9622384441432977, 0.3119367680053755, - 0.6450222653293655, - 0.9080583212374896, - 0.16610937680518986, - 0.1797808271338481, - 0.1624634966068419, - 0.02192003996788951, + 0.6450222653293729, + 0.9080583212374997, + 0.16610937680519133, + 0.17978082713311846, + 0.16246349661066703, + 0.021920039969045905, 0, 0, 0, @@ -23428,16 +23494,16 @@ 0, 0, 0.0014786528937554336, - 0.16316737236373005, - 0.31624907405148617, - 1.03427694969283, - 1.1208423010922641, - 0.8930376884393182, - 1.0336833637217295, - 0.3206340268104503, - 0.47673264394511, - 0.6176060270690606, - 0.4751763279318028, + 0.16316737236373036, + 0.31624907405168085, + 1.0342769496922875, + 1.1208423010934114, + 0.8930376884399528, + 1.0336833625111532, + 0.3206340270816441, + 0.47673264452707936, + 0.6176060278362137, + 0.4751763279318052, 1.0451993022492896, 0.15886404061959009, 0.9901295155294939, @@ -23452,20 +23518,20 @@ 0, 0, 0, - 0.20180114404528351, - 0.8383753497323722, - 1.070033137885927, + 0.20180114329184792, + 0.8383753497323833, + 1.0700331378859316, 1.156190140224058, - 1.1748540108801793, - 1.1736791973186476, - 1.181187389656517, - 1.190754391085692, - 0.7892121851060012, - 0.5949462202652568, + 1.174854010880934, + 1.173679198493259, + 1.1811873896568326, + 1.1907543896784505, + 0.7892121857495914, + 0.5949462202649337, 0.750093698624949, - 0.3484044188324676, + 0.3484044188324675, 0.27256350992050216, - 0.09429052245669052, + 0.09429052245669056, 0.02119980197323348, 0, 0, @@ -23478,19 +23544,19 @@ 0, 0.17493486886501255, 0.806794158131603, - 1.0500738064897082, + 1.0500738064897077, 1.1321409074611035, 1.1647742501760663, - 1.171294271525301, - 0.9928175365734256, - 1.1434846541625028, - 0.8764567582885047, - 1.0360064633054056, - 0.9325632413063165, - 1.0935066891749954, - 0.919927113514635, + 1.1712942731293003, + 0.9928175365734259, + 1.1434846534791032, + 0.8764567565839676, + 1.0360064633046782, + 0.932563241305189, + 1.0935066891757677, + 0.9199271135172175, 0.3095895493742202, - 0.01731651782936457, + 0.017316517829364584, 0, 0, 0, @@ -23500,20 +23566,20 @@ 0, 0, 0, - 0.17189938384865727, - 0.8201062956866036, + 0.17189938384323064, + 0.8201062956681898, 1.0570357998589646, - 1.1554885294844823, - 1.1849869286258707, - 1.1783061746551289, - 1.1684370164701507, - 1.1737511875145883, - 1.178095860689482, - 1.1774288018009635, - 1.0737870803093377, - 0.8238368235176505, - 0.3043403720796545, - 0.24868586192159559, + 1.155488529484573, + 1.1849869286258712, + 1.178306174655129, + 1.1684370195045688, + 1.173751184445842, + 1.1780958622097903, + 1.1774287993420973, + 1.073787080307888, + 0.8238368235175703, + 0.30434037207719516, + 0.24868586330494039, 0.027547592483920223, 0, 0, @@ -23524,21 +23590,21 @@ 0, 0, 0, - 0.1594599239813377, - 0.7626841446925365, - 1.0081231386694864, - 1.1154837938995372, - 1.150414003216818, + 0.15945992536756837, + 0.7626841446755019, + 1.0081231386683416, + 1.11548379459892, + 1.150414003218334, 1.156025498323663, - 1.1457877331300044, - 1.1552679750764412, - 1.1610796356474238, - 1.146156014724837, + 1.145787729774262, + 1.1552679768140939, + 1.161079637143473, + 1.1461560171260479, 1.14153168551435, 0.9589168640694986, - 0.4322683077379098, - 0.22323863942708683, - 0.011588073169650201, + 0.4322683077372624, + 0.22323863883834852, + 0.011588073168422943, 0, 0, 0, @@ -23549,20 +23615,20 @@ 0, 0, 0.15654368252660542, - 0.7791696293076283, - 1.0231546885994274, - 1.1106120312139225, - 1.1173998353006416, - 1.0800928082328514, - 1.0787269151796541, + 0.7791696292899692, + 1.0231546885988385, + 1.1106120312151253, + 1.1173998353013952, + 1.0800928082336574, + 1.0787269172123712, 0.7518721403130885, - 0.21106635618854314, + 0.2110663562228919, 0.24837840830213684, 0.5169457252353754, 0.466549865684322, 0.45231148718948333, - 0.43519840719141845, - 0.015557637309804358, + 0.43519840719141856, + 0.015557637207621666, 0, 0, 0, @@ -23572,16 +23638,16 @@ 0, 0, 0, - 0.13888497300920172, + 0.13888497300923686, 0.5767033056115272, 0.6568034234945206, - 0.7568704288206735, - 0.45670182612868077, - 0.4811229405456153, - 0.8461080220171617, - 0.45925558756924517, - 0.8786696897405624, - 0.49838461191082545, + 0.7568704288206733, + 0.45670182612876525, + 0.4811229409315945, + 0.8461080220176037, + 0.45925558682120077, + 0.8786696916892127, + 0.49838461191072436, 0.5942118077146811, 0.2892512767430265, 0.06728239258695978, @@ -23597,20 +23663,20 @@ 0, 0, 0.08287968200735106, - 0.3664306377783594, - 0.6549322316051306, + 0.36643063777835927, + 0.6549322316051305, 0.9069133654636223, 0.9255485069541484, - 1.055003944744175, - 0.646176761578248, - 0.6708938509875016, - 0.704050851864683, - 0.7156042933478683, - 0.3310070346554836, - 0.12085947682943808, - 0.36540727904280285, - 0.12379551717000842, - 0.010787829821496857, + 1.0550039447441752, + 0.6461767615782479, + 0.6708938507943255, + 0.7040508504603643, + 0.7156042921692152, + 0.33100703465548603, + 0.12085947682925341, + 0.3654072790427068, + 0.12379551717000846, + 0.01078782982149547, 0, 0, 0, @@ -23620,20 +23686,20 @@ 0, 0, 0, - 0.04934155072249693, - 0.7459713432795824, + 0.049341550721430094, + 0.7459713432709506, 0.9926969466450712, 0.7701165756411892, 0.275753483541011, 0.6024779115651885, 0.5283917965034278, 0.7170062205198087, - 0.5329633839912276, - 0.7101967679403978, - 0.5888253759135026, - 0.19087137303886306, - 0.4153510600888295, - 0.12386493990541594, + 0.5329633839912277, + 0.7101967679398863, + 0.5888253759127025, + 0.19087137303809906, + 0.4153510600888847, + 0.123864940411808, 0.0120478765087127, 0, 0, @@ -23644,21 +23710,21 @@ 0, 0, 0, - 0.12300621322823567, - 0.6393456099727856, - 0.9268336210002044, - 1.047274817819295, - 1.1011788094375443, + 0.123006213000188, + 0.6393456099589537, + 0.9268336209994286, + 1.0472748178199311, + 1.1011788094383288, 0.7181682480677966, - 0.6666211123308521, - 0.5261573213020221, - 0.0790351927083423, + 0.6666211123308505, + 0.5261573221845628, + 0.07903519270834053, 0.12086650350082026, 0.22849849003253087, 0.20424768981896416, - 0.11553122719457229, - 0.06583977092283536, - 0.005312888829975538, + 0.11553122719368022, + 0.0658397708672715, + 0.0053128888299755405, 0, 0, 0, @@ -23668,21 +23734,21 @@ 0, 0, 0, - 0.12681379136395213, - 0.7204378300881361, - 0.9831591279125435, - 1.0861239315289635, - 1.1348792809574224, - 1.1807744100195747, - 0.9945043514186923, + 0.12681379148054708, + 0.7204378282886328, + 0.9831591279119984, + 1.0861239315302407, + 1.134879280959043, + 1.1807744100203992, + 0.994504353088507, 0.949461264610619, - 0.553403520847258, + 0.5534035208472581, 0.6670568555652082, 0.6031720466706237, 0.1982979432657209, 0.03453867227643082, 0.008799303373896436, - 0.003167354697114739, + 0.003167354699317115, 0, 0, 0, @@ -23695,18 +23761,18 @@ 0.09097681439674232, 0.7124816093641225, 0.9912738800928457, - 1.0725998951882059, - 0.9785085729238101, - 0.6695466265598052, - 0.32207060814375504, - 0.90367639897279, - 0.7080905561558171, - 0.8312574634047254, + 1.072599895188206, + 0.9785085729246066, + 0.6695466265603434, + 0.32207060832878337, + 0.90367639967687, + 0.7080905555930146, + 0.8312574619067622, 0.13669899179572398, - 0.34395181118826845, - 0.1062851241557926, - 0.03164953851931104, - 0.0057187461993360444, + 0.3439518111882685, + 0.10628512415579261, + 0.03164953851931105, + 0.005718746199711232, 0, 0, 0, @@ -23716,21 +23782,21 @@ 0, 0, 0, - 0.09519423629377265, - 0.3163543148561152, + 0.09519423629377255, + 0.3163543148561151, 0.8756128223846674, 0.8864523341082445, 1.0258069483429113, 0.6277501604879662, - 0.2001686154374153, - 0.26254963249245244, - 0.6851055295165065, - 0.3361949588076501, - 0.2146795522119846, - 1.0151723846093226, - 0.9159793126505615, - 0.3078838090357788, - 0.01311483447618218, + 0.20016861543729253, + 0.2625496324925537, + 0.6851055306579847, + 0.3361949585428149, + 0.21467955221209437, + 1.0151723846094052, + 0.91597931265055, + 0.30788380715705554, + 0.013114834537811386, 0, 0, 0, @@ -23740,21 +23806,21 @@ 0, 0, 0, - 0.11024320812497182, - 0.6993710187198415, - 0.9862644276834538, + 0.11024320811710059, + 0.6993710187029776, + 0.9862644276834535, 1.0881525327699406, - 1.1242999782131247, + 1.1242999782131242, 1.1339536760931708, 1.1296644955078596, - 1.1351052759325253, - 1.1286504573405014, - 1.1371109541053468, - 1.1212942859831825, - 0.8319920115718691, - 0.14149440909549593, - 0.14689615537689646, - 0.014017687730781539, + 1.1351052768394538, + 1.1286504600955638, + 1.1371109514188478, + 1.1212942859816832, + 0.8319920115719992, + 0.14149440909490732, + 0.14689615450260515, + 0.014017687730781542, 0, 0, 0, @@ -23764,21 +23830,21 @@ 0, 0, 0, - 0.046014992853356036, - 0.2922531581946998, - 0.6836502969603773, - 1.0500019267743559, - 1.0915418544723738, - 1.1019513925328774, + 0.04601499260576849, + 0.29225315819246006, + 0.683650296960367, + 1.0500019267756961, + 1.091541851938138, + 1.1019513925328697, 1.1256606493640853, - 0.9933064785816095, - 0.26609341398216035, + 0.993306475669367, + 0.26609341392600677, 0.43014812706691535, - 0.6999105871369165, - 0.4616758477341539, - 0.5998260921345495, - 0.27806707975299555, - 0.013482618855853659, + 0.6999105871369166, + 0.46167584773415377, + 0.599826092135421, + 0.2780670784939211, + 0.013482618956014736, 0, 0, 0, @@ -23788,21 +23854,21 @@ 0, 0, 0, - 0.09330978945346244, - 0.5762391584668556, - 0.4331347944270548, - 0.9389575034639941, - 1.0401950462555036, - 0.9689996929739046, - 0.7865425165337596, + 0.0933097895179239, + 0.5762391584611259, + 0.43313479442800734, + 0.9389575034645706, + 1.0401950462562914, + 0.9689996950141007, + 0.7865425165340847, 0.8867943389068234, 1.0345048308775395, 0.9399189754280943, - 0.4050755586400611, + 0.40507555841753157, 0.0529516085719263, - 0.04684444330319502, + 0.046844443303195, 0.06049492478913857, - 0.009725679394649895, + 0.009725679394649892, 0, 0, 0, @@ -23812,20 +23878,20 @@ 0, 0, 0, - 0.017901302543326076, + 0.017901302543326073, 0.11185428069903534, - 0.39700638897564944, + 0.39700638897564955, 1.12161349787057, - 1.0286480755105307, - 0.9622344763760236, - 1.1385776594208286, - 0.9208420629056288, - 1.111723409774389, - 0.37974429001674564, - 0.6931646935630779, + 1.0286480779341105, + 0.9622344777649481, + 1.1385776632358195, + 0.9208420647736723, + 1.111723412885611, + 0.37974429052369485, + 0.6931646935630781, 0.3442602290889405, - 0.15060261261522398, - 0.06510010881104772, + 0.15060261261522404, + 0.06510010881104773, 0.002926147632490245, 0, 0, @@ -23837,19 +23903,19 @@ 0, 0, 0.038444353744172204, - 0.11016608911096157, - 0.7327027084545467, + 0.11016608911096155, + 0.7327027084545465, 0.5510834778133354, 0.652589660870261, - 1.1611781393946297, - 0.9036036716582599, - 0.5131339992569679, - 0.9430596870541935, - 0.5958757220417391, - 0.10735697235163813, - 0.49128237178301376, + 1.1611781393946294, + 0.9036036716587297, + 0.5131339996850905, + 0.9430596889762144, + 0.5958757220413846, + 0.10735697234749182, + 0.4912823717822997, 0.7190369848628788, - 0.05725866087457071, + 0.057258660874570724, 0, 0, 0, @@ -23860,21 +23926,21 @@ 0, 0, 0, - 0.08506329037278335, - 0.7051661750661131, - 0.6814947275208935, + 0.08506328958586382, + 0.7051661750481552, + 0.6814947275208932, 0.22914010585020106, 0.5018815943999088, - 1.0816476537504216, - 0.6145581950830319, - 0.3677023099781023, - 0.3380804460532123, - 0.06347864402347059, - 0.052300950295706486, - 0.21834519592123286, - 0.2531582617984793, - 0.03465634118657817, - 0.005393287976443386, + 1.0816476537504218, + 0.6145581939524769, + 0.3677023099781024, + 0.3380804459072419, + 0.0634786440235926, + 0.05230095029593133, + 0.21834519592012677, + 0.25315826179765466, + 0.034656341186326246, + 0.005393287976539225, 0, 0, 0, @@ -23884,21 +23950,21 @@ 0, 0, 0, - 0.0415117514316472, - 0.47197451482441277, - 0.6040580490784538, - 0.6658243136935041, - 0.9207918588422023, + 0.04151175174010786, + 0.47197451481992864, + 0.6040580490787696, + 0.6658243136948188, + 0.9207918608948181, 1.0198162466477843, 0.7100604997651915, 0.17379315363298417, - 0.10202098933519897, - 0.08240254562238919, - 0.5588512592363599, - 0.2604307030169326, - 0.5211030172649909, - 0.3172178080116279, - 0.015852295746164174, + 0.1020209893391377, + 0.08240254562238922, + 0.55885125923636, + 0.26043070301614446, + 0.5211030172637511, + 0.3172178061223909, + 0.01585229567464447, 0, 0, 0, @@ -23908,21 +23974,21 @@ 0, 0, 0, - 0.05851222488917055, - 0.40019816899383964, - 1.0307620911264872, - 1.0688916734405165, - 1.0275604165594225, - 1.1150754995494254, - 1.0706655398336242, - 1.1220424076297812, + 0.05851222435139222, + 0.4001981689895705, + 1.0307620911259872, + 1.0688916734411944, + 1.0275604165603147, + 1.1150755003589092, + 1.0706655398339606, + 1.1220424037105667, 0.9481685275770407, 1.024454060147279, - 0.7269610554019066, + 0.7269610554019069, 1.0280081978639561, - 0.7289569480529663, - 0.17577047899994575, - 0.003582015347677534, + 0.7289569480529664, + 0.17577047899994572, + 0.0035820153598317157, 0, 0, 0, @@ -23932,21 +23998,21 @@ 0, 0, 0, - 0.024008229431375656, + 0.02400822943137566, 0.1478133051716152, 0.19446190019261037, - 0.4789942675663987, - 0.4592234406182144, - 0.6460788015447904, - 0.7797641347849171, - 0.5524489763340875, - 0.45053314762898194, - 0.05118089417381925, - 0.8235233365308876, + 0.47899426756731356, + 0.45922344115590596, + 0.6460788009866364, + 0.7797641347851156, + 0.5524489763340379, + 0.45053314762884267, + 0.05118089417391767, + 0.8235233365308873, 0.7356401838671487, - 0.2270271755977546, - 0.12362037480671972, - 0.005201492753628678, + 0.22702717559775454, + 0.12362037480670071, + 0.005201492730085816, 0, 0, 0, @@ -23956,21 +24022,21 @@ 0, 0, 0, - 0.042413694428336784, - 0.65097394823977, + 0.04241369442833677, + 0.6509739482397703, 0.9951157911316033, - 1.0955392736260963, + 1.095539273626096, 1.124481440741481, - 1.1149592716834364, - 1.1116125998638178, - 1.127700823788603, - 1.0768160138342298, - 0.911240788086552, - 0.8905613605120564, - 1.1570264337146476, - 0.782811459523168, + 1.1149592716834367, + 1.1116126024032953, + 1.1277008237880888, + 1.0768160108013893, + 0.9112407880848667, + 0.8905613605105606, + 1.1570264337150629, + 0.7828114595231679, 0.29670610415330956, - 0.011938092538597855, + 0.011938092468231345, 0, 0, 0, @@ -23980,21 +24046,21 @@ 0, 0, 0, - 0.06079668452055637, + 0.06079668439592427, 0.6082056972078049, 0.966402632548153, - 1.075916384996337, - 1.0942014627209122, - 1.0734019630813145, + 1.0759163849963331, + 1.0942014627209073, + 1.0734019622874544, 1.0744278980027415, 1.1222425955614561, 1.1536175082384739, - 0.8152125977748135, - 0.41566604075870733, - 0.3401186309919221, - 0.18306478573347063, - 0.04754035386440504, - 0.005585714830452419, + 0.8152125977735052, + 0.4156660407584258, + 0.3401186309914676, + 0.1830647856283458, + 0.04754035388370164, + 0.0055857148299544275, 0, 0, 0, @@ -24004,21 +24070,21 @@ 0, 0, 0, - 0.06231184232996339, - 0.6140964604466848, - 0.9725789331778896, - 1.084331830800312, + 0.06231184139975054, + 0.6140964604384722, + 0.9725789331773199, + 1.0843318308014032, 1.1202632313103373, 1.1249719165563636, 1.114213394566842, 1.0505882246296914, 0.4895843765754394, - 0.8514932015825836, - 0.13483772271497416, - 0.45106240607607145, - 0.5786961263654506, - 0.07661846161627928, - 0.005039908544424006, + 0.8514932015825837, + 0.1348377227149742, + 0.4510624060755644, + 0.578696126368703, + 0.07661846161706704, + 0.005039908516021355, 0, 0, 0, @@ -24028,21 +24094,21 @@ 0, 0, 0, - 0.05863521059755844, - 0.6018421733991234, - 0.9813554609807665, - 1.082197303376883, - 1.1052633689363172, - 1.1118411799184122, - 1.106847932457865, + 0.058635210597558426, + 0.6018421733909433, + 0.9813554609802136, + 1.0821973033774492, + 1.105263368937259, + 1.1118411820320464, + 1.1068479356853966, 0.860376664649145, - 0.34950358020525646, - 0.7957429378901522, + 0.34950358020525657, + 0.7957429378901523, 0.45870398586594957, 0.11152828169645683, - 0.41299624146906394, - 0.07436911857941178, - 0.0027930143835625896, + 0.412996241469074, + 0.07436911857941181, + 0.0027930143835625905, 0, 0, 0, @@ -24052,19 +24118,19 @@ 0, 0, 0, - 0.03513502208986431, + 0.03513502208986432, 0.5618083665708301, - 0.8787025061437194, - 1.0080074714165588, - 1.0071262828085337, - 0.9210785383107021, - 1.003320118469608, - 1.1315184033873515, - 0.41058732775607265, - 0.10911573366830533, - 1.1895863178609727, - 0.3386570601847521, - 0.23637702126621402, + 0.8787025061437195, + 1.0080074714171512, + 1.0071262828093415, + 0.9210785397806156, + 1.0033201162540073, + 1.1315184006498846, + 0.4105873281260476, + 0.10911573366830538, + 1.1895863178609896, + 0.33865706018475333, + 0.23637702126620316, 0.13068011519254913, 0.014117625875340033, 0, @@ -24076,21 +24142,21 @@ 0, 0, 0, - 0.04922887855317928, + 0.04922887830881818, 0.5711472544356998, 0.9428974784181849, 1.0482251682372288, 1.0748797454123344, - 1.0919203043284145, - 1.0737730390501083, - 1.0984252268596388, - 0.5853566672396421, - 0.6839798084129842, - 0.15464220046071123, - 0.21539477469061732, - 0.7880859755617199, + 1.0919203043284142, + 1.0737730400498187, + 1.098425228104775, + 0.5853566672380192, + 0.6839798084120747, + 0.15464220043981433, + 0.21539477469029972, + 0.7880859755617211, 0.1730206669176641, - 0.002310856900942697, + 0.0023108569009426976, 0, 0, 0, @@ -24100,21 +24166,21 @@ 0, 0, 0, - 0.03591977739458438, - 0.3057136432872349, - 0.7943010286595917, - 1.0154124322983857, + 0.03591977741374395, + 0.3057136432872348, + 0.7943010286595926, + 1.0154124322983809, 1.0817869545267949, 1.020984768044794, 0.9867920073919165, - 0.8950850693901405, + 0.8950850670134126, 0.8421749752987883, - 0.5168524225906289, - 0.47177567072961984, - 0.9812026188337785, - 0.48472756117650484, - 0.11849436167065833, - 0.003874659930420214, + 0.5168524225903137, + 0.47177567124497527, + 0.9812026188338745, + 0.48472756118481347, + 0.11849436160193051, + 0.0038746599304202147, 0, 0, 0, @@ -24124,21 +24190,21 @@ 0, 0, 0, - 0.013542706343763415, - 0.1282498055427687, - 0.6385281593128316, - 0.9440632938893239, + 0.01354270634376342, + 0.12824980554264576, + 0.6385281593128399, + 0.9440632938899752, 1.0216111667461134, 1.0515056080111462, - 0.5678018876266525, - 0.8636633752808811, - 0.7794478156286744, + 0.5678018870668662, + 0.8636633763408229, + 0.7794478156286747, 0.9681676485823836, 0.24084927539182008, - 0.460277776728564, - 0.4210280212124765, - 0.14034211363697197, - 0.002745382613116051, + 0.4602777767277554, + 0.42102802121503946, + 0.14034211363963733, + 0.0027453826133284585, 0, 0, 0, @@ -24149,20 +24215,20 @@ 0, 0, 0.009545904269153369, - 0.09032571437149142, - 0.1823088566049424, - 0.5042599038068989, - 0.5593458198714483, - 0.6145350622248122, - 0.10125818378281304, - 0.2656775019643541, + 0.09032571437220993, + 0.18230885660552348, + 0.5042599038076362, + 0.5593458198716984, + 0.6145350618582234, + 0.10125818378273418, + 0.2656775019164155, 0.5309550513894463, 0.8629619226091553, 0.6718448713260105, 0.40837527732092277, - 0.5491816802275974, - 0.12106306568621912, - 0.004282212945804191, + 0.5491816802275727, + 0.1210630649533404, + 0.004282212945490812, 0, 0, 0, @@ -24172,21 +24238,21 @@ 0, 0, 0, - 0.04384639182256371, + 0.043846391401044155, 0.6160000477895845, 1.0232900491462102, - 1.1346846166682585, - 1.1374466498859694, - 1.1290874885445723, - 1.1435276507240644, - 1.046919014779632, - 1.087343826412552, - 1.067137752342266, - 0.48798208714067903, - 0.6729263571169799, - 0.30083453001786314, - 0.1748137313104137, - 0.0055550672398724955, + 1.1346846166688163, + 1.1374466498870062, + 1.1290874885462825, + 1.1435276540215795, + 1.0469190147788332, + 1.0873438304873349, + 1.067137752342277, + 0.4879820871406852, + 0.6729263571169825, + 0.3008345300178631, + 0.17481373131041383, + 0.005555067239695452, 0, 0, 0, @@ -24196,21 +24262,21 @@ 0, 0, 0, - 0.010517494537273204, + 0.010517494536966989, 0.2054186680882976, 0.6329643014389562, - 0.5119282866969356, - 0.5976174348316734, - 1.1303230476972645, - 1.1120719783359736, - 1.0383478038470169, - 1.1358554538090773, - 0.9812001964109516, - 0.47036037229680056, - 0.3490462372021862, - 0.25793753401827374, + 0.5119282866969354, + 0.5976174348316708, + 1.1303230476972608, + 1.1120719742007121, + 1.0383478038462104, + 1.1358554538074472, + 0.9812001964090342, + 0.47036037229616945, + 0.3490462372017735, + 0.2579375340182737, 0.060658068382034164, - 0.003844011489292787, + 0.0038440114891712157, 0, 0, 0, @@ -24220,21 +24286,21 @@ 0, 0, 0, - 0.030366426823475026, - 0.5175957880186195, + 0.030366426823475033, + 0.5175957880186901, 0.9347611061503251, 1.0600234887612257, - 1.082117830315899, + 1.0821178303158991, 1.0897366038270084, 1.1012940633236643, 1.1082228458397758, - 1.1204793036812466, - 1.0377786888068534, - 0.7742350431251016, - 0.8119260041748254, - 0.2278827266017829, - 0.05693541764115273, - 0.002697581007311867, + 1.1204793074266264, + 1.0377786888048528, + 0.7742350431244471, + 0.8119260041747556, + 0.2278827268202442, + 0.05693541744438181, + 0.002697581007249732, 0, 0, 0, @@ -24244,20 +24310,20 @@ 0, 0, 0, - 0.0221625420604148, - 0.32649022964340985, - 0.6699473339001302, - 0.9787930199727994, - 1.031700076655932, - 0.9763996429335647, - 0.6982131508277718, - 1.053694165003945, - 0.9890193670190625, + 0.022162541890462018, + 0.326490230221426, + 0.6699473339000864, + 0.9787930199734926, + 1.0317000766559317, + 0.9763996429335653, + 0.6982131511937811, + 1.0536941651245386, + 0.9890193670190622, 0.37644046001468445, - 0.6616776717198594, - 0.4636258967515008, - 0.17789249625376174, - 0.044321740219910734, + 0.6616776717198595, + 0.4636258967510824, + 0.17789249625315123, + 0.044321740276208346, 0, 0, 0, @@ -24268,21 +24334,21 @@ 0, 0, 0, - 0.008755616380413653, - 0.2225995151454813, - 0.743005735330654, - 0.9889188651748739, - 0.8504584483474293, - 0.6070070850778265, - 0.8883157955987591, + 0.008755616395822586, + 0.22259951549188955, + 0.7430057353303864, + 0.9889188651764163, + 0.8504584510296485, + 0.6070070850781856, + 0.8883157955997244, 0.647978401102337, - 0.7862988603291252, - 0.6894129047496688, + 0.7862988613467913, + 0.689412904749669, 0.3756352598910797, - 0.06421975073911701, - 0.10716294194869426, - 0.04977067757861865, - 0.001808472617297107, + 0.06421975073911725, + 0.10716294194869883, + 0.04977067757861867, + 0.0018084726172961257, 0, 0, 0, @@ -24292,21 +24358,21 @@ 0, 0, 0, - 0.008995848737692439, + 0.00899584873595738, 0.3862850042765406, - 0.954830151876114, - 1.0770666241527842, - 1.1777677075671533, - 0.6391025992533858, - 0.585750959440252, - 0.548818033861815, - 0.9868260653788034, - 0.2814322429631228, - 0.3882863893358785, + 0.9548301518761144, + 1.0770666241534086, + 1.1777677075682307, + 0.6391025982344611, + 0.5857509594403869, + 0.5488180323620623, + 0.9868260633474734, + 0.28143224296312275, + 0.38828638933587856, 0.22839248257890488, - 0.12247022993145315, - 0.0648766888804981, - 0.001897086523246095, + 0.12247022993145318, + 0.06487668888049813, + 0.0018970865232460954, 0, 0, 0, @@ -24316,18 +24382,18 @@ 0, 0, 0, - 0.01867185362221239, + 0.01867185367965401, 0.42197682760759114, - 0.88751068714849, - 1.0482048117579466, - 1.087509292110666, + 0.8875106871484904, + 1.0482048117579397, + 1.0875092881189916, 1.0889056496030118, - 1.0930525790324956, - 1.0806068051473465, - 1.1321796522339562, - 1.0992138132655613, - 0.5585246886457006, - 0.3551869611997259, + 1.0930525836702634, + 1.0806068051469078, + 1.1321796480659396, + 1.0992138132643978, + 0.5585246886449705, + 0.35518696119877274, 0.24186478326446414, 0.0578262450493603, 0, @@ -24340,20 +24406,20 @@ 0, 0, 0, - 0.016016998304711354, - 0.490245002754189, + 0.01601699830295173, + 0.4902450027541891, 0.952593133381232, 1.0942621764911433, - 1.0988978579235753, + 1.0988978620718202, 1.0555499533523245, 1.0285467721651493, 1.0447862232419134, - 1.0494804939784972, - 1.0267865484979044, - 0.7484010510367193, - 0.5700599577903673, - 0.08694068244483759, - 0.039984745238442435, + 1.0494804939775189, + 1.0267865484957708, + 0.748401051035902, + 0.5700599577897411, + 0.08694068244410176, + 0.03998474523844242, 0, 0, 0, @@ -24364,19 +24430,19 @@ 0, 0, 0, - 0.012144845969494035, - 0.3191951670327176, - 0.7898462593483631, - 0.9861311943261717, + 0.012144845968689992, + 0.3191951670285836, + 0.789846259347786, + 0.9861311943268856, 1.0521321787715403, - 1.060830381832311, + 1.0608303818323108, 1.0234185423523747, - 0.9722164240773703, + 0.9722164247431063, 0.9873585151207214, 0.9212720929784463, - 0.7291478897189876, - 0.29832205925659, - 0.2660114608199121, + 0.7291478897189874, + 0.29832205925619937, + 0.2660114608207661, 0.043329840219751205, 0, 0, @@ -24388,20 +24454,20 @@ 0, 0, 0, - 0.009591004332014087, - 0.23440375821894954, - 0.5640949021437823, - 0.7948254083590439, - 0.9104248469322518, - 1.0015610143335478, + 0.009591004332014088, + 0.23440375821427512, + 0.5640949021440507, + 0.794825408360476, + 0.9104248469341194, + 1.0015610119917702, 1.058632816249843, 1.0535638061861612, - 1.0668562964671373, + 1.0668562964671378, 1.0728176559599734, - 1.0428392796045645, - 0.9273511100984172, + 1.042839279604582, + 0.9273511100984164, 0.47707260000875457, - 0.07241650745542796, + 0.07241650745542799, 0, 0, 0, @@ -24412,16 +24478,16 @@ 0, 0, 0, - 0.015571571713620013, + 0.015571571554623605, 0.40063973300616745, - 0.8440291767802718, - 0.9803449386976194, - 1.0184352840706754, - 1.0460711192550753, - 1.0163140093397693, - 0.9897167139878057, - 0.9832094388251241, - 1.004205865731413, + 0.8440291767802713, + 0.980344938699067, + 1.0184352800799286, + 1.0460711192560714, + 1.0163140139072817, + 0.9897167138177329, + 0.9832094388242033, + 1.0042058657314132, 0.9640356282345499, 0.7886299048186458, 0.4939321891592041, @@ -24436,19 +24502,19 @@ 0, 0, 0, - 0.017156057385661734, - 0.4308165416868023, - 0.8942129329035139, + 0.01715605737362858, + 0.43081654168686995, + 0.8942129329035241, 1.0364783477652157, 1.0569040756557757, - 1.0739214068348772, - 0.9845945628293465, - 0.9482928163506413, - 0.5200875464722625, - 0.7021297611663525, - 0.25932955177317135, - 0.12105346754812635, - 0.05411358455363851, + 1.073921406835918, + 0.9845945621782022, + 0.9482928187996679, + 0.5200875464721433, + 0.7021297611657867, + 0.25932955177276795, + 0.12105346754762963, + 0.054113584553638516, 0.016830399106692498, 0, 0, @@ -24460,20 +24526,20 @@ 0, 0, 0, - 0.009243404382147056, + 0.009243404382147062, 0.27499019531123964, 0.8356148787040782, 0.9734291242715629, 1.0317608639692968, 1.0486318897841402, 1.0335617850717933, - 1.0831156933048147, - 0.9460830912549184, - 0.3183199443650828, - 0.10562275976263477, - 0.10224755034197942, - 0.3173725694800887, - 0.07370597599821563, + 1.083115693304815, + 0.9460830912534952, + 0.3183199443650366, + 0.10562275976253403, + 0.10224755034163456, + 0.31737256948168907, + 0.0737059764038881, 0, 0, 0, @@ -24484,20 +24550,20 @@ 0, 0, 0, - 0.0065691451368231485, - 0.3299309999002542, - 0.808410800833525, - 0.9358452333282716, - 0.9875104900951709, - 0.9372950578030632, + 0.006569145137366293, + 0.3299309998905838, + 0.8084108008329444, + 0.9358452333289647, + 0.987510490095171, + 0.937295057803063, 1.0647622350952703, 0.6791806587276958, - 0.33867182701643156, - 0.2771424115639045, - 0.4056774477254467, - 0.1844684321988293, - 0.5341206099955709, - 0.03824889011273365, + 0.33867182701643167, + 0.27714241237797593, + 0.4056774477254469, + 0.18446843219838915, + 0.5341206100061685, + 0.038248890114714634, 0, 0, 0, @@ -24508,20 +24574,20 @@ 0, 0, 0, - 0.005512733993184031, - 0.18142403681236902, - 0.49273295329266353, - 0.6869941140143573, - 0.8281121901460046, - 0.9158806883240437, - 0.9451786922853535, - 0.9633005716812553, - 0.9853990790813898, + 0.005512733983308443, + 0.18142403692185222, + 0.4927329532934773, + 0.6869941140159779, + 0.8281121932289596, + 0.9158806874495821, + 0.9451786906239338, + 0.9633005752154005, + 0.9853990790814132, 0.7162227891028865, 0.6496258523660262, - 0.6827822459543783, - 0.43205543029487914, - 0.04115683393679683, + 0.6827822459543784, + 0.4320554302948789, + 0.04115683406733323, 0, 0, 0, @@ -24532,20 +24598,20 @@ 0, 0, 0, - 0.005033239355596527, - 0.17569457770701552, + 0.005033239343087701, + 0.1756945777070155, 0.47843218430347667, - 0.7249487682839082, - 0.8391886598056711, - 0.8944996417145031, - 0.9217910886475124, - 0.9449664378209831, - 0.948856534590295, + 0.7249487682853499, + 0.839188659806517, + 0.894499641715301, + 0.9217910870838406, + 0.944966437820501, + 0.9488565345894585, 0.924562718977652, - 0.8634793175332609, - 0.742717401164572, - 0.36218907432539454, - 0.037325610826878707, + 0.8634793175332611, + 0.7427174011645721, + 0.3621890743253944, + 0.03732561089609808, 0, 0, 0, @@ -24560,16 +24626,16 @@ 0.19302654453412565, 0.47712895313729464, 0.6499196864686688, - 0.8367491275731574, - 0.9458474825137775, - 0.7964614776694615, - 0.7505953100574564, - 0.618487399294171, - 0.2845455126590043, - 0.20095946681272792, + 0.8367491275731571, + 0.9458474825146223, + 0.7964614802922282, + 0.7505953127971668, + 0.6184873983382282, + 0.2845455128677636, + 0.20095946681244767, 0.2898611087117904, - 0.13799835294405055, - 0.03215576907933544, + 0.13799835294405058, + 0.03215576910694487, 0, 0, 0, @@ -24580,20 +24646,20 @@ 0, 0, 0, - 0.0048273799135358075, + 0.004827379913456323, 0.18759212609227238, 0.5297073047886209, 0.6949757297269427, 0.45638787765356753, - 0.9361919199195581, + 0.9361919199195584, 0.9548099199092384, - 0.7177458497819408, - 0.8872401088368875, - 0.6552416069474648, - 0.49733188446355103, - 0.6580200586898121, - 0.11341814678466441, - 0.017191998782612197, + 0.717745849918145, + 0.8872401068255028, + 0.6552416091913609, + 0.49733188446192567, + 0.6580200586883606, + 0.11341814676830965, + 0.017191998782581326, 0, 0, 0, @@ -24604,20 +24670,20 @@ 0, 0, 0, - 0.0027379936719206504, - 0.11497036264945323, - 0.5643017971378731, + 0.0027379936729547065, + 0.1149703626908454, + 0.5643017971382482, 0.749441705790786, 0.9120835058950864, 0.9632489333252161, 0.9449010333955545, - 0.6981736903804334, + 0.6981736905336041, 0.9347402545813337, - 0.49188234115268725, - 0.3388390751509614, - 0.06096965640702166, - 0.06324931143398942, - 0.014163102882159172, + 0.49188234115269225, + 0.3388390751509689, + 0.06096965640700362, + 0.0632493114334981, + 0.014163102911207735, 0, 0, 0, @@ -24628,20 +24694,20 @@ 0, 0, 0, - 0.003568187894130637, - 0.11728842213460483, - 0.6921114470581265, - 0.8953506680099433, - 0.9607197127561303, - 0.944465509060866, + 0.0035681878941306398, + 0.1172884221757329, + 0.692111447058129, + 0.895350668010643, + 0.9607197127584802, + 0.9444655124513519, 0.6358877143686859, 0.6455962041016481, - 0.6937630202913263, + 0.6937630186520519, 0.5083766994962059, 0.2589060556293155, 0.19493662450383642, - 0.032279680380356834, - 0.021676333042784057, + 0.032279680380356855, + 0.021676333052264643, 0, 0, 0, @@ -24652,20 +24718,20 @@ 0, 0, 0, - 0.007153500532166692, - 0.3509383281277076, - 0.8736293174789929, - 1.021115333848683, - 1.0456246933779219, - 1.0419068955777655, - 1.0358248248795199, - 1.032897515562023, - 1.0516240020293413, + 0.007153500454834255, + 0.3509383281277698, + 0.8736293174789984, + 1.02111533385015, + 1.045624688246656, + 1.041906892533452, + 1.0358248207465974, + 1.0328975211630576, + 1.0516239978837825, 0.5022346457119765, 0.7457019263293955, 0.3571912565186746, - 0.1304598604041309, - 0.045930711457102924, + 0.13045986040420976, + 0.04593071145886698, 0, 0, 0, @@ -24676,20 +24742,20 @@ 0, 0, 0, - 0.0032748396695118634, - 0.06465469779502298, + 0.0032748396725471797, + 0.064654697795023, 0.7037182193797131, - 0.42063958690942044, - 0.6097802253131784, - 0.8544006217399539, - 0.7858861161284433, - 0.3289973789680483, - 0.09398886980627923, - 0.05113172136072265, - 0.17637284227812958, + 0.4206395869094206, + 0.6097802253131782, + 0.8544006217407354, + 0.7858861178457502, + 0.32899737905098647, + 0.093988869803094, + 0.05113172136084006, + 0.17637284227788338, 0.08887551335713817, 0.0478867541561808, - 0.005521207911086409, + 0.00552120791155927, 0, 0, 0, @@ -24705,15 +24771,15 @@ 0.7085472963437017, 0.2878346992109959, 0.6613795093706544, - 0.2874188248872782, + 0.28741882488727827, 0.5550936115059006, - 0.25824299479519514, - 0.11166278368420411, - 0.25169519696414094, - 0.9869542270753732, - 0.9457792157715755, - 0.34227101404403454, - 0.014791306538842336, + 0.25824299479524687, + 0.11166278368251756, + 0.2516951969644583, + 0.9869542270737859, + 0.9457792157724954, + 0.34227101395796655, + 0.014791306538909641, 0, 0, 0, @@ -24724,20 +24790,20 @@ 0, 0, 0, - 0.0035346567334334994, - 0.30383332136207974, - 0.8655064993572459, - 1.0249673900897527, + 0.0035346567247939342, + 0.30383332146039044, + 0.8655064993569783, + 1.024967390089752, 1.0489965864029718, - 1.000821359040942, - 1.0455627239769025, - 0.9952607865815791, - 0.8257848597721735, + 1.000821362049311, + 1.045562724284119, + 0.9952607831947684, + 0.8257848551942151, 0.1802430906953592, 0.2514795186127507, - 0.1624134196182512, - 0.2938718350954039, - 0.04160875886448245, + 0.16241341961758426, + 0.29387183510190895, + 0.04160875869963678, 0, 0, 0, @@ -24748,20 +24814,20 @@ 0, 0, 0, - 0.0037251233681161937, - 0.24926816358198695, - 0.762168151468771, - 0.966560903874392, - 1.0078580663793817, - 1.0272039705743743, + 0.0037251233634996834, + 0.2492681635282407, + 0.762168151468347, + 0.9665609038751973, + 1.0078580663807244, + 1.027203970576664, 0.9321157564689541, - 0.5189141560452565, - 0.382056424592584, - 0.43196493152214005, + 0.5189141560452563, + 0.38205642459258415, + 0.43196493152214016, 0.6501456919264117, - 0.06873917640494377, - 0.05143704520818623, - 0.017079884999448004, + 0.06873917640494379, + 0.05143704520818622, + 0.017079884998364086, 0, 0, 0, @@ -24772,20 +24838,20 @@ 0, 0, 0, - 0.003230960835811162, + 0.003230960841105636, 0.2625884006584396, - 0.7711191258850085, - 0.991857091111196, - 1.0268987849153295, - 1.0255242684616708, - 1.0187950343230556, - 1.027755275363055, - 1.055687931745578, + 0.7711191258848001, + 0.9918570911119566, + 1.026898784918026, + 1.0255242684627537, + 1.0187950363279954, + 1.027755272522741, + 1.0556879317433607, 1.0751746494173025, - 1.0719087639715281, + 1.0719087639715277, 0.9719200747170669, 0.4563983019733423, - 0.026102253149373603, + 0.02610225314937361, 0, 0, 0, @@ -24798,17 +24864,17 @@ 0, 0.004223040923542356, 0.37006453293093544, - 0.9514026386059125, + 0.9514026386059127, 1.075370420936142, 1.0816173586514646, - 1.0612967795360913, - 1.0401803399831633, - 1.0407246297870185, - 1.0612304522618163, - 1.0852399510794022, - 1.0914920940328825, - 0.9939359714111835, - 0.48705043549597626, + 1.061296776017163, + 1.0401803399841092, + 1.0407246297865465, + 1.06123045576206, + 1.0852399510764996, + 1.0914920940321269, + 0.9939359714111837, + 0.48705043549594057, 0.02460242170160843, 0, 0, @@ -24820,19 +24886,19 @@ 0, 0, 0, - 0.00351928219737274, - 0.19574216072815862, + 0.0035192821982003766, + 0.19574216072815853, 0.6505694079473825, - 0.9901509521396447, + 0.9901509521396444, 1.0400289739162831, 1.0284928845473444, 1.0119875664376954, 1.0129310005956895, - 1.0382879909249845, - 1.0585471674739033, - 1.0466279935011922, - 0.747810190860256, - 0.40090370972636175, + 1.0382879958168358, + 1.0585471674724967, + 1.0466279935004257, + 0.7478101908602569, + 0.40090370983560614, 0.021798452240611155, 0, 0, @@ -24844,20 +24910,20 @@ 0, 0, 0, - 0.0029087852255604155, - 0.3169634431755669, - 0.8997027567779242, + 0.002908785225444147, + 0.31696344322164594, + 0.899702756777541, 1.0333995802044798, 1.0479311122399062, 1.031855246650741, - 1.0104841094288346, - 1.0086202783361047, + 1.0104841075656459, + 1.0086202783361313, 1.0320307107315547, - 1.0530710419477043, - 1.0454297630122311, - 0.921405477188372, - 0.3833007381955817, - 0.018024808417680158, + 1.053071041947704, + 1.0454297630106628, + 0.9214054771887189, + 0.3833007381396144, + 0.01802480841767847, 0, 0, 0, @@ -24868,20 +24934,20 @@ 0, 0, 0, - 0.002012531394472555, - 0.22899248320586446, - 0.7843078421732913, - 0.9832119331605788, - 1.0277101930051884, - 1.028973785426148, + 0.002012531394472556, + 0.22899248320117516, + 0.7843078421728312, + 0.98321193316144, + 1.0277101930066497, + 1.0289737854284235, 1.022335412758927, - 1.0236262807473488, + 1.0236262816205524, 1.0502225832442607, - 1.0202921050620877, - 1.080902489319922, + 1.020292105062088, + 1.0809024893199222, 0.8855139908001183, - 0.32980684696976487, - 0.021796382896806764, + 0.3298068469697649, + 0.021796382896802146, 0, 0, 0, @@ -24893,19 +24959,19 @@ 0, 0, 0.0016040721241501671, - 0.21692499831878784, - 0.6843325264979895, - 0.840655634095304, - 0.983920023931441, - 1.0117497717291788, - 1.0018433358163616, - 1.030963595106103, - 0.9727988031991657, + 0.2169249983187878, + 0.6843325264980881, + 0.8406556340967531, + 0.9839200296440799, + 1.0117497751660602, + 1.001843338051883, + 1.0309635910536552, + 0.9727988031991653, 0.359980653000886, 0.40652009474980033, 0.1692163400407862, - 0.12922695102864395, - 0.017836873019282808, + 0.12922695102864398, + 0.01783687301928281, 0, 0, 0, @@ -24916,20 +24982,20 @@ 0, 0, 0, - 0.0012418820141846098, - 0.1298109721941754, + 0.0012418820141621237, + 0.12981097219417537, 0.5475351551628993, - 0.7661743505482111, - 0.8421178610376351, - 0.9067015295318973, - 0.8973208926848631, - 0.8821684033334969, - 0.8560165285291295, - 0.7892432230500903, - 0.6591601806388752, - 0.40216952020666275, - 0.12489446588821006, - 0.008811283733058908, + 0.7661743505482116, + 0.8421178654989464, + 0.9067015295328501, + 0.8973208938340028, + 0.8821683990150355, + 0.8560165285282646, + 0.7892432230482866, + 0.6591601806379062, + 0.4021695202066629, + 0.12489446589232343, + 0.008811283733058912, 0, 0, 0, @@ -24941,19 +25007,19 @@ 0, 0, 0, - 0.006810239585592079, + 0.006810239585592078, 0.02738976932760561, 0.06381152482111593, 0.12298089304797073, - 0.14844761415448704, - 0.18768752862088336, - 0.18944967046228145, - 0.11798535609239966, - 0.054422770164299916, - 0.04927201892272757, - 0.038661850171464236, - 0.030460889284759225, - 0.001843319912444708, + 0.1484476141343657, + 0.18768752862088325, + 0.18944967050041708, + 0.1179853561019212, + 0.05442277016443427, + 0.049272018922715294, + 0.03866185017144136, + 0.0304608892847287, + 0.0018433199124447091, 0, 0, 0, @@ -24965,19 +25031,19 @@ 0, 0, 0, - 0.007779227398720236, - 0.03106168180738291, - 0.07658956187166394, - 0.125688197453158, - 0.1189993459090317, - 0.14499261155658386, - 0.20085262323671577, - 0.3252178933110255, - 0.26787944901372857, - 0.3094455348216805, - 0.236498380067365, - 0.08560721250942831, - 0.007084786696297138, + 0.007779227398728159, + 0.03106168180739127, + 0.07658956187166376, + 0.12568819745316023, + 0.1189993459090351, + 0.14499261155726131, + 0.20085262324415049, + 0.3252178933110254, + 0.2678794490137287, + 0.30944553481954684, + 0.23649838006367022, + 0.08560721250878214, + 0.007084786696214562, 0, 0, 0, @@ -24989,19 +25055,19 @@ 0, 0, 0, - 0.03656916364805643, - 0.08365557848975036, - 0.14556940604831253, - 0.40363538101316127, - 0.47836897348467483, - 0.26858871643258947, + 0.036569163648096, + 0.08365557849017509, + 0.14556940604852223, + 0.4036353817875962, + 0.47836897417283497, + 0.2685887164325894, 0.32819872067297196, - 0.2786174791033367, + 0.2786174792361347, 0.23985645922774496, 0.16333869027242134, - 0.10838549944964514, + 0.10838549944964516, 0.05238880185574757, - 0.0023533307329623478, + 0.00235333073299681, 0, 0, 0, @@ -25012,20 +25078,20 @@ 0, 0, 0, - 0.0014080888460316686, + 0.0014080888459872367, 0.26747671142744966, - 0.7930417653396883, - 0.9833253205107492, - 1.0087994515072198, - 1.0207002395044853, - 0.9946041215942474, - 1.0073898666529701, + 0.7930417653392511, + 0.9833253205124048, + 1.0087994561883644, + 1.0207002432331307, + 0.9946041208940338, + 1.0073898677355828, 0.7422262498800719, 0.5443479262964881, 0.2575996183553841, 0.3517954459881561, 0.22887447463340593, - 0.007899372101437116, + 0.00789937210166373, 0, 0, 0, @@ -25036,20 +25102,20 @@ 0, 0, 0, - 0.0011533334855248246, + 0.0011533334855248249, 0.256362109869939, 0.8782188290518635, 1.0370139180041256, 1.0476677659387994, - 1.0270684016012088, - 1.000862945684912, - 1.0070626862524088, - 1.035338881063732, - 1.0695577497288693, - 1.0689048947316218, - 0.9443905045610463, + 1.0270684016024583, + 1.0008629483987181, + 1.007062686251823, + 1.035338881062405, + 1.069557754872174, + 1.0689048947309394, + 0.9443905045610501, 0.2857106536857367, - 0.006968889253562107, + 0.006968889251872035, 0, 0, 0, @@ -25061,19 +25127,19 @@ 0, 0, 0, - 0.2580276848297313, + 0.25802768482973143, 0.8941926592118226, - 1.0477755668292437, - 1.0575801908907976, - 1.032221297857477, - 1.0034353708687698, - 1.0040323940121054, - 1.031323743040544, - 1.0591050027589655, - 1.0562339463743982, - 0.9187360261485539, - 0.2690687555562205, - 0.005488722712146942, + 1.047775566829244, + 1.0575801908907978, + 1.0322213019297541, + 1.003435371783449, + 1.0040323940121363, + 1.0313237448001995, + 1.0591050027572921, + 1.0562339463736925, + 0.918736026149344, + 0.26906875576828326, + 0.0054887227127869975, 0, 0, 0, @@ -25085,19 +25151,19 @@ 0, 0, 0, - 0.16170685946325764, - 0.6646385379125954, + 0.16170685948024888, + 0.6646385379126959, 0.8487102700182941, - 0.913167084422638, + 0.9131670844226383, 0.9608268642828605, 0.9867592349693315, - 0.9910912109887461, - 1.0178348956557313, + 0.99109120407527, + 1.0178348956557308, 1.0474508692285074, - 1.0483471545536969, - 0.8918279713094084, - 0.10526566769662726, - 0.005150361846171552, + 1.0483471545522534, + 0.891827971328882, + 0.1052656676986679, + 0.005150361845873963, 0, 0, 0, @@ -25109,19 +25175,19 @@ 0, 0, 0, - 0.10245990450911394, - 0.5535261945296596, - 0.782032377857436, - 0.8947670805328569, - 0.9395918739024236, - 0.93491798325154, + 0.10245990450734735, + 0.5535261945298602, + 0.7820323778583124, + 0.8947670805341602, + 0.9395918739024238, + 0.9349179773580061, 0.9379083383651065, 0.9298180297718921, - 0.8931080358699859, + 0.8931080358699858, 0.8058883264164133, - 0.5524603294356569, - 0.13948221213972498, - 0.0046995792906084745, + 0.5524603294356568, + 0.13948221213972495, + 0.004699579290678496, 0, 0, 0, @@ -25133,19 +25199,19 @@ 0, 0, 0, - 0.0676522006338594, - 0.3366540400242818, - 0.549194121265385, - 0.6990246219455204, - 0.7840127266740025, - 0.80761207162138, - 0.823432225575273, - 0.8357629620161611, - 0.7701697665816223, - 0.6793048368181952, - 0.4419658605009311, - 0.11302859536056495, - 0.003944653795872973, + 0.06765220058996074, + 0.3366540400250755, + 0.5491941212663315, + 0.6990246219463457, + 0.7840127242415188, + 0.8076120705699253, + 0.8234322255747389, + 0.835762962016161, + 0.7701697665816225, + 0.6793048368181951, + 0.4419658605009313, + 0.11302859536056085, + 0.003944653795839725, 0, 0, 0, @@ -25157,19 +25223,19 @@ 0, 0, 0, - 0.08809531534694322, + 0.08809531534694318, 0.45132954177268075, 0.65955362815667, 0.7821392815236766, - 0.85330370976074, - 0.8566853246083026, - 0.8490886178396445, - 0.873218124018565, - 0.8412515997596547, - 0.7291943680123777, + 0.8533037097616986, + 0.8566853199542857, + 0.8490886174115383, + 0.8732181286642936, + 0.8412515997574652, + 0.7291943680113948, 0.5076678067002821, - 0.1327318264133017, - 0.004183826805622761, + 0.13273182641330164, + 0.004183826805625673, 0, 0, 0, @@ -25181,19 +25247,19 @@ 0, 0, 0, - 0.04449662851611266, + 0.04449662851611268, 0.4161227362106891, - 0.695113523240131, + 0.6951135232401273, 0.8117189281427069, - 0.8139103651772275, - 0.8843727473826636, - 0.8870342156447121, - 0.5636295808424606, - 0.5159666685250813, - 0.46248196834471816, - 0.1814662239151083, - 0.05313033822274692, - 0.0019176119644361948, + 0.8139103680802925, + 0.8843727469820581, + 0.887034218247004, + 0.5636295830641758, + 0.5159666685245784, + 0.46248196834364125, + 0.18146622391273232, + 0.05313033821767045, + 0.0019176119644375414, 0, 0, 0, @@ -25205,19 +25271,19 @@ 0, 0, 0, - 0.05239522616352731, - 0.487870605315141, + 0.05239522618390756, + 0.4878706053159224, 0.7127360709665571, 0.6721943747409107, 0.8060318400417557, 0.3905448073602823, - 0.3723255405421147, + 0.372325540542115, 0.5101090116660666, - 0.8957437736797209, - 0.17364207986428665, - 0.21810356148771082, - 0.054247994498773204, - 0.0017919260591709096, + 0.8957437736797212, + 0.17364207986353405, + 0.21810356108984116, + 0.054247994498917124, + 0.0017919260591771167, 0, 0, 0, @@ -25229,19 +25295,19 @@ 0, 0, 0, - 0.098569088488668, - 0.41084078026107534, - 0.3261000420610897, - 0.35489580694428, - 0.5585875840768935, - 0.34151054451484586, + 0.09856908831649219, + 0.41084078026171983, + 0.3261000420617779, + 0.35489580590635766, + 0.5585875840776723, + 0.34151054454451935, 0.45394007732916813, 0.5706859576014679, 0.6332982677557705, 0.5310987958364561, - 0.09340895250546329, + 0.09340895250545889, 0.06263443259429133, - 0.002097156154217412, + 0.0020971561542157085, 0, 0, 0, @@ -25254,17 +25320,17 @@ 0, 0, 0.12372932266534778, - 0.7384942575409514, - 0.9322009964051473, - 0.9693207270867599, - 0.9522417342196607, - 0.9749498925875268, - 0.9042825307645874, - 0.9067548117742154, + 0.7384942575410209, + 0.9322009964060144, + 0.9693207270901256, + 0.9522417382994156, + 0.9749498914073546, + 0.9042825261055274, + 0.906754811774215, 0.36814662086703687, - 0.45694824976490667, - 0.2676032860471013, - 0.06786344521588678, + 0.4569482497649141, + 0.26760328604710365, + 0.06786344519091521, 0, 0, 0, @@ -25277,16 +25343,16 @@ 0, 0, 0, - 0.0647019902094295, + 0.06470199020942952, 0.12040605169944057, 0.7308265738539225, 0.9296616170407137, - 0.942705540225355, - 0.5537630665324275, - 0.2618725463165354, - 0.7020967498789552, - 0.6916774397317312, - 0.650148856406777, + 0.9427055402280243, + 0.5537630684110703, + 0.2618725464601028, + 0.7020967498782994, + 0.6916774430185227, + 0.65014885640455, 0.13292184922753855, 0.04119011291499081, 0, @@ -25301,18 +25367,18 @@ 0, 0, 0, - 0.05671008694656599, - 0.27471235504034874, - 0.71572926195437, + 0.056710086872964124, + 0.27471235504037633, + 0.7157292619543669, 0.780488969798072, - 0.9394977980795511, + 0.9394977980793185, 0.9205659979362751, - 0.9177529889961007, - 0.917434160274427, - 0.7247137163083401, - 0.40795772825197024, - 0.24244130725211163, - 0.13033343879699386, + 0.9177529819324886, + 0.9174341540762037, + 0.7247137163057901, + 0.4079577282511587, + 0.24244130725292953, + 0.13033343879699352, 0, 0, 0, @@ -25325,17 +25391,17 @@ 0, 0, 0, - 0.1016684345592544, - 0.7819278775446308, + 0.10166843440947482, + 0.7819278775359022, 0.9724490059795826, 1.0157491686101168, 0.7255530971036578, - 0.6591684109865596, + 0.6591684114027954, 0.8252485758978568, 0.9412752262367877, - 1.0094978013091684, - 0.9614858091501822, - 0.6993771226288014, + 1.0094978013087657, + 0.9614858091496212, + 0.6993771226479826, 0.11005644858025594, 0, 0, @@ -25349,18 +25415,18 @@ 0, 0, 0, - 0.15559295287426006, - 0.4967181873381495, - 0.5651395461426952, - 0.6871114288903519, - 0.8279487492266941, - 0.7797010162492537, - 0.6977518446035981, + 0.15559295303990636, + 0.4967181873338505, + 0.5651395461440464, + 0.687111428891221, + 0.8279487504344505, + 0.7797010167217651, + 0.697751844603598, 0.7860333290542787, - 0.9046706872944785, + 0.9046706923125927, 0.8045132124546939, - 0.5127311280190349, - 0.10190649953258846, + 0.512731128019035, + 0.10190649953258854, 0, 0, 0, @@ -25373,18 +25439,18 @@ 0, 0, 0, - 0.027975898631876137, - 0.14067904109318644, - 0.4062499503988255, - 0.556822763629395, - 0.6611192115541531, - 0.6507489659277457, - 0.591779635317467, + 0.027975898631876127, + 0.14067904109689244, + 0.4062499504002624, + 0.5568227636306299, + 0.6611192115547607, + 0.6507489659278616, + 0.5917796336442139, 0.46233034302251624, - 0.4471511029135563, - 0.4774404411622684, - 0.5783324609907495, - 0.09529260050061639, + 0.4471511029135594, + 0.47744044116227885, + 0.5783324609907499, + 0.0952926005006021, 0, 0, 0, @@ -25397,18 +25463,18 @@ 0, 0, 0, - 0.02495878249150649, + 0.0249587824915065, 0.17793687205233247, - 0.19263695200294897, - 0.14301672231103268, - 0.2335893458155357, - 0.28520953986710545, - 0.706765005174316, - 0.5720777547341017, - 0.26426876831640245, - 0.14837079945535606, - 0.08588708156218083, - 0.00424125050609358, + 0.19263695200294645, + 0.14301672231044066, + 0.2335893458151392, + 0.28520953986687503, + 0.7067650081771425, + 0.5720777547337655, + 0.26426876794927817, + 0.1483707994549512, + 0.08588708156218086, + 0.004241250506093576, 0, 0, 0, @@ -25422,16 +25488,16 @@ 0, 0, 0.1128736607000514, - 0.7726982165275923, + 0.7726982137977368, 0.9657698962051423, - 0.9828672660616639, + 0.9828672660616636, 0.9518041782762979, - 0.9251144086776522, - 0.9360126595591184, - 0.9715907951730246, - 1.0102892664102365, - 0.9908748976177657, - 0.5806815011744448, + 0.9251144164860844, + 0.9360126661681532, + 0.9715907875780025, + 1.0102892664082994, + 0.9908748976172156, + 0.5806814990714287, 0.04640552443519474, 0, 0, @@ -25445,18 +25511,18 @@ 0, 0, 0, - 0.11523747058539369, + 0.115237470579798, 0.7856210139544295, - 0.9845472383200308, - 0.981774142741232, + 0.9845472383200304, + 0.9817741427412318, 0.9454148751516238, - 0.9169661174862309, - 0.9261103095147368, + 0.9169661176444495, + 0.9261103095147366, 0.9651448107603869, - 1.0127946153544771, - 0.9829947920118796, - 0.6308024366517522, - 0.062326145644451644, + 1.0127946153544776, + 0.9829947920108005, + 0.630802434959856, + 0.06232614564445171, 0, 0, 0, @@ -25469,15 +25535,15 @@ 0, 0, 0, - 0.06466591078699661, - 0.6146837825510615, - 0.8643597576952256, - 0.8711562537792584, - 0.8725130134903194, - 0.8728059581615969, + 0.06466591106033717, + 0.6146837825440834, + 0.864359757696196, + 0.871156253780975, + 0.8725130092888307, + 0.872805958161597, 0.886195639539844, 0.91919311175827, - 0.9420118450817833, + 0.9420118390734308, 0.9394714125209626, 0.5377891180596834, 0.05530528026837389, @@ -25494,17 +25560,17 @@ 0, 0, 0.08888712666304223, - 0.7142590938747753, - 0.9261716562542034, - 0.9202053566591846, - 0.8947631178372498, - 0.8753033659648845, - 0.882017638486219, + 0.714259093857197, + 0.9261716562551631, + 0.9202053566629391, + 0.894763117838624, + 0.8753033659654005, + 0.8820176334698127, 0.911169665924924, - 0.9199077991723938, - 0.7059078107866749, + 0.9199077991723942, + 0.7059078107866752, 0.21658153141662181, - 0.03770983116467674, + 0.03770983116467672, 0, 0, 0, @@ -25517,18 +25583,18 @@ 0, 0, 0, - 0.07183135832849463, + 0.07183135832846652, 0.5458604862435619, - 0.7846412230773224, - 0.8490823350186301, - 0.7487546529728777, - 0.6661685655137817, - 0.4400244866901291, - 0.32143141141933546, - 0.40708369868932476, + 0.7846412230773225, + 0.84908232975483, + 0.7487546563492613, + 0.6661685691042125, + 0.440024487679458, + 0.32143141141944653, + 0.40708369868884847, 0.8708306451424097, - 0.4787337870247689, - 0.04096326280074761, + 0.478733787024769, + 0.040963262800747614, 0, 0, 0, @@ -25542,17 +25608,17 @@ 0, 0, 0.04218350592754553, - 0.48734058007260855, - 0.7284467931932782, - 0.8039966998277094, + 0.48734058007260883, + 0.7284467931932781, + 0.8039966998277092, 0.8351777704163055, - 0.8246567415081486, - 0.8389582565859864, - 0.8582117227491676, - 0.7824832753919861, - 0.7315349005240661, - 0.4166779871281346, - 0.03841393019853493, + 0.824656741508148, + 0.8389582541388388, + 0.8582117296707359, + 0.7824832753904163, + 0.7315349005234505, + 0.41667798817980534, + 0.03841393019853494, 0, 0, 0, @@ -25565,17 +25631,17 @@ 0, 0, 0, - 0.0730973359748819, + 0.07309733572058913, 0.6910934459794403, - 0.936026974134699, + 0.9360269741346994, 0.9493296187581646, 0.9205222806170681, 0.8940400757989112, - 0.8996930440666331, + 0.8996930434678523, 0.9364017343193953, - 0.9642569903498946, - 0.8717819449921195, - 0.4597517633117617, + 0.9642569903498945, + 0.8717819449910568, + 0.45975176211169655, 0.04188280106022245, 0, 0, @@ -25589,18 +25655,18 @@ 0, 0, 0, - 0.05521365350023559, - 0.6347820752387654, - 0.8726343122383351, - 0.8917743203886048, + 0.05521365386227599, + 0.634782075230953, + 0.872634312239322, + 0.8917743203904247, 0.8885175780852438, - 0.8707238397238655, - 0.8471456035890668, - 0.9069690675848651, + 0.8707238429287377, + 0.8471456035890508, + 0.9069690753742085, 0.9880625447139957, 0.8838525664062072, 0.4535479429122222, - 0.03888298030911509, + 0.03888298030911511, 0, 0, 0, @@ -25613,18 +25679,18 @@ 0, 0, 0, - 0.056156973891832475, - 0.6135539067301606, - 0.90721785991166, - 0.9333269846647223, - 0.9073209445548392, - 0.880211611885741, - 0.8919907641394326, + 0.056156973891796795, + 0.613553906714725, + 0.9072178599126047, + 0.9333269846687264, + 0.9073209445578119, + 0.8802116040390255, + 0.8919907641375768, 0.9302969744115014, 0.9380022687062699, - 0.8616358457813382, + 0.8616358457813383, 0.44544915378514066, - 0.03168547186543881, + 0.03168547186912838, 0, 0, 0, @@ -25637,18 +25703,18 @@ 0, 0, 0, - 0.05086038754706068, + 0.0508603875470607, 0.5929326813115339, - 0.8870074998251224, - 0.9196682825857133, - 0.8870650821815588, - 0.8555924774978029, - 0.8560138128497404, - 0.8738645616648083, - 0.8664290682334393, - 0.7604835211934005, - 0.3533909200711016, - 0.025201952017988277, + 0.8870074998251223, + 0.9196682760196127, + 0.8870650821830961, + 0.8555924800913906, + 0.8560138128478045, + 0.8738645693635952, + 0.8664290682301955, + 0.7604835211934003, + 0.3533909200711017, + 0.025201952144394198, 0, 0, 0, @@ -25661,18 +25727,18 @@ 0, 0, 0, - 0.04250856798239505, + 0.04250856797703249, 0.5605121428002995, - 0.8063866065568052, - 0.8930879240776599, + 0.8063866065568055, + 0.8930879240776597, 0.8776719424435596, 0.8467811521917765, - 0.847732733321017, - 0.8625205681516369, - 0.8581319339033363, - 0.7458779386177246, - 0.3309916852956714, - 0.023140875125703644, + 0.8477327264284981, + 0.8625205681499932, + 0.8581319339001506, + 0.7458779386171146, + 0.33099168613017854, + 0.023140875069799047, 0, 0, 0, @@ -25685,18 +25751,18 @@ 0, 0, 0, - 0.020313966546387674, + 0.02031396658528369, 0.2971200030120291, 0.720116287539424, 0.8805521273398985, - 0.7886997323073535, - 0.8667195702510762, - 0.8546879208541448, - 0.5705889535568562, - 0.8857479510765159, - 0.4141448770653523, - 0.11851584064318359, - 0.012657346999934394, + 0.7886997262531028, + 0.8667195702510757, + 0.8546879221723332, + 0.5705889535568563, + 0.8857479510764987, + 0.41414487706448944, + 0.11851584064133425, + 0.012657346999845252, 0, 0, 0, @@ -25710,17 +25776,17 @@ 0, 0, 0.020630523817132727, - 0.09168845120771014, - 0.7075779738121744, - 0.8944528601295331, - 0.859511923703948, + 0.09168845120844266, + 0.7075779738130628, + 0.8944528601315701, + 0.8595119237039481, 0.8339115576800167, - 0.8562344443447203, - 0.8718980464976663, + 0.8562344455059964, + 0.8718980464976662, 0.8957204786063865, 0.4995587864398544, - 0.3243017677752345, - 0.01565597037857094, + 0.32430176777523434, + 0.01565597037899984, 0, 0, 0, @@ -25733,18 +25799,18 @@ 0, 0, 0, - 0.04315723135796841, - 0.6205951818876206, - 0.8950134812206837, - 0.887915364745307, - 0.8718321335540546, - 0.752193671113964, - 0.7907043804488182, + 0.04315723135023301, + 0.6205951855756772, + 0.8950134812216526, + 0.88791536474936, + 0.8718321264689847, + 0.7521936680393103, + 0.790704380446864, 0.7184707792531627, 0.62679595945445, 0.9330187454224126, 0.4107803147862574, - 0.015692195610401635, + 0.015692195715982144, 0, 0, 0, @@ -25757,18 +25823,18 @@ 0, 0, 0, - 0.04765505618131284, - 0.6259990892232322, + 0.04765505617250954, + 0.6259990892232321, 0.9279304646800065, - 0.9375336253101606, - 0.8121604352890911, - 0.7755526306297389, - 0.934295696383091, - 0.9229891965228215, - 0.9790573787119374, + 0.9375336253144458, + 0.8121604372721034, + 0.7755526301771211, + 0.9342957011671434, + 0.9229891871246172, + 0.979057378708244, 0.9357122564011154, 0.4385942768169178, - 0.01649683567251147, + 0.016496835585308737, 0, 0, 0, @@ -25784,15 +25850,15 @@ 0.04002211842328173, 0.6150842801436498, 0.9320287372374745, - 0.8884006057356993, - 0.8607817190917889, + 0.88840059869776, + 0.8607817190917888, 0.8316674519609655, - 0.8493094953658176, - 0.6507278941585942, - 0.8543603878117648, - 0.9158192079619222, - 0.41539630418383444, - 0.013556092165132882, + 0.8493094953647768, + 0.6507278941573866, + 0.8543603878101167, + 0.9158192079615324, + 0.4153963068386677, + 0.013556092142764653, 0, 0, 0, @@ -25805,18 +25871,18 @@ 0, 0, 0, - 0.006174226325942918, + 0.006174226325950162, 0.0880059767905108, 0.5999014444067928, - 0.5267242515129817, + 0.526724251512982, 0.9405481845641847, - 0.8463639184585119, - 0.855366174953157, - 0.8834093200504266, - 0.8839333461852273, - 0.6453868526184651, - 0.1564869546466874, - 0.007702515512205354, + 0.8463639127422069, + 0.8553661749531364, + 0.8834093200504023, + 0.8839333461834823, + 0.6453868526173713, + 0.15648695533787535, + 0.007702515517500599, 0, 0, 0, @@ -25829,18 +25895,18 @@ 0, 0, 0, - 0.02845394930629747, - 0.5258511631789328, - 0.7959214478103627, - 0.7762628423646598, - 0.7222871515669377, + 0.028453949037367043, + 0.5258511663768876, + 0.795921447811275, + 0.7762628423663308, + 0.7222871476360913, 0.7111962422690359, 0.7877670550027186, 0.7634667034675305, 0.855999587347043, 0.8343789243479117, 0.28410213070567947, - 0.008791523795431452, + 0.008791523812607392, 0, 0, 0, @@ -25853,18 +25919,18 @@ 0, 0, 0, - 0.03359659593857346, - 0.3327189692664869, - 0.8418303730043686, - 0.8020337978078682, - 0.7113870135539121, - 0.7693998339973503, + 0.033596595938573476, + 0.33271896925891553, + 0.8418303730053204, + 0.8020337921673144, + 0.7113870135549751, + 0.7693998393126263, 0.7412429710983993, - 0.8913786349205199, + 0.8913786349205691, 0.5563623908859814, 0.4366694443721346, - 0.3782916655144438, - 0.02209310537471389, + 0.378291665514444, + 0.02209310537529041, 0, 0, 0, @@ -25877,18 +25943,18 @@ 0, 0, 0, - 0.0321997293203043, + 0.03219972932030431, 0.4477911547643455, 0.36551762283821765, - 0.419537915974829, - 0.41957543950682674, - 0.3809996483945175, - 0.33132326905264164, - 0.2999653041630816, - 0.2087590763248047, - 0.7482580626763791, + 0.4195379159753091, + 0.41957543835383215, + 0.38099964706534256, + 0.331323268580872, + 0.2999653041634513, + 0.20875907632432877, + 0.7482580626763794, 0.41668024879299603, - 0.014795677326958473, + 0.014795677340671822, 0, 0, 0, @@ -25901,17 +25967,17 @@ 0, 0, 0, - 0.001593450377194327, - 0.014468123859757438, + 0.00159345037719423, + 0.014468123859757433, 0.04080998930292611, 0.10577221621118199, 0.14725518750048214, 0.1781566749919812, - 0.256648550058432, - 0.6132879298441962, - 0.8015154555641093, - 0.4761180932442167, - 0.28981484471625363, + 0.2566485503046245, + 0.6132879298425312, + 0.8015154555625075, + 0.4761180932423119, + 0.289814842708851, 0.010586896572606024, 0, 0, @@ -25925,18 +25991,18 @@ 0, 0, 0, - 0.008273793980586986, + 0.008273794013105212, 0.1265642675698568, - 0.37841054838635263, - 0.2983142366225072, + 0.3784105483863529, + 0.29831423662250717, 0.38604631858348754, 0.39452440140692613, 0.5863308850395946, - 0.5344809883801709, - 0.3550877357795255, - 0.4229884465456826, - 0.32197084574444584, - 0.014599831199586842, + 0.534480988380171, + 0.3550877357770964, + 0.42298844654089934, + 0.32197084776080154, + 0.014599831199586846, 0, 0, 0, @@ -25950,17 +26016,17 @@ 0, 0, 0.020159559269795114, - 0.06935272617047794, - 0.10311062812898729, - 0.2014406473205799, - 0.36915865844518075, + 0.06935272617033122, + 0.10311062812919837, + 0.20144064732033143, + 0.36915865844518064, 0.4145941778040569, 0.23995579762445873, - 0.35306755140060725, + 0.3530675514006073, 0.46523916034392043, 0.4226817239647371, - 0.1693592180098761, - 0.007977723480785761, + 0.16935921800987608, + 0.007977723480785763, 0, 0, 0, @@ -25973,18 +26039,18 @@ 0, 0, 0, - 0.005875890459731407, - 0.11072488650071559, - 0.17962250532764226, - 0.3113151543056973, - 0.7220242262759573, - 0.6439142961902405, - 0.6965234606278189, + 0.005875890459678369, + 0.11072488650137041, + 0.17962250532830867, + 0.3113151543061591, + 0.7220242262774491, + 0.6439142961908584, + 0.6965234573363425, 0.8327908902458764, - 0.878494086195828, + 0.8784940861958284, 0.8894127785240329, 0.29678851771313575, - 0.010454958429255916, + 0.01045495842925592, 0, 0, 0, @@ -25997,17 +26063,17 @@ 0, 0, 0, - 0.002340264982725408, + 0.002340264982685136, 0.01181152969228677, 0.030136638675644596, - 0.04634502675353042, - 0.11416234201171524, - 0.10563084203048592, - 0.08547918499799444, - 0.058925728934501334, - 0.051936531442176456, + 0.04634502675324531, + 0.11416234202900359, + 0.10563084202618449, + 0.08547918500206043, + 0.05892572893468031, + 0.051936531442151684, 0.022859529086431962, - 0.006269334109630072, + 0.006269334109446723, 0, 0, 0, @@ -26022,17 +26088,17 @@ 0, 0, 0.0013665918972790164, - 0.02586861873561268, + 0.025868618735612685, 0.060623816728648604, 0.12644198104625376, 0.16096735146560473, - 0.28871480392017546, - 0.24820715368905918, - 0.2377778198234461, - 0.29243868484530894, - 0.20386290547644445, - 0.05107366425999176, - 0.0024614520272402663, + 0.28871480425665347, + 0.2482071539247706, + 0.237777819823828, + 0.2924386848442174, + 0.20386290547474306, + 0.05107366423210059, + 0.0024614520272420253, 0, 0, 0, @@ -26045,18 +26111,18 @@ 0, 0, 0, - 0.008477262056284017, - 0.15859679454861578, - 0.5122523643943075, - 0.7219459310754426, - 0.7854966756096847, + 0.008477262055795, + 0.15859679454844636, + 0.5122523643943226, + 0.7219459310754467, + 0.7854966704378736, 0.6016699398379876, 0.6867448755147975, - 0.6947511934015234, - 0.6273530092421897, - 0.13950142086892645, - 0.0558694802549721, - 0.004115683600669447, + 0.6947511934015229, + 0.6273530092409159, + 0.1395014208673968, + 0.055869480163408286, + 0.004115683600527494, 0, 0, 0, @@ -26069,16 +26135,16 @@ 0, 0, 0, - 0.0024526024068929476, - 0.030238290232917242, - 0.084001905809523, - 0.14369614835859643, - 0.18562732079402602, + 0.0024526024070845335, + 0.030238290232545748, + 0.08400190580966858, + 0.14369614835859645, + 0.18562732074497593, 0.3118419730173281, 0.27037435459196485, - 0.20580505880929412, + 0.2058050588092941, 0.15153347469981052, - 0.09051846150882345, + 0.09051846150882344, 0.021127991865338792, 0, 0, @@ -26093,18 +26159,18 @@ 0, 0, 0, - 0.0051623104743082696, - 0.09081636775349484, - 0.2709641382690245, - 0.4099667607900553, - 0.5872139945459477, - 0.5533876608382429, - 0.6212134638591531, + 0.005162310474308271, + 0.09081636775486937, + 0.27096413827227583, + 0.40996676079160743, + 0.5872139945463314, + 0.5533876608383491, + 0.621213463858779, 0.588166539011402, 0.6134368404027306, 0.7489438627301364, - 0.1679676923995349, - 0.003650009173130369, + 0.16796769239953496, + 0.0036500091733348144, 0, 0, 0, @@ -26117,18 +26183,18 @@ 0, 0, 0, - 0.010934161520370009, + 0.01093416124453938, 0.4332886552579101, 0.8723619545424617, - 0.8936516780462471, - 0.8472266858992211, - 0.8010421236904931, - 0.8187006082418569, - 0.8825607032540322, - 0.9361871472155624, - 0.8411305804831974, - 0.17953778912440313, - 0.0031506875636660523, + 0.8936516780486435, + 0.8472266950049898, + 0.8010421146780501, + 0.8187006156222482, + 0.8825607147802953, + 0.9361871472137403, + 0.8411305862985652, + 0.17953778912444818, + 0.0031506875636761688, 0, 0, 0, @@ -26141,18 +26207,18 @@ 0, 0, 0, - 0.0055700929145635816, + 0.00557009291437183, 0.41718121992889023, 0.8119524074036033, 0.8251209210272417, - 0.7770575957016209, - 0.7459614622545235, - 0.7644823173625716, - 0.8175543152014311, - 0.8669428157011414, - 0.7771480496640808, - 0.15988817738171243, - 0.003501704929529221, + 0.7770576042613537, + 0.7459614580316162, + 0.7644823081929427, + 0.8175543151970829, + 0.8669428156994953, + 0.7771480443082182, + 0.15988817534052469, + 0.0035017049295316643, 0, 0, 0, @@ -26165,18 +26231,18 @@ 0, 0, 0, - 0.008160078113401087, - 0.40724144260125716, + 0.00816007811340109, + 0.407241444655168, 0.8315388366361554, 0.8410444273676729, - 0.7771091522286554, - 0.7429066570550371, + 0.7771091610216958, + 0.7429066570550231, 0.7660594029108677, - 0.8251007092007533, - 0.8799088467535131, - 0.7826406046375938, - 0.15540479766725032, - 0.0024512223719729683, + 0.825100709200753, + 0.8799088467501811, + 0.782640604656845, + 0.15540479768577511, + 0.0024512223719337094, 0, 0, 0, @@ -26189,18 +26255,18 @@ 0, 0, 0, - 0.0066528225160562855, - 0.4050900363042807, - 0.8286046754138597, - 0.8353477873343981, - 0.7841824865995582, + 0.006652822516056286, + 0.40509003628592927, + 0.8286046754147451, + 0.8353477873343982, + 0.7841824865995579, 0.7494606201858798, 0.7709271744271695, 0.8312755673671162, 0.887530683869003, 0.7748784487371473, 0.1413306281221161, - 0.002274879169450933, + 0.0022748791694499333, 0, 0, 0, @@ -26213,17 +26279,17 @@ 0, 0, 0, - 0.006249233388773946, - 0.3792119705790994, - 0.8113591204454418, - 0.8243404518026175, - 0.7554103467444578, - 0.7246370965081642, + 0.00624923338828783, + 0.37921197057042816, + 0.8113591204472095, + 0.8243404518049551, + 0.7554103527531869, + 0.7246370965087116, 0.734757520191129, - 0.7922481856333294, + 0.7922481856333293, 0.8307119151246763, - 0.6952909496132169, - 0.11957276177318646, + 0.6952909496130356, + 0.11957276177318645, 0, 0, 0, @@ -26238,15 +26304,15 @@ 0, 0, 0.005515239471568937, - 0.3716743134770272, + 0.37167431347702723, 0.821037605966118, - 0.8344573182759364, - 0.7810455625333893, - 0.7420228861107179, - 0.7626094838627875, - 0.8191006757455835, - 0.8447882177847614, - 0.7132742529567254, + 0.834457309474117, + 0.7810455625371304, + 0.7420228947436165, + 0.762609477638578, + 0.8191006872999608, + 0.844788217783153, + 0.7132742529567255, 0.11584967521975567, 0, 0, @@ -26262,16 +26328,16 @@ 0, 0, 0.0045895578760105195, - 0.36190162947888266, - 0.812530160634963, - 0.8292111950037896, - 0.7724424318046704, - 0.7338169202073417, - 0.7564265690194197, - 0.8202050550594056, - 0.8723668028842437, - 0.7243381960024228, - 0.11438820171739994, + 0.3619016273268671, + 0.8125301606349592, + 0.8292111861021507, + 0.7724424318046762, + 0.7338169140381126, + 0.7564265753261308, + 0.8202050550547463, + 0.8723668028826347, + 0.7243381960213439, + 0.11438820171740006, 0, 0, 0, @@ -26285,17 +26351,17 @@ 0, 0, 0, - 0.002122284917412718, - 0.05414734214110204, + 0.0021222849175355934, + 0.05414734214110203, 0.3074196707611522, 0.8034256906871177, 0.728711951853616, - 0.6333946220870397, - 0.6641626993135439, + 0.633394622425593, + 0.6641627033213259, 0.5721717210744585, - 0.6778792621782992, - 0.6047856194581642, - 0.04163694985201776, + 0.6778792621756322, + 0.604785619465705, + 0.04163694985203586, 0, 0, 0, @@ -26309,17 +26375,17 @@ 0, 0, 0, - 0.002823522381801423, - 0.2924542063197499, - 0.7326483138702232, + 0.0028235224168433894, + 0.2924542032959388, + 0.7326483138712143, 0.758897003836429, 0.7241909097446598, 0.6941067790470504, - 0.7168630006350422, + 0.7168630006350418, 0.7768255139545278, 0.827682412606542, 0.6733287927341399, - 0.10091776849214709, + 0.10091776849214706, 0, 0, 0, @@ -26333,17 +26399,17 @@ 0, 0, 0, - 0.0024937203808663277, - 0.29274814928045473, - 0.7677451097382977, - 0.7988006670850909, - 0.74791112492085, - 0.7113751441772983, + 0.002493720380866329, + 0.29274814878828515, + 0.7677451097403893, + 0.798800667089622, + 0.7479111249227184, + 0.7113751537218928, 0.7324684732710791, - 0.7946137448605952, - 0.8415867219880271, - 0.6743964403708993, - 0.09579071476702802, + 0.7946137330813241, + 0.8415867219879857, + 0.6743964403709933, + 0.09579071476702797, 0, 0, 0, @@ -26358,16 +26424,16 @@ 0, 0, 0.003504679301351474, - 0.261421151043364, - 0.44067149506103914, - 0.6738069801832832, - 0.6382266099135215, - 0.5944354962802424, - 0.3653571940186557, - 0.32713618872724676, - 0.22401284038497343, + 0.2614211510433639, + 0.44067149506360187, + 0.6738069801851491, + 0.6382266099145699, + 0.594435496280686, + 0.3653571953049663, + 0.3271361887271148, + 0.22401284038415545, 0.13472097667827723, - 0.024445543148455574, + 0.02444554314896094, 0, 0, 0, @@ -26382,16 +26448,16 @@ 0, 0, 0, - 0.041877783038625424, + 0.04187778305091875, 0.10628197961377168, 0.11855319816460773, - 0.1920596310750208, - 0.5852602134472178, - 0.33969423433241575, - 0.3723519737507535, - 0.5448371567742016, - 0.46871583259231914, - 0.03340818122144602, + 0.19205963107502083, + 0.5852602110959794, + 0.3396942343325855, + 0.3723519737501905, + 0.5448371567721899, + 0.4687158365331338, + 0.033408180982053816, 0, 0, 0, @@ -26407,15 +26473,15 @@ 0, 0.001403168709575664, 0.26725652773837866, - 0.7662765930025505, + 0.7662765930025504, 0.8006321065529648, - 0.7426987754782043, + 0.7426987754782042, 0.7023421147914968, - 0.7246597049754149, - 0.7869938681929647, - 0.8375732808780946, - 0.6545754840161673, - 0.07287073999349099, + 0.7246597049754147, + 0.7869938681929645, + 0.8375732808749127, + 0.6545754840348393, + 0.072870738619317, 0, 0, 0, @@ -26430,16 +26496,16 @@ 0, 0, 0, - 0.009948630127056294, - 0.04064439206758101, + 0.009948630126187404, + 0.04064439206759551, 0.13521051655907693, - 0.11133880508853398, - 0.05324880532587339, + 0.11133880508853393, + 0.053248805326001444, 0.060302093652704336, 0.040339164543622526, 0.06964073226180291, - 0.030995873646445057, - 0.011147955242953384, + 0.030995873646445064, + 0.011147955246368161, 0, 0, 0, @@ -26453,17 +26519,17 @@ 0, 0, 0, - 0.0014961957813232078, - 0.2511481650915911, - 0.7590482359934757, - 0.7926069361253518, - 0.7363692960973703, - 0.7063722608013036, - 0.7156975726546569, - 0.781008347216998, + 0.0014961957892321298, + 0.2511481655988033, + 0.7590482359955665, + 0.7926069361276096, + 0.7363692960993306, + 0.7063722616619724, + 0.7156975726546572, + 0.7810083472169703, 0.8325359799068, 0.5436879837614308, - 0.08036968350052794, + 0.08036968295508448, 0, 0, 0, @@ -26477,17 +26543,17 @@ 0, 0, 0, - 0.001283402489633166, + 0.0012834024885230706, 0.24376234540626535, - 0.7586242272656177, - 0.79380744358755, - 0.7354241339558509, - 0.6938833688604199, - 0.7130406857413981, - 0.7747057675635409, + 0.7586242272666567, + 0.7938074435898326, + 0.7354241238533841, + 0.6938833599670358, + 0.7130406905210117, + 0.7747057675587136, 0.824282423275443, - 0.6181786657770759, - 0.07189174437340046, + 0.6181786657770757, + 0.07189174267734853, 0, 0, 0, @@ -26501,17 +26567,17 @@ 0, 0, 0, - 0.0012022786756771555, + 0.0012022786756771557, 0.19255827032527276, 0.6891055014541789, 0.72962958339817, - 0.7170879372391231, - 0.676158977321547, - 0.7097916233690809, - 0.7693686637175084, - 0.8181545310276673, - 0.6024174224029683, - 0.06589544788177869, + 0.7170879372391228, + 0.6761589773227534, + 0.7097916233662693, + 0.7693686725433153, + 0.8181545310245267, + 0.6024174224210396, + 0.0658954478817787, 0, 0, 0, @@ -26526,16 +26592,16 @@ 0, 0, 0, - 0.21864416542937662, + 0.21864416542937656, 0.7397324949246797, 0.7778635579770754, 0.7283914324452453, 0.6824077172586531, - 0.7015078854902854, - 0.7709103095793114, - 0.8276378675048714, - 0.6007272479824358, - 0.06112024505135568, + 0.7015078854902848, + 0.7709103095768746, + 0.8276378675017022, + 0.6007272479915692, + 0.061120245051367664, 0, 0, 0, @@ -26550,15 +26616,15 @@ 0, 0, 0, - 0.1956380634856536, - 0.5135078839995264, + 0.195638063480877, + 0.5135078840003684, 0.06683920070988425, 0.5220254278963508, - 0.6508399939307662, + 0.6508399848287458, 0.6830051010100779, 0.4587764931116168, - 0.4068632668290493, - 0.08921440376415417, + 0.4068632668290261, + 0.08921440376415013, 0.018499589639379838, 0, 0, @@ -26574,16 +26640,16 @@ 0, 0, 0, - 0.16592528501480527, - 0.7132513924820122, - 0.7489464893811056, - 0.6969453787843154, - 0.656322466315891, - 0.6735053817124375, + 0.16592528500903142, + 0.713251392482962, + 0.7489464893832462, + 0.6969453787863021, + 0.6563224686451187, + 0.6735053817124169, 0.7453708435154749, 0.8061858461617898, 0.6503284922736767, - 0.0694644949643476, + 0.06946449493829183, 0, 0, 0, @@ -26597,17 +26663,17 @@ 0, 0, 0, - 0.0014089190424119633, - 0.2038300635537783, - 0.49747438786346454, - 0.45548873328153505, - 0.6046042202114452, - 0.5824180493769273, - 0.6926755939957242, - 0.75772065207273, + 0.0014089190427558464, + 0.2038300619345933, + 0.49747438786423515, + 0.4554887332841098, + 0.6046042202133876, + 0.5824180429437301, + 0.6926755893388639, + 0.7577206610082241, 0.7731321748112988, 0.5622774088259404, - 0.05679502181143873, + 0.056795021254685156, 0, 0, 0, @@ -26622,16 +26688,16 @@ 0, 0, 0, - 0.157635701225265, - 0.5751132973931669, - 0.758791324032989, + 0.15763570122526493, + 0.5751132973931672, + 0.7587913240329891, 0.7084783483194118, - 0.6730303759865345, - 0.6938534784035413, - 0.7599805100663963, - 0.8088091207654126, - 0.5713128145763867, - 0.05157929926054303, + 0.6730303796960805, + 0.6938534784020899, + 0.7599805007701852, + 0.8088091207623073, + 0.5713128145856391, + 0.05157929926839885, 0, 0, 0, @@ -26646,16 +26712,16 @@ 0, 0, 0, - 0.03248565087694605, + 0.032485650876946034, 0.16879105682958376, 0.14430880083449818, 0.17200285743670357, 0.33828367917157565, 0.3583722200332427, - 0.45010915016691516, - 0.6880815200041658, - 0.42588769782230385, - 0.05208488277726888, + 0.45010915401396134, + 0.6880815200030537, + 0.42588770191849995, + 0.05208488399810319, 0, 0, 0, @@ -26670,16 +26736,16 @@ 0, 0, 0, - 0.1380819196456328, - 0.6863992514496153, - 0.7386906866547327, + 0.1380819218086708, + 0.6863992514514656, + 0.7386906866547319, 0.6796702326408206, 0.6370617303623488, - 0.6520488487917209, - 0.711081716836387, - 0.7564826825686746, - 0.5137500216915154, - 0.046710024081098596, + 0.6520488487917205, + 0.71108172557642, + 0.7564826825686379, + 0.5137500216915172, + 0.04671002496508194, 0, 0, 0, @@ -26694,16 +26760,16 @@ 0, 0, 0, - 0.1158998212000512, - 0.6253630898637382, - 0.6969439203109258, - 0.6541632629172568, - 0.6173370202486911, + 0.11589982020983292, + 0.6253630898645175, + 0.6969439203129296, + 0.6541632629192259, + 0.6173370112695492, 0.6392118141663509, - 0.6198131113901322, - 0.30770217903548525, + 0.6198131113901324, + 0.3077021790354852, 0.15886958383396615, - 0.01643588215969332, + 0.01643588215969263, 0, 0, 0, @@ -26718,16 +26784,16 @@ 0, 0, 0, - 0.056365957234755494, - 0.638717846704489, - 0.7104286563776913, - 0.5981268110152703, - 0.24670023873648086, - 0.522284924214647, - 0.5682179704865493, + 0.056365957234743296, + 0.6387178467053352, + 0.7104286563817378, + 0.5981268110188799, + 0.2467002383879092, + 0.522284926965869, + 0.5682179704840582, 0.7611348803000229, 0.3547103515205174, - 0.04422832303050572, + 0.04422832303050573, 0, 0, 0, @@ -26744,14 +26810,14 @@ 0, 0.11254408216208384, 0.6813745941329588, - 0.7486752226004275, + 0.7486752226004267, 0.6918519128900457, - 0.6436356631769773, - 0.6668578027807119, - 0.7021334204778805, - 0.6946043115782017, - 0.5146731523504284, - 0.03185477215233391, + 0.6436356631785202, + 0.6668577978505301, + 0.7021334204755445, + 0.6946043115751371, + 0.5146731523681162, + 0.03185477193391355, 0, 0, 0, @@ -26766,16 +26832,16 @@ 0, 0, 0, - 0.01638177824054497, - 0.11401389327684276, + 0.016381778258465367, + 0.11401389327684279, 0.5174703570346857, 0.669036695772792, - 0.6016256894470168, - 0.6403599553096068, - 0.692254667157662, - 0.7015781496557866, - 0.46312688739186725, - 0.03397424204008308, + 0.6016256894470167, + 0.6403599553096063, + 0.6922546671553877, + 0.7015781496542506, + 0.4631268873998497, + 0.03397424293444007, 0, 0, 0, @@ -26790,16 +26856,16 @@ 0, 0, 0, - 0.024656138948000235, - 0.05081123763017432, + 0.024656138954913802, + 0.050811237631111575, 0.07445456742663617, - 0.15172982790531975, - 0.26297458366764515, - 0.42563405146199906, - 0.6877266867071665, - 0.7644618487592802, - 0.4750913405275918, - 0.03703464163569748, + 0.15172982790531983, + 0.26297458366764404, + 0.42563405146199795, + 0.6877266867071427, + 0.7644618487592799, + 0.4750913405275378, + 0.03703464164070032, 0, 0, 0, @@ -26814,16 +26880,16 @@ 0, 0, 0, - 0.09302762510119095, - 0.6765246467793264, - 0.7562715587258664, - 0.697952883935038, + 0.09302762508998687, + 0.6765246536165603, + 0.7562715587301362, + 0.697952883939475, 0.6456563004814698, - 0.666610083457608, - 0.7305606154104993, + 0.6666100948526777, + 0.7305606154104999, 0.78090634715748, - 0.5149498560494846, - 0.03593195360530434, + 0.514949849752329, + 0.03593195254377913, 0, 0, 0, @@ -26838,16 +26904,16 @@ 0, 0, 0, - 0.07675390510824859, - 0.6287154669803316, - 0.7168959969522289, - 0.6811273678650209, - 0.642680151657229, - 0.633430222291879, - 0.7126112964998818, + 0.0767539051082486, + 0.6287154669655278, + 0.7168959969562445, + 0.6811273678671929, + 0.6426801516590007, + 0.633430222288914, + 0.71261129649743, 0.7467583552821732, 0.4428674471790263, - 0.04901381769077048, + 0.049013817690770484, 0, 0, 0, @@ -26865,12 +26931,12 @@ 0.0714298408828551, 0.6188428484941534, 0.7296617953539317, - 0.6773528441067553, - 0.62523442621, - 0.6490252860924476, - 0.7180253880050514, - 0.7686193109573851, - 0.4963294644609022, + 0.6773528441089376, + 0.6252344249518961, + 0.6490252805244364, + 0.7180253880025509, + 0.768619310955653, + 0.49632946014632234, 0.035096915600067995, 0, 0, @@ -26887,15 +26953,15 @@ 0, 0, 0.07161782693109069, - 0.6301353012658854, + 0.6301353012658852, 0.7346383840520897, 0.68042991225068, 0.6265527069741728, - 0.646024185625394, - 0.719050060482536, - 0.7766858549018392, - 0.5055089065773419, - 0.03422747443080559, + 0.646024175832224, + 0.7190500604774227, + 0.7766858549000668, + 0.5055089065977567, + 0.034227474430797544, 0, 0, 0, @@ -26910,16 +26976,16 @@ 0, 0, 0, - 0.02955786388888458, - 0.16934761863486028, + 0.029557863887621248, + 0.16934761863502057, 0.7057000040084873, - 0.6556875606854117, + 0.6556875606854229, 0.605792541840065, 0.6261917002421334, - 0.6945401652685909, + 0.6945401652685912, 0.739873214789854, 0.47207261733089895, - 0.03329638614869921, + 0.03329638615111765, 0, 0, 0, @@ -26935,15 +27001,15 @@ 0, 0, 0.062365277630322374, - 0.6136404481142839, - 0.7378268137574115, - 0.6819840122295288, + 0.6136404481065816, + 0.7378268137594467, + 0.6819840122340668, 0.6274044512629577, 0.6460362404497156, 0.7212776427197259, 0.7770182052671691, 0.5048936750316655, - 0.0331149937937603, + 0.03311499470404078, 0, 0, 0, @@ -26959,15 +27025,15 @@ 0, 0, 0.008313037374867306, - 0.03166643311532167, - 0.05820588873731888, - 0.37017888154287865, - 0.25383082214193303, - 0.2250220651665375, - 0.10721462725786675, + 0.031666433115643794, + 0.05820588873733055, + 0.3701788779623252, + 0.2538308221416662, + 0.22502206559243387, + 0.10721462725817969, 0.10937279109529681, 0.15833123652672434, - 0.011648581841775765, + 0.011648581842095978, 0, 0, 0, @@ -26982,15 +27048,15 @@ 0, 0, 0, - 0.01949317251397173, - 0.432121504954336, + 0.019493172365721925, + 0.43212150495433616, 0.44779614040791654, - 0.6054790578765397, - 0.49685950557406516, - 0.5047423562945862, - 0.3727497931154671, - 0.5042023627378512, - 0.22908035025853257, + 0.6054790578804362, + 0.49685951063278594, + 0.504742364497932, + 0.3727497931147616, + 0.5042023627367248, + 0.22908035227758808, 0.02853518481364319, 0, 0, @@ -27006,15 +27072,15 @@ 0, 0, 0, - 0.04776691884111559, - 0.5720721501410743, + 0.047766918834884306, + 0.5720721501410739, 0.7247983385725717, - 0.6716975589193411, - 0.6099329877156431, - 0.628947915489918, - 0.703144167997146, - 0.7571302751365804, - 0.4779700069364923, + 0.6716975589194281, + 0.6099329991714498, + 0.6289479233695534, + 0.7031441679945605, + 0.7571302751348237, + 0.4779700069561672, 0.02879385537356223, 0, 0, @@ -27030,16 +27096,16 @@ 0, 0, 0, - 0.04670791941902668, - 0.5539723142065375, + 0.04670791941902669, + 0.5539723142063897, 0.7054749129374002, 0.6569311960265333, 0.596697113462018, - 0.6154414857020747, - 0.6903643859230456, + 0.6154414779782863, + 0.6903643859230455, 0.742301916721266, 0.467204610187596, - 0.028060950215156956, + 0.028060951192355806, 0, 0, 0, @@ -27055,15 +27121,15 @@ 0, 0, 0.0425056475713922, - 0.5415435314760317, - 0.7014949714651321, - 0.6530680028976145, - 0.5929137019506691, + 0.5415435314612934, + 0.7014949714688973, + 0.6530680029021845, + 0.592913701950669, 0.6088874211801809, - 0.6842104073819383, + 0.6842104073819384, 0.7375011690552027, - 0.4629311655876956, - 0.02789246685412564, + 0.46293116558769565, + 0.027892465897990402, 0, 0, 0, @@ -27078,16 +27144,16 @@ 0, 0, 0, - 0.04017716793004297, - 0.5514105119030982, - 0.7095843231282408, - 0.6585498525784849, - 0.5983612349541386, - 0.6153343320229804, - 0.6909014735316708, + 0.04017716792441474, + 0.5514105118877485, + 0.7095843231301306, + 0.6585498402957528, + 0.5983612415127137, + 0.6153343320214306, + 0.6909014735291161, 0.7521683764392524, - 0.4782831647613265, - 0.027445647214365838, + 0.4782831647613255, + 0.027445646477686842, 0, 0, 0, @@ -27104,14 +27170,14 @@ 0, 0.038975398571953916, 0.5420525196633699, - 0.7162763079188422, - 0.6667623962113054, - 0.6037207841159139, - 0.6195358648923937, - 0.6972025590160664, - 0.7579347459706476, - 0.48428328380404867, - 0.028154013672365263, + 0.7162763079188419, + 0.6667623962160407, + 0.6037207786650238, + 0.6195358648908372, + 0.697202568883934, + 0.7579347459688475, + 0.4842832838244427, + 0.028154013672362692, 0, 0, 0, @@ -27126,15 +27192,15 @@ 0, 0, 0, - 0.03872770881510289, + 0.03872771029490457, 0.5396730835701447, - 0.6789975486725686, - 0.6304447272270122, - 0.5885438885457047, + 0.6789975486725908, + 0.6304447272270277, + 0.5885438885457048, 0.6009663515260889, - 0.6866742800797542, - 0.7628890610086037, - 0.483442769001491, + 0.6866742896628089, + 0.7628890610049355, + 0.4834427709100745, 0.028409995822059875, 0, 0, @@ -27150,7 +27216,7 @@ 0, 0, 0, - 0.03664594486549672, + 0.03664594486019935, 0.5520041526325481, 0.733764877508917, 0.6778962118630077, @@ -27159,7 +27225,7 @@ 0.6993629165800203, 0.7619646836861184, 0.48234529743592536, - 0.028655193590726852, + 0.02865519359072686, 0, 0, 0, @@ -27174,16 +27240,16 @@ 0, 0, 0, - 0.009825770548107446, - 0.09335566398509706, - 0.1692156171616275, - 0.20449240851389758, + 0.009825770546193751, + 0.09335566369332945, + 0.16921561716222921, + 0.20449240851352715, 0.28606226396032486, 0.27706368475161774, 0.22273761254632923, 0.1390101325037266, 0.10354653340503898, - 0.019203751716674152, + 0.01920375171743767, 0, 0, 0, @@ -27198,16 +27264,16 @@ 0, 0, 0, - 0.0016935860260179447, - 0.028785920353018173, - 0.07350335313067115, - 0.14158995291067944, - 0.16888527893674646, - 0.2087528424860276, + 0.0016935860260179454, + 0.028785920353204257, + 0.07350335313075748, + 0.14158995290991158, + 0.16888527877936063, + 0.20875284292372634, 0.24340041310008173, 0.16921964670214498, - 0.052766745093151546, - 0.01825808287010723, + 0.05276674509315152, + 0.018258082867219826, 0, 0, 0, @@ -27222,16 +27288,16 @@ 0, 0, 0, - 0.010935551677046651, + 0.010935551629569912, 0.04305339363962764, - 0.09320026460341496, - 0.211538239582255, - 0.49699322447975836, - 0.24373229443972572, - 0.16387826407480127, - 0.14263682752770332, - 0.05380541263207397, - 0.008101858950417188, + 0.09320026460341495, + 0.21153824038620297, + 0.4969932197101503, + 0.2437322944405672, + 0.16387826407513226, + 0.1426368275265671, + 0.05380541267062921, + 0.008101858950417193, 0, 0, 0, @@ -27246,15 +27312,15 @@ 0, 0, 0, - 0.024969754734742722, - 0.48187963148099566, - 0.7055387639415648, + 0.024969754731024286, + 0.48187963148092944, + 0.7055387639415647, 0.661996612484472, 0.5997618103722157, 0.6087995725538401, - 0.6185059671580698, - 0.7454363380040933, - 0.44229935162981643, + 0.6185059671560398, + 0.7454363380004042, + 0.44229935163892514, 0.04417716229126637, 0, 0, @@ -27270,16 +27336,16 @@ 0, 0, 0, - 0.012034433404899961, + 0.012034433403680675, 0.12138027287993494, 0.2319012643777444, 0.3851990845673539, - 0.34077287241400406, - 0.2888278398930396, - 0.3673371082431298, - 0.38816437200076087, - 0.21233997987592731, - 0.028530548611655396, + 0.34077287474875867, + 0.2888278405514524, + 0.3673371054950101, + 0.3881643720007609, + 0.21233997987455483, + 0.02853054861165541, 0, 0, 0, @@ -27295,15 +27361,15 @@ 0, 0, 0.0048956664105099575, - 0.0752416698167404, - 0.2225758883124946, - 0.4320098753183789, - 0.4853756840416321, + 0.07524166981803011, + 0.22257588831349828, + 0.43200987531906737, + 0.48537568337343695, 0.5210673020110801, 0.6648618089557571, 0.7223489301835079, - 0.47232070681642374, - 0.0338375816891504, + 0.47232070681642385, + 0.03383758169430755, 0, 0, 0, @@ -27319,15 +27385,15 @@ 0, 0, 0.012811152065930939, - 0.10080501150813002, - 0.26712415973006015, - 0.6445240554524383, - 0.6092418830065205, - 0.6028575136701796, - 0.6485252812159799, - 0.699982991843821, - 0.47168604753704113, - 0.0349235478766369, + 0.1008050118975302, + 0.2671241597309353, + 0.6445240554568051, + 0.6092418749735541, + 0.6028575136688834, + 0.6485252812159803, + 0.6999829918437896, + 0.4716860475371952, + 0.034923546534177737, 0, 0, 0, @@ -27342,16 +27408,16 @@ 0, 0, 0, - 0.017223894185979832, + 0.017223894638367918, 0.06718374168138726, 0.26471309622238876, - 0.46306966090661394, - 0.5183651977377622, - 0.3792795975239455, - 0.43775798261900156, - 0.4390861344577763, - 0.15078458618611568, - 0.026638695903071573, + 0.46306966090794227, + 0.5183651977396941, + 0.3792795970729484, + 0.4377579826180898, + 0.43908613445504957, + 0.1507845861840453, + 0.02663869590307158, 0, 0, 0, @@ -27366,16 +27432,16 @@ 0, 0, 0, - 0.004805512696680092, + 0.004805512696673381, 0.06468703044995204, 0.06542786071111287, - 0.06654729961096122, - 0.11552805111350352, + 0.06654729960419103, + 0.11552805111350356, 0.19258244486879814, - 0.12181809659743338, - 0.24675006350541687, - 0.22833833208860882, - 0.022573581666235867, + 0.12181809659777575, + 0.24675006350264542, + 0.2283383320893763, + 0.022573581666235874, 0, 0, 0, @@ -27390,16 +27456,16 @@ 0, 0, 0, - 0.01927661877645105, + 0.019276618776451055, 0.44131507722218927, 0.7402423680321164, 0.32638743189214775, - 0.14624171778223422, + 0.14624171772956165, 0.1962082078727654, - 0.5079610524495001, + 0.5079610582718171, 0.7234024586226356, - 0.4998044211416656, - 0.0496610853801965, + 0.4998044211516184, + 0.04966108637656427, 0, 0, 0, @@ -27414,16 +27480,16 @@ 0, 0, 0, - 0.017715213471067817, - 0.07112752128930078, - 0.16105440722461548, - 0.17322329645391166, + 0.017715214089093316, + 0.07112752112347981, + 0.16105440722522174, + 0.1732232964531996, 0.20248635379088023, 0.20001829253613893, 0.14014737108643865, - 0.11372921609428381, - 0.146671014582318, - 0.04436394270985622, + 0.11372921609428376, + 0.14667101458231788, + 0.04436394300936103, 0, 0, 0, @@ -27438,15 +27504,15 @@ 0, 0, 0, - 0.00484589892118291, - 0.08943015316834224, - 0.10317621336230459, - 0.15550372233864532, - 0.282513699004386, - 0.2703201564563612, - 0.38055611984477367, + 0.0048458989211742015, + 0.08943015316820131, + 0.10317621336278805, + 0.15550372276647048, + 0.28251369816273647, + 0.2703201564566948, + 0.38055612502309905, 0.38738743239096624, - 0.44396975766708713, + 0.4439697576670872, 0.049977674002699854, 0, 0, @@ -27462,16 +27528,16 @@ 0, 0, 0, - 0.007327195445388787, - 0.28338965303757113, + 0.007327195464430653, + 0.2833896569705143, 0.6906031104923216, - 0.6428492582673135, - 0.5743068110658217, - 0.5773066423593529, - 0.6609298327517166, - 0.6478144974714484, - 0.49049007000291495, - 0.02851433987414455, + 0.6428492582697269, + 0.5743068156056476, + 0.5773066423580457, + 0.6609298460093651, + 0.6478144974697554, + 0.4904900700122983, + 0.028514339727104317, 0, 0, 0, @@ -27486,16 +27552,16 @@ 0, 0, 0, - 0.012417472148090733, + 0.01241747214809074, 0.4189073413868129, 0.6747114761957649, - 0.5621087716336577, + 0.5621087716336578, 0.3492030481323242, - 0.34162366140413447, - 0.6388724596617094, - 0.3395654879804922, - 0.09857074626230124, - 0.06122335832680734, + 0.3416236614040142, + 0.6388724481290923, + 0.33956548797948494, + 0.09857074672932846, + 0.06122335959914026, 0, 0, 0, @@ -27510,16 +27576,16 @@ 0, 0, 0, - 0.012988732256491433, - 0.4296512640806296, - 0.6673143206006709, + 0.012988732256494074, + 0.42965126408062965, + 0.6673143206006704, 0.561440091662739, - 0.5597028340559824, + 0.5597028316437257, 0.5805169622007633, 0.6483095900239241, 0.7129165222140993, - 0.5058486908266632, - 0.0422315666115026, + 0.5058486980227174, + 0.042231566617878094, 0, 0, 0, @@ -27534,16 +27600,16 @@ 0, 0, 0, - 0.015656644346988983, - 0.42384845614759575, - 0.691280204881437, - 0.6527776198509281, + 0.015656644898015312, + 0.42384845192478526, + 0.6912802048832276, + 0.6527776198509283, 0.5850634499016136, 0.5886879528764958, 0.6643544526732628, 0.7322070620906421, - 0.5346231052931457, - 0.04696266876686059, + 0.5346231052932239, + 0.04696266876686067, 0, 0, 0, @@ -27558,16 +27624,16 @@ 0, 0, 0, - 0.010934954585226149, - 0.1016991133519532, - 0.6168321436280823, - 0.6614760878599352, - 0.5740720221267279, - 0.5818685716019495, - 0.6580351346079151, - 0.7290147808340307, + 0.010934954225353462, + 0.10169911295175224, + 0.6168321436295511, + 0.6614760971619138, + 0.5740720221294026, + 0.5818685758104679, + 0.6580351346079147, + 0.729014780834031, 0.518514528054712, - 0.04853774317598105, + 0.04853774143453707, 0, 0, 0, @@ -27583,15 +27649,15 @@ 0, 0, 0.014438736360105951, - 0.4126449238614316, - 0.692634617293601, - 0.650330051459911, - 0.5826157647068577, - 0.5506934233711679, - 0.4712300846156673, - 0.561371483091978, - 0.44416022627914875, - 0.03912043186537442, + 0.41264492554723775, + 0.6926346172936007, + 0.6503300514647797, + 0.5826157750697377, + 0.5506934233700187, + 0.4712300846132302, + 0.5613714830900731, + 0.4441602216293107, + 0.03912043184787281, 0, 0, 0, @@ -27606,16 +27672,16 @@ 0, 0, 0, - 0.004952720535590588, - 0.03988698387489046, + 0.00495272053559059, + 0.039886983874890446, 0.05114138943864686, 0.09502549512777748, - 0.13289980301527882, - 0.11618847187472192, - 0.06053263573209524, - 0.0648904047480913, - 0.03261301483217858, - 0.0130144743436519, + 0.13289980295084197, + 0.11618847187519613, + 0.060532635742273286, + 0.06489040474802825, + 0.03261301483676772, + 0.013014474343651902, 0, 0, 0, @@ -27630,16 +27696,16 @@ 0, 0, 0, - 0.00723950404380101, + 0.007239504123890907, 0.27452494724205456, 0.28610184695772706, 0.565493007935239, - 0.44418092061593684, - 0.41640150727466757, + 0.4441809178740026, + 0.41640150727466746, 0.5926428039355159, 0.4076175315539891, - 0.37252162718292137, - 0.045101716759297285, + 0.37252163151293594, + 0.04510171754838004, 0, 0, 0, @@ -27654,15 +27720,15 @@ 0, 0, 0, - 0.013375225749488084, - 0.42529867723299153, - 0.712066338434924, + 0.013375225202114848, + 0.4252986789253783, + 0.7120663384384878, 0.6741801856375874, - 0.6050068541750562, - 0.5981460552431812, - 0.6677177811263971, + 0.6050068541750561, + 0.5981460664313784, + 0.6677177681806327, 0.7309968434795824, - 0.5519144772863446, + 0.5519144772863449, 0.05564104102747143, 0, 0, @@ -27678,16 +27744,16 @@ 0, 0, 0, - 0.009801161818003475, - 0.34859048042655677, - 0.68555497319108, - 0.6517076935236934, - 0.5886585874680715, - 0.5873684921271651, + 0.009801161777089049, + 0.34859048041284285, + 0.6855549731928343, + 0.65170770273661, + 0.5886585859212004, + 0.587368502193401, 0.5019259673347131, - 0.5856637128617198, + 0.5856637128617197, 0.17033091836435335, - 0.02815829406982227, + 0.02815829396300654, 0, 0, 0, @@ -28641,6 +28707,14 @@ "guiSAMdic = pd.DataFrame.from_dict(dic,orient='index')" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "f034d511", + "metadata": {}, + "outputs": [], + "source": [] + }, { "attachments": {}, "cell_type": "markdown", @@ -28724,7 +28798,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.17" + "version": "3.10.13" }, "vscode": { "interpreter": { diff --git a/Examples/UtilityRateForecastExample.py b/Examples/UtilityRateForecastExample.py index 09365909..94439fe6 100644 --- a/Examples/UtilityRateForecastExample.py +++ b/Examples/UtilityRateForecastExample.py @@ -15,7 +15,7 @@ This can either be run with all of the steps at once (single call to execute()) to generate an array of prices or by calling execute repeateadly, potentially in the loop with a model-predictive controller for energy storage -Most recently tested against PySAM 5.0.0 +Most recently tested against PySAM 5.1.0 """ # Get a key from https://api.openei.org:443 diff --git a/Examples/UtilityRatesExample.py b/Examples/UtilityRatesExample.py index 8833688a..305dcdc7 100644 --- a/Examples/UtilityRatesExample.py +++ b/Examples/UtilityRatesExample.py @@ -6,7 +6,7 @@ Additional financial models, inputs, and outputs can be found at: * PV: https://nrel-pysam.readthedocs.io/en/master/modules/Utilityrate5.html -Most recently tested against PySAM 4.2.0 +Most recently tested against PySAM 5.1.0 Requires: nrel-pysam, requests @author: brtietz diff --git a/Examples/Windpower Example/windpower-example.py b/Examples/Windpower Example/windpower-example.py index 937eb0d4..cb872097 100644 --- a/Examples/Windpower Example/windpower-example.py +++ b/Examples/Windpower Example/windpower-example.py @@ -6,7 +6,7 @@ Created with PySAM 4.2.0 in Python 3.8.7. Last tested with PySAM 4.2.0 with code generated by SAM 2022.11.21 r1 SSC 279. -Most recently tested with PySAM 5.0.0 +Most recently tested with PySAM 5.1.0 ''' diff --git a/RELEASE.md b/RELEASE.md index 8008137f..ca8f5a22 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,5 +1,9 @@ # Release Notes +## Version 5.1.0, Mar 13, 2023 - SAM 2023.12.17, Revision 1, SSC Version 290 +* [SAM Release updates for Version 2023.12.17 Revision 1](https://nrel.github.io/SAM/doc/releasenotes.html) +* Enable Hybrids in PySAM (#162) + ## Version 5.0.0, Dec 13, 2023 - SAM 2023.12.17, SSC Version 288 * [SAM Release updates for Version 2023.12.17](https://nrel.github.io/SAM/doc/releasenotes.html) * Fix AdjustmentFactors (#158) diff --git a/build_unix.sh b/build_unix.sh index 9c957622..f7821290 100755 --- a/build_unix.sh +++ b/build_unix.sh @@ -7,8 +7,8 @@ # Building libssc and libSAM_api # requires SAM-Dev/CMakeList.txt that contains lk, wex, ssc and sam as subdirectories -# rm -rf ${SAMNTDIR}/../cmake-build-release -# mkdir -p ${SAMNTDIR}/../cmake-build-release +rm -rf ${SAMNTDIR}/../cmake-build-release +mkdir -p ${SAMNTDIR}/../cmake-build-release cd ${SAMNTDIR}/../cmake-build-release || exit cmake .. -DCMAKE_BUILD_TYPE=Release -DSAMAPI_EXPORT=1 -DSAM_SKIP_AUTOGEN=0 cmake --build . --target SAM_api -j 6 diff --git a/docs/version_changes/5.1.0.rst b/docs/version_changes/5.1.0.rst new file mode 100644 index 00000000..a0900124 --- /dev/null +++ b/docs/version_changes/5.1.0.rst @@ -0,0 +1,1156 @@ +.. 5.1.0: + +Version 5.1.0 +=============================================== + +This page compares the PySAM Modules' input variables and the defaults for these input variables +between the current release and the last release. + +This helps track which variables and defaults have changed between releases to make it easier to notify users during version upgrade. + +Below are lists for each PySAM Module: + 1. New Default configurations + 2. Removed Default configurations + 3. Modified Variables: New variables, Removed variables and Type-changed variables + 4. Modified Default Values + +Battery +************************************************ + +:doc:`../modules/Battery` New Default files: + + - GenericPVWattsWindFuelCellBatteryHybridHostDeveloper + - GenericPVWattsWindFuelCellBatteryHybridSingleOwner + - PVWattsWindBatteryHybridHostDeveloper + - PVWattsWindBatteryHybridSingleOwner + - PVWattsWindFuelCellBatteryHybridHostDeveloper + - PVWattsWindFuelCellBatteryHybridSingleOwner + - PhotovoltaicWindBatteryHybridHostDeveloper + - PhotovoltaicWindBatteryHybridSingleOwner + - StandaloneBatteryAllEquityPartnershipFlip + - StandaloneBatteryCommercial + - StandaloneBatteryHostDeveloper + - StandaloneBatteryLeveragedPartnershipFlip + - StandaloneBatteryMerchantPlant + - StandaloneBatteryResidential + - StandaloneBatterySaleLeaseback + - StandaloneBatterySingleOwner + - StandaloneBatteryThirdParty + +:doc:`../modules/Battery` Modified Default Values: + + - Cashloan_PVBatteryCommercial + + ['om_batt_capacity_cost', 'battery_total_cost_lcos', 'total_installed_cost', 'system_capacity', 'om_capacity', 'loan_rate'] + + - Equpartflip_GenericBatteryAllEquityPartnershipFlip + + ['om_batt_capacity_cost', 'construction_financing_cost', 'battery_total_cost_lcos', 'total_installed_cost', 'battery_per_kWh', 'reserves_interest', 'om_batt_replacement_cost'] + + - Battery_GenericBatteryThirdParty + + ['batt_lifetime_matrix'] + + - Pvsamv1_PVBatteryResidential + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inv_snl_vdco', 'module_aspect_ratio', 'inv_tdc_plc', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'adjust_constant', 'batt_lifetime_matrix', 'subarray4_nstrings', 'inv_snl_c0', 'inv_snl_c1', 'subarray1_rack_shading'] + + - HostDeveloper_GenericBatteryHostDeveloper + + ['om_batt_capacity_cost', 'cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest'] + + - Battery_GenericBatteryAllEquityPartnershipFlip + + ['batt_lifetime_matrix', 'om_batt_replacement_cost'] + + - Levpartflip_PVBatteryLeveragedPartnershipFlip + + ['ppa_price_input', 'om_batt_capacity_cost', 'cost_debt_closing', 'construction_financing_cost', 'battery_total_cost_lcos', 'land_area', 'total_installed_cost', 'term_int_rate', 'battery_per_kWh', 'reserves_interest', 'om_batt_replacement_cost', 'system_capacity'] + + - Battery_GenericBatterySingleOwner + + ['batt_lifetime_matrix', 'om_batt_replacement_cost'] + + - Merchantplant_GenericBatteryMerchantPlant + + ['om_batt_capacity_cost', 'cost_debt_closing', 'construction_financing_cost', 'battery_total_cost_lcos', 'total_installed_cost', 'term_int_rate', 'battery_per_kWh', 'reserves_interest', 'om_batt_replacement_cost'] + + - Battery_GenericBatteryCommercial + + ['batt_lifetime_matrix'] + + - Singleowner_PVBatterySingleOwner + + ['ppa_price_input', 'om_batt_capacity_cost', 'cost_debt_closing', 'construction_financing_cost', 'cp_battery_nameplate', 'battery_total_cost_lcos', 'cp_system_nameplate', 'land_area', 'total_installed_cost', 'term_int_rate', 'battery_per_kWh', 'reserves_interest', 'om_batt_replacement_cost', 'system_capacity'] + + - HostDeveloper_PVBatteryHostDeveloper + + ['om_batt_capacity_cost', 'cost_debt_closing', 'construction_financing_cost', 'battery_total_cost_lcos', 'total_installed_cost', 'system_capacity', 'om_capacity'] + + - Equpartflip_PVBatteryAllEquityPartnershipFlip + + ['ppa_price_input', 'om_batt_capacity_cost', 'construction_financing_cost', 'battery_total_cost_lcos', 'land_area', 'total_installed_cost', 'battery_per_kWh', 'reserves_interest', 'om_batt_replacement_cost', 'system_capacity'] + + - Pvsamv1_PVBatteryMerchantPlant + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'om_batt_replacement_cost', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'inv_tdc_plc', 'batt_dispatch_pvs_nameplate_ac', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'adjust_constant', 'batt_lifetime_matrix', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Pvsamv1_PVBatteryCommercial + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'inv_tdc_plc', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'adjust_constant', 'batt_lifetime_matrix', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Battery_MEwaveBatterySingleOwner + + ['batt_lifetime_matrix'] + + - Battery_GenericBatteryResidential + + ['batt_lifetime_matrix'] + + - Battery_GenericBatteryLeveragedPartnershipFlip + + ['batt_lifetime_matrix', 'om_batt_replacement_cost'] + + - Pvsamv1_PVBatterySingleOwner + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'LeadAcid_q20_computed', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'batt_power_discharge_max_kwac', 'batt_life_model', 'cec_module_width', 'inv_snl_c3', 'om_batt_replacement_cost', 'batt_resistance', 'LeadAcid_qn_computed', 'ppa_price_input', 'inv_snl_pso', 'batt_power_discharge_max_kwdc', 'subarray3_modules_per_string', 'mppt_hi_inverter', 'inv_snl_vdcmax', 'batt_Qfull_flow', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'batt_Vfull', 'batt_Qfull', 'inv_snl_vdco', 'cap_vs_temp', 'batt_power_charge_max_kwdc', 'batt_Vnom', 'module_aspect_ratio', 'batt_Qexp', 'mppt_low_inverter', 'inv_tdc_plc', 'batt_dispatch_pvs_nameplate_ac', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'batt_mass', 'batt_power_charge_max_kwac', 'adjust_constant', 'batt_lifetime_matrix', 'batt_Vcut', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'batt_Qnom', 'subarray1_rack_shading', 'batt_computed_strings', 'batt_Vexp', 'batt_room_temperature_celsius'] + + - Pvsamv1_PVBatteryThirdParty + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'inv_tdc_plc', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'adjust_constant', 'batt_lifetime_matrix', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Pvsamv1_PVBatteryHostDeveloper + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'inv_tdc_plc', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'adjust_constant', 'batt_lifetime_matrix', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Battery_GenericBatterySaleLeaseback + + ['batt_lifetime_matrix', 'om_batt_replacement_cost'] + + - Levpartflip_GenericBatteryLeveragedPartnershipFlip + + ['om_batt_capacity_cost', 'cost_debt_closing', 'construction_financing_cost', 'battery_total_cost_lcos', 'total_installed_cost', 'term_int_rate', 'battery_per_kWh', 'reserves_interest', 'om_batt_replacement_cost'] + + - Pvsamv1_PVBatteryAllEquityPartnershipFlip + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'om_batt_replacement_cost', 'ppa_price_input', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'inv_tdc_plc', 'batt_dispatch_pvs_nameplate_ac', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'adjust_constant', 'batt_lifetime_matrix', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Cashloan_GenericBatteryCommercial + + ['om_batt_capacity_cost', 'loan_rate'] + + - Battery_FuelCellCommercial + + ['batt_lifetime_matrix'] + + - Cashloan_PVWattsBatteryResidential + + ['om_capacity', 'loan_rate'] + + - Cashloan_PVBatteryResidential + + ['om_batt_capacity_cost', 'om_capacity', 'loan_rate'] + + - Cashloan_PVWattsBatteryCommercial + + ['battery_total_cost_lcos', 'total_installed_cost', 'om_capacity', 'loan_rate'] + + - HostDeveloper_PVWattsBatteryHostDeveloper + + ['cost_debt_closing', 'construction_financing_cost', 'battery_total_cost_lcos', 'total_installed_cost', 'om_capacity'] + + - Saleleaseback_PVBatterySaleLeaseback + + ['ppa_price_input', 'om_batt_capacity_cost', 'construction_financing_cost', 'battery_total_cost_lcos', 'land_area', 'total_installed_cost', 'battery_per_kWh', 'reserves_interest', 'om_batt_replacement_cost', 'system_capacity'] + + - Battery_GenericBatteryMerchantPlant + + ['batt_lifetime_matrix', 'om_batt_replacement_cost'] + + - Merchantplant_PVBatteryMerchantPlant + + ['om_batt_capacity_cost', 'cost_debt_closing', 'construction_financing_cost', 'battery_total_cost_lcos', 'cp_system_nameplate', 'land_area', 'total_installed_cost', 'term_int_rate', 'battery_per_kWh', 'reserves_interest', 'om_batt_replacement_cost', 'system_capacity'] + + - Cashloan_GenericBatteryResidential + + ['om_batt_capacity_cost', 'loan_rate'] + + - Battery_GenericBatteryHostDeveloper + + ['batt_lifetime_matrix'] + + - Singleowner_MEwaveBatterySingleOwner + + ['cost_debt_closing', 'construction_financing_cost', 'term_int_rate'] + + - Pvsamv1_PVBatterySaleLeaseback + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'om_batt_replacement_cost', 'ppa_price_input', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'inv_tdc_plc', 'batt_dispatch_pvs_nameplate_ac', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'adjust_constant', 'batt_lifetime_matrix', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Battery_FuelCellSingleOwner + + ['batt_dispatch_update_frequency_hours', 'batt_lifetime_matrix', 'om_batt_replacement_cost'] + + - Singleowner_GenericBatterySingleOwner + + ['om_batt_capacity_cost', 'cost_debt_closing', 'construction_financing_cost', 'battery_total_cost_lcos', 'total_installed_cost', 'term_int_rate', 'battery_per_kWh', 'reserves_interest', 'om_batt_replacement_cost'] + + - Pvsamv1_PVBatteryLeveragedPartnershipFlip + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'om_batt_replacement_cost', 'ppa_price_input', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'inv_tdc_plc', 'batt_dispatch_pvs_nameplate_ac', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'adjust_constant', 'batt_lifetime_matrix', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Saleleaseback_GenericBatterySaleLeaseback + + ['om_batt_capacity_cost', 'construction_financing_cost', 'battery_total_cost_lcos', 'total_installed_cost', 'battery_per_kWh', 'reserves_interest', 'om_batt_replacement_cost'] + + + +BatteryStateful +************************************************ + +:doc:`../modules/BatteryStateful` New Default files: + + - LFPGraphite + - LMOLTO + - LeadAcid + - NMCGraphite + + +Belpe +************************************************ + +:doc:`../modules/Belpe` New Default files: + + - PVWattsResidential + - PVWattsThirdParty + - SolarWaterHeatingResidential + +:doc:`../modules/Belpe` Removed Default files + + - GenericBatteryResidential + - GenericBatteryThirdParty + + +Cashloan +************************************************ + +:doc:`../modules/Cashloan` New Default files: + + - PVWattsCommercial + - PVWattsResidential + - SolarWaterHeatingCommercial + - SolarWaterHeatingResidential + - StandaloneBatteryCommercial + - StandaloneBatteryResidential + - WindPowerCommercial + - WindPowerResidential + +:doc:`../modules/Cashloan` Removed Default files + + - MSLFCommercial + +:doc:`../modules/Cashloan` Modified Default Values: + + - Cashloan_DSLFCommercial + + ['loan_rate'] + + - Cashloan_PVBatteryCommercial + + ['om_batt_capacity_cost', 'battery_total_cost_lcos', 'total_installed_cost', 'system_capacity', 'om_capacity', 'loan_rate'] + + - Cashloan_GenericCSPSystemCommercial + + ['loan_rate'] + + - Cashloan_FuelCellCommercial + + ['total_installed_cost', 'loan_rate'] + + - Cashloan_GenericSystemResidential + + ['loan_rate'] + + - Cashloan_FlatPlatePVCommercial + + ['total_installed_cost', 'system_capacity', 'om_capacity', 'loan_rate'] + + - Cashloan_EmpiricalTroughCommercial + + ['loan_rate'] + + - Cashloan_GenericBatteryCommercial + + ['om_batt_capacity_cost', 'loan_rate'] + + - Cashloan_PVWattsBatteryResidential + + ['om_capacity', 'loan_rate'] + + - Cashloan_PVBatteryResidential + + ['om_batt_capacity_cost', 'om_capacity', 'loan_rate'] + + - Cashloan_PVWattsBatteryCommercial + + ['battery_total_cost_lcos', 'total_installed_cost', 'om_capacity', 'loan_rate'] + + - Cashloan_GenericBatteryResidential + + ['om_batt_capacity_cost', 'loan_rate'] + + - Cashloan_FlatPlatePVResidential + + ['total_installed_cost', 'om_capacity', 'loan_rate'] + + - Cashloan_GenericSystemCommercial + + ['loan_rate'] + + + +Communitysolar +************************************************ + +:doc:`../modules/Communitysolar` New Default files: + + - PVWattsCommunitySolar + + +Equpartflip +************************************************ + +:doc:`../modules/Equpartflip` New Default files: + + - PVWattsAllEquityPartnershipFlip + - PhysicalTroughAllEquityPartnershipFlip + - StandaloneBatteryAllEquityPartnershipFlip + - WindPowerAllEquityPartnershipFlip + +:doc:`../modules/Equpartflip` Modified Default Values: + + - Equpartflip_BiopowerAllEquityPartnershipFlip + + ['construction_financing_cost', 'reserves_interest'] + + - Equpartflip_GenericSystemAllEquityPartnershipFlip + + ['construction_financing_cost', 'reserves_interest'] + + - Equpartflip_GenericBatteryAllEquityPartnershipFlip + + ['om_batt_capacity_cost', 'construction_financing_cost', 'battery_total_cost_lcos', 'total_installed_cost', 'battery_per_kWh', 'reserves_interest', 'om_batt_replacement_cost'] + + - Equpartflip_GenericCSPSystemAllEquityPartnershipFlip + + ['ppa_price_input', 'construction_financing_cost', 'reserves_interest'] + + - Equpartflip_FlatPlatePVAllEquityPartnershipFlip + + ['ppa_price_input', 'construction_financing_cost', 'land_area', 'ptc_fed_amount', 'total_installed_cost', 'reserves_interest', 'itc_fed_percent', 'system_capacity', 'ptc_fed_escal'] + + - Equpartflip_PVBatteryAllEquityPartnershipFlip + + ['ppa_price_input', 'om_batt_capacity_cost', 'construction_financing_cost', 'battery_total_cost_lcos', 'land_area', 'total_installed_cost', 'battery_per_kWh', 'reserves_interest', 'om_batt_replacement_cost', 'system_capacity'] + + - Equpartflip_DSLFAllEquityPartnershipFlip + + ['ppa_price_input', 'construction_financing_cost', 'reserves_interest'] + + - Equpartflip_GeothermalPowerAllEquityPartnershipFlip + + ['system_recapitalization_cost', 'construction_financing_cost', 'total_installed_cost', 'reserves_interest', 'system_capacity'] + + - Equpartflip_EmpiricalTroughAllEquityPartnershipFlip + + ['ppa_price_input', 'construction_financing_cost', 'reserves_interest'] + + - Equpartflip_HighXConcentratingPVAllEquityPartnershipFlip + + ['construction_financing_cost', 'reserves_interest'] + + - Equpartflip_MSLFAllEquityPartnershipFlip + + ['ppa_price_input', 'construction_financing_cost', 'land_area', 'total_installed_cost', 'reserves_interest'] + + - Equpartflip_MSPTAllEquityPartnershipFlip + + ['ppa_price_input', 'construction_financing_cost', 'reserves_interest'] + + + +FresnelPhysical +************************************************ + +:doc:`../modules/FresnelPhysical` New Default files: + + - MSLFAllEquityPartnershipFlip + - MSLFLeveragedPartnershipFlip + - MSLFMerchantPlant + - MSLFSaleLeaseback + - MSLFSingleOwner + + +FresnelPhysicalIph +************************************************ + +:doc:`../modules/FresnelPhysicalIph` New Default files: + + - MSLFIPHLCOHCalculator + - MSLFIPHNone + + +Fuelcell +************************************************ + +:doc:`../modules/Fuelcell` New Default files: + + - GenericPVWattsWindFuelCellBatteryHybridHostDeveloper + - GenericPVWattsWindFuelCellBatteryHybridSingleOwner + - PVWattsWindFuelCellBatteryHybridHostDeveloper + - PVWattsWindFuelCellBatteryHybridSingleOwner + + +GenericSystem +************************************************ + +:doc:`../modules/GenericSystem` New Default files: + + - GenericPVWattsWindFuelCellBatteryHybridHostDeveloper + - GenericPVWattsWindFuelCellBatteryHybridSingleOwner + +:doc:`../modules/GenericSystem` Modified Default Values: + + - Equpartflip_GenericSystemAllEquityPartnershipFlip + + ['construction_financing_cost', 'reserves_interest'] + + - Cashloan_GenericSystemResidential + + ['loan_rate'] + + - Singleowner_GenericSystemSingleOwner + + ['cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest'] + + - Levpartflip_GenericSystemLeveragedPartnershipFlip + + ['cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest'] + + - Merchantplant_GenericSystemMerchantPlant + + ['cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest'] + + - Lcoefcr_GenericSystemLCOECalculator + + ['fixed_charge_rate'] + + - Saleleaseback_GenericSystemSaleLeaseback + + ['construction_financing_cost', 'reserves_interest'] + + - HostDeveloper_GenericSystemHostDeveloper + + ['term_int_rate', 'reserves_interest'] + + - Cashloan_GenericSystemCommercial + + ['loan_rate'] + + + +Grid +************************************************ + +:doc:`../modules/Grid` New Default files: + + - GenericPVWattsWindFuelCellBatteryHybridHostDeveloper + - GenericPVWattsWindFuelCellBatteryHybridSingleOwner + - PVWattsAllEquityPartnershipFlip + - PVWattsCommercial + - PVWattsCommunitySolar + - PVWattsHostDeveloper + - PVWattsLCOECalculator + - PVWattsLeveragedPartnershipFlip + - PVWattsMerchantPlant + - PVWattsResidential + - PVWattsSaleLeaseback + - PVWattsSingleOwner + - PVWattsThirdParty + - PVWattsWindBatteryHybridHostDeveloper + - PVWattsWindBatteryHybridSingleOwner + - PVWattsWindFuelCellBatteryHybridHostDeveloper + - PVWattsWindFuelCellBatteryHybridSingleOwner + - PhotovoltaicWindBatteryHybridHostDeveloper + - PhotovoltaicWindBatteryHybridSingleOwner + - PhysicalTroughAllEquityPartnershipFlip + - PhysicalTroughLCOECalculator + - PhysicalTroughLeveragedPartnershipFlip + - PhysicalTroughMerchantPlant + - PhysicalTroughSaleLeaseback + - PhysicalTroughSingleOwner + - StandaloneBatteryAllEquityPartnershipFlip + - StandaloneBatteryCommercial + - StandaloneBatteryHostDeveloper + - StandaloneBatteryLeveragedPartnershipFlip + - StandaloneBatteryMerchantPlant + - StandaloneBatteryResidential + - StandaloneBatterySaleLeaseback + - StandaloneBatterySingleOwner + - StandaloneBatteryThirdParty + - WindPowerAllEquityPartnershipFlip + - WindPowerCommercial + - WindPowerLCOECalculator + - WindPowerLeveragedPartnershipFlip + - WindPowerMerchantPlant + - WindPowerResidential + - WindPowerSaleLeaseback + - WindPowerSingleOwner + +:doc:`../modules/Grid` Removed Default files + + - MSLFCommercial + - MSLFLCOECalculator + - MSLFNone + + +HostDeveloper +************************************************ + +:doc:`../modules/HostDeveloper` New Default files: + + - GenericPVWattsWindFuelCellBatteryHybridHostDeveloper + - PVWattsHostDeveloper + - PVWattsWindBatteryHybridHostDeveloper + - PVWattsWindFuelCellBatteryHybridHostDeveloper + - PhotovoltaicWindBatteryHybridHostDeveloper + - StandaloneBatteryHostDeveloper + +:doc:`../modules/HostDeveloper` Modified Default Values: + + - HostDeveloper_GenericBatteryHostDeveloper + + ['om_batt_capacity_cost', 'cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest'] + + - HostDeveloper_PVBatteryHostDeveloper + + ['om_batt_capacity_cost', 'cost_debt_closing', 'construction_financing_cost', 'battery_total_cost_lcos', 'total_installed_cost', 'system_capacity', 'om_capacity'] + + - Pvsamv1_PVBatteryHostDeveloper + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'inv_tdc_plc', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'adjust_constant', 'batt_lifetime_matrix', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - HostDeveloper_FlatPlatePVHostDeveloper + + ['cost_debt_closing', 'construction_financing_cost', 'total_installed_cost', 'term_int_rate', 'reserves_interest', 'system_capacity', 'om_capacity'] + + - Pvsamv1_FlatPlatePVHostDeveloper + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'adjust_periods', 'inv_tdc_plc', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - HostDeveloper_GenericSystemHostDeveloper + + ['term_int_rate', 'reserves_interest'] + + - HostDeveloper_PVWattsBatteryHostDeveloper + + ['cost_debt_closing', 'construction_financing_cost', 'battery_total_cost_lcos', 'total_installed_cost', 'om_capacity'] + + - Battery_GenericBatteryHostDeveloper + + ['batt_lifetime_matrix'] + + + +Lcoefcr +************************************************ + +:doc:`../modules/Lcoefcr` New Default files: + + - PVWattsLCOECalculator + - PhysicalTroughLCOECalculator + - SolarWaterHeatingLCOECalculator + - WindPowerLCOECalculator + +:doc:`../modules/Lcoefcr` Removed Default files + + - MSLFLCOECalculator + +:doc:`../modules/Lcoefcr` Modified Default Values: + + - Lcoefcr_GeothermalPowerLCOECalculator + + ['capital_cost', 'fixed_operating_cost', 'fixed_charge_rate'] + + - Lcoefcr_FlatPlatePVLCOECalculator + + ['capital_cost', 'fixed_operating_cost', 'fixed_charge_rate'] + + - Lcoefcr_GenericSystemLCOECalculator + + ['fixed_charge_rate'] + + - Lcoefcr_BiopowerLCOECalculator + + ['fixed_charge_rate'] + + - Lcoefcr_DSGLIPHLCOHCalculator + + ['fixed_charge_rate'] + + + +LcoefcrDesign +************************************************ + +:doc:`../modules/LcoefcrDesign` New Default files: + + - MSLFIPHLCOHCalculator + - MSPTIPHLCOHCalculator + - PhysicalTroughIPHLCOHCalculator + + +Levpartflip +************************************************ + +:doc:`../modules/Levpartflip` New Default files: + + - PVWattsLeveragedPartnershipFlip + - PhysicalTroughLeveragedPartnershipFlip + - StandaloneBatteryLeveragedPartnershipFlip + - WindPowerLeveragedPartnershipFlip + +:doc:`../modules/Levpartflip` Modified Default Values: + + - Levpartflip_BiopowerLeveragedPartnershipFlip + + ['cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest', 'dscr'] + + - Levpartflip_PVBatteryLeveragedPartnershipFlip + + ['ppa_price_input', 'om_batt_capacity_cost', 'cost_debt_closing', 'construction_financing_cost', 'battery_total_cost_lcos', 'land_area', 'total_installed_cost', 'term_int_rate', 'battery_per_kWh', 'reserves_interest', 'om_batt_replacement_cost', 'system_capacity'] + + - Levpartflip_GeothermalPowerLeveragedPartnershipFlip + + ['system_recapitalization_cost', 'cost_debt_closing', 'construction_financing_cost', 'total_installed_cost', 'term_int_rate', 'reserves_interest', 'dscr', 'system_capacity'] + + - Levpartflip_MSLFLeveragedPartnershipFlip + + ['ppa_price_input', 'cost_debt_closing', 'construction_financing_cost', 'land_area', 'total_installed_cost', 'term_int_rate', 'reserves_interest', 'dscr'] + + - Levpartflip_GenericSystemLeveragedPartnershipFlip + + ['cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest'] + + - Levpartflip_MSPTLeveragedPartnershipFlip + + ['ppa_price_input', 'cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest', 'dscr'] + + - Levpartflip_GenericBatteryLeveragedPartnershipFlip + + ['om_batt_capacity_cost', 'cost_debt_closing', 'construction_financing_cost', 'battery_total_cost_lcos', 'total_installed_cost', 'term_int_rate', 'battery_per_kWh', 'reserves_interest', 'om_batt_replacement_cost'] + + - Levpartflip_GenericCSPSystemLeveragedPartnershipFlip + + ['ppa_price_input', 'cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest', 'dscr'] + + - Levpartflip_DSLFLeveragedPartnershipFlip + + ['ppa_price_input', 'cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest', 'dscr'] + + - Levpartflip_EmpiricalTroughLeveragedPartnershipFlip + + ['ppa_price_input', 'cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest', 'dscr'] + + - Levpartflip_HighXConcentratingPVLeveragedPartnershipFlip + + ['cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest'] + + - Levpartflip_FlatPlatePVLeveragedPartnershipFlip + + ['ppa_price_input', 'cost_debt_closing', 'construction_financing_cost', 'land_area', 'ptc_fed_amount', 'total_installed_cost', 'term_int_rate', 'reserves_interest', 'itc_fed_percent', 'system_capacity', 'ptc_fed_escal'] + + + +Merchantplant +************************************************ + +:doc:`../modules/Merchantplant` New Default files: + + - PVWattsMerchantPlant + - PhysicalTroughMerchantPlant + - StandaloneBatteryMerchantPlant + - WindPowerMerchantPlant + +:doc:`../modules/Merchantplant` Modified Default Values: + + - Merchantplant_HighXConcentratingPVMerchantPlant + + ['cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest'] + + - Merchantplant_GenericBatteryMerchantPlant + + ['om_batt_capacity_cost', 'cost_debt_closing', 'construction_financing_cost', 'battery_total_cost_lcos', 'total_installed_cost', 'term_int_rate', 'battery_per_kWh', 'reserves_interest', 'om_batt_replacement_cost'] + + - Merchantplant_FlatPlatePVMerchantPlant + + ['cost_debt_closing', 'construction_financing_cost', 'cp_system_nameplate', 'land_area', 'ptc_fed_amount', 'total_installed_cost', 'term_int_rate', 'reserves_interest', 'itc_fed_percent', 'system_capacity', 'ptc_fed_escal'] + + - Merchantplant_BiopowerMerchantPlant + + ['cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest', 'dscr'] + + - Merchantplant_MSLFMerchantPlant + + ['cost_debt_closing', 'construction_financing_cost', 'land_area', 'total_installed_cost', 'term_int_rate', 'reserves_interest', 'dscr'] + + - Merchantplant_DSLFMerchantPlant + + ['cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest', 'dscr'] + + - Merchantplant_GenericSystemMerchantPlant + + ['cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest'] + + - Merchantplant_GenericCSPSystemMerchantPlant + + ['cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest', 'dscr'] + + - Merchantplant_EmpiricalTroughMerchantPlant + + ['cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest', 'dscr'] + + - Merchantplant_GeothermalPowerMerchantPlant + + ['system_recapitalization_cost', 'cost_debt_closing', 'construction_financing_cost', 'cp_system_nameplate', 'total_installed_cost', 'term_int_rate', 'reserves_interest', 'dscr', 'system_capacity'] + + - Merchantplant_PVBatteryMerchantPlant + + ['om_batt_capacity_cost', 'cost_debt_closing', 'construction_financing_cost', 'battery_total_cost_lcos', 'cp_system_nameplate', 'land_area', 'total_installed_cost', 'term_int_rate', 'battery_per_kWh', 'reserves_interest', 'om_batt_replacement_cost', 'system_capacity'] + + - Merchantplant_MSPTMerchantPlant + + ['cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest', 'dscr'] + + + +MsptIph +************************************************ + +:doc:`../modules/MsptIph` New Default files: + + - MSPTIPHLCOHCalculator + - MSPTIPHNone + + +Pvsamv1 +************************************************ + +:doc:`../modules/Pvsamv1` New Default files: + + - PhotovoltaicWindBatteryHybridHostDeveloper + - PhotovoltaicWindBatteryHybridSingleOwner + +:doc:`../modules/Pvsamv1` Modified Default Values: + + - Pvsamv1_PVBatteryResidential + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inv_snl_vdco', 'module_aspect_ratio', 'inv_tdc_plc', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'adjust_constant', 'batt_lifetime_matrix', 'subarray4_nstrings', 'inv_snl_c0', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Pvsamv1_FlatPlatePVSingleOwner + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'ppa_price_input', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'adjust_periods', 'inv_tdc_plc', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Pvsamv1_FlatPlatePVSaleLeaseback + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'ppa_price_input', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'adjust_periods', 'inv_tdc_plc', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Pvsamv1_PVBatteryMerchantPlant + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'om_batt_replacement_cost', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'inv_tdc_plc', 'batt_dispatch_pvs_nameplate_ac', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'adjust_constant', 'batt_lifetime_matrix', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Pvsamv1_PVBatteryCommercial + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'inv_tdc_plc', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'adjust_constant', 'batt_lifetime_matrix', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Pvsamv1_FlatPlatePVResidential + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inv_snl_vdco', 'module_aspect_ratio', 'adjust_periods', 'inv_tdc_plc', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'subarray4_nstrings', 'inv_snl_c0', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Pvsamv1_PVBatterySingleOwner + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'LeadAcid_q20_computed', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'batt_power_discharge_max_kwac', 'batt_life_model', 'cec_module_width', 'inv_snl_c3', 'om_batt_replacement_cost', 'batt_resistance', 'LeadAcid_qn_computed', 'ppa_price_input', 'inv_snl_pso', 'batt_power_discharge_max_kwdc', 'subarray3_modules_per_string', 'mppt_hi_inverter', 'inv_snl_vdcmax', 'batt_Qfull_flow', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'batt_Vfull', 'batt_Qfull', 'inv_snl_vdco', 'cap_vs_temp', 'batt_power_charge_max_kwdc', 'batt_Vnom', 'module_aspect_ratio', 'batt_Qexp', 'mppt_low_inverter', 'inv_tdc_plc', 'batt_dispatch_pvs_nameplate_ac', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'batt_mass', 'batt_power_charge_max_kwac', 'adjust_constant', 'batt_lifetime_matrix', 'batt_Vcut', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'batt_Qnom', 'subarray1_rack_shading', 'batt_computed_strings', 'batt_Vexp', 'batt_room_temperature_celsius'] + + - Pvsamv1_PVBatteryThirdParty + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'inv_tdc_plc', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'adjust_constant', 'batt_lifetime_matrix', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Pvsamv1_PVBatteryHostDeveloper + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'inv_tdc_plc', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'adjust_constant', 'batt_lifetime_matrix', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Pvsamv1_FlatPlatePVMerchantPlant + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'adjust_periods', 'inv_tdc_plc', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Pvsamv1_PVBatteryAllEquityPartnershipFlip + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'om_batt_replacement_cost', 'ppa_price_input', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'inv_tdc_plc', 'batt_dispatch_pvs_nameplate_ac', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'adjust_constant', 'batt_lifetime_matrix', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Pvsamv1_FlatPlatePVNone + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'adjust_periods', 'inv_tdc_plc', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Pvsamv1_FlatPlatePVLeveragedPartnershipFlip + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'ppa_price_input', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'adjust_periods', 'inv_tdc_plc', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Pvsamv1_FlatPlatePVLCOECalculator + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'adjust_periods', 'inv_tdc_plc', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Pvsamv1_FlatPlatePVHostDeveloper + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'adjust_periods', 'inv_tdc_plc', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Pvsamv1_FlatPlatePVAllEquityPartnershipFlip + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'ppa_price_input', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'adjust_periods', 'inv_tdc_plc', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Pvsamv1_FlatPlatePVCommercial + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'adjust_periods', 'inv_tdc_plc', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Pvsamv1_FlatPlatePVThirdParty + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'adjust_periods', 'inv_tdc_plc', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'subarray4_nstrings', 'inv_snl_c0', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Pvsamv1_PVBatterySaleLeaseback + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'om_batt_replacement_cost', 'ppa_price_input', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'inv_tdc_plc', 'batt_dispatch_pvs_nameplate_ac', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'adjust_constant', 'batt_lifetime_matrix', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + - Pvsamv1_PVBatteryLeveragedPartnershipFlip + + ['subarray3_nstrings', 'subarray2_modules_per_string', 'subarray1_modules_per_string', 'inv_tdc_ds', 'inv_snl_eff_cec', 'inv_snl_pdco', 'cec_module_width', 'inv_snl_c3', 'om_batt_replacement_cost', 'ppa_price_input', 'inv_snl_pso', 'subarray3_modules_per_string', 'inv_snl_vdcmax', 'cec_module_length', 'inv_snl_c2', 'subarray4_modules_per_string', 'inverter_count', 'system_capacity', 'inv_snl_vdco', 'module_aspect_ratio', 'inv_tdc_plc', 'batt_dispatch_pvs_nameplate_ac', 'inv_snl_pnt', 'inv_snl_paco', 'inv_tdc_cec_db', 'subarray2_nstrings', 'inv_tdc_cec_cg', 'adjust_constant', 'batt_lifetime_matrix', 'subarray4_nstrings', 'inv_snl_c0', 'subarray1_nstrings', 'inv_snl_c1', 'subarray1_rack_shading'] + + + +Pvwattsv8 +************************************************ + +:doc:`../modules/Pvwattsv8` New Default files: + + - GenericPVWattsWindFuelCellBatteryHybridHostDeveloper + - GenericPVWattsWindFuelCellBatteryHybridSingleOwner + - PVWattsAllEquityPartnershipFlip + - PVWattsCommercial + - PVWattsCommunitySolar + - PVWattsHostDeveloper + - PVWattsLCOECalculator + - PVWattsLeveragedPartnershipFlip + - PVWattsMerchantPlant + - PVWattsResidential + - PVWattsSaleLeaseback + - PVWattsSingleOwner + - PVWattsThirdParty + - PVWattsWindBatteryHybridHostDeveloper + - PVWattsWindBatteryHybridSingleOwner + - PVWattsWindFuelCellBatteryHybridHostDeveloper + - PVWattsWindFuelCellBatteryHybridSingleOwner + + +Saleleaseback +************************************************ + +:doc:`../modules/Saleleaseback` New Default files: + + - PVWattsSaleLeaseback + - PhysicalTroughSaleLeaseback + - StandaloneBatterySaleLeaseback + - WindPowerSaleLeaseback + +:doc:`../modules/Saleleaseback` Modified Default Values: + + - Saleleaseback_BiopowerSaleLeaseback + + ['construction_financing_cost', 'reserves_interest'] + + - Saleleaseback_MSLFSaleLeaseback + + ['ppa_price_input', 'construction_financing_cost', 'land_area', 'total_installed_cost', 'reserves_interest'] + + - Saleleaseback_HighXConcentratingPVSaleLeaseback + + ['construction_financing_cost', 'reserves_interest'] + + - Saleleaseback_FlatPlatePVSaleLeaseback + + ['ppa_price_input', 'construction_financing_cost', 'land_area', 'ptc_fed_amount', 'total_installed_cost', 'reserves_interest', 'itc_fed_percent', 'system_capacity', 'ptc_fed_escal'] + + - Saleleaseback_MSPTSaleLeaseback + + ['ppa_price_input', 'construction_financing_cost', 'reserves_interest'] + + - Saleleaseback_GenericSystemSaleLeaseback + + ['construction_financing_cost', 'reserves_interest'] + + - Saleleaseback_EmpiricalTroughSaleLeaseback + + ['ppa_price_input', 'construction_financing_cost', 'reserves_interest'] + + - Saleleaseback_PVBatterySaleLeaseback + + ['ppa_price_input', 'om_batt_capacity_cost', 'construction_financing_cost', 'battery_total_cost_lcos', 'land_area', 'total_installed_cost', 'battery_per_kWh', 'reserves_interest', 'om_batt_replacement_cost', 'system_capacity'] + + - Saleleaseback_GeothermalPowerSaleLeaseback + + ['system_recapitalization_cost', 'construction_financing_cost', 'total_installed_cost', 'reserves_interest', 'system_capacity'] + + - Saleleaseback_DSLFSaleLeaseback + + ['construction_financing_cost', 'reserves_interest'] + + - Saleleaseback_GenericCSPSystemSaleLeaseback + + ['ppa_price_input', 'construction_financing_cost', 'reserves_interest'] + + - Saleleaseback_GenericBatterySaleLeaseback + + ['om_batt_capacity_cost', 'construction_financing_cost', 'battery_total_cost_lcos', 'total_installed_cost', 'battery_per_kWh', 'reserves_interest', 'om_batt_replacement_cost'] + + + +Singleowner +************************************************ + +:doc:`../modules/Singleowner` New Default files: + + - GenericPVWattsWindFuelCellBatteryHybridSingleOwner + - PVWattsSingleOwner + - PVWattsWindBatteryHybridSingleOwner + - PVWattsWindFuelCellBatteryHybridSingleOwner + - PhotovoltaicWindBatteryHybridSingleOwner + - PhysicalTroughSingleOwner + - StandaloneBatterySingleOwner + - WindPowerSingleOwner + +:doc:`../modules/Singleowner` Modified Default Values: + + - Singleowner_EmpiricalTroughSingleOwner + + ['ppa_price_input', 'cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest', 'dscr'] + + - Singleowner_FlatPlatePVSingleOwner + + ['ppa_price_input', 'cost_debt_closing', 'construction_financing_cost', 'cp_system_nameplate', 'land_area', 'ptc_fed_amount', 'total_installed_cost', 'term_int_rate', 'reserves_interest', 'itc_fed_percent', 'system_capacity', 'ptc_fed_escal'] + + - Singleowner_MSLFSingleOwner + + ['ppa_price_input', 'cost_debt_closing', 'construction_financing_cost', 'land_area', 'total_installed_cost', 'term_int_rate', 'reserves_interest', 'dscr'] + + - Singleowner_PVBatterySingleOwner + + ['ppa_price_input', 'om_batt_capacity_cost', 'cost_debt_closing', 'construction_financing_cost', 'cp_battery_nameplate', 'battery_total_cost_lcos', 'cp_system_nameplate', 'land_area', 'total_installed_cost', 'term_int_rate', 'battery_per_kWh', 'reserves_interest', 'om_batt_replacement_cost', 'system_capacity'] + + - Singleowner_GenericSystemSingleOwner + + ['cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest'] + + - Singleowner_GeothermalPowerSingleOwner + + ['system_recapitalization_cost', 'cost_debt_closing', 'construction_financing_cost', 'cp_system_nameplate', 'total_installed_cost', 'term_int_rate', 'reserves_interest', 'dscr', 'system_capacity'] + + - Singleowner_PTESSingleOwner + + ['cost_debt_closing', 'construction_financing_cost', 'cp_system_nameplate', 'total_installed_cost', 'term_int_rate', 'reserves_interest', 'dscr', 'system_capacity'] + + - Singleowner_BiopowerSingleOwner + + ['cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest', 'dscr'] + + - Singleowner_DSLFSingleOwner + + ['ppa_price_input', 'cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest', 'dscr'] + + - Singleowner_MEwaveSingleOwner + + ['cost_debt_closing', 'construction_financing_cost', 'term_int_rate'] + + - Singleowner_GenericCSPSystemSingleOwner + + ['ppa_price_input', 'cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest', 'dscr'] + + - Singleowner_HighXConcentratingPVSingleOwner + + ['cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest'] + + - Singleowner_ETESSingleOwner + + ['cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest', 'dscr'] + + - Singleowner_MSPTSingleOwner + + ['ppa_price_input', 'cost_debt_closing', 'construction_financing_cost', 'term_int_rate', 'reserves_interest', 'dscr'] + + - Singleowner_MEwaveBatterySingleOwner + + ['cost_debt_closing', 'construction_financing_cost', 'term_int_rate'] + + - Singleowner_GenericBatterySingleOwner + + ['om_batt_capacity_cost', 'cost_debt_closing', 'construction_financing_cost', 'battery_total_cost_lcos', 'total_installed_cost', 'term_int_rate', 'battery_per_kWh', 'reserves_interest', 'om_batt_replacement_cost'] + + - Singleowner_FuelCellSingleOwner + + ['cost_debt_closing', 'construction_financing_cost', 'battery_total_cost_lcos', 'total_installed_cost', 'term_int_rate', 'battery_per_kWh', 'reserves_interest', 'om_batt_replacement_cost'] + + + +Swh +************************************************ + +:doc:`../modules/Swh` New Default files: + + - SolarWaterHeatingCommercial + - SolarWaterHeatingLCOECalculator + - SolarWaterHeatingResidential + + +TcsMSLF +************************************************ + +:doc:`../modules/TcsMSLF` Removed Default files + + - MSLFAllEquityPartnershipFlip + - MSLFCommercial + - MSLFLCOECalculator + - MSLFLeveragedPartnershipFlip + - MSLFMerchantPlant + - MSLFNone + - MSLFSaleLeaseback + - MSLFSingleOwner + + +Thirdpartyownership +************************************************ + +:doc:`../modules/Thirdpartyownership` New Default files: + + - PVWattsThirdParty + - StandaloneBatteryThirdParty + + +TidalFileReader +************************************************ + +:doc:`../modules/TidalFileReader` New Default files: + + - MEtidalLCOECalculator + - MEtidalNone + + +TroughPhysical +************************************************ + +:doc:`../modules/TroughPhysical` New Default files: + + - PhysicalTroughAllEquityPartnershipFlip + - PhysicalTroughLCOECalculator + - PhysicalTroughLeveragedPartnershipFlip + - PhysicalTroughMerchantPlant + - PhysicalTroughSaleLeaseback + - PhysicalTroughSingleOwner + + +TroughPhysicalIph +************************************************ + +:doc:`../modules/TroughPhysicalIph` New Default files: + + - PhysicalTroughIPHLCOHCalculator + - PhysicalTroughIPHNone + + +TroughPhysicalProcessHeat +************************************************ + +:doc:`../modules/TroughPhysicalProcessHeat` Removed Default files + + - PhysicalTroughIPHNone + + +Utilityrate5 +************************************************ + +:doc:`../modules/Utilityrate5` New Default files: + + - GenericPVWattsWindFuelCellBatteryHybridHostDeveloper + - GenericPVWattsWindFuelCellBatteryHybridSingleOwner + - PVWattsAllEquityPartnershipFlip + - PVWattsCommercial + - PVWattsHostDeveloper + - PVWattsLeveragedPartnershipFlip + - PVWattsMerchantPlant + - PVWattsResidential + - PVWattsSaleLeaseback + - PVWattsSingleOwner + - PVWattsThirdParty + - PVWattsWindBatteryHybridHostDeveloper + - PVWattsWindBatteryHybridSingleOwner + - PVWattsWindFuelCellBatteryHybridHostDeveloper + - PVWattsWindFuelCellBatteryHybridSingleOwner + - PhotovoltaicWindBatteryHybridHostDeveloper + - PhotovoltaicWindBatteryHybridSingleOwner + - PhysicalTroughAllEquityPartnershipFlip + - PhysicalTroughLeveragedPartnershipFlip + - PhysicalTroughMerchantPlant + - PhysicalTroughSaleLeaseback + - PhysicalTroughSingleOwner + - SolarWaterHeatingCommercial + - SolarWaterHeatingResidential + - StandaloneBatteryAllEquityPartnershipFlip + - StandaloneBatteryCommercial + - StandaloneBatteryHostDeveloper + - StandaloneBatteryLeveragedPartnershipFlip + - StandaloneBatteryMerchantPlant + - StandaloneBatteryResidential + - StandaloneBatterySaleLeaseback + - StandaloneBatterySingleOwner + - StandaloneBatteryThirdParty + - WindPowerAllEquityPartnershipFlip + - WindPowerCommercial + - WindPowerLeveragedPartnershipFlip + - WindPowerMerchantPlant + - WindPowerResidential + - WindPowerSaleLeaseback + - WindPowerSingleOwner + +:doc:`../modules/Utilityrate5` Removed Default files + + - MSLFCommercial + + +Windpower +************************************************ + +:doc:`../modules/Windpower` New Default files: + + - GenericPVWattsWindFuelCellBatteryHybridHostDeveloper + - GenericPVWattsWindFuelCellBatteryHybridSingleOwner + - PVWattsWindBatteryHybridHostDeveloper + - PVWattsWindBatteryHybridSingleOwner + - PVWattsWindFuelCellBatteryHybridHostDeveloper + - PVWattsWindFuelCellBatteryHybridSingleOwner + - PhotovoltaicWindBatteryHybridHostDeveloper + - PhotovoltaicWindBatteryHybridSingleOwner + - WindPowerAllEquityPartnershipFlip + - WindPowerCommercial + - WindPowerLCOECalculator + - WindPowerLeveragedPartnershipFlip + - WindPowerMerchantPlant + - WindPowerResidential + - WindPowerSaleLeaseback + - WindPowerSingleOwner + + diff --git a/docs/versions.rst b/docs/versions.rst index 3d6ffd5c..9e93fabf 100644 --- a/docs/versions.rst +++ b/docs/versions.rst @@ -10,6 +10,7 @@ For a list of .. toctree:: :maxdepth: 2 + version_changes/5.1.0.rst version_changes/5.0.0.rst version_changes/4.2.0.rst version_changes/4.1.0.rst diff --git a/files/Hybrids/BatteryHybrid.py b/files/Hybrids/BatteryHybrid.py index de6a368c..a18d1585 100644 --- a/files/Hybrids/BatteryHybrid.py +++ b/files/Hybrids/BatteryHybrid.py @@ -4,11 +4,17 @@ from .HybridBase import HybridGenerator class BatteryHybrid(HybridGenerator): + """ + Class that adds Battery to HybridSystem + """ def __init__(self, name="battery") -> None: super().__init__(batt, name) self._data: batt.Battery def _collect_inputs(self, input): + """ + Hybrid version requires `system_capacity` and `om_batt_nameplate` inputs, provide these from `batt_computed_bank_capacity` + """ if self._ssc.data_query(self._data_ptr, b'batt_computed_bank_capacity') != self._ssc.NUMBER: raise RuntimeError("BatteryHybrid error: BatterySystem.batt_computed_bank_capacity required but not assigned") self._ssc.data_set_variable(self._data_ptr, 'system_capacity', self._data.BatterySystem.batt_computed_bank_capacity) diff --git a/files/Hybrids/FuelCellHybrid.py b/files/Hybrids/FuelCellHybrid.py index 98fc43ac..6265b6a8 100644 --- a/files/Hybrids/FuelCellHybrid.py +++ b/files/Hybrids/FuelCellHybrid.py @@ -4,6 +4,9 @@ from .HybridBase import HybridGenerator class FuelCellHybrid(HybridGenerator): + """ + Class that adds Fuelcell to HybridSystem + """ def __init__(self, name="fuelcell") -> None: super().__init__(fuelcell, name) self.data: fuelcell.Fuelcell diff --git a/files/Hybrids/GenericSystemHybrid.py b/files/Hybrids/GenericSystemHybrid.py index b9e162c2..98bead68 100644 --- a/files/Hybrids/GenericSystemHybrid.py +++ b/files/Hybrids/GenericSystemHybrid.py @@ -3,6 +3,9 @@ from .HybridBase import HybridGenerator class GenericSystemHybrid(HybridGenerator): + """ + Class that adds GenericSystem to HybridSystem + """ def __init__(self, name="generic_system") -> None: super().__init__(gensys, name) self._data : gensys.GenericSystem \ No newline at end of file diff --git a/files/Hybrids/HybridBase.py b/files/Hybrids/HybridBase.py index 055b6f25..2b0951ae 100644 --- a/files/Hybrids/HybridBase.py +++ b/files/Hybrids/HybridBase.py @@ -12,7 +12,14 @@ class HybridGenerator: """ - All properties that not SSC variables should be prepended with '_' + Class that wraps around PySAM technology modules as a component of a HybridSystem. + + All hybrid subsystem models require cost inputs that are added as properties here (e.g. om_fixed) + + The PySAM model contains the simulation data for the hybrid simulation, which are modified simlarly to how they are for PySAM + modules: `value`, `assign`, direct access, and `export`. + + The subsystem model data is copied to and from the HybridSystem during execution. """ _ssc: PySSC = PySSC() _ssc.pdll.ssc_data_get_table.restype = c_void_p diff --git a/files/Hybrids/HybridSystem.py b/files/Hybrids/HybridSystem.py index 0d05a255..701dce9b 100644 --- a/files/Hybrids/HybridSystem.py +++ b/files/Hybrids/HybridSystem.py @@ -17,11 +17,20 @@ class HybridSystem: + """ + Class that contains PySAM technology subsystem models with a financial model and runs them in a PySAM.Hybrid simulation + + Currently only Singleowner and HostDeveloper financial models are supported + """ supported_financial_modules = {"singleowner": so, "utilityrate5": ur, "host_developer": hd} - def __init__(self, technology_modules, financial_modules) -> None: + def __init__(self, technology_modules, financial_model: str) -> None: + """ + `technology_modules` is a list of PySAM modules of the technology subsystems + `financial_modules` is "singleowner" or "hostdeveloper" + """ self._technology_modules = technology_modules - self._financial_module = financial_modules + self._financial_module = financial_model # data container for Hybrid module, ownership will belong to self._hybrid self._data_ptr = HybridGenerator._ssc.data_create() @@ -59,22 +68,23 @@ def __init__(self, technology_modules, financial_modules) -> None: self._grid: grid.Grid - for financial_module in financial_modules: - if financial_module == so: - self.singleowner: so.Singleowner - self._financials['singleowner'] = None - elif financial_module == ur: - self.utilityrate5: ur.Utilityrate5 - self._financials['utilityrate5'] = None - elif financial_module == hd: - self.host_developer: hd.HostDeveloper - self._financials['host_developer'] = None - else: - raise NotImplementedError(f"HybridSystem currently not enabled for module {financial_module}") - + if financial_model.lower() == "singleowner": + self.singleowner: so.Singleowner + self._financials['singleowner'] = None + elif financial_model.lower() == "hostdeveloper": + self.utilityrate5: ur.Utilityrate5 + self._financials['utilityrate5'] = None + self.host_developer: hd.HostDeveloper + self._financials['host_developer'] = None + else: + raise NotImplementedError(f"HybridSystem currently not enabled for {financial_model}") + self._cmod_list = list(self._generators.keys()) + ['grid'] + list(self._financials.keys()) def new(self): + """ + Create model + """ for gen in self._generators.values(): gen.new() self._grid = grid.new() @@ -83,6 +93,9 @@ def new(self): self._financials[k] = getattr(self, k) def default(self, config_name: str): + """ + Create model with variables set to defaults of a configuration + """ for gen in self._generators.values(): gen.default(config_name) self._grid = grid.default(config_name) @@ -91,6 +104,9 @@ def default(self, config_name: str): self._financials[k] = getattr(self, k) def assign(self, input_dict): + """ + Assign attributes from nested dictionary, except for Outputs. e.g. {"pvwattsv8": {var: value, ...}, ...} + """ unassigned_dict = {} for k, v in input_dict.items(): if k in self._generators.keys(): @@ -123,6 +139,9 @@ def assign(self, input_dict): return unassigned def value(self, name): + """ + Get the value of a Hybrid output + """ outputs = self._hybrid.Outputs.output if name not in outputs.keys: raise ValueError(f"{name} is not an output of HybridSystem") @@ -151,9 +170,15 @@ def _collect_hybrid_outputs(self): HybridGenerator._ssc.data_deep_copy(p_fin_ret, data_ptr) def execute(self, verbosity_int=0): + """ + Runs simulation + """ self._collect_hybrid_inputs() self._hybrid.execute(verbosity_int) self._collect_hybrid_outputs() def export(self): + """ + Dictionary of input and outputs + """ return self._hybrid.export() \ No newline at end of file diff --git a/files/Hybrids/PVHybrid.py b/files/Hybrids/PVHybrid.py index 22ec670d..99ee361f 100644 --- a/files/Hybrids/PVHybrid.py +++ b/files/Hybrids/PVHybrid.py @@ -3,6 +3,9 @@ from .HybridBase import HybridGenerator class PVHybrid(HybridGenerator): + """ + Class that adds Pvsamv1 to HybridSystem + """ def __init__(self, name="pvsamv1") -> None: super().__init__(pv, name) self._data: pv.Pvsamv1 \ No newline at end of file diff --git a/files/Hybrids/PVWattsHybrid.py b/files/Hybrids/PVWattsHybrid.py index 0651e503..67f42a42 100644 --- a/files/Hybrids/PVWattsHybrid.py +++ b/files/Hybrids/PVWattsHybrid.py @@ -3,6 +3,9 @@ from .HybridBase import HybridGenerator class PVWattsHybrid(HybridGenerator): + """ + Class that adds Pvwattsv8 to HybridSystem + """ def __init__(self, name="pvwattsv8") -> None: super().__init__(pvwatts, name) self._data: pvwatts.Pvwattsv8 \ No newline at end of file diff --git a/files/Hybrids/WindHybrid.py b/files/Hybrids/WindHybrid.py index f54ebaa1..c1371f42 100644 --- a/files/Hybrids/WindHybrid.py +++ b/files/Hybrids/WindHybrid.py @@ -3,6 +3,9 @@ from .HybridBase import HybridGenerator class WindHybrid(HybridGenerator): + """ + Class that adds Windpower to HybridSystem + """ def __init__(self, name="windpower") -> None: super().__init__(wind, name) self._data: wind.Windpower \ No newline at end of file diff --git a/files/version.py b/files/version.py index a0f66580..a5e45131 100644 --- a/files/version.py +++ b/files/version.py @@ -1 +1 @@ -__version__ = '5.0.0' +__version__ = '5.1.0' diff --git a/modules/Hybrid.c b/modules/Hybrid.c index 1680f0eb..65f6636d 100644 --- a/modules/Hybrid.c +++ b/modules/Hybrid.c @@ -91,7 +91,7 @@ Common_set_input(VarGroupObject *self, PyObject *value, void *closure) static PyGetSetDef Common_getset[] = { {"input", (getter)Common_get_input,(setter)Common_set_input, - PyDoc_STR("*dict*: input_table for multiple technologies and one financial market\n\n**Required:**\nTrue"), + PyDoc_STR("*dict*: input_table for multiple technologies and one financial market\n\n**Info:**\npvsamv1,pvwattsv8,windpower,generic_system,battery,fuelcell,hybrid\n\n**Required:**\nTrue"), NULL}, {NULL} /* Sentinel */ }; From 55bce131b81a8c2e63eff47a0f57a1d4748b49f4 Mon Sep 17 00:00:00 2001 From: Darice Date: Wed, 13 Mar 2024 20:01:13 -0600 Subject: [PATCH 03/22] update test_hybrids --- tests/test_hybrid.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_hybrid.py b/tests/test_hybrid.py index 24365fa2..5cfc1ceb 100644 --- a/tests/test_hybrid.py +++ b/tests/test_hybrid.py @@ -25,7 +25,7 @@ def test_PVWattsv8WindBatterySingleOwner(): with open(nfc1, "r") as f: defs = json.load(f)['input'] - m = HybridSystem([pv, wind, batt], [so]) + m = HybridSystem([pv, wind, batt], 'singleowner') m.new() m.pvwatts.SolarResource.solar_resource_file = str(solar_resource_path) m.wind.Resource.wind_resource_filename = str(wind_resource_path) @@ -52,7 +52,7 @@ def test_PVWattsv8WindBatteryHostDeveloper(): with open(nfc1, "r") as f: defs = json.load(f)['input'] - m = HybridSystem([pv, wind, batt], [ur, hd]) + m = HybridSystem([pv, wind, batt], 'hostdeveloper') m.new() m.pvwatts.SolarResource.solar_resource_file = str(solar_resource_path) m.wind.Resource.wind_resource_filename = str(wind_resource_path) @@ -78,7 +78,7 @@ def test_GenericPVWattsWindFuelCellBatteryHybrid_SingleOwner(): with open(nfc1, "r") as f: defs = json.load(f)['input'] - m = HybridSystem([gensys, pv, wind, fuelcell, batt], [so]) + m = HybridSystem([gensys, pv, wind, fuelcell, batt], 'singleowner') m.new() m.pvwatts.SolarResource.solar_resource_file = str(solar_resource_path) m.wind.Resource.wind_resource_filename = str(wind_resource_path) From 379945b5af246f70b3572aa871449020b5b55922 Mon Sep 17 00:00:00 2001 From: Darice Date: Thu, 14 Mar 2024 15:08:12 -0600 Subject: [PATCH 04/22] update CI yml --- .github/workflows/test_pkg.yml | 10 ++----- docs/version_changes/4.0.0.rst | 11 ------- docs/version_changes/4.1.0.rst | 54 +++++++++++++++++----------------- 3 files changed, 30 insertions(+), 45 deletions(-) diff --git a/.github/workflows/test_pkg.yml b/.github/workflows/test_pkg.yml index 44442fc3..0b9e6638 100644 --- a/.github/workflows/test_pkg.yml +++ b/.github/workflows/test_pkg.yml @@ -8,11 +8,13 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, windows-latest, macOS-latest] + os: [ubuntu-latest, windows-latest, macOS-latest, macos-14] python-version: [ '3.8', '3.9', '3.10', '3.11', '3.12' ] env: SAMNTDIR: ${{ github.workspace }}/../SAM + NREL_API_KEY: ${{ secrets.NREL_API_KEY }} + NREL_API_EMAIL: ${{ secrets.NREL_API_EMAIL }} name: ${{ matrix.os }} ${{ matrix.python-version }} steps: @@ -25,10 +27,6 @@ jobs: cd .. git config --global url.https://github.com/.insteadOf git://github.com/ git clone https://github.com/NREL/SAM.git - ls - pwd - ls ${{ env.SAMNTDIR }} - ls ${{ env.SAMNTDIR }}/api/api_autogen/library/defaults - uses: actions/checkout@v3 - name: Setup conda @@ -48,6 +46,4 @@ jobs: - name: Unit tests run: | - pwd - ls ${{ env.SAMNTDIR }}/api/api_autogen/library/defaults pytest tests/test_pysam_all.py \ No newline at end of file diff --git a/docs/version_changes/4.0.0.rst b/docs/version_changes/4.0.0.rst index ebbad003..b0998e10 100644 --- a/docs/version_changes/4.0.0.rst +++ b/docs/version_changes/4.0.0.rst @@ -622,17 +622,6 @@ Pvsamv1 - subarray3_rear_irradiance_loss - subarray4_rear_irradiance_loss - -Pvwattsv1 -************************************************ - -:doc:`../modules/Pvwattsv1` Modified Input Variables: - - New variables: - - - adjust:timeindex - - Pvwattsv5 ************************************************ diff --git a/docs/version_changes/4.1.0.rst b/docs/version_changes/4.1.0.rst index ed1e474e..283b055b 100644 --- a/docs/version_changes/4.1.0.rst +++ b/docs/version_changes/4.1.0.rst @@ -31,7 +31,7 @@ Biomass DSGL IPH ************************************************ -:doc:`../modules/DSGL IPH` Removed Default files +:doc:`../modules/LinearFresnelDsgIph` Removed Default files - LCOH Calculator - None @@ -40,7 +40,7 @@ DSGL IPH DSLF ************************************************ -:doc:`../modules/DSLF` Removed Default files +:doc:`../modules/TcslinearFresnel` Removed Default files - All Equity Partnership Flip - Commercial @@ -67,7 +67,7 @@ DSPT Dish Stirling ************************************************ -:doc:`../modules/Dish Stirling` Removed Default files +:doc:`../modules/Tcsdish` Removed Default files - All Equity Partnership Flip - Commercial @@ -82,7 +82,7 @@ Dish Stirling ETES ************************************************ -:doc:`../modules/ETES` Removed Default files +:doc:`../modules/EtesElectricResistance` Removed Default files - Single Owner @@ -90,7 +90,7 @@ ETES Empirical Trough ************************************************ -:doc:`../modules/Empirical Trough` Removed Default files +:doc:`../modules/TcstroughEmpirical` Removed Default files - All Equity Partnership Flip - Commercial @@ -105,7 +105,7 @@ Empirical Trough Flat Plate PV ************************************************ -:doc:`../modules/Flat Plate PV` Removed Default files +:doc:`../modules/Pvsamv1` Removed Default files - All Equity Partnership Flip - Commercial @@ -123,7 +123,7 @@ Flat Plate PV Fuel Cell ************************************************ -:doc:`../modules/Fuel Cell` Removed Default files +:doc:`../modules/Fuelcell` Removed Default files - Commercial - Single Owner @@ -132,7 +132,7 @@ Fuel Cell Generic Battery ************************************************ -:doc:`../modules/Generic Battery` Removed Default files +:doc:`../modules/GenericBattery` Removed Default files - All Equity Partnership Flip - Commercial @@ -163,7 +163,7 @@ Generic CSP System Generic System ************************************************ -:doc:`../modules/Generic System` Removed Default files +:doc:`../modules/GenericSystem` Removed Default files - All Equity Partnership Flip - Commercial @@ -181,7 +181,7 @@ Generic System Geothermal Power ************************************************ -:doc:`../modules/Geothermal Power` Removed Default files +:doc:`../modules/Geothermal` Removed Default files - All Equity Partnership Flip - LCOE Calculator @@ -195,7 +195,7 @@ Geothermal Power High-X Concentrating PV ************************************************ -:doc:`../modules/High-X Concentrating PV` Removed Default files +:doc:`../modules/Hcpv` Removed Default files - All Equity Partnership Flip - LCOE Calculator @@ -209,7 +209,7 @@ High-X Concentrating PV MEtidal ************************************************ -:doc:`../modules/MEtidal` Removed Default files +:doc:`../modules/METidal` Removed Default files - LCOE Calculator - None @@ -218,7 +218,7 @@ MEtidal MEwave ************************************************ -:doc:`../modules/MEwave` Removed Default files +:doc:`../modules/MEWave` Removed Default files - LCOE Calculator - None @@ -228,7 +228,7 @@ MEwave MEwave Battery ************************************************ -:doc:`../modules/MEwave Battery` Removed Default files +:doc:`../modules/MEWaveBattery` Removed Default files - Single Owner @@ -236,7 +236,7 @@ MEwave Battery MSLF ************************************************ -:doc:`../modules/MSLF` Removed Default files +:doc:`../modules/FresnelPhysical` Removed Default files - All Equity Partnership Flip - Commercial @@ -251,7 +251,7 @@ MSLF MSPT ************************************************ -:doc:`../modules/MSPT` Removed Default files +:doc:`../modules/TcsmoltenSalt` Removed Default files - All Equity Partnership Flip - Leveraged Partnership Flip @@ -263,11 +263,11 @@ MSPT PTES ************************************************ -:doc:`../modules/PTES` Removed Default files +:doc:`../modules/EtesPtes` Removed Default files - Single Owner -:doc:`../modules/PTES` Modified Default Values: +:doc:`../modules/EtesPtes` Modified Default Values: - Singleowner_PTESSingleOwner @@ -282,7 +282,7 @@ PTES PV Battery ************************************************ -:doc:`../modules/PV Battery` Removed Default files +:doc:`../modules/PVBattery` Removed Default files - All Equity Partnership Flip - Commercial @@ -298,7 +298,7 @@ PV Battery PVWatts ************************************************ -:doc:`../modules/PVWatts` Removed Default files +:doc:`../modules/Pvwattsv8` Removed Default files - All Equity Partnership Flip - Commercial @@ -313,7 +313,7 @@ PVWatts - Single Owner - Third Party -:doc:`../modules/PVWatts` Modified Default Values: +:doc:`../modules/Pvwattsv8` Modified Default Values: - Cashloan_PVWattsBatteryResidential @@ -332,7 +332,7 @@ PVWatts PVWatts Battery ************************************************ -:doc:`../modules/PVWatts Battery` Removed Default files +:doc:`../modules/Battwatts` Removed Default files - Commercial - Host Developer @@ -343,7 +343,7 @@ PVWatts Battery Physical Trough ************************************************ -:doc:`../modules/Physical Trough` Removed Default files +:doc:`../modules/TroughPhysical` Removed Default files - All Equity Partnership Flip - LCOE Calculator @@ -357,7 +357,7 @@ Physical Trough Physical Trough IPH ************************************************ -:doc:`../modules/Physical Trough IPH` Removed Default files +:doc:`../modules/TroughPhysicalProcessHeat` Removed Default files - LCOH Calculator - None @@ -374,7 +374,7 @@ Retired Solar Water Heating ************************************************ -:doc:`../modules/Solar Water Heating` Removed Default files +:doc:`../modules/Swh` Removed Default files - Commercial - LCOE Calculator @@ -385,7 +385,7 @@ Solar Water Heating Standalone Battery ************************************************ -:doc:`../modules/Standalone Battery` Removed Default files +:doc:`../modules/Battery` Removed Default files - All Equity Partnership Flip - Commercial @@ -401,7 +401,7 @@ Standalone Battery Wind Power ************************************************ -:doc:`../modules/Wind Power` Removed Default files +:doc:`../modules/Windpower` Removed Default files - All Equity Partnership Flip - Commercial From a6a82fc7723618232452c39dc12f19cbb1be1dd6 Mon Sep 17 00:00:00 2001 From: Darice Date: Thu, 14 Mar 2024 15:13:05 -0600 Subject: [PATCH 05/22] remove M1 mac test for now --- .github/workflows/test_pkg.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_pkg.yml b/.github/workflows/test_pkg.yml index 0b9e6638..c962423b 100644 --- a/.github/workflows/test_pkg.yml +++ b/.github/workflows/test_pkg.yml @@ -8,7 +8,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, windows-latest, macOS-latest, macos-14] + os: [ubuntu-latest, windows-latest, macOS-latest] python-version: [ '3.8', '3.9', '3.10', '3.11', '3.12' ] env: From 4d18ac20e67b85a5b4070718b8673b96bbc53793 Mon Sep 17 00:00:00 2001 From: Darice Date: Thu, 14 Mar 2024 15:17:55 -0600 Subject: [PATCH 06/22] update test_pysam_all --- tests/test_pysam_all.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_pysam_all.py b/tests/test_pysam_all.py index 8a408259..7a7849ef 100644 --- a/tests/test_pysam_all.py +++ b/tests/test_pysam_all.py @@ -39,14 +39,13 @@ def test_adjustment_factors(): adj.sf_timeindex = [0] adj.export() -@pytest.mark.parametrize("execution_number", range(150)) def test_pyssc(execution_number): var = ssc.var_create() ssc.var_set_value(var, 0) assert int(ssc.var_get_number(var)) == 0 test_dat = ssc.data_create() ssc.data_set_var(test_dat, b"test", var) - assert ssc.data_get_number(test_dat, b"test") == 0 + assert ssc.data_get_number(test_dat, b"test") == pytest.approx(0) var = ssc.var_create() ssc.var_set_value(var, 'zero') From e66e490d2622a7a740801eaa2678d4f557a3a7c2 Mon Sep 17 00:00:00 2001 From: Darice Date: Thu, 14 Mar 2024 15:30:24 -0600 Subject: [PATCH 07/22] update test --- tests/test_pysam_all.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_pysam_all.py b/tests/test_pysam_all.py index 7a7849ef..7d1bbcd2 100644 --- a/tests/test_pysam_all.py +++ b/tests/test_pysam_all.py @@ -39,7 +39,7 @@ def test_adjustment_factors(): adj.sf_timeindex = [0] adj.export() -def test_pyssc(execution_number): +def test_pyssc(): var = ssc.var_create() ssc.var_set_value(var, 0) assert int(ssc.var_get_number(var)) == 0 From 1d2f4f7a0751c29e92863420351b0f86fc858bd4 Mon Sep 17 00:00:00 2001 From: Darice Date: Thu, 14 Mar 2024 15:34:47 -0600 Subject: [PATCH 08/22] add back M1 mac test --- .github/workflows/test_pkg.yml | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test_pkg.yml b/.github/workflows/test_pkg.yml index c962423b..7e56fbb3 100644 --- a/.github/workflows/test_pkg.yml +++ b/.github/workflows/test_pkg.yml @@ -8,7 +8,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, windows-latest, macOS-latest] + os: [ubuntu-latest, windows-latest, macOS-latest, macos-14] python-version: [ '3.8', '3.9', '3.10', '3.11', '3.12' ] env: @@ -30,6 +30,7 @@ jobs: - uses: actions/checkout@v3 - name: Setup conda + if: ${{ matrix.os }} != 'macos-14' uses: s-weigand/setup-conda@v1 with: update-conda: true @@ -38,6 +39,19 @@ jobs: - run: conda --version - run: which python + - name: Install conda Mac arm64 + if: ${{ matrix.os }} == 'macos-14' + run: | + mkdir -p ~/miniconda3 + curl https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh -o ~/miniconda3/miniconda.sh + bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3 + rm -rf ~/miniconda3/miniconda.sh + ~/miniconda3/bin/conda init bash + conda --version + yes | conda create --name pysam_env python=${{ matrix.python-version }} + conda activate pysam_env + which python + - name: Install NREL-PySAM run: | pip install -r requirements.txt From edf085eca6e24a64213c4a0fb392522a8664bdca Mon Sep 17 00:00:00 2001 From: Darice Date: Thu, 14 Mar 2024 15:49:12 -0600 Subject: [PATCH 09/22] update test_pkg.yml --- .github/workflows/test_pkg.yml | 36 +++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test_pkg.yml b/.github/workflows/test_pkg.yml index 7e56fbb3..86dce9ad 100644 --- a/.github/workflows/test_pkg.yml +++ b/.github/workflows/test_pkg.yml @@ -3,7 +3,7 @@ name: Test Package on: [ push ] jobs: - build: + build_1: runs-on: ${{ matrix.os }} strategy: @@ -39,6 +39,40 @@ jobs: - run: conda --version - run: which python + - name: Install NREL-PySAM + run: | + pip install -r requirements.txt + pip install -r tests/requirements.txt + conda install -c nrel nrel-pysam + + - name: Unit tests + run: | + pytest tests/test_pysam_all.py + + build_2: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [macos-14] + python-version: [ '3.8', '3.9', '3.10', '3.11', '3.12' ] + + env: + SAMNTDIR: ${{ github.workspace }}/../SAM + NREL_API_KEY: ${{ secrets.NREL_API_KEY }} + NREL_API_EMAIL: ${{ secrets.NREL_API_EMAIL }} + + name: ${{ matrix.os }} ${{ matrix.python-version }} + steps: + - name: Checkout Repo + uses: actions/checkout@v3 + + - uses: actions/checkout@v3 + - name: Checkout SAM + run: | + cd .. + git config --global url.https://github.com/.insteadOf git://github.com/ + git clone https://github.com/NREL/SAM.git + - name: Install conda Mac arm64 if: ${{ matrix.os }} == 'macos-14' run: | From 663ad273c3b2e0063c276fe3a7c77098dba09842 Mon Sep 17 00:00:00 2001 From: Darice Date: Thu, 14 Mar 2024 15:51:27 -0600 Subject: [PATCH 10/22] update test_pkg.yml --- .github/workflows/test_pkg.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_pkg.yml b/.github/workflows/test_pkg.yml index 86dce9ad..ae9d89a0 100644 --- a/.github/workflows/test_pkg.yml +++ b/.github/workflows/test_pkg.yml @@ -8,7 +8,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, windows-latest, macOS-latest, macos-14] + os: [ubuntu-latest, windows-latest, macOS-13] python-version: [ '3.8', '3.9', '3.10', '3.11', '3.12' ] env: From 4d44f8c5c4440825b262c803ff5925bea3d791cf Mon Sep 17 00:00:00 2001 From: Darice Date: Thu, 14 Mar 2024 16:18:39 -0600 Subject: [PATCH 11/22] update test_pkg.yml --- .github/workflows/test_pkg.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_pkg.yml b/.github/workflows/test_pkg.yml index ae9d89a0..68f5402c 100644 --- a/.github/workflows/test_pkg.yml +++ b/.github/workflows/test_pkg.yml @@ -30,7 +30,6 @@ jobs: - uses: actions/checkout@v3 - name: Setup conda - if: ${{ matrix.os }} != 'macos-14' uses: s-weigand/setup-conda@v1 with: update-conda: true @@ -81,6 +80,7 @@ jobs: bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3 rm -rf ~/miniconda3/miniconda.sh ~/miniconda3/bin/conda init bash + source /Users/runner/.bash_profile conda --version yes | conda create --name pysam_env python=${{ matrix.python-version }} conda activate pysam_env From 8d2c5940c9064ac64fdc921419eac9e2fddc981b Mon Sep 17 00:00:00 2001 From: Darice Date: Thu, 14 Mar 2024 16:31:35 -0600 Subject: [PATCH 12/22] update test_pkg.yml --- .github/workflows/test_pkg.yml | 43 +++++++++++++++++----------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/.github/workflows/test_pkg.yml b/.github/workflows/test_pkg.yml index 68f5402c..f38857e5 100644 --- a/.github/workflows/test_pkg.yml +++ b/.github/workflows/test_pkg.yml @@ -18,16 +18,6 @@ jobs: name: ${{ matrix.os }} ${{ matrix.python-version }} steps: - - name: Checkout Repo - uses: actions/checkout@v3 - - - uses: actions/checkout@v3 - - name: Checkout SAM - run: | - cd .. - git config --global url.https://github.com/.insteadOf git://github.com/ - git clone https://github.com/NREL/SAM.git - - uses: actions/checkout@v3 - name: Setup conda uses: s-weigand/setup-conda@v1 @@ -38,12 +28,22 @@ jobs: - run: conda --version - run: which python + - name: Checkout Repo + uses: actions/checkout@v3 + - name: Install NREL-PySAM run: | pip install -r requirements.txt pip install -r tests/requirements.txt conda install -c nrel nrel-pysam + - uses: actions/checkout@v3 + - name: Checkout SAM + run: | + cd .. + git config --global url.https://github.com/.insteadOf git://github.com/ + git clone https://github.com/NREL/SAM.git + - name: Unit tests run: | pytest tests/test_pysam_all.py @@ -62,16 +62,6 @@ jobs: name: ${{ matrix.os }} ${{ matrix.python-version }} steps: - - name: Checkout Repo - uses: actions/checkout@v3 - - - uses: actions/checkout@v3 - - name: Checkout SAM - run: | - cd .. - git config --global url.https://github.com/.insteadOf git://github.com/ - git clone https://github.com/NREL/SAM.git - - name: Install conda Mac arm64 if: ${{ matrix.os }} == 'macos-14' run: | @@ -80,17 +70,28 @@ jobs: bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3 rm -rf ~/miniconda3/miniconda.sh ~/miniconda3/bin/conda init bash - source /Users/runner/.bash_profile + source/Users/runner/.bash_profile conda --version yes | conda create --name pysam_env python=${{ matrix.python-version }} conda activate pysam_env which python + - name: Checkout Repo + uses: actions/checkout@v3 + - name: Install NREL-PySAM run: | + conda activate pysam_env pip install -r requirements.txt pip install -r tests/requirements.txt conda install -c nrel nrel-pysam + + - uses: actions/checkout@v3 + - name: Checkout SAM + run: | + cd .. + git config --global url.https://github.com/.insteadOf git://github.com/ + git clone https://github.com/NREL/SAM.git - name: Unit tests run: | From bd20de2708e1f6659a239b3c89965e504470fc00 Mon Sep 17 00:00:00 2001 From: Darice Date: Thu, 14 Mar 2024 16:48:17 -0600 Subject: [PATCH 13/22] update test_pkg.yml --- .github/workflows/test_pkg.yml | 76 +++++++++++++++++----------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/.github/workflows/test_pkg.yml b/.github/workflows/test_pkg.yml index f38857e5..34a59851 100644 --- a/.github/workflows/test_pkg.yml +++ b/.github/workflows/test_pkg.yml @@ -3,50 +3,50 @@ name: Test Package on: [ push ] jobs: - build_1: + # build_1: - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest, windows-latest, macOS-13] - python-version: [ '3.8', '3.9', '3.10', '3.11', '3.12' ] + # runs-on: ${{ matrix.os }} + # strategy: + # matrix: + # os: [ubuntu-latest, windows-latest, macOS-13] + # python-version: [ '3.8', '3.9', '3.10', '3.11', '3.12' ] - env: - SAMNTDIR: ${{ github.workspace }}/../SAM - NREL_API_KEY: ${{ secrets.NREL_API_KEY }} - NREL_API_EMAIL: ${{ secrets.NREL_API_EMAIL }} + # env: + # SAMNTDIR: ${{ github.workspace }}/../SAM + # NREL_API_KEY: ${{ secrets.NREL_API_KEY }} + # NREL_API_EMAIL: ${{ secrets.NREL_API_EMAIL }} - name: ${{ matrix.os }} ${{ matrix.python-version }} - steps: - - uses: actions/checkout@v3 - - name: Setup conda - uses: s-weigand/setup-conda@v1 - with: - update-conda: true - python-version: ${{ matrix.python-version }} - conda-channels: anaconda, conda-forge - - run: conda --version - - run: which python + # name: ${{ matrix.os }} ${{ matrix.python-version }} + # steps: + # - uses: actions/checkout@v3 + # - name: Setup conda + # uses: s-weigand/setup-conda@v1 + # with: + # update-conda: true + # python-version: ${{ matrix.python-version }} + # conda-channels: anaconda, conda-forge + # - run: conda --version + # - run: which python - - name: Checkout Repo - uses: actions/checkout@v3 + # - name: Checkout Repo + # uses: actions/checkout@v3 - - name: Install NREL-PySAM - run: | - pip install -r requirements.txt - pip install -r tests/requirements.txt - conda install -c nrel nrel-pysam + # - name: Install NREL-PySAM + # run: | + # pip install -r requirements.txt + # pip install -r tests/requirements.txt + # conda install -c nrel nrel-pysam - - uses: actions/checkout@v3 - - name: Checkout SAM - run: | - cd .. - git config --global url.https://github.com/.insteadOf git://github.com/ - git clone https://github.com/NREL/SAM.git + # - uses: actions/checkout@v3 + # - name: Checkout SAM + # run: | + # cd .. + # git config --global url.https://github.com/.insteadOf git://github.com/ + # git clone https://github.com/NREL/SAM.git - - name: Unit tests - run: | - pytest tests/test_pysam_all.py + # - name: Unit tests + # run: | + # pytest tests/test_pysam_all.py build_2: runs-on: ${{ matrix.os }} @@ -70,7 +70,7 @@ jobs: bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3 rm -rf ~/miniconda3/miniconda.sh ~/miniconda3/bin/conda init bash - source/Users/runner/.bash_profile + source /Users/runner/.bash_profile conda --version yes | conda create --name pysam_env python=${{ matrix.python-version }} conda activate pysam_env From 69a4c4ea994703252f049f73db538c18a205e294 Mon Sep 17 00:00:00 2001 From: Darice Date: Thu, 14 Mar 2024 16:50:46 -0600 Subject: [PATCH 14/22] update test_pkg.yml --- .github/workflows/test_pkg.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/test_pkg.yml b/.github/workflows/test_pkg.yml index 34a59851..9e0bc328 100644 --- a/.github/workflows/test_pkg.yml +++ b/.github/workflows/test_pkg.yml @@ -81,6 +81,7 @@ jobs: - name: Install NREL-PySAM run: | + source /Users/runner/.bash_profile conda activate pysam_env pip install -r requirements.txt pip install -r tests/requirements.txt @@ -95,4 +96,6 @@ jobs: - name: Unit tests run: | + source /Users/runner/.bash_profile + conda activate pysam_env pytest tests/test_pysam_all.py \ No newline at end of file From e247cd97e45d80ac340d2935bef7d51d7d35a562 Mon Sep 17 00:00:00 2001 From: Darice Date: Fri, 15 Mar 2024 10:30:13 -0600 Subject: [PATCH 15/22] fix mem leak in test_pyssc --- tests/test_pysam_all.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/tests/test_pysam_all.py b/tests/test_pysam_all.py index 7d1bbcd2..0fd9fc44 100644 --- a/tests/test_pysam_all.py +++ b/tests/test_pysam_all.py @@ -39,13 +39,15 @@ def test_adjustment_factors(): adj.sf_timeindex = [0] adj.export() -def test_pyssc(): +@pytest.mark.parametrize("execution_number", range(10)) +def test_pyssc(execution_number): var = ssc.var_create() ssc.var_set_value(var, 0) assert int(ssc.var_get_number(var)) == 0 test_dat = ssc.data_create() ssc.data_set_var(test_dat, b"test", var) - assert ssc.data_get_number(test_dat, b"test") == pytest.approx(0) + ssc.var_free(var) + ssc.data_free(test_dat) var = ssc.var_create() ssc.var_set_value(var, 'zero') @@ -53,6 +55,8 @@ def test_pyssc(): test_dat = ssc.data_create() ssc.data_set_var(test_dat, b"test", var) assert ssc.data_get_string(test_dat, b"test") == b"zero" + ssc.var_free(var) + ssc.data_free(test_dat) var = ssc.var_create() ssc.var_set_value(var, [0, 1]) @@ -60,6 +64,8 @@ def test_pyssc(): test_dat = ssc.data_create() ssc.data_set_var(test_dat, b"test", var) assert ssc.data_get_array(test_dat, b"test") == [0, 1] + ssc.var_free(var) + ssc.data_free(test_dat) var = ssc.var_create() ssc.var_set_value(var, [[0, 0], [1, 1]]) @@ -67,6 +73,8 @@ def test_pyssc(): test_dat = ssc.data_create() ssc.data_set_var(test_dat, b"test", var) assert ssc.data_get_matrix(test_dat, b"test") == [[0, 0], [1, 1]] + ssc.var_free(var) + ssc.data_free(test_dat) var = ssc.var_create() ssc.var_set_value(var, ["zero", "one"]) @@ -76,6 +84,8 @@ def test_pyssc(): ssc.data_set_var(test_dat, b"test", var) var0 = ssc.data_get_data_array(test_dat, b"test", [ssc.STRING, ssc.STRING]) assert var0 == [b"zero", b"one"] + ssc.var_free(var) + ssc.data_free(test_dat) var = ssc.var_create() ssc.var_set_value(var, [["zero", "one"], ["zero", "one"]]) @@ -85,6 +95,8 @@ def test_pyssc(): ssc.data_set_var(test_dat, b"test", var) var0 = ssc.data_get_data_matrix(test_dat, b"test", [[ssc.STRING, ssc.STRING], [ssc.STRING, ssc.STRING]]) assert var0 == [[b'zero', b'one'], [b'zero', b'one']] + ssc.var_free(var) + ssc.data_free(test_dat) def test_functionality(): @@ -435,4 +447,4 @@ def test_run_all(): mod_name = "PySAM." + mod i = importlib.import_module(mod_name) m = assign_values(mod, i) - print(f"{mod} passed") + print(f"{mod} passed") \ No newline at end of file From 5d398db767bdfaf0f512336885b135a047b9f815 Mon Sep 17 00:00:00 2001 From: Darice Date: Fri, 15 Mar 2024 10:59:53 -0600 Subject: [PATCH 16/22] update yml for CI --- .github/workflows/test_pkg.yml | 101 ++++++++++++++++++--------------- build_unix.sh | 4 +- build_win.bat | 4 +- modules/Hybrid.c | 2 +- 4 files changed, 62 insertions(+), 49 deletions(-) diff --git a/.github/workflows/test_pkg.yml b/.github/workflows/test_pkg.yml index 9e0bc328..85c23f14 100644 --- a/.github/workflows/test_pkg.yml +++ b/.github/workflows/test_pkg.yml @@ -3,50 +3,55 @@ name: Test Package on: [ push ] jobs: - # build_1: - - # runs-on: ${{ matrix.os }} - # strategy: - # matrix: - # os: [ubuntu-latest, windows-latest, macOS-13] - # python-version: [ '3.8', '3.9', '3.10', '3.11', '3.12' ] - - # env: - # SAMNTDIR: ${{ github.workspace }}/../SAM - # NREL_API_KEY: ${{ secrets.NREL_API_KEY }} - # NREL_API_EMAIL: ${{ secrets.NREL_API_EMAIL }} - - # name: ${{ matrix.os }} ${{ matrix.python-version }} - # steps: - # - uses: actions/checkout@v3 - # - name: Setup conda - # uses: s-weigand/setup-conda@v1 - # with: - # update-conda: true - # python-version: ${{ matrix.python-version }} - # conda-channels: anaconda, conda-forge - # - run: conda --version - # - run: which python - - # - name: Checkout Repo - # uses: actions/checkout@v3 - - # - name: Install NREL-PySAM - # run: | - # pip install -r requirements.txt - # pip install -r tests/requirements.txt - # conda install -c nrel nrel-pysam - - # - uses: actions/checkout@v3 - # - name: Checkout SAM - # run: | - # cd .. - # git config --global url.https://github.com/.insteadOf git://github.com/ - # git clone https://github.com/NREL/SAM.git - - # - name: Unit tests - # run: | - # pytest tests/test_pysam_all.py + build_1: + + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macOS-latest] + python-version: [ '3.8', '3.9', '3.10', '3.11', '3.12' ] + + env: + SAMNTDIR: ${{ github.workspace }}/../SAM + NREL_API_KEY: ${{ secrets.NREL_API_KEY }} + NREL_API_EMAIL: ${{ secrets.NREL_API_EMAIL }} + + name: ${{ matrix.os }} ${{ matrix.python-version }} + steps: + - uses: actions/checkout@v3 + - name: Setup conda + uses: s-weigand/setup-conda@v1 + with: + update-conda: true + python-version: ${{ matrix.python-version }} + conda-channels: anaconda, conda-forge + - run: conda --version + - run: which python + + - name: Checkout Repo + uses: actions/checkout@v3 + + - name: Get PySAM Version + run: | + VER=$(python -c "from files.version import __version__; print(__version__)") + echo "VERSION=$VER" >> $GITHUB_ENV + + - name: Install NREL-PySAM + run: | + pip install -r requirements.txt + pip install -r tests/requirements.txt + conda install -c nrel nrel-pysam==${{ env.VERSION }} + + - uses: actions/checkout@v3 + - name: Checkout SAM + run: | + cd .. + git config --global url.https://github.com/.insteadOf git://github.com/ + git clone https://github.com/NREL/SAM.git + + - name: Unit tests + run: | + pytest tests/test_pysam_all.py build_2: runs-on: ${{ matrix.os }} @@ -63,7 +68,6 @@ jobs: name: ${{ matrix.os }} ${{ matrix.python-version }} steps: - name: Install conda Mac arm64 - if: ${{ matrix.os }} == 'macos-14' run: | mkdir -p ~/miniconda3 curl https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh -o ~/miniconda3/miniconda.sh @@ -79,13 +83,18 @@ jobs: - name: Checkout Repo uses: actions/checkout@v3 + - name: Get PySAM Version + run: | + VER=$(python -c "from files.version import __version__; print(__version__)") + echo "VERSION=$VER" >> $GITHUB_ENV + - name: Install NREL-PySAM run: | source /Users/runner/.bash_profile conda activate pysam_env pip install -r requirements.txt pip install -r tests/requirements.txt - conda install -c nrel nrel-pysam + conda install -c nrel nrel-pysam==${{ env.VERSION }} - uses: actions/checkout@v3 - name: Checkout SAM diff --git a/build_unix.sh b/build_unix.sh index f7821290..89f4b34f 100755 --- a/build_unix.sh +++ b/build_unix.sh @@ -69,7 +69,9 @@ fi rename -s linux manylinux2014 $PYSAMDIR/dist/*-linux_* -twine upload $PYSAMDIR/dist/*.whl anaconda upload -u nrel $PYSAMDIR/dist/osx-64/*.tar.bz2 anaconda upload -u nrel $PYSAMDIR/dist/linux-64/*.tar.bz2 +# only upload to PyPi after Github Actions test of new package passes +# twine upload $PYSAMDIR/dist/*.whl + diff --git a/build_win.bat b/build_win.bat index 52ffbf91..5db666a1 100644 --- a/build_win.bat +++ b/build_win.bat @@ -28,8 +28,10 @@ FOR %%i IN (pysam_build_3.8 pysam_build_3.9 pysam_build_3.10 pysam_build_3.11, p ) python setup.py bdist_wheel ) -REM twine upload dist/*.whl REM %bash% build_conda.sh REM anaconda upload -u nrel dist/*.tar.bz2 +REM only upload to PyPi after Github Actions test of new package passes +REM twine upload dist/*.whl + REM rmdir %SSCDIR%\..\build_pysam /s diff --git a/modules/Hybrid.c b/modules/Hybrid.c index 65f6636d..1680f0eb 100644 --- a/modules/Hybrid.c +++ b/modules/Hybrid.c @@ -91,7 +91,7 @@ Common_set_input(VarGroupObject *self, PyObject *value, void *closure) static PyGetSetDef Common_getset[] = { {"input", (getter)Common_get_input,(setter)Common_set_input, - PyDoc_STR("*dict*: input_table for multiple technologies and one financial market\n\n**Info:**\npvsamv1,pvwattsv8,windpower,generic_system,battery,fuelcell,hybrid\n\n**Required:**\nTrue"), + PyDoc_STR("*dict*: input_table for multiple technologies and one financial market\n\n**Required:**\nTrue"), NULL}, {NULL} /* Sentinel */ }; From 51d97cc05f59f780f09adc18c661734f7cfa1f21 Mon Sep 17 00:00:00 2001 From: Darice Date: Fri, 15 Mar 2024 13:16:33 -0600 Subject: [PATCH 17/22] update build scripts --- build_manylinux.sh | 2 +- build_unix.sh | 15 +++------------ 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/build_manylinux.sh b/build_manylinux.sh index b6433250..b752e645 100755 --- a/build_manylinux.sh +++ b/build_manylinux.sh @@ -11,7 +11,7 @@ cd /io/build_linux_ssc rm -rf * cmake ${SSCDIR} -DCMAKE_BUILD_TYPE=Release -DSAM_SKIP_TOOLS=1 -DSAMAPI_EXPORT=1 -DSAM_SKIP_TESTS=1 ../ssc || exit cmake --build . --target shared -j 6 || exit -cmake --build . --target ssc -j 1 || exit +cmake --build . --target ssc -j 6 || exit mkdir -p /io/build_linux_sam cd /io/build_linux_sam diff --git a/build_unix.sh b/build_unix.sh index 89f4b34f..65375062 100755 --- a/build_unix.sh +++ b/build_unix.sh @@ -49,25 +49,16 @@ if [ "$(python3 -c "import platform; print(platform.processor())")" = "arm" ] then docker pull quay.io/pypa/manylinux2014_aarch64 # docker run --rm -dit -v $(pwd):/io quay.io/pypa/manylinux2010_x86_64 /bin/bash - docker run --rm -v $(pwd):/io quay.io/pypa/manylinux2014_aarch64 /io/pysam/build_manylinux.sh - - rename -s linux manylinux2014 $PYSAMDIR/dist/*-linux_* - - docker pull continuumio/anaconda3 - docker run --rm --env PYSAMDIR=/io/pysam -v $(pwd):/io continuumio/anaconda3 /io/pysam/build_conda.sh + docker run --rm -v $(pwd):/io quay.io/pypa/manylinux2014_aarch64 /io/pysam/build_manylinux.sh || exit else docker pull quay.io/pypa/manylinux2014_x86_64 # docker run --rm -dit -v $(pwd):/io quay.io/pypa/manylinux2014_x86_64 /bin/bash docker run --rm -v $(pwd):/io quay.io/pypa/manylinux2014_x86_64 /io/pysam/build_manylinux.sh || exit - - rename -s linux manylinux2014 $PYSAMDIR/dist/*-linux_* - - docker pull continuumio/anaconda - docker run --rm --env PYSAMDIR=/io/pysam -v $(pwd):/io continuumio/anaconda /io/pysam/build_conda.sh fi rename -s linux manylinux2014 $PYSAMDIR/dist/*-linux_* - +docker pull continuumio/anaconda3 +docker run --rm --env PYSAMDIR=/io/pysam -v $(pwd):/io continuumio/anaconda /io/pysam/build_conda.sh anaconda upload -u nrel $PYSAMDIR/dist/osx-64/*.tar.bz2 anaconda upload -u nrel $PYSAMDIR/dist/linux-64/*.tar.bz2 From d7b978f8474f386f7d35f49d9d5a774b321ba546 Mon Sep 17 00:00:00 2001 From: Darice Date: Fri, 15 Mar 2024 13:34:55 -0600 Subject: [PATCH 18/22] update test_pkg.yml --- .github/workflows/test_pkg.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test_pkg.yml b/.github/workflows/test_pkg.yml index 85c23f14..0666c4cb 100644 --- a/.github/workflows/test_pkg.yml +++ b/.github/workflows/test_pkg.yml @@ -31,11 +31,18 @@ jobs: - name: Checkout Repo uses: actions/checkout@v3 - - name: Get PySAM Version + - name: Get PySAM Version Unix + if: ${{ matrix.os }} != 'windows-latest' run: | VER=$(python -c "from files.version import __version__; print(__version__)") echo "VERSION=$VER" >> $GITHUB_ENV + - name: Get PySAM Version Windows + if: ${{ matrix.os }} == 'windows-latest' + run: | + $VER=$(python -c "from files.version import __version__; print(__version__)") + echo "VERSION=$VER" >> $env:GITHUB_ENV + - name: Install NREL-PySAM run: | pip install -r requirements.txt From e6a303255d758a88d3ab80aef4e332ccbc4cec82 Mon Sep 17 00:00:00 2001 From: Darice Date: Fri, 15 Mar 2024 13:36:59 -0600 Subject: [PATCH 19/22] update test_pkg.yml --- .github/workflows/test_pkg.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_pkg.yml b/.github/workflows/test_pkg.yml index 0666c4cb..0a4048a8 100644 --- a/.github/workflows/test_pkg.yml +++ b/.github/workflows/test_pkg.yml @@ -32,13 +32,13 @@ jobs: uses: actions/checkout@v3 - name: Get PySAM Version Unix - if: ${{ matrix.os }} != 'windows-latest' + if: ${{ matrix.os != 'windows-latest' }} run: | VER=$(python -c "from files.version import __version__; print(__version__)") echo "VERSION=$VER" >> $GITHUB_ENV - name: Get PySAM Version Windows - if: ${{ matrix.os }} == 'windows-latest' + if: ${{ matrix.os == 'windows-latest'}} run: | $VER=$(python -c "from files.version import __version__; print(__version__)") echo "VERSION=$VER" >> $env:GITHUB_ENV From cec0fe31293507695110947fa8cdbe6c36099f70 Mon Sep 17 00:00:00 2001 From: Darice Date: Fri, 15 Mar 2024 13:48:31 -0600 Subject: [PATCH 20/22] update test_pkg.yml --- .github/workflows/test_pkg.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test_pkg.yml b/.github/workflows/test_pkg.yml index 0a4048a8..749261a8 100644 --- a/.github/workflows/test_pkg.yml +++ b/.github/workflows/test_pkg.yml @@ -90,15 +90,12 @@ jobs: - name: Checkout Repo uses: actions/checkout@v3 - - name: Get PySAM Version - run: | - VER=$(python -c "from files.version import __version__; print(__version__)") - echo "VERSION=$VER" >> $GITHUB_ENV - - name: Install NREL-PySAM run: | source /Users/runner/.bash_profile conda activate pysam_env + VER=$(python -c "from files.version import __version__; print(__version__)") + echo "VERSION=$VER" >> $GITHUB_ENV pip install -r requirements.txt pip install -r tests/requirements.txt conda install -c nrel nrel-pysam==${{ env.VERSION }} From 812852e675a0467c49d09f5f73550a3ef0ae8bbe Mon Sep 17 00:00:00 2001 From: Darice Date: Fri, 15 Mar 2024 13:50:17 -0600 Subject: [PATCH 21/22] update test_pkg.yml --- .github/workflows/test_pkg.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/test_pkg.yml b/.github/workflows/test_pkg.yml index 749261a8..aaec4695 100644 --- a/.github/workflows/test_pkg.yml +++ b/.github/workflows/test_pkg.yml @@ -95,10 +95,9 @@ jobs: source /Users/runner/.bash_profile conda activate pysam_env VER=$(python -c "from files.version import __version__; print(__version__)") - echo "VERSION=$VER" >> $GITHUB_ENV pip install -r requirements.txt pip install -r tests/requirements.txt - conda install -c nrel nrel-pysam==${{ env.VERSION }} + conda install -c nrel nrel-pysam==VER - uses: actions/checkout@v3 - name: Checkout SAM From 5bf911eba3fc0f7c1219e04264963f29901ddf1b Mon Sep 17 00:00:00 2001 From: Darice Date: Fri, 15 Mar 2024 13:51:55 -0600 Subject: [PATCH 22/22] update test_pkg.yml --- .github/workflows/test_pkg.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test_pkg.yml b/.github/workflows/test_pkg.yml index aaec4695..c61cf8a4 100644 --- a/.github/workflows/test_pkg.yml +++ b/.github/workflows/test_pkg.yml @@ -95,9 +95,10 @@ jobs: source /Users/runner/.bash_profile conda activate pysam_env VER=$(python -c "from files.version import __version__; print(__version__)") + echo $VER pip install -r requirements.txt pip install -r tests/requirements.txt - conda install -c nrel nrel-pysam==VER + conda install -c nrel nrel-pysam==$VER - uses: actions/checkout@v3 - name: Checkout SAM