obsidian_backup/工作总结/2025提交文档/耦合模块开发者手册v0.6.md

77 lines
5.0 KiB
Markdown
Raw Normal View History

2025-12-23 17:09:38 +08:00
[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. 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