Skip to content

Commit

Permalink
Merge pull request #128 from ckiefer14/feature/offshore-h2
Browse files Browse the repository at this point in the history
Added Floating Platform Model and tests
  • Loading branch information
jaredthomas68 authored Jul 18, 2023
2 parents d1b808c + 34d72b5 commit 58a2694
Show file tree
Hide file tree
Showing 6 changed files with 504 additions and 24 deletions.
4 changes: 2 additions & 2 deletions hopp/offshore/example_fixed_project.yaml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Modified orbit configuration file for a single platform to carry "X technology"
design_phases:
- FixedPlatformDesign # Appended Design Phase
- FixedPlatformDesign # Register Design Phase
install_phases:
FixedPlatformInstallation: 0 # Appended Install Phase
FixedPlatformInstallation: 0 # Register Install Phase
oss_install_vessel: example_heavy_lift_vessel
site:
depth: 22.5 # site depth [m]
Expand Down
14 changes: 14 additions & 0 deletions hopp/offshore/example_floating_project.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Modified orbit configuration file for a single platform to carry "X technology"
design_phases:
- FloatingPlatformDesign # Resgister Design Phase
install_phases:
FloatingPlatformInstallation: 0 # Register Install Phase
oss_install_vessel: example_heavy_lift_vessel
site:
depth: 500.5 # site depth [m]
distance: 124 # distance to port [km]
equipment:
tech_required_area: 300. # equipment area [m**2]
tech_combined_mass: 1000 # equipment mass [t]
topside_design_cost: 4500000 # topside design cost [USD]
installation_duration: 14 # time at sea [days]
37 changes: 23 additions & 14 deletions hopp/offshore/fixed_platform.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
- depth: (float): bathometry at the platform location (m)
- distance_to_port: (float): distance ships must travel from port to site location (km)
- distance: (float): distance ships must travel from port to site location (km)
Future arguments: (Not used at this time)
- construction year (int):
Expand Down Expand Up @@ -87,12 +87,12 @@ def run(self):

_platform = self.config.get('equipment',{})

self.mass = _platform.get('tech_combined_mass',999) # t
self.mass = _platform.get('tech_comnined_mass',999) # t
self.area = _platform.get('tech_required_area', 1000) # m**2

design_cost = _platform.get('topside_design_cost', 4.5e6) # USD
fab_cost = _platform.get('fabrication_cost_rate', 14500.) # USD/t
steel_cost = _platform.get('substructure_steel_cost', 3000) # USD/t
steel_cost = _platform.get('substructure_steel_rate', 3000) # USD/t

# Add individual calcs/functions in the run() method
total_cost, total_mass = calc_substructure_mass_and_cost(self.mass, self.area,
Expand Down Expand Up @@ -170,7 +170,7 @@ def setup_simulation(self, **kwargs):
_platform = self.config.get('equipment', {})
design_cost = _platform.get('topside_design_cost', 4.5e6) # USD
fab_cost = _platform.get('fabrication_cost_rate', 14500.) # USD/t
steel_cost = _platform.get('substructure_steel_cost', 3000) # USD/t
steel_cost = _platform.get('substructure_steel_rate', 3000) # USD/t

install_duration = _platform.get("install_duration", 14) # days

Expand All @@ -189,8 +189,7 @@ def setup_simulation(self, **kwargs):
self.depth, fab_cost, design_cost, steel_cost
)

total_mass = self.mass + substructure_mass # t

total_mass = substructure_mass # t
# Call the install_platform function
self.install_capex = install_platform(total_mass, self.area, self.distance, \
install_duration, self.install_vessel)
Expand All @@ -214,6 +213,14 @@ def detailed_output(self):
# Define individual calculations and functions to use outside or with ORBIT
def calc_substructure_mass_and_cost(mass, area, depth, fab_cost=14500., design_cost=4.5e6, sub_cost=3000, pile_cost=0):
'''
calc_substructure_mass_and_cost returns the total mass including substructure, topside and equipment. Also returns the cost of the substructure and topside
Inputs: mass | Mass of equipment on platform (tonnes)
area | Area needed for equipment (meter^2) (not necessary)
depth | Ocean depth at platform location (meters) (not necessary)
fab_cost_rate | Cost rate to fabricate topside (USD/tonne)
design_cost | Design cost to design structural components (USD) from ORBIT
sub_cost_rate | Steel cost rate (USD/tonne) from ORBIT'''
'''
Platform is substructure and topside combined
All funstions are based off NREL's ORBIT (oss_design)
default values are specified in ORBIT
Expand All @@ -226,7 +233,7 @@ def calc_substructure_mass_and_cost(mass, area, depth, fab_cost=14500., design_c
'''Topside Cost & Mass
Topside Mass is the required Mass the platform will hold
Topside Cost is a function of topside mass, fab cost and design cost'''
topside_cost = topside_mass *topside_fab_cost_rate +topside_design_cost
topside_cost = topside_mass*topside_fab_cost_rate + topside_design_cost

'''Substructure
Substructure Mass is a function of the topside mass
Expand All @@ -236,12 +243,12 @@ def calc_substructure_mass_and_cost(mass, area, depth, fab_cost=14500., design_c
substructure_cost_rate = sub_cost # USD/t
pile_cost_rate = pile_cost # USD/t

substructure_mass = 0.4 * topside_mass # t
substructure_pile_mass = 8 * substructure_mass**0.5574 # t
substructure_cost = (substructure_mass *substructure_cost_rate +
substructure_pile_mass *pile_cost_rate) # USD
substructure_mass = 0.4*topside_mass # t
substructure_pile_mass = 8*substructure_mass**0.5574 # t
substructure_cost = (substructure_mass*substructure_cost_rate +
substructure_pile_mass*pile_cost_rate) # USD

substructure_total_mass = substructure_mass +substructure_pile_mass # t
substructure_total_mass = substructure_mass + substructure_pile_mass # t

'''Total Platform capex = capex Topside + capex substructure'''

Expand Down Expand Up @@ -313,8 +320,10 @@ def calc_platform_opex(capex, opex_rate=0.011):
config_fname = load_config(os.path.join(config_path, os.pardir, "example_fixed_project.yaml"))


ProjectManager._design_phases.append(FixedPlatformDesign)
ProjectManager._install_phases.append(FixedPlatformInstallation)
#ProjectManager._design_phases.append(FixedPlatformDesign)
ProjectManager.register_design_phase(FixedPlatformDesign)
#ProjectManager._install_phases.append(FixedPlatformInstallation)
ProjectManager.register_install_phase(FixedPlatformInstallation)

platform = ProjectManager(config_fname)
platform.run()
Expand Down
Loading

0 comments on commit 58a2694

Please sign in to comment.