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

Linearization of ServoDyn Structural control elements #803

Merged
merged 44 commits into from Mar 18, 2022

Conversation

andrew-platt
Copy link
Collaborator

@andrew-platt andrew-platt commented Aug 6, 2021

Feature description
In PR #664, the structural controls within ServoDyn were updated. This PR brings full system linearization to the structural control elements (StC's) for blade (BeamDyn and ElastoDyn), nacelle, tower, or substructure (SubDyn or ElastoDyn).

Related issue, if one exists

Impacted areas of the software

  • ServoDyn
  • Glue code linearization

Additional supporting information
This project was funded through the ARPA-E funded ATLANTIS WEIS project in FY21.

Test results, if applicable
Results will be posted shortly.

Items to complete:

  • Add test case with linearization of an StC (substructure or tower mounted with mode frequency generation)
    • New baselines for this case

Does not run (seg faults) since there are old routines still that need updating.
- new order: Blade, nacelle, tower, substructure
- The order is very important in the linearization, so I reordered simply to keep it consistent everywhere.
- Update SrvD_JacobianPInput
   - still missing the dYdu user channels
   - also missing dXdu
- Update GetOP for dx_op matrix
- Updates to FAST_Lin.f90 so it now compiles and actually runs!!!!  Just produces rubbish...

There was some confusion on a prior commit about where the logmapping flag from FAST_Lin goes (doesn't go with the u% stuff, only for y% motion DCMs)
- this is necessary so I can set outputs for single StC during linearization (speeds up code)
- think this is working for BStC
- but u (unerturbed) was getting used to set the StC motion input perturbations :(
Increase rank of arrays so that blade number and StC instance are tracked.  This simplifies assembling of jacobians in glue code.
Also a few blank lines moved for easier git comparisons
fix a few typos in Linear_SrvD_InputSolve_du, and add some comments
-  Some states may not have been set to zero when unused (z-dof when Omni for example)
-  Tower Line2 was incorrectly linearized.  Changed to Linearize_Line2_to_Point from Linearize_Point_to_Point (this was causing NaNs in the A & C matrices in testing)
-  Incorrect indexing (Jac_Idx_BStC_y should have been Jac_Idx_BStC_u) in dUdu
-  Wrong tower mesh in the linearization.
@rafmudaf rafmudaf modified the milestones: v3.1.0, v3.2.0 Mar 2, 2022
@andrew-platt andrew-platt force-pushed the f/SrvD_linearization branch 2 times, most recently from 4f5baa8 to 76e93b4 Compare March 15, 2022 20:15
@andrew-platt
Copy link
Collaborator Author

Details of new regression tests:

StC_test_OC4Semi_Linear_Nac and StC_test_OC4Semi_Linear_Tow

These test cases check linearization with a simple nacelle or tower top based structural control in ServoDyn. The results of the two cases should be identical

Model description

OC4 semi-submersible with rigid structure, no contoller, yaw fixed, fixed rotation rate, only pitch and StC DOFs enabled.

StC locations

  • StC at the nacelle
    A simple StC is mounted at the nacelle on the yaw bearing (87.6 m above msl) with only the X DOF enabled.
  • StC at tower
    A simple StC is mounted at the tower top (87.6 m above msl) with only the X DOF enabled. The tower top is where the yaw bearing is located, which is the Z reference for the Nacelle.

Results

For these tests, the following results are expected from frequency analysis:

Mode NatFreq_[Hz] Damp_Ratio_[-]
1 0.050 0.01581

@andrew-platt andrew-platt marked this pull request as ready for review March 17, 2022 18:13
@andrew-platt andrew-platt removed the request for review from rafmudaf March 17, 2022 18:14
@andrew-platt andrew-platt changed the base branch from dev to main March 18, 2022 01:45
@andrew-platt andrew-platt changed the base branch from main to dev March 18, 2022 01:45
@andrew-platt andrew-platt merged commit 636674d into OpenFAST:dev Mar 18, 2022

ED_Out_Start = Indx_y_ED_BladeRoot_Start(y_ED, y_FAST, size(y_ED%BladeRootMotion)) ! start of last blade root
ED_Out_Start = ED_Out_Start + y_ED%BladeRootMotion(size(y_ED%BladeRootMotion))%NNodes*18 ! N blade roots, 6 fields with 3 components per blade.
END FUNCTION Indx_y_ED_Nacelle_Start
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While this works, I'd recommend using one line instead: ED_Out_Start = Indx_y_ED_BladeRoot_Start(y_ED, y_FAST, MaxNBlades+1) (similar to how this is done in the function Indx_y_ED_Platform_Start). That way, if the number of fields on the Blade Root mesh change for linearization, you only have to change code in Indx_y_ED_BladeRoot_Start instead of this function, too.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good idea! I'll make that change for the MoorDyn linearization PR (hopefully this week).

@andrew-platt andrew-platt deleted the f/SrvD_linearization branch June 30, 2022 17:45
@rafmudaf rafmudaf mentioned this pull request Jul 8, 2022
10 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants