(changelog)=
- The existing documentation has been converted from a Sphinx-based setup to a Jupyter Book v1 build to create more easily modifiable documentation components and integrate better code examples directly into the documentation site.
- The
save_configfunction is now compatible with theProjectManager.configobject, allowing for direct saving without user modification. - Fixes a bug in
CustomArraySystemDesign.create_project_csv()where the output file location does not adjust to the user'sfolderinput.
- Implements
create_layout_dffor theCustomArraySystemDesignmodel to ensure compatibility with workflows relying on the layout generation tools.
- Allow for a Pandas DataFrame to be passed directly to the
CustomArraySystemDesign.layout_dataconfiguration input. - Move the matplotlib import from the import section of
/ORBIT/phases/design/array_system_design.pyto theCustomArraySystemDesign.plot_array_systemfor missing module error handling. - Adds a general layout
DataFramecreation method asArraySystemDesign.create_layout_df()that is called by thesave_layoutmethod to maintain backwards compatibility, but opens up the ability gather the layout without saving it to a file. - Updated default
soft_capexfactors. PR #201construction_insurance_factorupdated from 0.115 to 0.0207 based on industry benchmarking, resulting in higher construction insurance costs.interest_during_constructionupdated from 4.4% to 6.5% based on financial assumptions from the 2025 Annual Technology Baseline (ATB), increasing construction financing costs.decommissioning_factorupdated from 0.175 to 0.2 based on industry benchmarking, leading to higher decommissioning costs than in previous versions.
- Updated default
project_capexvalues. PR #201site_auction_priceincreased from 100M to 105M USD to account for rent fees before operation.site_assessment_cost,construction_plan_cost, andinstallation_plan_costincreased from 50M, 1M, and 0.25M USD to 200M, 25M, and 25M USD, respectively.- Total
project_capexexcludingsite_auction_pricenow sums to 250M USD, aligning with DevEx recommendations based on industry benchmarking. - These updates lead to higher default total project costs than in previous versions.
- Included onshore substation costs in BOS CapEx and project breakdown. PR #201
- The
ElectricalDesignmodule previously calculated onshore substation costs but did not include them incapex_breakdownorbos_capex. - These costs are now incorporated when
ElectricalDesignis used, resulting in higherbos_capex,soft_capex, andtotal_capexthan in prior versions.
- The
- Cable configuration file updates. PR #201
- Added a new dynamic cable configuration file for floating cases:
library/cables/XLPE_1200mm_220kV_dynamic.yaml. - Updated cost values for
library/cables/XLPE_630mm_66kV.yamlandlibrary/cables/XLPE_630mm_66kV_dynamic.yamlbased on industry benchmarking. - All cable cost updates are expressed in 2024 USD for consistency with other library configuration files.
- Added a new dynamic cable configuration file for floating cases:
- Support Python 3.14
- Adjusted the recent np.trapz fix to be compatible with numpy < 2.0
- Replaced the deprecated
numpy.trapzwithnumpy.trapezoid. - Deprecates Python 3.9 support in preparation for EOL and seamless benedict compatibility.
- Removed
wisdem_api.pybecause NLRWindSystems now uses orbit as a pip installed package. - Added Python 3.12 and 3.13 to the workflow files.
- Moved matplotlib as an optional dependency
- New cable
library/cables/XLPE_1200mm_220kV.yamlIs a 220kV cable that can carry ~400MW of HVAC power. - Fixed frozen python-benedict version
ParametricManagercan still use '.' as a keypath separator (no change to user inputs) and is compatible with latest python-benedict
- Updated various default costs to 2024 USD. PR #187
- Cost rates for different models were determined by benchmarking the costs through industry outreach, along with adjustments based on commodity prices, inflation, and labor indices.
- ORBIT assumes a procurement year of 2024 in the files:
defaults/common_costs.yamlrepresents all the design related costs.ORBIT/manager.pyincludes project related costslibrary/cables/*shows all the cables with updatedcost_per_kmlibrary/vessels/*shows all the vessels with updatedday_rate
- Added
defaults/costs_by_procurement_year.csvwhich provides the default costs for other procurement year, but in 2024 USD.
- Bug Fix: Characteristic Impedance calculation correction. Issue #186
- There were some documentation typos and a units error in the calculation, where mH (10^-3) was divided by nF (10^-9)
- Updated several tests with new values that correlate to the latest cable power capacity
- Updated NLRWindSystems API (
wisdem_api.py)- Match some variable names and inputs that have diverged over time.
- Caught turbine_capex double count in NLRWindSystems when using
total_capexfrom ORBIT. - Updated some tests.
- Enhanced
ProjectManager: PR #177- Improvements made to
soft_capexcalculations because previous versions used default$/kWvalues from the 2018 Cost of Wind Energy Review unless provided by the user. Those default values are out of date and do not scale with the size of the project which is not entirely accurate. soft_capexis now calculated as sum ofconstruction_insurance_capex,decommissioning_capex,commissioning_capex,procurement_contingency_capex,installation_contingency_capex,construction_financing_capex. NOTE: user can still specify the same$/kWvalues if they choose.- New factors were implemented to calculated updated project_parameters if the user does not specify any inputs.
- Improvements made to
- Enhanced
MooringSystemDesign:- Can specify catenary or semitaut mooring systems. (use
mooring_type) - Can specify drag embedment or suction pile anchors. (use
anchor_type) - Description: This class received some new options that the user can specify to customize the mooring system. By default, this design uses catenary mooring lines and suction pile anchors. The new semitaut mooring lines use interpolation to calculate the geometry and cost based on (Cooperman et al. 2022, https://www.nlr.gov/docs/fy22osti/82341.pdf).
- See
5. Example Floating Projectfor more details.
- Can specify catenary or semitaut mooring systems. (use
- New
ElectricalDesign:-
Now has HVDC or HVAC transmission capabilities.
-
New tests created
test_electrical_export.py -
Description: This class combines the elements of
ExportSystemDesignand theOffshoreSubstationDesignmodules. Its purpose is to represent the entire export system more accurately by linking the type of cable (AC versus DC) and substation’s components (i.e. transformers versus converters). Most export and substation component costs were updated to include a per-unit cost rather than a per-MW cost rate and they can be added to the project config file too. Otherwise, those per-unit costs use default and were determined with the help of industry experts.- This module’s components’ cost scales with number of cables and substations rather than plant capacity.
- The offshore substation cost is calculated based on the cable type and number of cables, rather than scaling function based on plant capacity.
- The mass of an HVDC and HVAC substation are assumed to be the same. Therefore, the substructure mass and cost functions did not change.
- An experimental onshore cost function was also added to account for the duplicated interconnection components. Costs will vary depending on the cable type.
-
See new example
Example - Using HVDC or HVACfor more details.
-
- Enhanced
FloatingOffshoreSubStation:- Fixed the output substructure type from Monopile to Floating. (use
oss_substructure_type) - Removes any pile or fixed-bottom substructure geometry.
- See
Example 5. Example Floating Projectfor more details.
- Fixed the output substructure type from Monopile to Floating. (use
- Updated
MoredSubInstallation:- Uses an AHTS vessel which must be added to project config file.
- See
example/example_floating_project.yaml(useahts_vessel)
- New
22MW_generic.yamlturbine.- Based on the IEA - 22 MW reference wind turbine.
- See
library/turbinesfor more details.
- New cables:
- Varying HVDC ratings
- Varying HVDC and HVAC "dynamic" cables for floating projects.
- See
library/cablesfor all the cables and more details.
defaults/process_times.yamldrag_embedment_install_time`increased from 5 to 12 hours.
phases/install/quayside_assembly_tow/common.py:- lift and attach tower section time changed from 12 to 4 hours per section,
- lift and attach nacelle time changed from 7 to 12 hours.
library/cables/XLPE_500mm_132kV.yaml:cost_per_kmchanged from $200k to $500k.
library/vessels/example_cable_lay_vessel.yaml:min_draftchanged from 4.8m to 8.5m,overall_lengthchanged from 99m to 171m,max_masschanged 4000t to 13000t,
library/vessels/example_towing_vessel.yaml:max_waveheightchanged from 2.5m to 3.0m,max_windspeedchanged 20m to 15m,transit_speedchanged 6km/h to 14 km/h,day_ratechanged $30k to $35k
- All design classes have new tests to track total cost to flag any changes that may impact final project cost.
- Relocated all the get design costs in each design class to
common_cost.yaml. - Fully adopted
pyproject.tomlfor managing all possible tool settings, and removed the tool-specific files from the top-level of the directory. - Replaced flake8 and pylint with ruff to adopt a cleaner, faster, and easier
to manage linting and autoformatting workflow. As a result, some of the more
onerous checks have been removed to discourage the use of
git commit --no-verify. This change has also added in other rules that discourage Python anti-patterns and encourage modern Python usage. - NOTE: Users may wish to run
git config blame.ignoreRevsFile .git-blame-ignore-revsto ignore the reformatting edits in their blame.
- Added explicit methods for adding custom design or install phases to
ProjectManager. - Added WOMBAT compatibility for custom array system files.
- Fixed bug in custom array cable system design that breaks for plants with more than two substations.
- Added
SupplyChainManager. - Added
JacketInstallationmodule. - Added option to use dynamic supply chain in
MonopileInstallationmodule.
- Expanded tutorial and examples.
- Added templates for design and install modules.
- Added ports to library pathing.
- Misc. bugfixes.
- Added initial floating offshore substation installation module.
- Added option to specific floating cable depth in cable design modules.
- Bugfix in
project.total_capex.
- Added ability to directly prescribe weather downtime through the
availabilitykeyword - Added support for generating linear models using
ParametricManager
- Added
ProjectManager.capex_breakdown.
- Default behavior of
ParametricManagerhas been changed. Input parameters are now zipped together and ran as a discrete set of configs. To use the past functionality (finding the product of all input parameters), use the optionproduct=True - Bugfix: Added port costs to floating substructure installation modules.
- Revised docs for running the Example notebooks and added link to a tutorial about working with jupyter notebooks.
- New feature:
ParametricManagerfor running parametric studies. - Added procurement cost inputs and total cost methods to installation phases. Design phases are now only used to fill in the design and do not return a cost associated with the design.
- Refactored aggregation project level outputs in
ProjectManager. - Revised Net Present Value calculation to utilize new project outputs.
- Added
load_configandsave_configfunctions. - Moved
ORBIT.librarytoOBRIT.core.library. - Centralized model defaults to
ORBIT.core.defaults. ProjectManager.project_actionsrenamed toProjectManager.actionsProjectManager.project_logsrenamed toProjectManager.logsProjectManager.run_project()renamed toProjectManager.run()- Moved documentation hosting to gh-pages.
- Process time kwargs should now be passed through
ProjectManagerin a dictionary namedprocessesin the config. - Revised
prep_for_site_operationsand related processes to allow for dynamically positioned vessels. - Updated NLRWindSystems API to include floating functionality.
- Initial release of floating substructure functionality in ORBIT.
- New design modules:
MooringSystemDesign,SparDesignandSemiSubmersibleDesign. - New installation modules:
MooringSystemInstallationandMooredSubInstallation - Cable design and installation modules modified to calculate catenary lengths of suspended cable at depths greater than 60m.
- New feature: Cash flow and net present value calculation within
ProjectManager. - Revised
CustomArraySystemDesignmodule. - Revised assumptions in
MonopileDesignmodule to bring results in line with industry numbers.
- New feature: Phase dependencies in
ProjectManager. - New feature: Windspeed constraints at multiple heights, including automatic interpolation/extrapolation of configured windspeed profiles.
- Added option to define
mobilization_daysandmobilization_multin aVesselconfiguration file. - Added option for pre-installation trenching operations to
ArrayCableInstallationandExportCableInstallation. - Revised
OffshoreSubstationDesignto scale the size of the substations with the user-configured number of substations. - Bugfix in the returned argument order of
ProjectManager.run_install_phasewhere the cost of a prior phase would be incorrectly applied as the elapsed time.
- Modified installation to require version of marmot-agents that has an internal copy of simpy.
- Added/expanded
detailed_outputsfor all modules. - Standardized naming of weight/mass terms to mass throughout the model.
- Cleanup in
ProjectManager.
- Vessel mobilization added to all vessels in all installation modules. Defaults to 7 days at 50% day-rate.
- Cable lay, bury and simulataneous lay/bury methods are not flagged as suspendable to avoid unrealistic project delays.
- Cost of onshore transmission construction added to
ExportCableInstallation. - Simplified
ArrayCableInstallation,ExportCableInstallationmodules. - Removed
pandasfrom the internals of the model, though it is still useful for tabulating the project logs. - Revised package structure. Functionally formerly in ORBIT.simulation or ORBIT.vessels has been moved to ORBIT.core.
InstallPhasecleaned up and slimmed down.Environmentand associated functionality has been replaced withmarmot.Environment.- Logging functionality revised. No longer uses the base python logging module.
Vesselnow inherits frommarmot.Agent.- Tasks that were in
ORBIT.vessels.taskshave been moved to their respective modules and restructured withmarmot.processandAgent.tasks. - Modules inputs cleaned up.
typeparameters are no longer required for monopile, transition piece or turbine component definitions. - Removed old/irrelevant tests.
- Added 'per kW' properties to
ProjectManagerCAPEX results.
- Added configuration to
ProjectManagerthat allows exceptions to be caught within individual modules and allows the project as a whole to continue. - Fixed installation process when installing from GitHub.
- Added configuration for multiple tower sections in
TurbineInstallation. - Added configuration for seperate lay/burial in
ArrayCableInstallationandExportCableInstallation. - Overhauled test suite and associated library.
- Bugfix in
CableCarousel. - Expanded NLRWindSystems Fixed API.
- Initial release of fixed substructure NLRWindSystems API
- Material cost for monopiles and transition pieces added to
MonopileDesign - Updated
ProjectManagerto allow user to override defaultDesignPhaseresults - Moved config validation to
BasePhaseand added call toself.validate_configfor all current modules - Config validation logic reworked so dicts of optional values are not required
- Added method to resolve project capacity in
ProjectManager. A user can now inputplant.num_turbinesandturbine.turbine_ratingandplant.capacitywill be added to the config. - Added initial set of standardized inputs to
ProjectManager:self.installation_capexself.installation_timeself.project_daysself.bos_capexself.turbine_capexself.total_capex
- Updated README