-
Notifications
You must be signed in to change notification settings - Fork 21
Preliminary Quayside Tow-Out & Assembly Modules #15
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
Conversation
…production with multiple assembly lines.
…ssembly. Expanded test structure for new modules.
…needed for towing/stabilization operations.
def total_phase_time(self): | ||
"""Returns total phase time in hours.""" | ||
|
||
_design = self.config.get("monopile_design", {}) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is this getting monopile_design?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oops that's a mistake. I probably copied it over from that module and read monopile as mooring. Will change.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Resolved.
|
||
|
||
class TurbineAssemblyLine(Agent): | ||
"""Turbine Assembly Line Class.""" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So, I think that the turbine assembly lines can run in parallel if called by project manager? Is this correct?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can configure multiple turbine assembly lines in the module and they will run in parallel.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Or maybe I'm not understanding the question?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
no, that was the question. thanks!
|
||
mult = kwargs.get("cost_multiplier", 1.0) | ||
vessels = kwargs.get("num_vessels", 1) | ||
return (self.day_rate / 24) * vessels * hours * mult |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here, is self.day_rate the aggregated day rate of all the vessels in teh group?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This attribute is the vessel day rate for one vessel but there are specialized methods that will return a "total" day rate for the group dependent on the number of vessels needed for each operation.
""" | ||
|
||
try: | ||
storage = self.config["port"]["sub_storage"] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
what is sub_storage? max number (or mass, volume?) of substructures that can be stored at the port
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Number of substructures that can be stored at port.
This starts to push the original boundaries of ORBIT (no supply chain modeling) but from talking with Aaron and Luisa (and even the conversation with the bench marking group this morning), it sounds like this is an important consideration for floating substructures.
I designed the module in a way that this can be easily ignored by setting 'takt_time' to 0 and leaving 'sub_storage' to it's default of infinity. In this situation, all substructures will be "manufactured" at time 0 and the assembly won't constrain the installations at all.
""" | ||
|
||
try: | ||
storage = self.config["port"]["assembly_storage"] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same as above, what is assembly_storage?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Number of completed assemblies (substructure + turbine) that can be stored at port.
I'll put some additional documentation on these inputs.
"""Turbine Assembly Line Class.""" | ||
|
||
def __init__(self, feed, target, turbine, num): | ||
""" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We don't need to do this now, but we could think about adding an argument (and code structure) for # of turbines per substructure. there are some concept designs with 2 tubines on 1 platform.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm good idea - I'll look at adding this in.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See #21
""" | ||
|
||
towing_time = distance / towing_speed | ||
transit_time = distance / 20 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is 20 a hardcoded vessel transit speed? why is transit time different than towing time - return to port?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh good catch - I meant to have this be the vessel speed.
From talking with Aaron, it seemed that the towing speed is significantly slower than what the vessels can travel at unburdened. I also got the impression the towing speed is more dependent on the substructure (draft, Cd) than the specific vessels which is why I added the input for 'towing_speed'.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good overall. Of course we'll need to review all of the vessel and installation parameters, but good placeholders for the time being.
Closing and merging into separate branch for floating branch, "feature/floating-modules". All comments in this PR have been resolved. |
Includes two new installation modules:
MooredSubInstallation
andGravityBasedInstallation
.I'll send you an example jupyter notebook over teams.
Still needs additional tests, further refinement of processes (with industry support) and code cleanup.
This PR also includes a preliminary
MooringSystemDesign
from OffshoreBOS.