# About the linear stiffness matrix of the anchor chain

Dear all,
I’m trying to use pymap and moorpy to calculate the anchor chain stiffness matrix of an IEA 15MW floating wind turbine, and I’m currently encountering several problems
1.moorpy has two options when calculating the matrix (lines_only=False/True, specifies whether to include hydrostatic stiffness components of bodies). There is no similar option in pymap. I want to know whether pymap considers hydrostatic stiffness.

1. In the input file of moorpy (IEA15MW.txt), I need to define the mass and volume of BODY as follows
----------------------- BODIES ---------------------------- ----------------------------
ID Attachment X0 Y0 Z0 r0 p0 y0 Mass CG* I* Volume CdA* Ca*
(#) (-) (m) (m) (m) (deg) (deg) (deg) (kg) (m) (kg-m^2) (m^3) (m^2) (-)
1 coupled 0.00 0.00 -0.75 0.00 0.00 0.00 1.7838E+07 0.00 0.00 20206 0.00 0.00
I would like to know if this quality refers to the quality of the platform, or does it include the tower and wind turbine? I think this volume is PtfmVol0 in Hydrodyn. Is this correct?

3.moorpy file is as follows：
import numpy as np
import matplotlib.pyplot as plt
import moorpy as mp
----- set up the mooring system and floating body -----
Create new MoorPy System and set its depth
ms = mp.System(file=‘IEA15MW.txt’)
----- run the model to demonstrate -----
ms.initialize() make sure everything’s connected
find equilibrium of just the mooring lines (the body is ‘coupled’ and will by default not be moved)
ms.solveEquilibrium() equilibrate
fig, ax = ms.plot() plot the system in original configuration
ms.bodyList.rM = np.array([0, 0, 100]) set a very high metacenter location to avoid pitch and roll [m]
ms.bodyList.AWP = 1e3 set a very large waterplane area to avoid heave [m^2]
ms.bodyList.f6Ext = np.array([0, 0, 0, 0, 0, 0]) apply an external force on the body [N]
ms.solveEquilibrium3(DOFtype=‘both’) equilibrate (specify ‘both’ to enable both free and coupled DOFs)
fig, ax = ms.plot(ax=ax, color=‘red’)
print(f"Body offset position is {ms.bodyList.r6}")
b=ms.getSystemStiffnessA(DOFtype=“both”, lines_only=True, rho=1025, g=9.81)
print(“stiffness matrix：”,b)
plt.show()
I think the waterplane area is the cross-sectional area of the four columns, but the comments say that setting a larger value is to avoid heaving. Can I calculate it according to the comments?

1. As shown in the figure is the stiffness matrix I calculated, but the calculation results show that many elements that should be 0 are not displayed as 0. Is there something wrong with me, or is the result like this?
Best regards,
Fu Yushun.

Hello Fu Yushun,

Thank you for the detailed question. I will try and answer each question the best I can.

1. I am unfamiliar with PyMAP. I will leave that question for someone else to answer.

2. That is the mass of only the platform, so it does not include the tower/turbine mass. The volume is the displacement of the platform, which is the same as PtfmVol0 in HydroDyn.

3. I’m not exactly sure what your question is, but you can calculate the AWP however you want. For the VolturnUS platform, if you wanted to be exact, you would set the waterplane area to the cross-sectional area of the four columns, but you are free to adjust the AWP variable however, like you did for the metacentric height.

4. These nonzero values in the 1,3 or 6,4 positions, for example, are likely attributed to the precision of how the calculations are done in Python, such as solving for equilibrium. I usually treat all of the green boxes as zeros anyways, given their magnitude relative to the yellow boxes. But in general, these errors are a result of how python computes the forces of a mooring line, how those forces are added to the body’s forces, and then how the model solves for equilibrium by slightly changing the position of the body to set sum(F)=0.

Hi Fu Yushun,
I can add one thought. Based on the first sentence in your question, it sounds like you just want to know the mooring system stiffness, so you can just worry about the mooring system properties. All body properties can be zero. Then you can call getSystemStiffness or getCoupledStiffness to get the 6x6 mooring stiffness matrix and the lines_only option won’t make a difference because the body properties are zero.

Dear Stein.

I am glad to receive your reply and apologize for something came up a few days ago and I am just now getting back to you.
I followed your advice to make the smaller value equal to about 0. Below is the graph where I changed the value of AWP, and we found that in position 3,3 this number is multiplicative to the AWP value, and there is still some difference when comparing it with pymap, and I guess this might be a problem that AWP is not clearly defined in MAP++!

Best regards, Dear Matthew,

I’m glad to see your reply and apologize for not getting back to you until now due to the events of the other day.
My main purpose is to compare the difference in the mooring stiffness matrix between the two methods, MAP++ and MoorDyn, where there is no information about the platform and the turbine, only the properties of the mooring lines. I take your advice that it is correct to set body all to 0 in moorpy.
But I would like to ask about getSystemStiffnessA, getSystemStiffness, getCoupledStiffness, getCoupledStiffnessA, I see from the results that getSystemStiffness is a little bit different from the rest of the three (in the places I marked in red), and I would like to ask about that. I would like to ask about the difference between these methods, I read their explanations and still don’t quite understand, can I compare the results directly with the results calculated by pymap?

Best regards,

Hi Fu Yushun,

I would follow Matt’s advice in the above comments. For the difference between those different methods to calculate the system stiffness matrix, have you read this section of the documentation? MoorPy Usage — MoorPy 0.9.1 documentation?
If this explanation is still confusing, let me know.

And again, I’m not experienced with PyMAP, so I would try to see if anyone else has experience with that program.

Stein