-
Notifications
You must be signed in to change notification settings - Fork 5
Changes to FAModel base allow fairlead points, Jtube points, bridles/parallel mooring #24
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- Changed node to node attachmenst so that one node is attached_to the other, rather than both nodes being equal. This will make it easier for more than 2 nodes to be lumped together by being part of one higher-level node. - Removed a couple subordinate flags that are then unnecessary. - Removed some older commented out code. - Compatibility with rest of FAModel not yet confirmed...
- Added support for "join" method to connect two nodes in a mutual way. - Updated hierarchy of how nodes and edges can be grouped and connected. - Lots still to finish and get working.
-- fairlead objects now attach subordinately to platforms -- connector objects join to fairlead objects -- moorings automatically then connect to platform at the position of attached fairlead -- similar concept for Jtubes with cables - Jtubes attach subordinately to platforms - dynamic cables attach to Jtubes - overall cable object then automatically connects to platform at the position of the Jtubes -- Jtubes and fairleads are optional; if not provided in the platform definition it will not be used -- updated examples to work with this new methodology, added more examples showing this -- added more tests -- platform.setPosition now calls node.setPosition first, and updates the theta property - for platforms, theta = -phi (because phi follows +CW convention and theta follows +CCW convention - so if phi = pi/4, platform will rotate pi/4 rad in CW direction from the 0 degree orientation, and theta=-pi/4 - this is to maintain compass direction setup for users while mapping to cartesian coords/rotation matrices for nodes and in background processes -- updates to documentation, tests, and examples are a work in progress - will be provided in future pushes
Subcomponents can now include parallel strings of subcomponents among the subcomponents of an edge, including at the ends. This gives support for things like bridles or double chain sections. The assemble function supports this by accepting a nested list of items, where nesting indicates multiple parallel edges or sequences of edges and nodes.
-- started changing loadDesign helper functiosn to work with parallel mooring structures within a mooring line i.e. bridles etc -- read in subsections poirtions of mooring line configs and separate out to proper connectors and sections list of dd -- upload example of use of bridles/double chain section in ontologySample200m.yaml -- some hair-brained ideas in here that probably should be removed such as: - passing in a subcons list to mooring object on initialization. Original idea was to create the connectors and sections list, and a list of the subcons in the proper order at the same time on load in, since that information is easily available, to help with building out the subcomponent list and avoid extra logic requried to re-form that ordre from the connectors and sections list. - the issue with this is now when we make the contents of connector and sections list of dd into actual Connector and Section objects, we have no way to map to the subcons list so purpose is likely defeated here.. -- fixed a few random bugs in other parts of the code unrelated
- Several updates in famodel_base to now ensure parallel strings of subcomponents are always doubly nested [serial position along Edge, parallel strand number, then serial position along string] - Edge.getSubcomponent created to return the subcomponent based on this indexing.
-- updated helpers function for loading and project.loadDesign to load in subcomponents in series and parallel under the key subcomponents instead of connectors and sections lists -- updated mooring.py to collect subcomponents list from design dictionary and convert to sections and connectors objects -- updated mooring.py methods (mostly) to work with self.dd['subcomponents'] and use the edge.getSubcomponent method with i_sec and i_con to get lists of sections and connectors This is only loosely tested with basic test, likely not to work for more complex situations.
-- added some more needed things for loading -- still a few errors to work out, but getting closer
-- added new helper method for calculating midpoint of 2 points - calc_midpoint calculates midpoint of 2 points, useful for calculating where span starts from bridles -- fixed some bugs - updated to determine anchor end point from midpoint of end point(s) - if not a bridle, midpoint is just the actual point - fixed small bugs in famodel_base - fixed small bugs in helpers.getMoorings to add connectors around subsections as needed -- added bridle to shared example and tested - plotting does not currently work, need to fix base class or somewhere to update rA and rB of each section - this does not happen with node.setPosition because that only sets node position and one end of the attached section
-- fixed bug in famodel_base to ensure bridles at end B are connected in assemble function
-- add Node.calculate_r_rel method to determine r_rel of node to edge or other node that may be connected via joined
subcomponent/subordinate node --> takes into account r_rel of the subs
- helpful for determining end point of bridles
- attach method now calls this to determine r_rel of each point on an end when there's multiple points, then
calls helpers.calculate_midpoint function to determine the r_rel by averaging the r_rels. In moorings, this
updates the rB/rA to be the midpoint of the fairlead locations.
-- changed fairlead ontology definition to always have a r_rel, and then optionally have headings apply to that r_rel
-- small bug fix helpers function adjustMooring
- Copied some of example_sharedmoorings.py into project.py for quick testing.
- Moved the Subsystem addition to a MoorPy System's lineList into the
Mooring.createSubystem method to consolidate.
- Section class: added mpLine attribute and makeMoorPyLine method.
- Mooring class
- - createSubsystem: adapted to also create the MoorPy objects for
bridle/parallel situations, with no subsystem. Method can be
renamed at some point.
- - Mooring.parallels flags whether there are parallel subcomponents
in which case there is no subsystem.
- Project.createMoorPyArray: worked on adapting this to work with
bridle/parallel cases. Also streamlined a few for loops to not
index things as often. This part is very much in progress!
Mooring.positionSubcomponents now works, it seems, except for parallel portions still to do. Project.getMoorPyArray now gets through creating the mooring system, but getting error related to lineType entries being strings not numeric.
-- added tests for parallel sections (bridles etc) -- removed examples input folders, fixed directory -- bug fix loading EA for parallel sections, now forces to be floats -- working on bug fix for relocation of shared anchors when loading if span is slightly off (working to recalc span so anchor loc doesn't change since it's explicitly defined in ontology) -- cable bug fix make sure connection location is at depth relative to platform depth
- Fixed some bugs in both the above. - Added missing parallel node positioning in Mooring.positionSubcomponents. - Seeing errors because bridle connector nodes aren't connected by the time Project.getMoorPyArray is called.
Just cleaning up after myself. A MoorPy commit will fix the last bridle issue.
- Created Node.isJoined method to check if a node is joined to anything. - Changed Connector.makeMoorPyConnector to check if a node is joined, in which case the MP point will be fixed rather than free.
-- helpers bug fix: catch when a connector is not provided at the end of bridles
- now we check for this and add empty connector object if needed
-- tiny bug fix in famodel_base to prevent weird rounding
- apparently, when assigning values into an array if you use array[:len(array)] = vals, it rounds the vals to whole numbers.
Fixed this by adding >= to reassign value of whole array rather than just >
-- add tests for parallel sections (bridles, double chains, etc)
-- mooring.addMarineGrowth now works with updated dd (subcomponents instead of sections/connectors lists)
- does not currently work for parallel sections
-- arrayWatchCircle added warning that this does not currently work for parallel sections, WIP to add this capability
-- tiny change to anchor.py to use mooring.sections method instead of sections in mooring design dictionary
as this part of the design dictionary was removed
-- updated ontologies for examples
-- udpated tests
-- adjust how cable headings are set - now matches moorings, where cable subcomponent headings are absolute in compass headings -- add loads and safety_factors dictionary to Section objects - mooring loads are now stored in Section object dicts insetead of in mooring objects -- mooring.updateTensions() updated to reflect new location of loads -- updated mooring.addMarineGrowth() to properly work with new dd setup -- in Mooring.sections() allow option to input dictionary of subcomponents instead of using i_sec values, useful for cases like marine growth where new sections are added but the design dicitonary property of mooring needs to be the pristine version -- remove cable heading adjustment when updating platform position -- update platform.getWatchCircle to use & store Section loads/safety_factors -- project.loadDesign update how cable headings are loaded in to match moorings -- project.duplicate update to work with new mooring design dictionaries, fairleads, etc -- project.addPlatformMS update to work with new mooring design dicts, fairleads, etc -- project.arrayWatchCircle update to use & store Section loads/safety_factors -- project.unload update to unload fairleads and jtubes -- allow rJtube to be provided in cable description (this is how it was before, then was removed)
…adjust -- bug fix project.addCablesConnections for calculating cable headings to adjust to updated methods -- helpers head_adjust adjust to keep headings in compass headings -- connectors adjust cost function use of pointProps (bug fix) -- add images for readmes -- add some comments in cable.py
- add multiple cable designs for range of depths and FAModel will now determine suitable cable design options and interpolate for new depths more efficient load/sf storage for connectors§ions
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This pull request makes major changes to the FAModel base, allowing the following features:
Base changes