Merge remote-tracking branch 'origin/master'

This commit is contained in:
aGYZ 2025-12-30 14:46:17 +08:00
commit 268e2bc252
34 changed files with 1316 additions and 4 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

BIN
叶片制造装置/图3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 716 KiB

BIN
叶片制造装置/图4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

View File

@ -4,9 +4,9 @@
{"id":"a4eaccbbfadaaf17","type":"text","text":"# 目标:\n多体模块完善 线性化模块开发\n### 每周盘点一下它们\n\n\n关键结果多体动力学建模原理、建模方法、线性化原理掌握 9/10\n\n关键结果风机多体动力学文献调研情况完成 5.5/10\n关键结果目标工况测试、稳态工况对比 9/10","x":-76,"y":-803,"width":456,"height":457},
{"id":"d2c5e076ba6cf7d7","type":"text","text":"# 推进计划\n未来四周计划推进的重要事情\n\n文献调研启动\n\n建模重新推导\n\n\n","x":-600,"y":-306,"width":456,"height":347},
{"id":"82708a439812fdc7","type":"text","text":"# 1月已完成\n\n\n\n","x":-220,"y":134,"width":440,"height":560},
{"id":"505acb3e6b119076","type":"text","text":"# 12月已完成\n\nP1 明阳机型验证\n\n- 商业机型建模 done\n- 正常发电工况对故障工况支持 故障建模 done\n\t- 超速n4 普通超速 多体设fault结构体 \n\t- 卡桨、 控制设fault结构体\n\n- 故障工况检查 done\n- 批量计算更新配置文件,风文件,程序版本,再计算 done\n\nP1 稳态工况init_with_yaml检查 done\n\nP1 前端\n- 所有simulation功能测试及对接 done\n\nP1 演示ppt补充内容 再补充\n- 补充steady operational loads / steady parked loads 缺结果 done\n- 6个算例的跑通 找一个与bladed对比 缺结果 done \n- 内部控制器 pass\n- batch 并行计算 单个工况是否快 多工况并行 暂时不做\n\n\n","x":-700,"y":134,"width":440,"height":560},
{"id":"505acb3e6b119076","type":"text","text":"# 12月已完成\n\nP1 明阳机型验证\n\n- 商业机型建模 done\n- 正常发电工况对故障工况支持 故障建模 done\n\t- 超速n4 普通超速 多体设fault结构体 \n\t- 卡桨、 控制设fault结构体\n\n- 故障工况检查 done\n- 批量计算更新配置文件,风文件,程序版本,再计算 done\n\nP1 稳态工况init_with_yaml检查 done\n\nP1 前端\n- 所有simulation功能测试及对接 done\n\nP1 演示ppt补充内容 再补充\n- 补充steady operational loads / steady parked loads 缺结果 done\n- 6个算例的跑通 找一个与bladed对比 缺结果 done \n- 内部控制器 pass\n- batch 并行计算 单个工况是否快 多工况并行 暂时不做\n\nP1 前端\n- steady输出的名字改掉 done\n- 批量计算 改成并行计算 功能界面\n- 瞬态计算更新控制器 测试 done\n- 简单内控\n- 比较Bladed与正常发电工况速度总时间短一点 multicase done\n- 是否需要增加相对路径问题 done\n\nP1 dlc 71 done\n\n","x":-700,"y":134,"width":440,"height":560},
{"id":"30cb7486dc4e224c","type":"text","text":"# 2月已完成\n\n\n","x":260,"y":134,"width":440,"height":560},
{"id":"c18d25521d773705","type":"text","text":"# 计划\n这周要做的3~5件重要的事情这些事情能有效推进实现OKR。\n\nP1 必须做。P2 应该做\n\n\nP2 柔性部件 叶片、塔架变形算法 主线\n- 变形体动力学 简略看看ing\n- 柔性梁弯曲变形振动学习,主线 \n\t- 广义质量 刚度矩阵及含义\n\t\n- 梳理bladed动力学框架\n\t- 子结构文献阅读\n\t- 叶片模型建模 done\n- 共旋方法学习\n- DTU 变形量计算方法学习\n\n\nP1 线性化方法编写 ing\n\n- 开始编写扰动代码\n- 形成系统矩阵-输出矩阵\n\n\nP1 明阳机型验证\n\n- 商业机型模型验证 气动建模有问题\n\nP1 前端\n- steady输出的名字改掉 done\n- 批量计算 改成并行计算 功能界面\n- 瞬态计算更新控制器 测试 done\n- 简单内控\n- 比较Bladed与正常发电工况速度总时间短一点 multicase\n- 是否需要增加相对路径问题 done\n\n\nP2 气动、多体、控制、水动联调\n\nP1 专利\n- 做出solidworks模型写专利\n\nP2 bladed对比--稳态运行载荷,产出报告\n- 气动参与模块对比\n- 模态对比 两种描述方法不同bladed方向更多x y z deflection, x y z rotation不好对比\n- 气动对比 aerodynamic info 轴向切向诱导因子,根部,尖部差距较大\n\nP2 yaw 自由度再bug确认 已知原理了\n","x":-597,"y":-803,"width":453,"height":457},
{"id":"c18d25521d773705","type":"text","text":"# 计划\n这周要做的3~5件重要的事情这些事情能有效推进实现OKR。\n\nP1 必须做。P2 应该做\n\n\nP2 柔性部件 叶片、塔架变形算法 主线\n- 变形体动力学 简略看看ing\n- 柔性梁弯曲变形振动学习,主线 \n\t- 广义质量 刚度矩阵及含义\n\t\n- 梳理bladed动力学框架\n\t- 子结构文献阅读\n\t- 叶片模型建模 done\n- 共旋方法学习\n- DTU 变形量计算方法学习\n\n\nP1 线性化方法编写 ing\n\n- 开始编写扰动代码\n- 形成系统矩阵-输出矩阵\n\n\nP1 明阳机型验证\n\n- 商业机型模型验证 气动建模有问题\n\n\nP2 气动、多体、控制、水动联调\n\nP1 专利\n- 做出solidworks模型写专利\n\nP1 输出量更新到Bladed相同命名 done\nP1 服务器网络申请\nP1 报告更新到0.6版本\n\nP2 bladed对比--稳态运行载荷,产出报告\n- 气动参与模块对比\n- 模态对比 两种描述方法不同bladed方向更多x y z deflection, x y z rotation不好对比\n- 气动对比 aerodynamic info 轴向切向诱导因子,根部,尖部差距较大\n\nP2 yaw 自由度再bug确认 已知原理了\n","x":-597,"y":-803,"width":453,"height":457},
{"id":"86ab96a25a3bf82e","type":"text","text":" 湍流风+ 控制的联调bladed也算一个算例\n- 加水动的联调\n- 8月份底完成这两个\n- 9月份完成停机等工况测试\n- 10月份明阳实际机型测试","x":580,"y":-803,"width":480,"height":220},
{"id":"e355f33c92cf18ea","type":"text","text":"9月份定常计算对接前端\n非定常测试完也对接前端","x":580,"y":-500,"width":480,"height":100},
{"id":"859e6853b7f1b92b","type":"text","text":"年底考核:\n专利\n线性化模块","x":1200,"y":-803,"width":320,"height":110},

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -0,0 +1,84 @@
<mxfile host="65bd71144e">
<diagram id="2Qj2oTJsEnOTRDyZjBbP" name="第 1 页">
<mxGraphModel dx="725" dy="425" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" background="#ffffff" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="36" style="edgeStyle=none;html=0;exitX=0.5;exitY=0.5;exitDx=0;exitDy=25;exitPerimeter=0;labelBackgroundColor=none;labelBorderColor=none;strokeColor=#000000;strokeWidth=3;fontFamily=Times New Roman;fontSize=20;fontColor=#000000;" edge="1" parent="1" source="2" target="3">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="2" value="初始化开始" style="dashed=0;whitespace=wrap;shape=mxgraph.dfd.start;fontFamily=Times New Roman;fontSize=20;fontColor=#333333;labelBackgroundColor=none;labelBorderColor=none;fillColor=#f5f5f5;strokeColor=#000000;fontStyle=1;strokeWidth=3;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="229" y="60" width="132" height="60" as="geometry"/>
</mxCell>
<mxCell id="5" value="" style="edgeStyle=none;fontFamily=Times New Roman;fontSize=20;fontColor=#000000;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontStyle=1;strokeWidth=3;" edge="1" parent="1" source="3" target="4">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="3" value="ed_read_input" style="dashed=0;whitespace=wrap;fontFamily=Times New Roman;fontSize=20;labelBackgroundColor=none;labelBorderColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontColor=#333333;fontStyle=1;strokeWidth=3;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="190" y="187" width="210" height="50" as="geometry"/>
</mxCell>
<mxCell id="8" value="" style="edgeStyle=none;fontFamily=Times New Roman;fontSize=20;fontColor=#000000;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontStyle=1;strokeWidth=3;" edge="1" parent="1" source="4" target="7">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="19" value="" style="edgeStyle=none;fontFamily=Times New Roman;fontSize=20;fontColor=#000000;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontStyle=1;strokeWidth=3;" edge="1" parent="1" source="4" target="18">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="4" value="ed_set_parameters" style="whiteSpace=wrap;fillColor=#f5f5f5;dashed=0;fontFamily=Times New Roman;fontSize=20;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontColor=#333333;fontStyle=1;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="190" y="299" width="210" height="60" as="geometry"/>
</mxCell>
<mxCell id="11" value="" style="edgeStyle=none;fontFamily=Times New Roman;fontSize=20;fontColor=#000000;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontStyle=1;strokeWidth=3;" edge="1" parent="1" source="7" target="10">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="7" value="init_continuous_states" style="whiteSpace=wrap;fillColor=#f5f5f5;dashed=0;fontFamily=Times New Roman;fontSize=20;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontColor=#333333;fontStyle=1;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="190" y="416" width="210" height="60" as="geometry"/>
</mxCell>
<mxCell id="13" value="" style="edgeStyle=none;fontFamily=Times New Roman;fontSize=20;fontColor=#000000;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontStyle=1;strokeWidth=3;" edge="1" parent="1" source="10" target="12">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="21" value="" style="edgeStyle=none;fontFamily=Times New Roman;fontSize=20;fontColor=#000000;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontStyle=1;strokeWidth=3;" edge="1" parent="1" source="10" target="20">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="35" value="" style="edgeStyle=none;html=0;labelBackgroundColor=none;labelBorderColor=none;strokeColor=#000000;strokeWidth=3;fontFamily=Times New Roman;fontSize=20;fontColor=#000000;" edge="1" parent="1" source="10" target="12">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="10" value="init_misc_other_states" style="whiteSpace=wrap;fillColor=#f5f5f5;dashed=0;fontFamily=Times New Roman;fontSize=20;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontColor=#333333;fontStyle=1;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="190" y="534" width="210" height="60" as="geometry"/>
</mxCell>
<mxCell id="16" value="" style="edgeStyle=none;fontFamily=Times New Roman;fontSize=20;fontColor=#000000;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontStyle=1;strokeWidth=3;" edge="1" parent="1" source="12" target="15">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="23" value="" style="edgeStyle=none;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Times New Roman;fontSize=20;fontColor=#000000;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontStyle=1;strokeWidth=3;" edge="1" parent="1" source="12" target="22">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="12" value="init_u" style="whiteSpace=wrap;fillColor=#f5f5f5;dashed=0;fontFamily=Times New Roman;fontSize=20;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontColor=#333333;fontStyle=1;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="190" y="650" width="210" height="60" as="geometry"/>
</mxCell>
<mxCell id="27" value="" style="edgeStyle=none;exitX=0.5;exitY=1;exitDx=0;exitDy=0;fontFamily=Times New Roman;fontSize=20;fontColor=#F0F0F0;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontStyle=1;strokeWidth=3;entryX=0.5;entryY=0.5;entryDx=0;entryDy=-25;entryPerimeter=0;" edge="1" parent="1" source="15" target="34">
<mxGeometry relative="1" as="geometry">
<mxPoint x="340" y="870" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="33" style="edgeStyle=none;html=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;labelBackgroundColor=none;labelBorderColor=none;strokeColor=#000000;strokeWidth=3;fontFamily=Times New Roman;fontSize=20;fontColor=#000000;" edge="1" parent="1" source="15" target="24">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="15" value="ed_al_loc_output" style="whiteSpace=wrap;fillColor=#f5f5f5;dashed=0;fontFamily=Times New Roman;fontSize=20;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontColor=#333333;fontStyle=1;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="190" y="770" width="210" height="60" as="geometry"/>
</mxCell>
<mxCell id="18" value="init_dofparameters&#10;coeff" style="whiteSpace=wrap;fillColor=#f5f5f5;dashed=0;fontFamily=Times New Roman;fontSize=20;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontColor=#333333;fontStyle=1;strokeWidth=3;spacing=0;" vertex="1" parent="1">
<mxGeometry x="480" y="299" width="206.5" height="60" as="geometry"/>
</mxCell>
<mxCell id="20" value="init_rths&#10;init_coord_sys" style="whiteSpace=wrap;fillColor=#f5f5f5;dashed=0;fontFamily=Times New Roman;fontSize=20;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontColor=#333333;fontStyle=1;strokeWidth=3;spacing=0;" vertex="1" parent="1">
<mxGeometry x="480" y="525" width="206.5" height="60" as="geometry"/>
</mxCell>
<mxCell id="24" value="mesh_create&#10;mesh_commit" style="whiteSpace=wrap;fillColor=#f5f5f5;dashed=0;fontFamily=Times New Roman;fontSize=20;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontColor=#333333;fontStyle=1;strokeWidth=3;spacing=0;verticalAlign=middle;spacingTop=0;" vertex="1" parent="1">
<mxGeometry x="480" y="770" width="206.5" height="60" as="geometry"/>
</mxCell>
<mxCell id="22" value="set_coord_sy&#10;calculate_position&#10;mesh_create&#10;mesh_commit" style="whiteSpace=wrap;fillColor=#f5f5f5;dashed=0;fontFamily=Times New Roman;fontSize=20;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontColor=#333333;fontStyle=1;strokeWidth=3;spacing=0;" vertex="1" parent="1">
<mxGeometry x="480" y="622.5" width="206.5" height="115" as="geometry"/>
</mxCell>
<mxCell id="34" value="初始化结束" style="dashed=0;whitespace=wrap;shape=mxgraph.dfd.start;fontFamily=Times New Roman;fontSize=20;fontColor=#333333;labelBackgroundColor=none;labelBorderColor=none;fillColor=#f5f5f5;strokeColor=#000000;fontStyle=1;strokeWidth=3;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="229" y="890" width="132" height="60" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

View File

@ -0,0 +1,48 @@
<mxfile host="65bd71144e">
<diagram id="2Qj2oTJsEnOTRDyZjBbP" name="第 1 页">
<mxGraphModel dx="460" dy="747" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" background="#ffffff" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="2" value="求解开始" style="dashed=0;whitespace=wrap;shape=mxgraph.dfd.start;fontFamily=Times New Roman;fontSize=13;fontColor=#333333;labelBackgroundColor=none;labelBorderColor=none;fillColor=#f5f5f5;strokeColor=#000000;fontStyle=1;strokeWidth=3;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="250" y="100" width="80" height="30" as="geometry"/>
</mxCell>
<mxCell id="5" value="" style="edgeStyle=none;fontFamily=Times New Roman;fontSize=13;fontColor=#000000;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontStyle=1;strokeWidth=3;" parent="1" source="3" target="4" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="3" value="ed_calc_output" style="dashed=0;whitespace=wrap;fontFamily=Times New Roman;fontSize=13;labelBackgroundColor=none;labelBorderColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontColor=#333333;fontStyle=1;strokeWidth=3;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="240" y="198" width="100" height="50" as="geometry"/>
</mxCell>
<mxCell id="8" value="" style="edgeStyle=none;fontFamily=Times New Roman;fontSize=13;fontColor=#000000;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontStyle=1;strokeWidth=3;" parent="1" source="4" target="7" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="19" value="" style="edgeStyle=none;fontFamily=Times New Roman;fontSize=13;fontColor=#000000;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontStyle=1;strokeWidth=3;" parent="1" source="4" target="18" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="4" value="ed_calc_const_state_deriv" style="whiteSpace=wrap;fillColor=#f5f5f5;dashed=0;fontFamily=Times New Roman;fontSize=13;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontColor=#333333;fontStyle=1;strokeWidth=3;" parent="1" vertex="1">
<mxGeometry x="203.5" y="300" width="173" height="60" as="geometry"/>
</mxCell>
<mxCell id="11" value="" style="edgeStyle=none;fontFamily=Times New Roman;fontSize=13;fontColor=#000000;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontStyle=1;strokeWidth=3;entryX=0.5;entryY=0.5;entryDx=0;entryDy=-15;entryPerimeter=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="7" target="26" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="354" y="440" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="7" value="更新输出量、更新模块间传递量" style="whiteSpace=wrap;fillColor=#f5f5f5;dashed=0;fontFamily=Times New Roman;fontSize=13;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontColor=#333333;fontStyle=1;strokeWidth=3;" parent="1" vertex="1">
<mxGeometry x="230" y="408" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="17" value="" style="endArrow=classic;exitX=0.5;exitY=0.5;exitDx=0;exitDy=15;exitPerimeter=0;fontFamily=Times New Roman;fontSize=13;fontColor=#F0F0F0;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontStyle=1;strokeWidth=3;" parent="1" source="2" target="3" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="390" y="240" as="sourcePoint"/>
<mxPoint x="440" y="190" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="18" value="set_coord_sy&#10;calculate_position&#10;calculate_angular_pos_vel_p_acc&#10;calculate_linear_vel_p_acc&#10;calculate_force_moments&#10;fill_aug_mat" style="whiteSpace=wrap;fillColor=#f5f5f5;dashed=0;fontFamily=Times New Roman;fontSize=13;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontColor=#333333;fontStyle=1;strokeWidth=3;" parent="1" vertex="1">
<mxGeometry x="430" y="275" width="209.5" height="110" as="geometry"/>
</mxCell>
<mxCell id="26" value="求解结束" style="dashed=0;whitespace=wrap;shape=mxgraph.dfd.start;fontFamily=Times New Roman;fontSize=13;fontColor=#333333;labelBackgroundColor=none;labelBorderColor=none;fillColor=#f5f5f5;strokeColor=#000000;fontStyle=1;strokeWidth=3;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="250" y="530" width="80" height="30" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@ -0,0 +1,203 @@
<mxfile host="65bd71144e">
<diagram id="odkg41RdcpufXjDHtmU_" name="第 1 页">
<mxGraphModel dx="193" dy="575" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" background="#ffffff" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="2" value="求解开始" style="dashed=0;whitespace=wrap;shape=mxgraph.dfd.start;fontFamily=Times New Roman;fontSize=17;fontColor=#333333;labelBackgroundColor=none;labelBorderColor=none;fillColor=#f5f5f5;strokeColor=#000000;fontStyle=1;strokeWidth=3;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="250" y="100" width="80" height="30" as="geometry"/>
</mxCell>
<mxCell id="3" value="" style="edgeStyle=none;fontFamily=Times New Roman;fontSize=17;fontColor=#000000;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontStyle=1;strokeWidth=3;" parent="1" source="4" target="7" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="4" value="fast_init" style="dashed=0;whitespace=wrap;fontFamily=Times New Roman;fontSize=17;labelBackgroundColor=none;labelBorderColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontColor=#333333;fontStyle=1;strokeWidth=3;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="205" y="200" width="170" height="50" as="geometry"/>
</mxCell>
<mxCell id="5" value="" style="edgeStyle=none;fontFamily=Times New Roman;fontSize=17;fontColor=#000000;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontStyle=1;strokeWidth=3;startArrow=none;" parent="1" source="13" target="9" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="6" value="" style="edgeStyle=none;fontFamily=Times New Roman;fontSize=17;fontColor=#000000;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontStyle=1;strokeWidth=3;" parent="1" source="7" target="11" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="7" value="计算t0时刻&#10;fast_solution_0" style="whiteSpace=wrap;fillColor=#f5f5f5;dashed=0;fontFamily=Times New Roman;fontSize=17;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontColor=#333333;fontStyle=1;strokeWidth=3;" parent="1" vertex="1">
<mxGeometry x="205" y="300" width="170" height="60" as="geometry"/>
</mxCell>
<mxCell id="8" value="" style="edgeStyle=none;fontFamily=Times New Roman;fontSize=17;fontColor=#000000;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontStyle=1;strokeWidth=3;entryX=0.5;entryY=0.5;entryDx=0;entryDy=-15;entryPerimeter=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="9" target="12" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="354" y="710.75" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="61" value="" style="edgeStyle=none;html=1;strokeColor=#000000;strokeWidth=3;fontSize=17;fontColor=#000000;" edge="1" parent="1" source="9" target="60">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="9" value="计算t时刻&#10;fast_solution_t" style="whiteSpace=wrap;fillColor=#f5f5f5;dashed=0;fontFamily=Times New Roman;fontSize=17;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontColor=#333333;fontStyle=1;strokeWidth=3;" parent="1" vertex="1">
<mxGeometry x="205" y="640" width="170" height="60" as="geometry"/>
</mxCell>
<mxCell id="10" value="" style="endArrow=classic;exitX=0.5;exitY=0.5;exitDx=0;exitDy=15;exitPerimeter=0;fontFamily=Times New Roman;fontSize=17;fontColor=#F0F0F0;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontStyle=1;strokeWidth=3;" parent="1" source="2" target="4" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="390" y="240" as="sourcePoint"/>
<mxPoint x="440" y="190" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="11" value="各模块计算输出,设置输入&#10;calc_outputs_and_solve_for_input" style="whiteSpace=wrap;fillColor=#f5f5f5;dashed=0;fontFamily=Times New Roman;fontSize=17;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontColor=#333333;fontStyle=1;strokeWidth=3;" parent="1" vertex="1">
<mxGeometry x="430" y="295" width="260" height="70" as="geometry"/>
</mxCell>
<mxCell id="12" value="求解结束" style="dashed=0;whitespace=wrap;shape=mxgraph.dfd.start;fontFamily=Times New Roman;fontSize=17;fontColor=#333333;labelBackgroundColor=none;labelBorderColor=none;fillColor=#f5f5f5;strokeColor=#000000;fontStyle=1;strokeWidth=3;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="250" y="1000" width="80" height="30" as="geometry"/>
</mxCell>
<mxCell id="14" value="" style="edgeStyle=none;fontFamily=Times New Roman;fontSize=17;fontColor=#000000;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontStyle=1;strokeWidth=3;endArrow=none;" parent="1" source="7" target="13" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="290" y="360" as="sourcePoint"/>
<mxPoint x="290" y="470" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="54" style="edgeStyle=none;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeColor=#000000;strokeWidth=3;fontColor=#000000;fontSize=17;" edge="1" parent="1" source="13" target="12">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="70" y="535"/>
<mxPoint x="70" y="730"/>
<mxPoint x="70" y="1015"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="13" value="&lt;span style=&quot;color: rgb(51, 51, 51); font-family: &amp;quot;Times New Roman&amp;quot;; font-size: 17px; font-weight: 700;&quot;&gt;时间步小于&lt;br style=&quot;font-size: 17px;&quot;&gt;预设时间步&lt;/span&gt;" style="shape=rhombus;html=1;dashed=0;whitespace=wrap;perimeter=rhombusPerimeter;fillColor=#F5F5F5;strokeWidth=3;strokeColor=#030303;fontSize=17;" parent="1" vertex="1">
<mxGeometry x="215" y="490" width="150" height="90" as="geometry"/>
</mxCell>
<mxCell id="15" value="fast_init_input_output_arrays" style="whiteSpace=wrap;fillColor=#f5f5f5;dashed=0;fontFamily=Times New Roman;fontSize=17;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontColor=#333333;fontStyle=1;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="430" y="410" width="260" height="70" as="geometry"/>
</mxCell>
<mxCell id="17" value="" style="edgeStyle=none;fontFamily=Times New Roman;fontSize=17;fontColor=#000000;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontStyle=1;strokeWidth=3;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="11" target="15">
<mxGeometry relative="1" as="geometry">
<mxPoint x="386.5" y="340.865" as="sourcePoint"/>
<mxPoint x="440" y="341.4" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="18" value="" style="edgeStyle=none;fontFamily=Times New Roman;fontSize=17;fontColor=#000000;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontStyle=1;strokeWidth=3;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="11" target="21">
<mxGeometry relative="1" as="geometry">
<mxPoint x="550" y="375" as="sourcePoint"/>
<mxPoint x="700" y="333" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="19" value="多体模块计算响应&#10;ed_calc_output" style="whiteSpace=wrap;fillColor=#f5f5f5;dashed=0;fontFamily=Times New Roman;fontSize=17;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontColor=#333333;fontStyle=1;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="1256" y="295" width="170" height="70" as="geometry"/>
</mxCell>
<mxCell id="33" value="" style="edgeStyle=none;html=1;fontColor=#000000;strokeWidth=3;strokeColor=#000000;fontSize=17;" edge="1" parent="1" source="21" target="32">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="21" value="&lt;font face=&quot;Times New Roman&quot; color=&quot;#333333&quot; style=&quot;font-size: 17px;&quot;&gt;&lt;span style=&quot;font-size: 17px;&quot;&gt;&lt;b style=&quot;font-size: 17px;&quot;&gt;计算多体与气动&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;" style="shape=rhombus;html=1;dashed=0;whitespace=wrap;perimeter=rhombusPerimeter;fillColor=#F5F5F5;strokeWidth=3;strokeColor=#000000;fontSize=17;" vertex="1" parent="1">
<mxGeometry x="780" y="285" width="150" height="90" as="geometry"/>
</mxCell>
<mxCell id="24" value="" style="edgeStyle=none;fontFamily=Times New Roman;fontSize=17;fontColor=#000000;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontStyle=1;strokeWidth=3;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="21" target="19">
<mxGeometry relative="1" as="geometry">
<mxPoint x="742" y="342.5" as="sourcePoint"/>
<mxPoint x="792" y="343" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="25" value="" style="edgeStyle=none;fontFamily=Times New Roman;fontSize=17;fontColor=#000000;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fillColor=#f5f5f5;fontStyle=1;strokeWidth=3;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="19" target="26">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1208" y="342.5" as="sourcePoint"/>
<mxPoint x="1323" y="410" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="29" value="" style="edgeStyle=none;html=1;fontColor=#000000;strokeWidth=3;strokeColor=#000000;fontSize=17;" edge="1" parent="1" source="26" target="28">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="26" value="多体向气动传递叶片节点位移、速度" style="whiteSpace=wrap;fillColor=#f5f5f5;dashed=0;fontFamily=Times New Roman;fontSize=17;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontColor=#333333;fontStyle=1;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="1256" y="428" width="170" height="70" as="geometry"/>
</mxCell>
<mxCell id="31" value="" style="edgeStyle=none;html=1;fontColor=#000000;strokeWidth=3;strokeColor=#000000;fontSize=17;" edge="1" parent="1" source="28" target="30">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="28" value="气动模块计算叶片节点气动力、力矩" style="whiteSpace=wrap;html=1;fontSize=17;fontFamily=Times New Roman;fillColor=#f5f5f5;strokeColor=#000000;fontColor=#333333;dashed=0;labelBorderColor=none;labelBackgroundColor=none;fontStyle=1;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="1256" y="567" width="170" height="60" as="geometry"/>
</mxCell>
<mxCell id="30" value="气动力、力矩传递回多体模块" style="whiteSpace=wrap;html=1;fontSize=17;fontFamily=Times New Roman;fillColor=#f5f5f5;strokeColor=#000000;fontColor=#333333;dashed=0;labelBorderColor=none;labelBackgroundColor=none;fontStyle=1;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="1256" y="700" width="170" height="60" as="geometry"/>
</mxCell>
<mxCell id="35" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontColor=#000000;strokeWidth=3;strokeColor=#000000;fontSize=17;" edge="1" parent="1" source="32" target="34">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="32" value="&lt;font face=&quot;Times New Roman&quot; color=&quot;#333333&quot; style=&quot;font-size: 17px;&quot;&gt;&lt;span style=&quot;font-size: 17px;&quot;&gt;&lt;b style=&quot;font-size: 17px;&quot;&gt;计算多体与水动&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;" style="shape=rhombus;html=1;dashed=0;whitespace=wrap;perimeter=rhombusPerimeter;fillColor=#F5F5F5;strokeWidth=3;strokeColor=#000000;fontSize=17;" vertex="1" parent="1">
<mxGeometry x="780" y="450" width="150" height="90" as="geometry"/>
</mxCell>
<mxCell id="37" value="" style="edgeStyle=none;html=1;fontColor=#000000;strokeWidth=3;strokeColor=#000000;fontSize=17;" edge="1" parent="1" source="34" target="36">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="34" value="多体模块计算响应&#10;ed_calc_output" style="whiteSpace=wrap;fillColor=#f5f5f5;dashed=0;fontFamily=Times New Roman;fontSize=17;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontColor=#333333;fontStyle=1;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="1025" y="460" width="170" height="70" as="geometry"/>
</mxCell>
<mxCell id="39" value="" style="edgeStyle=none;html=1;fontColor=#000000;strokeWidth=3;strokeColor=#000000;fontSize=17;" edge="1" parent="1" source="36" target="38">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="36" value="多体向水动传递平台运动位移、速度" style="whiteSpace=wrap;html=1;fontSize=17;fontFamily=Times New Roman;fillColor=#f5f5f5;strokeColor=#000000;fontColor=#333333;dashed=0;labelBorderColor=none;labelBackgroundColor=none;fontStyle=1;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="1025" y="584" width="170" height="60" as="geometry"/>
</mxCell>
<mxCell id="41" value="" style="edgeStyle=none;html=1;fontColor=#000000;startArrow=none;strokeWidth=3;strokeColor=#000000;fontSize=17;" edge="1" parent="1" source="44">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1092" y="887.5" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="38" value="水动模块计算浮式平台节点力、力矩&lt;br style=&quot;font-size: 17px;&quot;&gt;hydrodyn_calcoutput" style="whiteSpace=wrap;html=1;fontSize=17;fontFamily=Times New Roman;fillColor=#f5f5f5;strokeColor=#000000;fontColor=#333333;dashed=0;labelBorderColor=none;labelBackgroundColor=none;fontStyle=1;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="1025" y="703" width="170" height="60" as="geometry"/>
</mxCell>
<mxCell id="45" value="" style="edgeStyle=none;html=1;fontColor=#000000;endArrow=none;strokeWidth=3;strokeColor=#000000;fontSize=17;" edge="1" parent="1" source="38" target="44">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1092" y="800" as="sourcePoint"/>
<mxPoint x="1092" y="887.5" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="49" value="" style="edgeStyle=none;html=1;fontColor=#000000;strokeWidth=3;strokeColor=#000000;fontSize=17;" edge="1" parent="1" source="44" target="48">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="44" value="计算多体、水动数据传递delta_u&lt;br style=&quot;font-size: 17px;&quot;&gt;calc_ed_hd_residual" style="whiteSpace=wrap;html=1;fontSize=17;fontFamily=Times New Roman;fillColor=#f5f5f5;strokeColor=#000000;fontColor=#333333;dashed=0;labelBorderColor=none;labelBackgroundColor=none;fontStyle=1;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="1025" y="822" width="170" height="60" as="geometry"/>
</mxCell>
<mxCell id="51" value="" style="edgeStyle=none;html=1;fontColor=#000000;strokeWidth=3;strokeColor=#000000;fontSize=17;" edge="1" parent="1" source="48" target="50">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="48" value="计算雅可比矩阵" style="whiteSpace=wrap;html=1;fontSize=17;fontFamily=Times New Roman;fillColor=#f5f5f5;strokeColor=#000000;fontColor=#333333;dashed=0;labelBorderColor=none;labelBackgroundColor=none;fontStyle=1;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="1025" y="942" width="170" height="60" as="geometry"/>
</mxCell>
<mxCell id="53" value="" style="edgeStyle=none;html=1;fontColor=#000000;strokeWidth=3;strokeColor=#000000;fontSize=17;" edge="1" parent="1" source="50" target="52">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="50" value="求解得到新的delta_u" style="whiteSpace=wrap;html=1;fontSize=17;fontFamily=Times New Roman;fillColor=#f5f5f5;strokeColor=#000000;fontColor=#333333;dashed=0;labelBorderColor=none;labelBackgroundColor=none;fontStyle=1;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="1025" y="1061" width="170" height="60" as="geometry"/>
</mxCell>
<mxCell id="52" value="由delta_u向多体系统赋值平台力、力矩" style="whiteSpace=wrap;html=1;fontSize=17;fontFamily=Times New Roman;fillColor=#f5f5f5;strokeColor=#000000;fontColor=#333333;dashed=0;labelBorderColor=none;labelBackgroundColor=none;fontStyle=1;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="1025" y="1180" width="170" height="60" as="geometry"/>
</mxCell>
<mxCell id="55" value="&lt;font face=&quot;Times New Roman&quot; color=&quot;#333333&quot; style=&quot;font-size: 22px;&quot;&gt;&lt;b style=&quot;font-size: 22px;&quot;&gt;true&lt;/b&gt;&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#000000;fontSize=22;" vertex="1" parent="1">
<mxGeometry x="300" y="580" width="60" height="40" as="geometry"/>
</mxCell>
<mxCell id="64" value="" style="edgeStyle=none;html=1;strokeColor=#000000;strokeWidth=3;fontSize=17;fontColor=#000000;" edge="1" parent="1" source="60" target="63">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="60" value="多体模块数据外推&lt;br style=&quot;font-size: 17px;&quot;&gt;fast_extrap_interp_mods" style="whiteSpace=wrap;html=1;fontSize=17;fontFamily=Times New Roman;fillColor=#f5f5f5;strokeColor=#000000;fontColor=#333333;dashed=0;labelBorderColor=none;labelBackgroundColor=none;fontStyle=1;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="430" y="640" width="200" height="60" as="geometry"/>
</mxCell>
<mxCell id="66" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeColor=#000000;strokeWidth=3;fontSize=17;fontColor=#000000;" edge="1" parent="1" source="63" target="65">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="63" value="多体模块预估校正方法推进连续状态&lt;br style=&quot;font-size: 17px;&quot;&gt;fast_advance_states" style="whiteSpace=wrap;html=1;fontSize=17;fontFamily=Times New Roman;fillColor=#f5f5f5;strokeColor=#000000;fontColor=#333333;dashed=0;labelBorderColor=none;labelBackgroundColor=none;fontStyle=1;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="430" y="768" width="200" height="60" as="geometry"/>
</mxCell>
<mxCell id="65" value="各模块计算输出,设置输入&#10;calc_outputs_and_solve_for_input" style="whiteSpace=wrap;fillColor=#f5f5f5;dashed=0;fontFamily=Times New Roman;fontSize=17;labelBorderColor=none;labelBackgroundColor=none;strokeColor=#000000;fontColor=#333333;fontStyle=1;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="400" y="890" width="260" height="70" as="geometry"/>
</mxCell>
<mxCell id="67" value="&lt;font face=&quot;Times New Roman&quot; color=&quot;#333333&quot; style=&quot;font-size: 22px;&quot;&gt;&lt;b style=&quot;font-size: 22px;&quot;&gt;false&lt;br&gt;&lt;/b&gt;&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#000000;fontSize=22;" vertex="1" parent="1">
<mxGeometry x="125" y="485" width="70" height="40" as="geometry"/>
</mxCell>
<mxCell id="68" value="&lt;font face=&quot;Times New Roman&quot; color=&quot;#333333&quot; style=&quot;font-size: 22px;&quot;&gt;&lt;b style=&quot;font-size: 22px;&quot;&gt;true&lt;/b&gt;&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#000000;fontSize=22;" vertex="1" parent="1">
<mxGeometry x="930" y="285" width="60" height="40" as="geometry"/>
</mxCell>
<mxCell id="69" value="&lt;font face=&quot;Times New Roman&quot; color=&quot;#333333&quot; style=&quot;font-size: 22px;&quot;&gt;&lt;b style=&quot;font-size: 22px;&quot;&gt;false&lt;br&gt;&lt;/b&gt;&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#000000;fontSize=22;" vertex="1" parent="1">
<mxGeometry x="860" y="388" width="70" height="40" as="geometry"/>
</mxCell>
<mxCell id="70" value="&lt;font face=&quot;Times New Roman&quot; color=&quot;#333333&quot; style=&quot;font-size: 22px;&quot;&gt;&lt;b style=&quot;font-size: 22px;&quot;&gt;true&lt;/b&gt;&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#000000;fontSize=22;" vertex="1" parent="1">
<mxGeometry x="940" y="445" width="60" height="40" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

View File

@ -0,0 +1,90 @@
[TOC]
<div style="page-break-after: always;"></div>
# 1. 多体动力学模块简介
多体动力学模块求解陆上和海上风电机组在气动载荷、波浪载荷等动态载荷作用下叶片和塔筒的变形轮毂和机舱的受力机组整体的六自由度运动等。本模块采用Kane方法建立建立风电机组整机动力学模型对于叶片、塔筒等柔性体将其离散化为有限个可以看成刚体的离散单元将Kane方法结合模态叠加法建立风电机组整机刚柔耦合结构动力学模型。
# 2. 多体动力学模块程序介绍
## 2.1. 多体动力学模块架构
```
multibody_library/
├── multibody_data_structures.rs # 多体动力学模块数据结构体
├── modmesh_types.rs # 多体动力学网格数据结构体
├── multibody_init.rs # 多体动力学模块初始化
├── multibody_solution.rs # 多体动力学模块求解
└── basic_tools.rs # 基本工具
```
## 2.2. 主要子模块的功能介绍
### 2.2.1. multibody_data_structures.rs
该模块定义了多体动力学模块的数据结构体及对应的初始化函数:
- `MultibodyInputFileType`存储多体动力学模块从输入文件中读取的所有参数包含dt、自由度定义、塔架信息等。
- `BladeInputData`:存储从叶片输入文件中读取的所有参数,包含叶片节点,扭角,模态信息等。
- `EDBladeMeshInputData`:存储叶片每个节点的弦长、扭角等信息。
- `MultibodyData`:存储多体动力学模块的所有信息。包括连续状态、参数、输入、输出等。
- `EdRtHndSide`:存储多体动力学求解过程中特征点位置向量,角速度、角加速度、线速度、线加速度等。
- `EdCoordSys`:存储多体动力学求解中所有坐标系的方向向量。
- `EDMiscVarType`存储杂项结构体包括EdCoordSys、EdRtHndSide、求解矩阵等。
- `EDOutputType`:输出类型,存储多体动力学求解后叶片、轮毂、塔架、浮式平台等部件的位移、速度、加速度等信息。
- `EDInputType`:输入类型,存储多体动力学求解前叶片、轮毂、塔架、浮式平台等部件的力和力矩等信息。
- `EDParameterType`参数类型存储多体动力学求解过程中需要用到的参数由MultibodyInputFileType处理得到。
- `EDActiveDOFs`:存储多体动力学求解过程中所有活动自由度。
- `EDOtherStateType`:存储多体动力学模块时间推进所用数据。
- `EDContinuousStateType`:连续状态,存储每个自由度对应的速度和加速度。
### 2.2.2. modmesh_types.rs
- `MeshType`:网格结构体,包含网格节点数量,网格点的位置向量,力、力矩,平动距离、速度、加速度,转动速度,加速度等信息。
### 2.2.3. multibody_init.rs
主要包含多体动力学初始化所用函数。
- `ed_init`:初始化主函数。
- `ed_read_input`:从输入文件中读取多体动力学模块参数。
- `ed_set_parameters`:将从输入文件读取的参数转换成多体系统求解所用参数类型。
- `init_dofparameters`:初始化多体系统自由度参数。
- `coeff`:计算叶片和塔架广义弯曲刚度、广义侧向刚度,线性质量密度,固有频率等系数
- `init_continuous_states`:根据设置的多体系统自由度,初始化对应自由度的初始运动。
- `init_misc_other_states`:初始化多体系统坐标系、求解矩阵等。
- `init_u`:根据初始运动,设置多体系统坐标系,计算特征点位置向量,创建叶片、轮毂、塔架、浮式平台等部件的输入量网格。
- `ed_al_loc_output`:创建叶片、轮毂、塔架、浮式平台等部件的输出量网格
### 2.2.4. multibody_solution.rs
主要包含多体动力学求解所用函数。
- `ed_calc_output`:多体系统计算输出主函数,得到当前时刻每个自由度的速度,加速度结果,更新叶片,塔架等部件运动,计算输出变量等。
- `ed_calc_const_state_deriv`:计算多体系统每个自由度对应速度,加速度。
- `set_coord_sy`:计算多体系统当前时刻坐标系方向。
- `calculate_position`:计算多体系统当前坐标系下特征点的位置向量。
- `calculate_angular_pos_vel_p_acc`:计算多体系统每个部件网格节点上的运动角度,偏角速度,偏角加速度。
- `calculate_linear_vel_p_acc`:计算多体系统每个部件网格节点上的偏线速度,偏线加速度。
- `calculate_force_moments`:计算多体系统每个部件网格节点上的力和力矩。
- `fill_aug_mat`:计算多体系统求解增广矩阵。
### 2.2.5. basic_tools.rs
包含多体动力学模块求解过程中用到的基本工具函数和网格生成函数。
- `cross_product`:求向量的叉积函数。
- `dot_product`:求向量的点积函数。
- `mesh_create`:网格创建函数
- `mesh_construct_element_1pt`:单节点网格构造函数。
- `mesh_construct_element_2pt`:双节点网格构造函数。
## 2.3. 主要子模块的调用流程图
### 2.3.1. 初始化模块
<div style="text-align: center;">
<img src="/InitFlowChart.png" alt="图片描述" width="300" height="auto"/>
<figcaption style="text-align: center;">图 1: 多体系统初始化流程图</figcaption>
</div>
在多体动力学模块初始化过程中首先ed_read_input函数读入输入文件进行MultibodyInputFileType类型的数据填充在ed_set_parameters函数由MultibodyInputFileType类向EDParameterTyp类赋值设置自由度并计算叶片和塔架的广义刚度固有频率等参数init_continuous_states函数根据自由度初始化对应的连续状态init_u函数这是初始化整机的坐标系创建各部件网格等。ed_al_loc_output函数创建各部件的输出量网格。
### 2.3.2. 求解模块
<div style="text-align: center;">
<img src="/SolveFlowChart.png" alt="图片描述" width="400" height="auto" />
<figcaption style="text-align: center;">图 2: 多体系统求解过程流程图</figcaption>
</div>
在多体动力学模块求解调用ed_calc_output函数在函数中调用ed_calc_const_state_deriv函数依次调用set_coord_sy、calculate_position、calculate_angular_pos_vel_p_acc、calculate_linear_vel_p_acc、calculate_force_moments、fill_aug_mat函数求解整机坐标系计算特征点位置向量计算各部件网格节点上的运动角度偏角速度偏角加速度偏线速度偏线加速度力和力矩计算增广矩阵得到当前时刻每个自由度的速度加速度结果。随后ed_calc_output函数中在更新叶片塔架等部件运动计算输出变量等。

View File

@ -0,0 +1,550 @@
[TOC]
<div style="page-break-after: always;"></div>
# 1. 基于模态叠加法的叶片变形计算
## 1.1. 叶片模态计算原理
在本节会出现时间导数和距离导数函数,约定时间导数用变量正上方加点,距离导数变量右上方加撇,如$u(z,t)$为时间t和距离的函数$\dot{u}$表示时间导数,$u^{\prime}$表示距离导数。
### 1.1.1. 叶片模态计算
把叶片看成是一端固定于轮毂另一端自由的柔性悬臂梁, 基于模态叠加法,叶片侧向变形$u(z,t)$用前N阶模态表示为
$$
u(z,t)=\sum_{a=1}^{N}\phi_{a}(z)q_{a}(t) \tag{1.1}
$$
其中,$\phi_{a}(z)$为第a阶模态的振型函数是只关于的函数是柔性叶片径向距离$=$表示悬臂固定端, $=z$表示悬臂自由端。$q_{a}(t)$为第a阶模态广义坐标 是只关于时间的函数。对于悬臂梁,正交模态的广义坐标习惯上取自由端的变形量,每个模态可用柔性叶片长度无量纲化和归一化,故自由端的模态值为1。
Rayleigh-Ritz法$\phi_{a}(z)$可表示为
$$
\phi_a(z)=\sum_{b=P}^{N+p-1} D_{a b} \varphi_b(z) \quad(a=1,2, \cdots, N ; b=P, P+1, \cdots, N+P-1)\tag{1.2}
$$
式中$\varphi_b(z)$为形函数, $D_{a b}$为与第a个模态第b个形函数相关的系数。$u(z,t)$可表示为
$$
\begin{gathered}
u(z, t)=\sum_{a=1}^N \phi_a(z) q_a(t)=\sum_{a=1}^N\left[\sum_{b=P}^{N+P-1} D_{a b} \varphi_b(\mathrm{z})\right] q_a(t) \\
=\sum_{b=P}^{N+P-1} \varphi_b(\mathrm{z}) \sum_{a=1}^N D_{a b} q_a(t)=\sum_{b=P}^{N+P-1} \varphi_b(z) d_b(t)
\end{gathered}\tag{1.3}
$$
$$
d_b(t)=\sum_{a=1}^N D_{a b} q_a(t)\tag{1.4}
$$
式中,$d_b(t)$为形函数$\varphi_b(z)$的广义坐标。
假定悬臂梁的每个模态可用一个多项式表示,$\varphi_b(z)$可定义为
$$
\varphi_b(z)=\left(\frac{z}{Z}\right)^b \tag{1.5}
$$
在悬臂梁的固定端形函数的导数必为0 故有$P \geq 2$ 。本例在柔性叶片计算中取$P = 2$$N = 5$。叶片模态可表示为
$$
\phi_a(z)=\sum_{b=P}^{N+P-1} D_{a b} \left(\frac{z}{Z}\right)^b \tag{1.6}
$$
### 1.1.2. 相关系数$D_{ab}$计算
对于有N个自由度的保守定常系统运动方程为
$$
\sum_{b=P}^{N+P-1} m_{a b} \ddot{d}_b(t)+\sum_{b=P}^{N+P-1} k_{a b} d_b(t)=0 \tag{1.7}
$$
其中,$m_{a b}$、$k_{a b}$与广义坐标$d_b(t)$对应的广义质量、广义刚度。
当柔性梁以第$m
$阶模态振动,有
$$
q_a(t)= \begin{cases}Q_a \sin \left(\omega_a t+\beta_a\right) & (a=m) \\ 0 & (a \neq m)
\end{cases} \tag{1.8}
$$
所以
$$
d_b(t)=\sum_{a=1}^N D_{a, b} q_a(t)=D_{m, b} q_m(t)=D_{m, b} Q_m \sin \left(\omega_m t+\beta_m\right) \tag{1.9}
$$
1.9代入1.7),有
$$
\sum_{b=P}^{N+P-1}\left(-\omega^2 m_{m b}+k_{m b}\right) D_{m, b}=0 \tag{1.10}
$$
写出矩阵形式为
$$
\left(-\omega^2 M_d+K_d\right) D=0 \tag{1.11}
$$
其中,$M_d$$K_d$为与广义坐标$d_b(t)$对应的广义质量矩阵、广义刚度矩阵,$D$为模态系数矩阵$N*1$列向量。把1.11)改写为
$$
\left(\frac{1}{\omega^2} \boldsymbol{I}-\boldsymbol{K}_d^{-1} \boldsymbol{M}_d\right) \boldsymbol{D}=\mathbf{0} \tag{1.12}
$$
由方程式(4.12)可知有N个特征值$\frac{1}{\omega_a^2}$对应的N个特征向量$D_a$,即
$$
\boldsymbol{D}_a=\left(D_{a, p} D_{a, p+1} \cdots D_{a, N+p-1}\right)^T \tag{1.13}
$$
### 1.1.3. 广义质量矩阵$M_d$和广义刚度矩阵$K_d$计算
假设轮毂的旋转角速度为$\Omega$,且柔性叶片在挥舞方向和摆振方向的变形是相互独立的。不考虑叶片的锥角、叶尖质量。基于一维弹性体系统的模态叠加法,质量矩阵元素$m_{ij}$计算式为
$$
m_{i j}=\int_0^{R-R_H} \mu_B(z) \varphi_i(z) \varphi_j(z) d z \quad(i=1,2, \cdots, N ; j=1,2, \cdots, N) \tag{1.14}
$$
式中$\mu_B(z)$为叶片分布线密度,$R$表示风轮半径,$R_H$为轮毂半径。式(4.14)对挥舞和摆振方向都是有效的。
刚度矩阵元素$k_{ij}$计算式为
$$
k_{i j}=\int_0^{R-R_H} E I_B(z){\varphi}_i^{\prime \prime}(z) \varphi_j^{\prime \prime}(z) d z+\Omega^2 \int_0^{R-R_H}\left(\int_r^{R-R_H} \mu_B(\gamma)\left(R_H+\gamma\right) d \gamma\right) {\varphi}_i^{\prime}(z) \varphi_j^{\prime}(z) d z \tag{1.15}
$$
其中$E I_B(z)$为叶片的分布刚度,$r$为叶片长度的虚变量。式(4.15)中的第二项为离心刚度项。
至此, 通过式(4.14-4.15)求得广义质量矩阵$M_d$和广义刚度矩阵$K_d$后, 再通过式(4.12)求出模态系数$D_{ab}$,再根据式(4.6)可求出叶片的各阶模态。
## 1.2. 叶片弹性恢复力计算
柔性或弹性体的弯曲会产生弹性恢复力, 使其恢复到未变形位置。对于柔性叶片,与广义坐标$d_b(t)$对应的广义质量矩阵$M_q$和广义刚度矩阵$K_q$的计算式为
$$
m_{i j}=\int_0^{R-R_H} \mu_B(z) \phi_i(z) \phi_j(z) d z \tag{1.16}
$$
$$
k_{i j}=\int_0^{R-R_H} E I_B(z) \phi_i(z) \phi_j(z) d z+\Omega^2 \int_0^{R-R_H}\left(\int_r^{R-R_H} \mu_B(\gamma)\left(R_H+\gamma\right) d \gamma\right) \phi_i(z) \phi_j(z) d z \tag{1.17}
$$
式中,$i=1,2, \cdots, N$$j=1,2, \cdots, N$N等于某方向表示叶片变形的模态个数。在接下来的式(4.12)(4.20)中ij也如此。
对于大型风机叶片,由于转速相对较小, 通常可不考虑离心钢化作用。
叶片固有频率$f_j$公式为
$$
f_j=\frac{1}{2 \pi} \sqrt{\frac{k_{i j}}{m_{i j}}} \tag{1.18}
$$
其中下标j表示第j阶模态频率。
叶片阻尼矩阵$C_q$的元素$C_{ij}$计算为
$$
c_{i j}=\frac{\zeta_j k_{i j}}{\pi f_j} \tag{1.19}
$$
其中$\zeta_j$为第j阶模态阻尼
柔性叶片在变形方向的弹性恢复力计算表达式为
$$
{ }^{\text {Ela }} F_i^B=-\sum_j k_{i j} q_j(t)-\sum_j c_{i j} \dot{q}_j(t) \tag{1.20}
$$
## 1.3. 有结构扭角时叶片变形和转角计算
叶片在挥舞方向的变形用两个振动模态计算, 而叶片在摆振方向的柔性较小,故其变形用一个模态计算。设$\phi_{1F}(z)$、$\phi_{2F}(z)$为无扭角叶片的一
、二阶挥舞模态,$\phi_{1E}(z)$为无扭角叶片的一阶摆振模态,$q_{1}(t)$、$q_{2}(t)$为叶尖一、二阶挥舞变形, $q_{3}(t)$为叶尖一阶摆振变形, 为表示方便, 在后面的表达中省略模态函数中的z 和叶尖变形中的t。在叶片局部坐标系中 局部挥舞曲率可表示为$q_1 {\phi_{1\mathrm{~F}}}^{\prime \prime}+q_2 {\phi_{2 \mathrm{~F}}}^{\prime \prime}$,局部摆振曲率可表示为$q_3 {\phi_{1{\mathrm{E}}}}^{\prime \prime}$。假定局部扭角为$\theta_{\mathrm{tw}}(z)$ 为叶片结构预扭角和叶片桨矩角的和,则面外方向曲率为
$$
{u}^{\prime \prime}=\cos \theta_{\mathrm{tw}}\left[q_1 {\phi_{1\mathrm{~F}}}^{\prime \prime}+q_2 {\phi_{2 \mathrm{~F}}}^{\prime \prime}\right]+\sin \theta_{\mathrm{tw}} q_3 {\phi_{1{\mathrm{E}}}}^{\prime \prime} \tag{1.21}
$$
面内方向的曲率为
$$
v^{\prime \prime}=-\sin \theta_{\mathrm{tw}}\left[q_1 {\phi_{1\mathrm{~F}}}^{\prime \prime}+q_2 {\phi_{2 \mathrm{~F}}}^{\prime \prime}\right]+\cos \theta_{\mathrm{tw}} q_3 {\phi_{1{\mathrm{E}}}}^{\prime \prime} \tag{1.22}
$$
将式(1.21)和(1.22)表示为
$$
{u}^{\prime \prime}=q_1 {\varphi_1}^{\prime \prime}+q_2 {\varphi_2}^{\prime \prime}+q_3 {\varphi_3}^{\prime \prime} \tag{1.23}
$$
$$
v^{\prime \prime}=q_1 {\varphi_1}^{\prime \prime}+q_2 {\varphi_2}^{\prime \prime}+q_3
{\varphi_3}^{\prime \prime} \tag{1.24}
$$
定义${\varphi_1}^{\prime \prime} = \cos \theta_{\mathrm{tw}}{\phi_{1\mathrm{~F}}}^{\prime \prime}$${\varphi_2}^{\prime \prime} = \cos \theta_{\mathrm{tw}}{\phi_{2\mathrm{~F}}}^{\prime \prime}$${\varphi_3}^{\prime \prime} = \sin \theta_{\mathrm{tw}}{\phi_{1\mathrm{~E}}}^{\prime \prime}$为面外扭转形函数,$\psi_1^{\prime \prime}=-\sin \theta_{\mathrm{tw}}{\phi_{1\mathrm{~F}}}^{\prime \prime}$$\psi_2^{\prime \prime}=-\sin \theta_{\mathrm{tw}}{\phi_{2\mathrm{~F}}}^{\prime \prime}$$\psi_3^{\prime \prime}=\cos \theta_{\mathrm{tw}}{\phi_{1\mathrm{~E}}}^{\prime \prime}$为面内扭转形函数。对面外面内扭转形函数关于z进行两次积分得面外模态$\varphi_1$$\varphi_2$$\varphi_3$,和面内模态$\psi_1$、$\psi_2$、$\psi_3$。叶片变形统一在叶根坐标系$b_{m 0}\left(x_{b m 0} y_{b m 0} z_{b m 0}\right)$中表示, 在$x_{b m 0}$方向的变形(挥舞变形)$u$和$y_{b m 0}$方向的变形(摆振变形)$v$可表示为
$$
u=\sum_{i=1}^3 q_i \varphi_i \tag{1.25}
$$
$$
v=\sum_{i=1}^3 q_i \psi_i \tag{1.26}
$$
面外转角$\theta_{u}$和面内转角$\theta_{v}$可表示为
$$
\theta_u=\frac{\partial u}{\partial z}=\sum_{i=1}^3 q_i \varphi_i^{\prime} \tag{1.27}
$$
$$
\theta_v=\frac{\partial v}{\partial z}=\sum_{i=1}^3 q_i \psi_i^{\prime} \tag{1.28}
$$
$\theta_{u}$沿$y_{b m 0}$轴正向为正,$\theta_{v}$沿$x_{b m 0}$轴负向为正。
假定叶片弯曲变形后总的叶片长度不变,则在叶片锥坐标系$z_{mc}$轴方向的投影必减少, 减少量表达式为
$$
w=-0.5 \sum_{i=1}^3 \sum_{j=1}^3 s_{i j} q_i q_j \tag{1.29}
$$
式中有$s_{i j}=\int_0^z\left(\dot{\varphi}_i \dot{\varphi}_j^{\prime}+\psi_i^{\prime} \psi_j^{\prime}\right) d z$,为轴向缩减因子。
根据式(1.25)、(1.26)、(1.29),变形后的叶片节点当前位置向量为
$$
\boldsymbol{u}(z, t)=u i_{m c}+v j_{m c}+[r(z)+w] k_{m c} \tag{1.30}
$$
式中$r(z)$为叶片变形前从叶根到叶素节点的局部半径;$i_{m c}$、$j_{m c}$、$k_{m c}$为第个叶片锥坐标系各轴的基矢量。
# 2. 基于模态叠加法的塔架变形计算
## 2.1. 塔架变形计算
把塔架看成是倒立的悬臂梁, 且在自由端存在一个点质量$m_{Top}$,这个点质量即为塔顶质量,等于机舱、轮毂及风轮的质量和。假定塔架在前后向(fore-aft)和侧向(side-side)的变形是独立的,且塔架在这两个方向的刚度相等,故在两方向的固有频率和模态也是相同的。只要计算塔架一个方向的模态即可。
塔架与叶片的模态计算原理及弹性恢复力计算公式是一样的,只是塔架为自由端有质量的倒立悬臂梁,其广义质量矩阵和阻尼矩阵的元素计算稍有区别,为
$$
m_{i j}=m_{\mathrm{Top}}+\int_0^H \mu_{\mathrm{T}}(z) \varphi_i(z) \varphi_j(z) d z \tag{2.1}
$$
$$
k_{i j}=\int_0^H E I_{\mathrm{T}}(z) \varphi_i^{\prime \prime}(z) \varphi_j^{\prime \prime}(z) d z-g \int_0^H\left[m_{\mathrm{Top}}+\int_z^H \mu_{\mathrm{T}}(\gamma) d \gamma\right] \varphi_i^{\prime}(z) \varphi_j^{\prime}(z) d z \tag{2.2}
$$
上两式中的$\mu_{\mathrm{T}}(z)$为塔架的分布线密度,$E I_{\mathrm{T}}(z)$为塔架的分布刚度。从式(2.2)可知塔顶质量和塔架自身的重量减少了塔架的刚度。
塔架在前后方向和侧向的变形各用两个振动模态计算。设$\phi_{\mathrm{1FA}}(z)$、$\phi_{\mathrm{2FA}}(z)$为塔架前后方向的一、二阶模态,$\phi_{\mathrm{1SS}}(z)$、$\phi_{\mathrm{2SS}}(z)$为塔架在侧向的一、二阶模态,$q_{\mathrm{1FA}}(t)$、$q_{\mathrm{2FA}}(t)$为塔顶一、二阶前后向变形,$q_{\mathrm{1SS}}(t)$、$q_{\mathrm{2SS}}(t)$为塔顶一、二阶侧向变形,为表示方便, 在后面的表达中省略模态函数中的z和塔顶变形中的t。在塔基坐标系$t_o(x_{t0}, y_{t0}, z_{t0})$中,塔架在任意高度位置的前后向变形$u_{\mathrm{FA}}$和侧向变形$v_{\mathrm{SS}}$表示为
$$
\left\{\begin{array}{c}
u_{\mathrm{FA}}=\phi_{\mathrm{1FA}} q_{\mathrm{1FA}}+\phi_{ \mathrm{2FA}} q_{ \mathrm{2FA}} \\
v_{\mathrm{SS}}=\phi_{\mathrm{1SS}} q_{\mathrm{1SS}}+\phi_{\mathrm{2SS}} q_{\mathrm{2SS}}
\end{array}\right. \tag{2.3}
$$
假定塔架在$z_{t0}$轴向无转角,有$y_{t0}$轴向转角$\theta_{\mathrm{FA}}$和$x_{t0}$轴向转角$\theta_{\mathrm{SS}}$为
$$
\left\{\begin{array}{l}
\theta_{\mathrm{FA}}=\frac{\partial u_{\mathrm{FA}}}{\partial z} \\
\theta_{\mathrm{SS}}=\frac{\partial v_{\mathrm{SS}}}{\partial z}
\end{array}\right. \tag{2.4}
$$
塔架的轴向缩减为
$$
\left\{\begin{array}{l}
w_{\mathrm{T}}=-0.5\left(\sum_{i=1}^2 \sum_{j=1}^2 s_{i j \mathrm{FA}} q_{\mathrm{iFA}} q_{j \mathrm{FA}}+\sum_{i=1}^2 \sum_{j=1}^2 s_{i j \mathrm{SS}} q_{i \mathrm{SS}} q_{j \mathrm{SS}}\right) \\
s_{i j \mathrm{FA}}=\int_0^z \phi_{\mathrm{iFA}}^{\prime} \phi_{j \mathrm{FA}}^{\prime} d z \quad s_{i j \mathrm{SS}}=\int_0^z \phi_{i \mathrm{SS}}^{\prime} \phi_{j \mathrm{SS}}^{\prime} d z
\end{array}\right. \tag{2.5}
$$
根据(2.3)和(2.5),变形后塔架任意节点当前位置向量为
$$
\boldsymbol{u}_{\mathrm{T}}(z, t)=u_{\mathrm{FA}} \boldsymbol{i}_{t 0}+v_{\mathrm{SS}} \boldsymbol{j}_{t 0}+\left[Z(z)+w_T\right] \boldsymbol{k}_{t 0} \tag{2.6}
$$
式中$Z(z)$为塔架变形前从塔基到塔架节点的距离;$i_{t0}$、$j_{t0}$、$k_{t0}$为塔基坐标系各轴的基矢量。
# 3. 整机刚柔混合多体动力学建模
在多体动力学建模过程中,把水平轴三叶片上风向海上浮式风电机抽象成由浮式平台、塔架、机舱、低速轴、轮毂、叶片、高速轴及电机构成的多体系统。其中浮式平台、机舱、高速轴及电机看成是刚性的,塔架、低速轴及叶片看成柔性的。塔架和叶片的变形用模态叠加法表示,低速轴的柔性用旋转惯量- 刚度阻尼器表示。用Kane方法建立整机结构动力学模型时把叶片离散成17个叶素单元体 把塔架离散成11个单元体。
## 3.1. 定义参考系
对于结构复杂的多体系统为方便描述建立各组成件的连体参考系并确定各连体参考系间的转换关系。海上浮式风电机坐标系如图3.1所示, 图中$O(XYZ)$为惯性参考系,$p(x_{p}, y_{p}, z_{p})$、$t_i(x_{ti}, y_{ti}, z_{ti})$、$t_p(x_{top}, y_{top}, z_{top})$、$n(x_{n}, y_{n}, z_{n})$、$l(x_{l}, y_{l}, z_{l})$、$h(x_{h}, y_{h}, z_{h})$、$c(x_{mc}, y_{mc}, z_{mc})$、$b_{m0}(x_{bm0}, y_{bm0}, z_{bm0})$及$b_{mi}(x_{bmi}, y_{bmi}, z_{bmi})$分别表示浮式平台参考点$p$、塔架单元节点$t_i$、塔架顶点$t_p$、机舱参考点$n$、低速轴参考点$l$、轮毂参考点$h$、风轮锥顶点$c$、第$m$个叶片叶根节点$b_{m0}$及叶片离散单元(叶素)节点$b_{mi}$处点连体参考系。图中的$d$、$f$、$e$点分别表示平台、机舱及轮毂的质心。$\theta_l$为风轮轴倾斜角,$\theta_c$为叶片锥角。假定惯性参考系坐标轴的基矢量分别为$X=(1,0,0)^T$、$Y=(0,1,0)^T$、$Z=(0,0,1)^T$,根据各参考系间的变换矩阵可求得任意时刻各连体系各坐标轴的单位矢量。
<figure style="text-align: center;">
<img src="/坐标系示意图.png" alt="图片描述">
<figcaption style="text-align: center;">图 1: 坐标系示意图</figcaption>
</figure>
假定浮式平台相对固定参考系的转动为小角转动,塔架和叶片因变形产生的转动也为小角转动,故从惯性系到平台连体系、从塔基系到塔架单元局部系及从叶根系到叶素局部系间的变换可以不考虑转动角顺序,采用小角变换矩阵:
$$
T_{S A T}\left(\theta_1, \theta_2, \theta_3\right)=\left(\begin{array}{ccc}
\frac{\theta_1^2 b+\theta_2^2+\theta_3^2}{a b} & \frac{\theta_3 a+\theta_1 \theta_2(b-1)}{a b} & \frac{-\theta_2 a+\theta_1 \theta_3(b-1)}{a b} \\
\frac{-\theta_3 a+\theta_1 \theta_2(b-1)}{a b} & \frac{\theta_1^2+\theta_2^2 b+\theta_3^2}{a b} & \frac{\theta_1 a+\theta_2 \theta_3(b-1)}{\left(\theta_1^2+\theta_2^2+\theta_3^2\right) \sqrt{1+\theta_1^2+\theta_2^2+\theta_3^2}} \\
\frac{\theta_2 a+\theta_1 \theta_3(b-1)}{a b} & \frac{\theta_1 a+\theta_2 \theta_3(b-1)}{a b} & \frac{\theta_1^2+\theta_2^2+\theta_3^2 b}{a b}
\end{array}\right) \tag{3.1}
$$
式中$a = \theta_1^2+\theta_2^2+\theta_3^2$$b = \sqrt{1+\theta_1^2+\theta_2^2+\theta_3^2}$$\theta_1$、$\theta_2$、$\theta_3$为绕三个坐标轴的转动角。
根据惯性系到平台参考系的小角变换矩阵有
$$
\left(\begin{array}{l}
x_{\mathrm{p}} \\
y_{\mathrm{p}} \\
z_{\mathrm{p}}
\end{array}\right)=T_{\mathrm{SAT}}\left(\theta_X, \theta_Y, \theta_Z\right)\left(\begin{array}{l}
X\\
Y \\
Z
\end{array}\right) \tag{3.2}
$$
式中$\theta_X, \theta_Y, \theta_Z$为浮式平台横摇角、纵摇角及艏摇角。$x_p, y_p, z_p$为平台系三个坐标轴的基矢量。
从平台参考系$p(x_{p}, y_{p}, z_{p})$通过小角变换到塔顶系$t_p(x_{top}, y_{top}, z_{top})$矢量变换式为
$$
\left(\begin{array}{l}
x_{\text {top }} \\
y_{\text {top }} \\
z_{\text {top }}
\end{array}\right)=T_{\mathrm{SAT}}\left(\theta_{x_{\mathrm{p}}}, \theta_{y_{\mathrm{p}}}, \theta_{z_{\mathrm{p}}}\right)\left(\begin{array}{l}
x_{\mathrm{p}} \\
y_{\mathrm{p}} \\
z_{\mathrm{p}}
\end{array}\right) \tag{3.3}
$$
式中$\theta_{x_{\mathrm{p}}} = -\theta_{SS}$$\theta_{y_{\mathrm{p}}} = \theta_{FA}$$\theta_{z_{\mathrm{p}}} = 0$。
从塔顶系$t_p(x_{top}, y_{top}, z_{top})$的$z_{top}$正向旋转偏航角$\theta_y$到机舱系$n(x_{n}, y_{n}, z_{n})$,机舱系的基矢量
$$
\left(\begin{array}{l}
x_{\mathrm{n}} \\
y_{\mathrm{n}} \\
z_{\mathrm{n}}
\end{array}\right)=\left(\begin{array}{ccc}
\cos \theta_y & \sin \theta_y & 0 \\
-\sin \theta_y & \cos \theta_y & 0 \\
0 & 0 & 1
\end{array}\right)\left(\begin{array}{l}
x_{\text {top }} \\
y_{\text {top }} \\
z_{\text {top }}
\end{array}\right) \tag{3.4}
$$
从机舱系$n(x_{n}, y_{n}, z_{n})$的$y_{n}$轴正向旋转轴倾斜角$\theta_l$到低速轴系$l(x_{l}, y_{l}, z_{l})$,低速轴系的基矢量为
$$
\left(\begin{array}{l}
x_1 \\
y_1 \\
z_l
\end{array}\right)=\left(\begin{array}{ccc}
\cos \theta_l & 0 & -\sin \theta_l \\
0 & 1 & 0 \\
\sin \theta_l & 0 & \cos \theta_l
\end{array}\right)\left(\begin{array}{l}
x_n \\
y_{\mathrm{n}} \\
z_{\mathrm{n}}
\end{array}\right)\tag{3.5}
$$
从低速轴系$l(x_{l}, y_{l}, z_{l})$的$x_l$轴正向旋转风轮方位角$\theta_a$到轮毂系$h(x_{h}, y_{h}, z_{h})$,轮毂系随风轮转动,其$z_{h}$轴与叶片1方位角一致
$$
\left(\begin{array}{l}
x_{\mathrm{h}} \\
y_{\mathrm{h}} \\
z_{\mathrm{h}}
\end{array}\right)=\left(\begin{array}{ccc}
1 & 0 & 0 \\
\cos \theta_a & \sin \theta_a & 0 \\
-\sin \theta_a & \cos \theta_a & 0
\end{array}\right)\left(\begin{array}{l}
x_1 \\
y_1 \\
z_{\mathrm{l}}
\end{array}\right) \tag{3.6}
$$
绕轮毂系$h(x_{h}, y_{h}, z_{h})$的$x_{h}$轴正向旋转角度$2 \pi(m-1) / 3$后,再绕$y_{h}$轴负向旋转叶片锥角$\theta_c$得到第$m$个叶片的锥坐标系$c(x_{mc}, y_{mc}, z_{mc})$,通常三个叶片的锥顶点$c$、与轮毂参考点重合,有
$$
\left(\begin{array}{l}
x_{\mathrm{cm}} \\
\boldsymbol{y}_{\mathrm{cm}} \\
z_{\mathrm{cm}}
\end{array}\right)=\left(\begin{array}{ccc}
\cos \theta_c & 0 & \sin \theta_c \\
0 & 1 & 0 \\
-\sin \theta_c & 0 & \cos \theta_c
\end{array}\right)\left(\begin{array}{ccc}
1 & 0 & 0 \\
\cos [2 \pi(m-1) / 3] & \sin [2 \pi(m-1) / 3] & 0 \\
-\sin [2 \pi(m-1) / 3] & \cos [2 \pi(m-1) / 3] & 0
\end{array}\right)\left(\begin{array}{l}
x_{\mathrm{h}} \\
y_{\mathrm{h}} \\
z_{\mathrm{h}}
\end{array}\right) \tag{3.7}
$$
式中的$m=1,2,3$,指代三个叶片。绕锥坐标系$c(x_{mc}, y_{mc}, z_{mc})$的$z_{mc}$轴负向旋转桨矩角$\theta_p$得到叶根系$b_{m0}(x_{m0}, y_{m0}, z_{m0})$,有
$$
\left(\begin{array}{l}
x_{\mathrm{bm} 0} \\
y_{\mathrm{bm} 0} \\
z_{\mathrm{bm} 0}
\end{array}\right)=\left(\begin{array}{ccc}
\cos \theta_p & -\sin \theta_p & 0 \\
\sin \theta_p & \cos \theta_p & 0 \\
0 & 0 & 1
\end{array}\right)\left(\begin{array}{l}
x_{\mathrm{cm}} \\
y_{\mathrm{cm}} \\
z_{\mathrm{cm}}
\end{array}\right) \tag{3.8}
$$
从叶根系$b_{m0}(x_{m0}, y_{m0}, z_{m0})$的$z_{m0}$轴负向旋转叶素局部扭角$\theta_t$得到叶素局部系$b_{mi}(x_{mbi}, y_{mbi}, z_{mbi})$,有
$$
\left(\begin{array}{c}
x_{\mathrm{bmi}} \\
y_{\mathrm{bmi}} \\
z_{\mathrm{bmi}}
\end{array}\right)=\left(\begin{array}{ccc}
\cos \theta_t & -\sin \theta_t & 0 \\
\sin \theta_t & \cos \theta_t & 0 \\
0 & 0 & 1
\end{array}\right)\left(\begin{array}{l}
x_{\mathrm{bm} 0} \\
y_{\mathrm{bm} 0} \\
z_{\mathrm{bm} 0}
\end{array}\right) \tag{3.9}
$$
## 3.2. 定义整机运动自由度
对三叶片水平轴上风向海上浮式风电机共设立22个自由度浮式平台设置6个自由度三个平移自由度$q_1$$q_2$$q_3$,三个旋转自由度$q_4$$q_5$$q_6$。塔架4个自由度分别是塔顶一阶、二阶前后向(fore-aft)变形,用$q_7$$q_9$表示,塔顶一阶、二阶侧向(side-side)变形,用$q_8$$q_{10}$表示。一个机舱偏航自由度$q_{11}$,一个低速轴转动自由度$q_{12}$,一个低速轴扭转柔性自由度$q_{13}$。每一叶片三个自由度,叶尖一阶、二阶挥舞(flapwise)变形$q_{14+3(m-1)}$、$q_{16+3(m-1)}$和一阶摆振(edgewise)变形$q_{15+3(m-1)}$下标中,${m =1,2,3}$表示不同的叶片。
## 3.3. 基于Kane法的整机多体结构动力学建模
对同一多体系统广义速率有不同的选取方案, 系统中同一质量和同一刚体也将有不同的偏速度和偏角速度。故在选取广义速率时应尽量使对应偏速度和偏角速度的表达式简单,以便于求导运算,易于建立动力学方程和使方程间的耦合程度减弱。选取广义速率$u_r=\dot{q}_r, r=1,2, \cdots, 22$。$\dot{q}_r$为各自由度速度。在论文中用$\omega_X^{(r)}$表示刚体$X$对应第$r$个广义速率的偏角速度,在海上浮式风电机中刚体$X$指代平台$P$、塔架单元$T_i$,塔顶基板$T_{tp}$、机舱$N$、低速轴$L$,电机$G$、轮毂$H$,叶素单元$B_{mi}$。用$v_X^{(r)}$表示质点或参考点$x$的第$r$个广义速率的偏线性速度,同样$x$表示平台参考点$p$;平台质心点$d$、塔架单元节点$t_i$、塔顶点$t_p$、机舱参考点$n$、机舱质心点$f$、轮毂参考点$h$、轮毂质心点$e$及叶素单元节点$b_{mi}$。符号$\overrightarrow{r x y}$指在惯性系中,从点$x$到点$y$的空间位置向量。
### 3.3.1. 各刚体偏角速度
浮式$p$的偏角速度
$$
\boldsymbol{\omega}_{\mathrm{P}}^{(1)}=0 \quad \boldsymbol{\omega}_{\mathrm{P}}^{(2)}=0 \quad \boldsymbol{\omega}_{\mathrm{P}}^{(3)}=0 \quad \boldsymbol{\omega}_{\mathrm{P}}^{(4)}=\boldsymbol{X} \quad \boldsymbol{\omega}_{\mathrm{P}}^{(5)}=\boldsymbol{Y} \quad \boldsymbol{\omega}_{\mathrm{P}}^{(6)}=\boldsymbol{Z} \quad \boldsymbol{\omega}_{\mathrm{P}}^{(r)}=0(r=7,8, \cdots, 22) \tag{3.10}
$$
塔顶$T_{tp}$的偏角速度
$$
\begin{aligned}
& \boldsymbol{\omega}_{\mathrm{Ttp}}^{(1)}=0 \quad \boldsymbol{\omega}_{\mathrm{Ttp}}^{(2)}=0 \quad \omega_{\mathrm{Ttp}}^{(3)}=0 \quad \omega_{\mathrm{Ttp}}^{(4)}=X \quad \omega_{\mathrm{Ttp}}^{(5)}=Y \quad \omega_{\mathrm{Ttp}}^{(6)}=Z \quad \omega_{\mathrm{Ttp}}^{(7)}=\phi_{1 F A}^{tt p} y_p \\
& \boldsymbol{\omega}_{\mathrm{Ttp}}^{(8)}=-\phi_{1 S S}^{ttp} \boldsymbol{x}_p \quad \boldsymbol{\omega}_{\mathrm{Ttp}}^{(9)}=\phi_{2 \mathrm{FA}}^{\mathrm{ttp}} \boldsymbol{y}_p \quad \boldsymbol{\omega}_{\mathrm{Ttp}}^{(10)}=-\phi_{2 S S}^{\mathrm{ttp}} \boldsymbol{x}_p \quad \boldsymbol{\omega}_{\mathrm{Ttp}}^{(r)}=0(r=11,12, \cdots, 22)
\end{aligned} \tag{3.11}
$$
其中$\phi_{1 F A}^{tt p}$、$\phi_{2 F A}^{tt p}$为塔顶前后向一、二阶模态,$\phi_{1 SS}^{tt p}$、$\phi_{2SS}^{tt p}$为塔顶侧向一、二阶模态。
机舱$N$的偏角速度
$$
\omega_{\mathrm{N}}^{(r)}=\omega_{\mathrm{T}_{\mathrm{tp}}}^{(r)}(r=1,2, \cdots, 10) \quad \omega_{\mathrm{N}}^{(11)}=z_n \quad \omega_{\mathrm{N}}^{(r)}=0(r=11,12, \cdots, 22) \tag{3.12}
$$
低速轴$L$的偏角速度
$$
\omega_{\mathrm{N}}^{(r)}=\omega_{\mathrm{N}}^{(r)}(r=1,2, \cdots, 11) \quad \omega_{\mathrm{H}}^{(12)}=\boldsymbol{x}_l \quad \omega_{\mathrm{H}}^{(13)}=\boldsymbol{x}_l \quad \omega_{\mathrm{H}}^{(r)}=0(r=14,15, \cdots, 22) \tag{3.13}
$$
电机$G$的偏角速度
$$
\omega_{\mathrm{G}}^{(r)}=\omega_{\mathrm{N}}^{(r)}(r=1,2, \cdots, 11) \quad \omega_{\mathrm{G}}^{(12)}=\lambda x_l \quad \omega_{\mathrm{G}}^{(r)}=0(r=13,14, \cdots, 22) \tag{3.14}
$$
式中$\lambda$为传动比。
叶素单元${B_{mi}}$的偏角速度
$$
\begin{aligned}
& \boldsymbol{\omega}_{\mathrm{B} m i}^{(r)}=\omega_{\mathrm{H}}^{(r)}(r=1,2, \cdots, 13) \quad \omega_{\mathrm{B} m i}^{(14+3 m-3)}=\left(\varphi_l^{b m i}\right)^{\prime} y_{\mathrm{b} m 0}-\left(\psi_l^{b m i}\right)^{\prime} x_{\mathrm{b} m 0} \\
& \boldsymbol{\omega}_{\mathrm{B} m i}^{(15+3 m-3)}=\left(\varphi_2^{\mathrm{bmi}}\right)^{\prime} y_{\mathrm{b} m 0}-\left(\psi_2^{\mathrm{bmi}}\right)^{\prime} x_{\mathrm{b} m 0} \quad \boldsymbol{\sigma}_{\mathrm{B} m i}^{(16+3 m-3)}=\left(\varphi_3^{\mathrm{bmi}}\right)^{\prime} \boldsymbol{y}_{\mathrm{b} m 0}-\left(\psi_3^{\mathrm{b} m i}\right)^{\prime} x_{\mathrm{b} m 0}
\end{aligned} \tag{3.15}
$$
### 3.3.2. 质心或参考点偏线速度
平台参考点$p$的偏线速度为
$$
\boldsymbol{v}_{\mathrm{p}}^{(1)}=\boldsymbol{X} \quad \boldsymbol{v}_{\mathrm{p}}^{(2)}=\boldsymbol{Y} \quad \boldsymbol{v}_{\mathrm{p}}^{(3)}=\boldsymbol{Z} \quad \boldsymbol{v}_{\mathrm{p}}^{(r)}=0(r=4,5, \cdots, 22) \tag{3.16}
$$
平台质心$d$的偏线速度为
$$
\begin{gathered}
v_{\mathrm{d}}^{(1)}=v_{\mathrm{p}}^{(1)}(r=1,2,3) \quad v_{\mathrm{d}}^{(4)}=\omega_{\mathrm{p}}^{(4)} \times \overrightarrow{r p d} \quad v_{\mathrm{d}}^{(5)}=\omega_{\mathrm{P}}^{(5)} \times \overrightarrow{r p d} \\
v_{\mathrm{d}}^{(6)}=\omega_{\mathrm{P}}^{(6)} \times \overrightarrow{r p d} \quad v_{\mathrm{d}}^{(r)}=0(r=7,8, \cdots, 22) ;
\end{gathered} \tag{3.17}
$$
式中$\overrightarrow{r p d}$为平台质心$d$到参考点$p$的向量。
塔架顶点$t_{tp}$的偏线速度为
$$
\begin{aligned}
& v_{\mathrm{ttp}}^{(r)}=v_{\mathrm{p}}^{(r)}(r=1,2,3) \quad v_{\mathrm{tpp}}^{(4)}=\omega_{\mathrm{P}}^{(4)} \times \overrightarrow{r p t_{t p}} \quad v_{\mathrm{ttp}}^{(5)}=\omega_{\mathrm{P}}^{(5)} \times \overrightarrow{r p t_{t p}} \quad v_{\mathrm{tpp}}^{(6)}=\omega_{\mathrm{P}}^{(6)} \times \overrightarrow{r p t_{t p}} \\
& v_{\mathrm{ttp}}^{(7)}=x_{\mathrm{p}}-\left(S_{\mathrm{FA} 11}^{\mathrm{ttp}} q_7+S_{\mathrm{FA} 12}^{\mathrm{ttp}} q_9\right) z_{\mathrm{p}} \quad v_{\mathrm{ttp}}^{(8)}=x_{\mathrm{p}}-\left(S_{\mathrm{SS} 11}^{\mathrm{ttp}} q_8+S_{\mathrm{SSt} 12}^{\mathrm{ttp}} q_9\right) z_{\mathrm{p}} \\
& v_{\mathrm{ttp}}^{(9)}=x_{\mathrm{p}}-\left(S_{\mathrm{FA} 12}^{\mathrm{ttp}} q_7+S_{\mathrm{FA} 22}^{\mathrm{ttp}} q_9\right) z_{\mathrm{p}} \quad v_{\mathrm{ttp}}^{(10)}=x_{\mathrm{p}}-\left(S_{\mathrm{SS} 12}^{\operatorname{ttp}} q_8+S_{\mathrm{SS} 22}^{\operatorname{ttp}}q_{10}\right) z_{\mathrm{p}} \\
& v_{\text {ttp }}^{(r)}=0(r=11,12, \cdots, 22)
\end{aligned} \tag{3.18}
$$
式中$S_{\mathrm{FA} 11}^{\mathrm{ttp}}$、$S_{\mathrm{FA} 12}^{\mathrm{ttp}}$、$S_{\mathrm{FA} 22}^{\mathrm{ttp}}$为塔顶前后向缩减因子,$S_{\mathrm{SS} 11}^{\mathrm{ttp}}$、$S_{\mathrm{SS} 12}^{\mathrm{ttp}}$、$S_{\mathrm{SS} 22}^{\mathrm{ttp}}$为塔顶侧向缩减因子;$\overrightarrow{r p t_{t p}}$为参考点$p$到塔架顶点$t_{tp}$的位置向量。塔架单元节点$t_i$的偏线速度计算与塔顶点的相似,只是位置向量和缩减因子不同。
机舱质心$f$的偏线速度
$$
\begin{aligned}
& v_f^{(r)}=v_{\mathrm{tpp}}^{(r)}(r=1,2,3) \quad v_f^{(r)}=v_{\mathrm{ttp}}^{(r)}+\omega_{\mathrm{N}}^{(r)} \times \overrightarrow{r o f}(r=4,5, \cdots, 10) \\
& \boldsymbol{v}_f^{(11)}=\omega_{\mathrm{N}}^{(11)} \times \overrightarrow{r o f} \quad v_f^{(r)}=0(r=12,13, \cdots, 22)
\end{aligned} \tag{3.19}
$$
式中$\overrightarrow{r o f}$为参考点$o$到机舱质心$f$的位置向量。
轮毂参考点$h$的偏线速度
$$
\begin{aligned}
v_{\mathrm{h}}^{(r)}=v_{\text {ttp }}^{(r)}(r & =1,2,3) \quad v_{\mathrm{h}}^{(r)}=v_{\mathrm{ttp}}^{(r)}+\omega_{\mathrm{N}}^{(r)} \times \overrightarrow{r o h}(r=4,5, \cdots, 10) \\
v_{\mathrm{h}}^{(11)} & =\boldsymbol{\omega}_{\mathrm{N}}^{(11)} \times \overrightarrow{r o h} \quad v_{\mathrm{h}}^{(r)}=0(r=12,13, \cdots, 22)
\end{aligned} \tag{3.20}
$$
式中$\overrightarrow{r o h}$为参考点$o$到轮毂参考点$h$的位置向量。
轮毂质心$e$的偏线速度
$$
\begin{aligned}
v_{\mathrm{e}}^{(r)}=v_{\mathrm{h}}^{(r)}(r=1,2,3) \quad \nu_{\mathrm{e}}^{(r)}=\boldsymbol{v}_{\mathrm{h}}^{(r)}+\omega_{\mathrm{H}}^{(r)} \times \overline{r h e}(r=4,5, \cdots, 11) \\
\boldsymbol{v}_{\mathrm{e}}^{(12)}=\boldsymbol{\omega}_{\mathrm{H}}^{(12)} \times \overrightarrow{r h e} \quad \boldsymbol{v}_{\mathrm{e}}^{(13)}=\boldsymbol{\omega}_{\mathrm{H}}^{(13)} \times \overrightarrow{r h e} \quad \boldsymbol{v}_{\mathrm{h}}^{(r)}=0(r=14,15, \cdots, 22)
\end{aligned} \tag{3.21}
$$
式中$\overrightarrow{r h e}$为参考点$h$到轮毂质心$e$的位置向量。
叶素节点$b_{mi}$的偏线速度
$$
\begin{aligned}
& v_{\mathrm{b} m i}^{(r)}=v_{\mathrm{h}}^{(r)}(r=1,2,3) \quad v_{\mathrm{bmi}}^{(r)}=v_{\mathrm{h}}^{(r)}+\omega_{\mathrm{H}}^{(r)} \times \overrightarrow{r h b_{m i}}(r=4,5, \cdots, 11) \\
& \boldsymbol{v}_{\mathrm{bmi}}^{(\mathrm{I2)}}=\boldsymbol{\omega}_{\mathrm{H}}^{(12)} \times \overrightarrow{r h b_{m i}} \quad \boldsymbol{v}_{\mathrm{b} m i}^{(13)}=\boldsymbol{\omega}_{\mathrm{H}}^{(13)} \times \overline{r h b_{m i}} \\
& \boldsymbol{v}_{\mathrm{b} m i}^{(14+3 m-3)}=\varphi_1^{\mathrm{b} m i} \boldsymbol{x}_{\mathrm{b} m 0}+\psi_1^{\mathrm{b} m i} \boldsymbol{y}_{\mathrm{b} m 0}-\left(S_{11}^{\mathrm{bmi}} q_{14+3 m-3}+S_{12}^{\mathrm{b} m i} q_{15+3 m-3}+S_{13}^{\mathrm{b} m i} q_{16+3 m-3}\right) z_{\mathrm{b} m 0} \\
& \boldsymbol{v}_{\mathrm{b} m i}^{(15+3 m-3)}=\varphi_3^{\mathrm{b} m i} \boldsymbol{x}_{\mathrm{b} m 0}+\psi_3^{\mathrm{bmi}} \boldsymbol{y}_{\mathrm{b} m 0}-\left(S_{31}^{\mathrm{bmi}} q_{14+3 m-3}+S_{32}^{\mathrm{bmi}} q_{15+3 m-3}+S_{33}^{\mathrm{bmi}} q_{16+3 m-3}\right) z_{\mathrm{b} m 0} \\
& v_{\mathrm{b} m i}^{(16+3 m-3)}=\varphi_2^{\mathrm{b} m i} x_{\mathrm{b} m 0}+\psi_2^{\mathrm{bmi}} y_{\mathrm{b} m 0}-\left(S_{21}^{\mathrm{b} m i} q_{14+3 m-3}+S_{22}^{\mathrm{bmi}} q_{15+3 m-3}+S_{23}^{\mathrm{b} m i} q_{16+3 m-3}\right) z_{\mathrm{b} m 0}
\end{aligned} \tag{3.22}
$$
其中$\varphi_1^{\mathrm{b} m i} $、$\varphi_2^{\mathrm{b} m i} $、$\varphi_3^{\mathrm{b} m i} $表示第$m$个叶片第$i$个叶素节点处挥舞方向的扭转形函数,$\psi_1^{\mathrm{bmi}}$、$\psi_2^{\mathrm{bmi}}$、$\psi_3^{\mathrm{bmi}}$表示摆振方向的扭转形函数,$S_{11}^{\mathrm{b} m i}$、$S_{12}^{\mathrm{b} m i}$ 等为轴向缩减因子
己知偏角速度后,可用它们表示刚体的角速度和角加速度为
$$
\omega_{\mathrm{X}}=\sum_{r=1}^{22} \omega_{\mathrm{X}}^{(r)} \dot{q}_r \tag{3.23}
$$
$$
\boldsymbol{\beta}_{\mathrm{X}}=\dot{\boldsymbol{\omega}}_{\mathrm{X}}=\sum_{r=1}^{22} \boldsymbol{\omega}_{\mathrm{X}}^{(r)} \ddot{q}_r+\sum_{r=1}^{22} \dot{\omega}_{\mathrm{X}}^{(r)} \dot{q}_r \tag{3.24}
$$
己知偏线速度后,各质心或参考点的线速度和线加速度为
$$
v_x=\sum_{r=1}^{22} v_x^{(r)} \dot{q}_r \tag{3.25}
$$
$$
\alpha_x=\dot{v}_x=\sum_{r=1}^{22} v_x^{(r)} \ddot{q}_r+\sum_{r=1}^{22} \dot{v}_x^{(r)} \dot{q}_r \tag{3.26}
$$
由式(3.24)和(3.26)可知角加速度和线加速度由两部分组成,一部分与自由度的加速度有关,另一部分与自由度的加速度无关。
### 3.3.3. 整机动力学方程
海上浮式风电机各组成件受到的惯性力和力矩主要包括:浮式平台受到的惯性力$F_d$和惯性力矩$L_p$,塔架离散单元惯性力$F_{ti}$;机舱平动惯性力$F_f$和和偏航惯性力矩$L_{N}$,电机转动惯性力矩$L_{G}$;轮毂惯性力$F_H$和惯性力矩$L_{H}$,叶片离散单元惯性力$F_{Bmi}$。各刚体的惯性力统一表示为
$$
F_x=m_x a_x=m_x\left(\sum_{r=1}^{22} v_x^{(r)} \ddot{q}_r+\sum_{r=1}^{22} \dot{v}_x^{(r)} \dot{q}_r\right) \tag{3.27}
$$
式中的下标$x$指代浮式平台质心$d$、塔架单元节点$t_i$及机舱质心$f$、轮毂质心$e$及叶素节点$b_{mi}$$m_x$为质心或节点处的质量。根据动量矩定理,各惯性力矩统一表示为
$$
\begin{gathered}
\boldsymbol{L}_{\mathrm{Xx}}=\boldsymbol{\omega}_{\mathrm{X}} \times\left[I_{\mathrm{Xx}} \boldsymbol{x}\left(\boldsymbol{x} \cdot \boldsymbol{\omega}_{\mathrm{X}}\right)\right]+I_{\mathrm{Xx}} x\left(x \cdot \boldsymbol{\beta}_{\mathrm{X}}\right) \\
=\boldsymbol{\omega}_{\mathrm{X}} \times\left[I_{\mathrm{Xx}} x\left(x \cdot \omega_{\mathrm{X}}\right)\right]+I_{\mathrm{Xx}} x\left[x \cdot\left(\sum_{r=1}^{22} \boldsymbol{\omega}_{\mathrm{X}}^{(r)} \ddot{q}_r+\sum_{r=1}^{22} \dot{\omega}_{\mathrm{X}}^{(r)} \dot{q}_r\right)\right]
\end{gathered} \tag{3.28}
$$
式中的$X$指代平台$P$、机舱$N$、轮毂$H$及电机$G$$x$指代过质心的转动轴的单位矢量,$I_{\mathrm{Xx}}$刚体$X$在$x$方向的转动惯性根据Kane方法 广义惯性力$F_r^*$为
$$
F_r^*=\sum_x F_x \cdot v_x^{(r)}+\sum_{\mathrm{X}} L_{\mathrm{X}} \cdot \boldsymbol{\omega}_{\mathrm{X}}^{(r)}(r=1,2, \cdots, 22) \tag{3.29}
$$
多体系统的主动力包括系统外部对系统内物体的作用力,也包括系统内物体的相互作用力。对于海上浮式风电机,广义主动力包括:广义重力 $ F^g_r $ 为
$$
F^g_r = m_d g Z \cdot v_d^{(r)} + \sum_i m_{ti} g Z \cdot v_{ti}^{(r)} + m_f g Z \cdot v_f^{(r)} + m_e g Z \cdot v_e^{(r)} + \sum_m \sum_i m_{bmi} g Z \cdot v_{bmi}^{(r)} \tag{3.30}
$$
叶素节点处的气动力 $ F_{bmi}^A $ 和气动力矩 $ L_{Bmi}^A $,广义气动力为
$$
F_r^{Aero} = \sum_m \sum_i F_{bmi}^A \cdot v_{bmi}^{(r)} + \sum_m \sum_i L_{Bmi}^A \cdot \omega_{Bmi}^{(r)} \tag{3.31}
$$
电机传动反力矩 $ L^G $,由变速变桨控制策略确定,对应广义力为
$$
\begin{cases}
F_{13}^G = -\lambda L^G \\
F_r^G = 0 \, (r \neq 13)
\end{cases} \tag{3.32}
$$
偏航刚度和阻尼产生的广义偏航力矩 $ L^{Yaw} $ 为
$$
\begin{cases}
L_{11}^{Yaw} = -K_{Yaw} q_{11} - C_{Yaw} \dot{q}_{11} \\
L_r^{Yaw} = 0 \, (r \neq 11)
\end{cases} \tag{3.33}
$$
柔性传动轴刚度和阻尼产生的广义力矩 $ L^{Dri} $ 为
$$
\begin{cases}
L_{13}^{Dri} = -K_{Dri} q_{13} - C_{Dri} \dot{q}_{13} \\
L_r^{Dri} = 0 \, (r \neq 13)
\end{cases} \tag{3.34}
$$
柔性塔架广义刚度和阻尼产生的广义恢复力 $ { }^{\mathrm{Ela}} \boldsymbol{F}_r^{\mathrm{T}} $ ($ r = 7, 8, 9, 10 $),和柔性叶片广义刚度和阻尼产生的广义恢复力 $ { }^{\mathrm{Ela}} \boldsymbol{B}_r^{\mathrm{T}} $ ($ r = 14, 15, \dots, 22 $) 都采用式 (1.20) 计算,$ r $ 为其它自由度时,广义恢复力为 0。
浮式平台参考点处受到的载荷分为两部分,即与平台运动加速度有关的力和无关的力,表示为
$$
F_i^{Platform} = F_i^{Platform1} + F_i^{Platform2} \\
\left\{\begin{array}{l}
F_i^{\text {Platform1 }}=-A_{i j} \ddot{q}_j \\
F_i^{\text {Platform2 }=}=F_i^{\text {Hydrostatic }}+F_i^{\text {Wave }}-\int_0^t K_{i j}(t-\tau) \dot{q}_j(\tau) d \tau+F_i^{\mathrm{Lines}}+{ }^{(2)} F_i+F_i^{\text {Monison }}
\end{array}\right. \tag{3.35}
$$
浮式平台参考点处受到的与平台运动加速度无关的力及力矩 $F_p^{Hydro}$、$L_p^{Hydro}$,与平台运动加速度有关的附加惯性力及力矩 ${ }^{\mathrm{A}} F_{\mathrm{p}}^{\text {Hydro }}$、${ }^{\mathrm{A}} L_p^{Hydro}$ 可表示为
$$
\left\{\begin{array}{l}
\boldsymbol{F}_p^{\text {Hydro }}=F_1^{\text {Plafform2 }} \boldsymbol{X}+F_2^{\text {Platform2 } } \boldsymbol{Y}+F_3^{\text {Platform2 }} \boldsymbol{Z} \\
\boldsymbol{L}_{\mathrm{p}}^{\text {Hydro }}=F_4^{\text {Platform2 } } \boldsymbol{X}+F_5^{\text {Platform2 }} \boldsymbol{Y}+F_6^{\text {platform2 }} \boldsymbol{Z}
\end{array}\right. \tag{3.36}
$$
$$
\left\{\begin{array}{l}
{ }^{\mathrm{A}} \boldsymbol{F}_{\mathrm{p}}^{\text {Hydro }}=\sum_{i=1}^6\left(-A_{1 i} X-A_{2 i} \boldsymbol{Y}-A_{3 i} Z\right) \ddot{q}_i \\
{ }^{\mathrm{A}} \boldsymbol{L}_{\mathrm{p}}^{\text {Hydro }}=\sum_{i=1}^6\left(-A_{3 i} X-A_{4 i} \boldsymbol{Y}-A_{5 i} Z\right) \ddot{q}_i
\end{array}\right. \tag{3.37}
$$
广义水动力 $F_r^{Hydro}$ 为
$$
F_t^{Hydro} = F_p^{Hydro}\cdot v_p^{(r)} + L_p^{Hydro}\cdot \omega_p^{(r)} + A_p^{Hydro}\cdot v_p^{(r)} + A_p^{Hydro}\cdot \omega_p^{(r)} \tag{3.38}
$$
总广义主动力 $F_r$ 为
$$
F_r=F_r^{\mathrm{g}}+F_r^{\text {Aero }}+F_r^{\mathrm{G}}+F_r^{\mathrm{Yaw}}+F_r^{\mathrm{Dri}}+{ }^{\text {Ela }} F_r^{\mathrm{T}}+{ }^{\text {Ela }} F_r^{\mathrm{B}}+F_r^{\text {Hydro }} \tag{3.39}
$$
对于有 22 个自由度的海上浮式风电机系统,凯恩动力学方程表示为
$$
F_r + F_r^* = 0 \, (r=1,2,...,22) \tag{3.40}
$$
通过整理动力学方程表示为
$$
M_{22\times 22}({q}_r, t)\ddot{q}_{22\times 1} = f_{22\times 1}(\dot{q}_r,q_r,t) \tag{3.41}
$$
式中 $M_{22\times 22}$为对称质量矩阵: $\ddot{q}_{22\times 1}$ 为 22 个自由度加速度构成的列向量, 有 $\ddot{q}_{22\times 1} = (\ddot{q}_1 \ddot{q}_2 ... \ddot{q}_{22})^T$$f_{22\times 1}(\dot{q}_r,q_r,t)$ 为与自由度加速度$\ddot{q}_r$无关的力向量。

View File

@ -0,0 +1,323 @@
[TOC]
<div style="page-break-after: always;"></div>
# 0. 更新日志
2024 v0.4版本,介绍耦合求解器基本框架,包含时间推进方法,多体动力学模块与气动、水动模块耦合方法。
2025 v0.6版本耦合求解器新增公共lib模块yaml解析模块控制模块时间推进过程中增加向控制模块输入参数控制器返回指令指令结果向多体动力学模块传递。对照Bladed新增变桨二阶传递函数、电机转矩一阶传递函数。新增Steady Operational Loads, Steady Parked Loads两个稳态工作流新增Normal Stop, Emergency Stop, Start, Idling, Parked五个Simulation功能。
# 1. 耦合求解器简介
正常发电工况需要进行气动模块、多体模块、控制模块、漂浮式机组还有水动模块的耦合计算,耦合求解器模块处理在瞬态仿真中所有模块的时间推进,以及在时间推进中模块间的数据传递。
# 2. 耦合求解器程序介绍
## 2.1. 耦合求解器程序结构
```
herolib/ # 公共lib模块
aerodyn/ # 气动模块
controller/ # 控制模块
hydrosim/ # 水动模块
multidyn/ # 多体动力学模块
yaml_herowind # yaml配置文件、模型文件解析模块
drivers/ # 耦合求解器模块
├── coupled_solver_sub.rs # 耦合求解器所用子函数
├── steady_operational_loads.rs # 稳态运行载荷计算函数
├── steady_parked_loads.rs # 稳态停机载荷计算函数
├── power_production_loading.rs # 正常发电工况计算函数
├── normal_stop.rs # 正常停机工况计算函数
├── emergency_stop.rs # 紧急停机工况计算函数
├── start.rs # 启机工况计算函数
├── idling.rs # 空转工况计算函数
├── parked.rs # 停机工况计算函数
└── main.rs # 耦合求解器模块主程序
```
耦合求解器作为一个完整的rust项目气动、水动、多体动力学、控制模块作为库引入耦合求解器模块作为主程序在耦合求解器控制的初始化、时间推进、数据传递中调用气动、水动、多体模块函数。
## 2.2. 主要子模块的功能介绍
### 2.2.1 yaml_herowind模块
`yaml_herowind`模块专门用来解析yaml格式配置文件及模型文件。
```
yaml_herowind/ # 耦合求解器模块
├── calc_config.rs # yaml配置文件对应结构体
├── lib.rs # 封装解析功能函数
└── turbine_model.rs # yaml模型文件对应结构体
```
#### 2.2.1.1 calc_config.rs
在配置文件中,定义当前计算求解器选择,来流条件,气动模型选择,机组初始条件,控制模块输入参数等,在`calc_config.rs`中对上述参数单独创建结构体,实现从配置文件到软件结构体的解析。部分结构体展示如下。
`InitialConditions`结构体定义了风电机组初始状态,包括初始桨距角,初始转速,初始叶片、塔架位移,漂浮式风电机组初始浮式平台位移、角度等。
``` rust
#[derive(Serialize, Deserialize, Debug)]
pub struct InitialConditions {
    pub out_of_plane_def: f64,
    pub in_plane_def: f64,
    pub blade_1_pitch_degs: f64,
    pub blade_2_pitch_degs: f64,
    pub blade_3_pitch_degs: f64,
    pub azimuth_degs: f64,
    pub rotor_speed_rpm: f64,
    pub nacelle_yaw_degs: f64,
    pub tower_top_fore_aft_disp: f64,
    pub tower_top_side_to_side_disp: f64,
    pub ptfm_surge_disp: f64,
    pub ptfm_sway_disp: f64,
    pub ptfm_heave_disp: f64,
    pub ptfm_roll_degs: f64,
    pub ptfm_pitch_degs: f64,
    pub ptfm_yaw_degs: f64,
}
```
`ADGeneralOptions`结构体定义了湍流发展模型,尾流模型等。
``` rust
#[derive(Debug, Deserialize, Clone)]
pub struct ADGeneralOptions {
    pub echo: bool,               // Echo (flag)            
    pub dt_aero: MaybeDefault<f64>,          // DTAero (s or "default")
    pub wakemod: i32,             // WakeMod (switch)        
    pub afaeromod: i32,           // AFAeroMod (switch)      
    pub twrpotent: i32,           // TwrPotent (switch)      
    pub twrshadow: i32,           // TwrShadow (switch)      
    pub twraero: bool,            // TwrAero (flag)          
    pub frozen_wake: bool,        // FrozenWake (flag)      
    pub cavit_check: bool,        // CavitCheck (flag)      
    pub buoyancy: bool,           // Buoyancy (flag)        
    pub comp_aa: bool,            // CompAA (flag)          
    pub aa_input_file: String,    // AA_InputFile (string)  
}
```
`InflowConfigSection`结构体定义了来流风的类型,此处可选稳态风、阵风、湍流风等。
``` rust
#[derive(Debug, Deserialize, Clone)]
pub struct InflowConfigSection {
    pub echo: bool,
    pub wind_type: i32,
    pub propagation_dir: f64,
    pub vflow_ang: f64,
    pub vel_interp_cubic: bool,
    pub n_wind_vel: usize,
    pub wind_vxi_list: Vec<f64>,
    pub wind_vyi_list: Vec<f64>,
    pub wind_vzi_list: Vec<f64>,
}
```
`ControllerInput`结构体定义了控制器模块的输入参数包括dll文件路径discon.in文件路径dll文件是32位还是64位以及一些桨距、转矩等必要参数。
```rust
#[derive(Debug, Deserialize)]
pub struct ControllerInput {
    pub dll_path: String,                     // dll文件路径
    pub acc_infile: String,                   // discon.in文件路径
    pub dll_bit: i32,
    pub pitch_min: f64,                       // 最小桨距角: 0度
    pub pitch_max: f64,                       // 最大桨距角: 90度
    pub pitch_rate_min: f64,                  // 最小收桨速率 单位:弧度/秒
    pub pitch_rate_max: f64,
    pub pitch_actuator_type: i32,             // 变桨控制方式 0位置 1速率
    pub gen_power_dem: f64,                   // 风机发电功率需求 单位W
    pub gen_speed_dem: f64,                   // 风机发电转速需求 单位rpm
    pub gen_torque_dem: f64,                  // 风机发电转矩需求 单位N·m
    pub gain_optimal: f64,                    // 最优模型增益
    pub gen_speed_min: f64,                   // 切入转速 单位rpm
    pub gen_speed_max: f64,                   // 最优追踪最大转速 单位rpm
    pub pitch_control: i32,                   // 变桨响应方式 0同步 1独立
    pub yaw_control: i32,                     // 偏航控制方式 0速率 1转矩
    pub gen_speed: f64,                       //
    pub generator_efficiency: f64,            // 发电机效率
    pub freq_pitch_actuator: f64,
    pub damping_factor_pitch_actuator: f64,
    pub tau_torque_demand: f64,
}
```
`Task`结构体定义了求解器选择当前从main.rs作为入口可选择5种稳态求解器6种瞬态求解器`Task`结构体定义了本配置文件计算类型及对应计算的配置参数。
```rust
// Task 结构体,包含自定义反序列化逻辑
#[derive(Debug, Clone)]
pub struct Task {
    pub task_type: TaskType,
    pub actived: bool,
    pub params: TaskParams,
}
#[derive(Debug, Deserialize, Clone, PartialEq)]
#[serde(rename_all = "PascalCase")] // 匹配 "Aerodynamic Information" 等
pub enum TaskType {
    #[serde(rename = "Aerodynamic Information")]
    AerodynamicInformation,
    #[serde(rename = "Performance Coefficients")]
    PerformanceCoefficients,
    #[serde(rename = "Steady Power Curve")]
    SteadyPowerCurve,
    #[serde(rename = "Steady Operational Loads")]
    SteadyOperationalLoads,
    #[serde(rename = "Steady Parked Loads")]
    SteadyParkedLoads,
    #[serde(rename = "Power Production Loading")]
    PowerProductionLoading,
    Start,
    #[serde(rename = "Emergency Stop")]
    EmergencyStop,
    #[serde(rename = "Normal Stop")]
    NormalStop,
    Idling,
    Parked,
}
#[derive(Debug, Clone)]
pub enum TaskParams {
    AerodynamicInformation { data: AerodynamicInformationParams },
    PerformanceCoefficients { data: PerformanceCoefficientsParams },
    SteadyPowerCurve { data: SteadyPowerCurveParams },
    SteadyOperationalLoads { data: SteadyOperationalLoadsParams },
    SteadyParkedLoads { data: SteadyParkedLoadsParams },
    PowerProductionLoading { data: SimulationControlParams },
    Start { data: SimulationControlParams },
    EmergencyStop { data: StopSimulationParams },
    NormalStop { data: StopSimulationParams },
    Idling { data: SimulationControlParams },
    Parked { data: SimulationControlParams },
}
#[derive(Debug, Deserialize, Clone)]
pub struct AerodynamicInformationParams {
    pub wind_speed: f64,
    pub pitch: f64,
    pub omega: f64,
}
```
`ForSaveConfig`结构体定义了dlc计算中此配置文件对应的dlc工况名以及结果保存路径。计算过程中会在`save_path`保存计算结果,并且输出的结果文件会用`dlc_name`来命名。
```rust
#[derive(Debug, Deserialize, Clone)]
pub struct ForSaveConfig {
    pub dlc_name: String,
    pub save_path: String,
}
```
#### 2.2.1.2 turbine_model.rs
`turbine_model`基于WindIO定义风电机组模型主要参数包括叶片、翼型、轮毂、机舱、塔架等。
`Components`结构体集中包含叶片、轮毂等部件,每个部件又有自己对应的结构体类型,如叶片结构体包含外形、弹性参数定义结构体,轮毂部件包含外形、弹性参数结构体,共同定义了轮毂的尺寸,预锥角,质量和惯性等参数。
```rust
#[derive(Serialize, Deserialize, Debug)]
pub struct Components {
    pub blade: Blade,
    pub hub: Hub,
    pub nacelle: Nacelle,
    pub tower: Tower,
    pub floating_platform: FloatingPlatform,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Blade {
    pub outer_shape_bem: OuterShapeBEMBlade,
    pub elastic_properties_mb: ElasticPropertiesMBBlade,
    pub elastodyn_blade: ElastodynBlade,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Hub {
    pub outer_shape_bem: OuterShapeBEMHub,
    pub elastic_properties_mb: ElasticPropertiesMBHub,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct OuterShapeBEMHub {
    pub root_length: f64,
    pub pre_cone_1_deg: f64,
    pub pre_cone_2_deg: f64,
    pub pre_cone_3_deg: f64,
    pub drag_coefficient: f64,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ElasticPropertiesMBHub {
    pub hub_mass: f64,
    pub hub_inertia: f64,
    pub hub_center_mass: f64,
}
```
#### 2.2.1.3 lib.rs
`lib.rs`引用`calc_config.rs``turbine_model.rs`,使用`serde_yaml`包实现yaml文件的一行代码解析同时封装出`parse_model``parse_calc_config`两个函数供main函数使用两个函数成果解析文件会返回`turbine_model``calc_config`两个包含完整配置参数的结构体供main函数后续使用。`lib.rs`代码较少,完整展示如下。
```rust
mod turbine_model;
pub mod calc_config;
use serde_yaml;
use std::fs;
pub use turbine_model::TurbineModel;
pub use calc_config::CalcConfigrations;
pub fn parse_model(file: &str) -> TurbineModel {
    let file_content =
        fs::read_to_string(file).expect("Failed to read YAML file");
    match serde_yaml::from_str::<TurbineModel>(&file_content) {
        Ok(turbine_model) => turbine_model,
        Err(e) => panic!("Error parsing YAML: {}", e),
    }
}
pub fn parse_calc_config(file: &str) -> CalcConfigrations {
    let file_content =
        fs::read_to_string(file).expect("Failed to read YAML file");
    match serde_yaml::from_str::<CalcConfigrations>(&file_content) {
        Ok(calc_config) => calc_config,
        Err(e) => panic!("Error parsing YAML: {}", e),
    }
}
```
### 2.2.1. main.rs
- `main`:耦合求解器主函数,执行气动、水动、多体模块数据结构体的初始化,模块初始化,时间迭代过程。
### 2.2.2. coupled_solver_sub.rs
- `fast_init`:初始化函数,按照参与模块初始化,包括气动模块、水动模块、多体模块的初始化。
- `fast_solution_0`耦合求解器t0时刻计算。
- `calc_outputs_and_solve_for_inputs`:计算多模块的输出,模块间交互数据。
- `solve_option_2a_inp2_bd`:多体模块执行计算,气动模块接收多体计算数据。
- `solve_option_2`:气动模块计算,多体模块接收气动计算数据。
- `fast_solution_t`:耦合求解器时间推进计算。
- `fast_extrap_interp_mods`:多体动力学模块输入外推。
- `fast_advance_states`多体动力学模块状态推进使用四阶Adams-Bashforth-Moulton预估矫正方法。
- `transfer_platform_motion_to_hd`:多体动力学模块输出平台运动传递给水动模块。
- `transfer_hd_forces_moments_to_ed`:水动模块输出力和力矩传递给多体动力学模块。
- `calc_ed_hd_residual`:计算多体与水动模块传递结果残差。
## 2.3. 耦合求解器流程图
<figure style="text-align: center;">
<img src="pics/耦合求解器流程图.png" alt="图片描述">
<figcaption style="text-align: center;">图1: 耦合求解器流程图</figcaption>
</figure>
耦合求解器在时间推进计算中首先初始化气动、水动、多体模块然后进行t0时刻计算之后进行时间推进计算。t0时刻调用`calc_outputs_and_solve_for_inputs`函数,多体动力学模块根据输入参数计算该时刻各自由度响应,如果是多体与气动耦合,多体将响应传递给气动模块,如叶片节点的变形量,变形速度等,气动模块接收响应,执行自身模块计算,计算完成后将叶片节点上的力和力矩回传给多体动力学模块。如果是多体模块和水动模块联合,为了计算稳定性,在传递中需要额外加入雅可比矩阵计算,结合残差函数`calc_ed_hd_residual`计算得到的delta_u计算从新的delta_u给多体动力学模块赋值。
时间推进过程中多体动力学模块需要调用`fast_extrap_interp_mods`函数将输入外推至下一时刻,然后调用`fast_advance_states`函数进行状态推进推进过程中需要使用四阶龙格库塔方法或Adams-Bashforth-Moulton预估矫正方法。推进完成后调用`calc_outputs_and_solve_for_inputs`函数计算流程与t0时刻相同。持续开展时间迭代直到达到仿真结束时间步计算结束。
## 2.4 steady operational loads
## 2.5 Steady parked loads
## 2.6 Simulations

Binary file not shown.

View File

@ -6,7 +6,7 @@
{"id":"0b25ceb1c28f6da1","type":"text","text":"# 九月已完成\n\n\n","x":-482,"y":240,"width":440,"height":340},
{"id":"b79f3a0f35402ec1","type":"text","text":"# 十月已完成\n","x":34,"y":240,"width":440,"height":340},
{"id":"1597ad15730745ea","type":"text","text":"# 十一月已完成\n\nP1 suno youtube视频\n- 生成音频\n- 动画 done\n- 音频有什么特征\n- 控制音乐时长","x":540,"y":240,"width":440,"height":340},
{"id":"5aac58c184e57887","type":"text","text":"# 计划\n这周要做的3~5件重要的事情这些事情能有效推进实现OKR。\n\nP1 必须做。P2 应该做\n\n\nP1 海龟交易法 \n- 数据爬虫bug解决\n- 选股部分\n- 9点28-29分开始检测价格做出预备\n- 突破价格似乎不对-以及突破但是没有提示\n\nP1 短剧流程串起来 部分逻辑更新\n- 如当天收集任务,剪辑前一天任务,拆分收集与剪辑任务数据库\n- 拆分发布流程\n","x":-490,"y":-573,"width":450,"height":347}
{"id":"5aac58c184e57887","type":"text","text":"# 计划\n这周要做的3~5件重要的事情这些事情能有效推进实现OKR。\n\nP1 必须做。P2 应该做\n\n\nP1 海龟交易法 \n- 数据爬虫bug解决\n- 选股部分\n- 9点28-29分开始检测价格做出预备\n- 突破价格似乎不对-以及突破但是没有提示\n\nP1 短剧流程串起来 部分逻辑更新\n- 如当天收集任务,剪辑前一天任务,拆分收集与剪辑任务数据库\n- 拆分发布流程 done\n","x":-490,"y":-573,"width":450,"height":347}
],
"edges":[]
}

View File

@ -1,5 +1,15 @@
卡桨 跑飞等工况的载荷对比情况
HEROWIND与叶片设计的结合问题
郑磊
模态分析还有差距的原因
软件与程序的差别
更贴近现场的功能
1 三只叶片不对称
@ -7,4 +17,8 @@
3 叶片修好了之后对其他部件的影响
4 边算边展示曲线
5 计算完成后展示3d运动过程
5 计算完成后展示3d运动过程
边开发边验证
进度还要加快争取26年1.0版本拿出来