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

Dynamic tensions on mooring lines #29

Merged
merged 18 commits into from
Sep 9, 2024
Merged

Dynamic tensions on mooring lines #29

merged 18 commits into from
Sep 9, 2024

Commits on Feb 5, 2024

  1. Configuration menu
    Copy the full SHA
    45d2827 View commit details
    Browse the repository at this point in the history

Commits on Feb 7, 2024

  1. New dymamic functions from Serag now working with Subsystem:

    - Edited new Line dynamic methods to streamline passing of arguments
      and to only load the new functions on demand.
    - Added Subsystem.getDynamicMatrices method - copied closely from the
      CompositeLine method. This allows the new methods to work with
      Subsystem (all other methods are already inherited from Line).
    - Added Subsystem.makeFromSystem method - adapted from CompositeLine
      initialization to allow similar functionality for Subsystem. Not tested.
    - Made Examples/dynamic.py script to test some things out simply.
    mattEhall committed Feb 7, 2024
    Configuration menu
    Copy the full SHA
    14fc51d View commit details
    Browse the repository at this point in the history

Commits on May 20, 2024

  1. Configuration menu
    Copy the full SHA
    374785f View commit details
    Browse the repository at this point in the history

Commits on May 22, 2024

  1. Configuration menu
    Copy the full SHA
    8126b99 View commit details
    Browse the repository at this point in the history
  2. Moved dynamic tension and compositeLine functions to existing files

    - functions from dynamic_tension_functions.py are now on helpers
    - Because the dynamic calculations depend on the number of nodes in the subsystem/line, I slightly modified functions lines2subsystem and makeGeneric to specify the number of segments to be used in addLine.
    - I have not used subsystem.makeFromSystem or getNodes yet
    lucas-carmo committed May 22, 2024
    Configuration menu
    Copy the full SHA
    663b66d View commit details
    Browse the repository at this point in the history

Commits on May 23, 2024

  1. Functions to get system dynamic matrices

    Applied the same idea of getSystemStiffnessA to lump the dynamic matrices (inertia, added mass, damping, and stiffness) in 3x3 matrices at the fairlead
    lucas-carmo committed May 23, 2024
    Configuration menu
    Copy the full SHA
    c2b2454 View commit details
    Browse the repository at this point in the history

Commits on May 24, 2024

  1. Fix double counting of an effect + deal with matrices w/ null rows/cols

    - In system.getSystemDynamicMatrices, the effect of other attached points (the loop on point2) is already lumped in point.getDynamicMatrices
    -  Replaced np.linalg.inv with np.linalg.pinv (which computes the pseudo-inverse of the matrix) because we can have some cases where rows and columns of the matrix are zero (e.g., when adopting Ca=0 in a given direction)
    - The procedure to lump the dynamic matrices in a point involves inverting the matrices twice. If the input matrix is not exactly symmetrical, this can greatly amplify the spurious asymmetry. For this reason, we make the matrices computed with the lumped mass symmetrical.
    - For some reason that I don't know yet, the procedure does not work if we use the whole matrix. We need to remove the rows and columns associated with the dofs of the node opposite to the node where we want to lump the matrices.
    lucas-carmo committed May 24, 2024
    Configuration menu
    Copy the full SHA
    dbacf6d View commit details
    Browse the repository at this point in the history

Commits on Jun 2, 2024

  1. Functions to lump matrices at line ends and body + code reorganization

    - Implemented getDynamicMatricesLumped method in the line class that lumps the added mass, inertia, damping, and stiffness matrices of a line at its extremities based on the matrices for each node (applied for a line modeled using a lumped mass model)
    - Method getDynamicMatrices in the body class similar to getStiffnessA, but for the dynamic matrices
    - Reorganized the code in point.getDynamicMatrices to use the new line.getDynamicMatricesLumped method
    - Changed some np.liang.inv for np.linalg.pinv. We need that for cases where the matrices are singular. For instance, the added mass matrix of the line is singular if the axial added mass coefficient is zero.
    
    WIP: There seems to be something wrong in line.getDynamicMatricesLumped if part of the line rests on the seabed, as the resulting stiffness matrix is not consistent with getStiffnessA. The agreement is much better when we totally remove those nodes, but they are still off. Need to figure out what is the correct way of dealing with that.
    lucas-carmo committed Jun 2, 2024
    Configuration menu
    Copy the full SHA
    4bddb15 View commit details
    Browse the repository at this point in the history

Commits on Jun 26, 2024

  1. RAFT needs tension amplitude at nodes + removed nodes on the seabed

    There is still something weird with the lumped mass approach regarding the nodes on the seabed. I'm still working on it, but for now we get the best results if we neglect those nodes when lumping the matrices at the extremities of the line.
    lucas-carmo committed Jun 26, 2024
    Configuration menu
    Copy the full SHA
    016b119 View commit details
    Browse the repository at this point in the history

Commits on Jul 2, 2024

  1. Configuration menu
    Copy the full SHA
    21de5af View commit details
    Browse the repository at this point in the history

Commits on Jul 11, 2024

  1. Bug fix to remove nodes on the sea bed

    The previous code to remove nodes on the sea bed wasn't working properly for subsystem
    lucas-carmo committed Jul 11, 2024
    Configuration menu
    Copy the full SHA
    c9ed16b View commit details
    Browse the repository at this point in the history
  2. Added nSegs in makeGeneric + initialize subsystem in system.initalize

    - Added number of segments (nSegs) in subsystem.makeGeneric to make sure that we are using the correct number of nodes (i.e., the one specified by the user) in the lumped mass approach
    - Initialize any subsystem that is within a system in system.initialize
    lucas-carmo committed Jul 11, 2024
    Configuration menu
    Copy the full SHA
    b286b7f View commit details
    Browse the repository at this point in the history

Commits on Jul 15, 2024

  1. Configuration menu
    Copy the full SHA
    26e1c0a View commit details
    Browse the repository at this point in the history

Commits on Jul 16, 2024

  1. Cleaned parts of the code + removed *args and **kwargs

    Removed *args and **kwargs to make the inputs more explicit
    lucas-carmo committed Jul 16, 2024
    Configuration menu
    Copy the full SHA
    7ee3fe4 View commit details
    Browse the repository at this point in the history

Commits on Jul 17, 2024

  1. Reformulation to compute dynamic matrices of lines separately

    Previously, each call of system.getSystemDynamicMatrices() (and other equivalent functions in the body and point classes) would recompute the dynamic matrices of the line (inertia, added mass, damping, and stiffness). That required the sea state and the motions of the line nodes at each call.
    
    Now, we need to precompute the dynamic matrices of each line using line.updateLumpedMass(). The advantages are:
    1. Fewer computations
    2. It is simpler to integrate the lumped mass approach in RAFT because now it's easier to account for motions of the fairlead
    
    Also, the only matrix that requires the sea state and motions of the line is the damping matrix. So this commit reformulates the system, body, and line usage of the lumped mass approach to be able to provide inertia, added mass, and stiffness matrices without knowledge of the sea state or motions of the line.  I will add some examples, but you just need to call system.updateSystemDynamicMatrices() and then system.getSystemDynamicMatrices()
    lucas-carmo committed Jul 17, 2024
    Configuration menu
    Copy the full SHA
    acae461 View commit details
    Browse the repository at this point in the history

Commits on Aug 2, 2024

  1. Changed amplitudes to be complex and have a factor of two

    - The wave amplitude is now 2*Sw*dw (it was missing the factor 2)
    - The tension amplitude is now a complex value which is important to get the correct phase for shared moorings
    lucas-carmo committed Aug 2, 2024
    Configuration menu
    Copy the full SHA
    e4e3386 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    75e6d39 View commit details
    Browse the repository at this point in the history
  3. Example to show how to use the lumped mass approach

    This example is a modified/simplified version of one of the tests we made. As this example is meant to show how to use this new functionality only, I didn't check the results of the example case thoroughly.
    lucas-carmo committed Aug 2, 2024
    Configuration menu
    Copy the full SHA
    27d8659 View commit details
    Browse the repository at this point in the history