Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added Floating Platform Model and tests #128

Merged
merged 8 commits into from
Jul 18, 2023
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