Mass and inertia matrix OpenFAST

Hi!

Is there a way to provide or include in OpenFAST (ElastoDyn):

  • the platform mass matrix referenced to a point other than the center of gravity?
  • the off diagonal terms of the inertial tensor respect to the center of gravity?

Thanks in advance,

Irene

1 Like

Hi @Irene.Berdugo,

Not without a source code change.

Best regards,

Hi @Irene.Berdugo,

As Jason comments, at the moment it’s not possible to do it in ElastoDyn. However, you could define the platform in SubDyn and define a mass matrix (including off-diagonal terms) at any arbitrary location. You can do this by taking advantage of “Joint additional concentrated masses” in SubDyn. And yes, SubDyn can be used for fixed-bottom and floating systems :slight_smile:

I hope that helps!

Roger

3 Likes

Thanks for correcting me, @Roger.Bergua!

Best regards,

Hi!

Thanks for your answers it did help me. Now I am trying to move the DeepCWind (Test 25) platform mass and inertia data from ElastoDyn to SubDyn. First, I have removed them from ElastoDyn’s module as follows:

elasto

The “Joint additional concentrated masses” section is referred at the Global Coordinate System. Hence platform data is translated, mass remains the same, inertias are modified using Steiner’s Theorem and off diagonal terms appear, obtaining the following mass matrix.

matrix

The computed data is later introduced in SubDyn’s module:

When running the simulation, it stops at the ratio Omega2(I) = AlphaR(I)/Beta(I) since Beta is 0. Am I missing something within this process?

Best regards,

Irene

Hi @Irene.Berdugo,

Note that CMJointID in SubDyn indicates the joint where you want to attach the lumped mass and inertia.

In your case (DeepCWind), the platform center of mass is located at -8.6588 m below the mean sea level.

You can simply create a joint in SubDyn at that location taking advantage of the section: structure joints. Let’s imagine that this new joint is the JointID = 2 in your case. So, your JointID = 2 will have coordinates: (0,0,-8.6588).

Now, you can simply move to the joint additional concentrated masses section and define CMJointID = 2. That means that you are going to define a lumped mass and inertia at that JointID = 2 (defined previously) and set up JMass = 3.85218E+06, JMXX = 2.56193E+09, JMYY = 2.56193E+09, JMZZ = 4.24265E+09. No parallel axis theorem needed :wink:

Regarding your current definition: note that the parameter MCGZ is in reality an eccentricity with regarding to the joint. In your definition, you use JointID = 1 to attach the lumped mass and inertia. But you are introducing a distance offset of -33355256.18 m from that joint. So your lumped mass is in reality located very far away in the space. I think the OpenFAST documentation should be updated to clearly state that MCGX, MCGY, MCGZ are eccentricities along the x, y, and z directions.

As a final comment, you need to link this JointID = 2 to something. For example, you could define a jointID = 1 at the tower base and jointID = 2 at the platform center of mass. Then you can define a member (e.g., beam or rigid link) between these 2 joints.

I hope that helps!

Roger

1 Like

Thanks @Roger.Bergua !!

You were right in all your comments, after following them and removing the member properties in order to avoid extra masses, I’m still not able to launch the computation. Here is the relevant data within the SubDyn file:

-------------------------- SIMULATION CONTROL ---------------------------------
3 IntMethod - Integration Method [1/2/3/4 = RK4/AB4/ABM4/AM2].
True SttcSolve - Solve dynamics about static equilibrium point
False GuyanLoadCorrection - Include extra moment from lever arm at interface and rotate FEM for floating.
-------------------- FEA and CRAIG-BAMPTON PARAMETERS---------------------------
1 FEMMod - FEM switch: element model in the FEM. [1= Euler-Bernoulli(E-B)]
1 NDiv - Number of sub-elements per member
False CBMod - [T/F] If True perform C-B reduction, else full FEM dofs will be retained.
1 JDampings - Damping Ratios for each retained mode
0 GuyanDampMod - Guyan damping {0=none}
---- STRUCTURE JOINTS: joints connect structure members (~Hydrodyn Input File)—
2 NJoints - Number of joints (-)
JointID JointXss JointYss JointZss JointType JointDirX JointDirY JointDirZ JointStiff
(-) (m) (m) (m) (-) (-) (-) (-) (Nm/rad)
1 0.00000 0.00000 10 1 0.0 0.0 0.0 0.0
2 0.00000 0.00000 -8.6588 1 0.0 0.0 0.0 0.0
------- INTERFACE JOINTS: ---------
1 NInterf - Number of interface joints locked to the Transition Piece (TP): remove all rigid motion dofs
IJointID ItfTDXss ItfTDYss ItfTDZss ItfRDXss ItfRDYss ItfRDZss ![Global Coordinate System]
(-) (flag) (flag) (flag) (flag) (flag) (flag)
2 1 1 1 1 1 1 (Min 1 is required, not sure about this section)
----------------------------------- MEMBERS --------------------------------------
1 NMembers - Number of frame members
MemberID MJointID1 MJointID2 MPropSetID1 MPropSetID2 MType COSMID
(-) (-) (-) (-) (-) (-) (-)
1 1 2 1 1 1
------------------ MEMBER X-SECTION PROPERTY ------------------------
1 NPropSets - Number of structurally unique x-sections
PropSetID YoungE ShearG MatDens XsecD XsecT
(-) (N/m2) (N/m2) (kg/m3) (m) (m)
1 0.00001 0.00001 0.0001 1 0.0001
------------------------ JOINT ADDITIONAL CONCENTRATED MASSES--------------------------
1 NCmass - Number of joints with concentrated masses; Global Coordinate System
CMJointID JMass JMXX JMYY JMZZ JMXY JMXZ JMYZ MCGX MCGY MCGZ
(-) (kg) (kgm^2) (kgm^2) (kgm^2) (kgm^2) (kgm^2) (kgm^2) (m) (m) (m)
2 3.85218E+06 2.56193E+09 2.56193E+09 4.24265E+09 0 0 0 0 0 0

A full FEM analysis is selected. The error comes from the Craig-Bampton subroutine, KMMDiag coefficient is too large. Please let me know if you detect any inconsistencies in the input parameters.

Thank you again for your help,

Irene

Hi @Irene.Berdugo,

Sometimes when using SubDyn for offshore floating systems, we have some numerical instabilities in the solver :frowning: This is something that we have to address.

I looked at the Test 25 that you are working on and I could make it work with some workarounds. The solution is not the most elegant, but it seems to work.

First, I had to include one correction iteration (NumCrctn = 1 in the OpenFAST input file [*.fst]). I also changed the time step to 0.01 seconds. So, you should change DT = 0.01 and DT_Out = 0.01 or use default in the *.fst file and also RdtnDT = 0.01 in the HydroDyn input file.

Finally, the worst change is that I had to disable the Yaw DOF: PtfmYDOF = False in the ElastoDyn input file. That’s less than ideal. I know…

Then I created one beam that behaves as rigid and the corresponding lumped mass and inertia for the platform in SubDyn. See the SubDyn input file below:

----------- SubDyn v1.01.x MultiMember Support Structure Input File ------------
Rigid floater modeled in SubDyn instead of ElastoDyn. R. Bergua: 20230127.
-------------------------- SIMULATION CONTROL ---------------------------------
False Echo - Echo input data to “.SD.ech” (flag)
“DEFAULT” SDdeltaT - Local Integration Step. If “default”, the glue-code integration step will be used.
3 IntMethod - Integration Method [1/2/3/4 = RK4/AB4/ABM4/AM2].
False SttcSolve - Solve dynamics about static equilibrium point.
True ExtraMoment - Include extra moment from lever arm at interface in interface reactions.
-------------------- FEA and CRAIG-BAMPTON PARAMETERS---------------------------
3 FEMMod - FEM switch: element model in the FEM. [1= Euler-Bernoulli(E-B); 2=Tapered E-B (unavailable); 3= 2-node Timoshenko; 4= 2-node tapered Timoshenko (unavailable)]
1 NDiv - Number of sub-elements per member
True CBMod - [T/F] If True perform C-B reduction, else full FEM dofs will be retained. If True, select Nmodes to retain in C-B reduced system.
0 Nmodes - Number of internal modes to retain (ignored if CBMod=False). If Nmodes=0 → Guyan Reduction.
1 JDampings - Damping Ratios for each retained mode (% of critical) If Nmodes>0, list Nmodes structural damping ratios for each retained mode (% of critical), or a single damping ratio to be applied to all retained modes. (last entered value will be used for all remaining modes).
0 GuyanDampMod - Guyan damping [0=none, 1=Rayleigh Damping, 2= user specified 6x6 matrix]
0, 0 RayleighDamp - Mass and stiffness proportional damping coefficients (Rayleigh Damping) [only if GuyanDampMod=1].
6 GuyanDampSize - Guyan damping matrix (6x6) [only if GuyanDampMod=2].
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
---- STRUCTURE JOINTS: joints connect structure members (~Hydrodyn Input File)—
2 NJoints - Number of joints (-)
JointID JointXss JointYss JointZss JointType JointDirX JointDirY JointDirZ JointStiff JointDamp Roger comments: JointType: (1): cantilever beam, (2) universal joint, (3) revolute joint, (4) spherical joint.
(-) (m) (m) (m) (-) (-) (-) (-) (Nm/rad) (Nm/rad.s)
1 0.00 0.00 10 1 0 0 0 0 0 # Connection between SubDyn and ElastoDyn. Tower base location.
2 0.00 0.00 -8.6588 1 0 0 0 0 0 # Platform center of mass.
------------------- BASE REACTION JOINTS: 1/0 for Locked/Free DOF @ each Reaction Node ---------------------
0 NReact - Number of Joints with reaction forces; be sure to remove all rigid motion DOFs of the structure (else det([K])=[0])
RJointID RctTDXss RctTDYss RctTDZss RctRDXss RctRDYss RctRDZss [Global Coordinate System]
(-) (flag) (flag) (flag) (flag) (flag) (flag)
------- INTERFACE JOINTS: 1/0 for Locked (to the TP)/Free DOF @each Interface Joint (only Locked-to-TP implemented thus far (=rigid TP)) ---------
1 NInterf - Number of interface joints locked to the Transition Piece (TP): be sure to remove all rigid motion dofs
IJointID ItfTDXss ItfTDYss ItfTDZss ItfRDXss ItfRDYss ItfRDZss [Global Coordinate System]
(-) (flag) (flag) (flag) (flag) (flag) (flag)
1 1 1 1 1 1 1
----------------------------------- MEMBERS --------------------------------------
1 NMembers - Number of frame members
MemberID MJointID1 MJointID2 MPropSetID1 MPropSetID2 MType COSMID Roger comments: MType: (1): beam, (2) pre-tensioned cable, (3) rigid connection.
(-) (-) (-) (-) (-) (-) (-)
1 1 2 10 10 1 # Beam between tower base (MJointID1 = 1) and the platform center of mass (MJointID = 2). Properties of the beam (MPropSetID1 = MPropSetID1 = 10), defined below.
------------------ MEMBER X-SECTION PROPERTY data 1/2 [isotropic material for now: use this table for circular-tubular elements] ------------------------
1 NPropSets - Number of structurally unique x-sections (i.e. how many groups of X-sectional properties are utilized throughout all of the members)
PropSetID YoungE ShearG MatDens XsecD XsecT
(-) (N/m2) (N/m2) (kg/m3) (m) (m)
10 210E9 8.077E10 1 1 0.1 # Dummy beam linking tower base and platform center of mass. This beam in reality behaves as rigid because we use SttcSolve = False and NModes = 0. Small mass associated to this dummy beam.
------------------ MEMBER X-SECTION PROPERTY data 2/2 [isotropic material for now: use this table if any section other than circular, however provide COSM(i,j) below] ------------------------
0 NXPropSets - Number of structurally unique non-circular x-sections (if 0 the following table is ignored)
PropSetID YoungE ShearG MatDens XsecA XsecAsx XsecAsy XsecJxx XsecJyy XsecJ0
(-) (N/m2) (N/m2) (kg/m3) (m2) (m2) (m2) (m4) (m4) (m4)
-------------------------- CABLE PROPERTIES -------------------------------------
0 NCablePropSets - Number of cable cable properties
PropSetID EA MatDens T0 CtrlChannel
(-) (N) (kg/m) (N) (-)
----------------------- RIGID LINK PROPERTIES ------------------------------------
0 NRigidPropSets - Number of rigid link properties
PropSetID MatDens
(-) (kg/m)
---------------------- MEMBER COSINE MATRICES COSM(i,j) ------------------------
0 NCOSMs - Number of unique cosine matrices (i.e., of unique member alignments including principal axis rotations); ignored if NXPropSets=0 or 9999 in any element below
COSMID COSM11 COSM12 COSM13 COSM21 COSM22 COSM23 COSM31 COSM32 COSM33
(-) (-) (-) (-) (-) (-) (-) (-) (-) (-)
------------------------ JOINT ADDITIONAL CONCENTRATED MASSES--------------------------
1 NCmass - Number of joints with concentrated masses; Global Coordinate System
CMJointID JMass JMXX JMYY JMZZ JMXY JMXZ JMYZ MCGX MCGY MCGZ
(-) (kg) (kgm^2) (kgm^2) (kgm^2) (kgm^2) (kgm^2) (kgm^2) (m) (m) (m)
2 3.85218E+06 2.56193E+09 2.56193E+09 4.24265E+09 0 0 0 0 0 0 # Platform mass and inertia.
---------------------------- OUTPUT: SUMMARY & OUTFILE ----------------------------
False SSSum - Output a Summary File (flag).It contains: matrices K,M and C-B reduced M_BB, M-BM, K_BB, K_MM(OMG^2), PHI_R, PHI_L. It can also contain COSMs if requested.
0 OutCBModes - Output Guyan and Craig-Bampton modes {0: No output, 1: JSON output}, (flag)
0 OutFEMModes - Output first 30 FEM modes {0: No output, 1: JSON output} (flag)
False OutCOSM - Output cosine matrices with the selected output member forces (flag)
False OutAll - [T/F] Output all members’ end forces. Roger: It also outputs the full system matrices.
2 OutSwtch - [1/2/3] Output requested channels to: 1=.SD.out; 2=.out (generated by FAST); 3=both files.
True TabDelim - Generate a tab-delimited output in the .SD.out file
1 OutDec - Decimation of output in the .SD.out file
“ES11.4e2” OutFmt - Output format for numerical results in the .SD.out file
“A11” OutSFmt - Output format for header strings in the .SD.out file
------------------------- MEMBER OUTPUT LIST ------------------------------------------
1 NMOutputs - Number of members whose forces/displacements/velocities/accelerations will be output (-) [Must be <= 9].
MemberID NOutCnt NodeCnt [NOutCnt=how many nodes to get output for [< 10]; NodeCnt are local ordinal numbers from the start of the member, and must be >=1 and <= NDiv+1] If NMOutputs=0 leave blank as well.
(-) (-) (-)
1 1 2 # Platform center of mass location
------------------------- SSOutList: The next line(s) contains a list of output parameters that will be output in .SD.out or .out. ------
“M1N1TDXss,M1N1TDYss,M1N1TDZss” - Platform center of mass displacements (in global coordinate system)
END of output channels and end of file. (the word “END” must appear in the first 3 columns of this line)

With this I was able to run the system with the platform in SubDyn. Below you can see the comparison between running with the platform in ElastoDyn and SubDyn:


I hope it helps!

Roger

1 Like

Hi @Jason.Jonkman,

I have a doubt from the above discussion, about the calculated value of JMxx.
JMass= 3.85218E+06 and
location is (0,0,-8.6588) in SS Coordinate system.

from my understanding, for a lumped mass, JMxx = JMass * (-8.6588)^2
So JMxx = 2.89E+08 kgm2 .

Could you please help me clarify this. In my calc. the JMxx is 10 times less from above discussed result.

Best regards,

Dear @Tom.Jose,

JMxx (and the other inertias) for the concentrated masses in SubDyn are specified in the SS coordinate system whose origin is the center of mass of the concentrated mass specified via MCGX/MCGY/MCGZ. SubDyn will automatically apply the parallel axis theorem to derive the mass matrix at the joint. See the online SubDyn documentation on readthedocs for more information: 4.2.5.3. Input Files — OpenFAST v3.5.3 documentation.

Best regards,

For reference, the user should also avoid introducing eccentricities to the lumped masses defined in SubDyn: SD: concentrated mass with excentricity cannot be fully accounted for in SubDyn · Issue #1710 · OpenFAST/openfast · GitHub

So, it is recommended that the user defines a lumped mass and inertia at a given joint in SubDyn.

In the example that I provided in this thread, I was already defining a new joint that I linked to the system by means of a rigid link. The mass and inertia were located at that location without making use of any additional eccentricity ( MCGX /MCGY /MCGZ in joint additional concentrated masses section).

I hope that helps!