From 1957118325a63812996cdfe460310697770744fe Mon Sep 17 00:00:00 2001 From: yize Date: Fri, 18 Jul 2025 17:08:30 +0800 Subject: [PATCH] vault backup: 2025-07-18 17:08:29 --- 工作OKRs/25.6-8 OKR.canvas | 6 +++--- 工作OKRs/xxx.md | 20 +++++++++++++------- 工作总结/周报/周报86-郭翼泽.docx | Bin 0 -> 22339 bytes 线性化求解器/计算流程框架.canvas | 24 +++++++++++++++++++++--- 4 files changed, 37 insertions(+), 13 deletions(-) create mode 100644 工作总结/周报/周报86-郭翼泽.docx diff --git a/工作OKRs/25.6-8 OKR.canvas b/工作OKRs/25.6-8 OKR.canvas index 165baf6..b336d0a 100644 --- a/工作OKRs/25.6-8 OKR.canvas +++ b/工作OKRs/25.6-8 OKR.canvas @@ -1,12 +1,12 @@ { "nodes":[ {"id":"8359617e1edc48ba","type":"text","text":"状态指标:\n推进OKR的时候也要关注这些事情,它们是完成OKR的保障。\n\n\n效率状态 green","x":-76,"y":-306,"width":456,"height":347}, - {"id":"a4eaccbbfadaaf17","type":"text","text":"# 目标:多体动力学模块完善\n### 每周盘点一下它们\n\n\n关键结果:建模原理、建模方法掌握 (9.2/10)\n\n关键结果:风机多体动力学文献调研情况完成 (5.5/10)\n关键结果:风机模型线性化原理、方法掌握 (7/10)","x":-76,"y":-693,"width":456,"height":347}, + {"id":"a4eaccbbfadaaf17","type":"text","text":"# 目标:多体动力学模块完善\n### 每周盘点一下它们\n\n\n关键结果:建模原理、建模方法掌握 (9.2/10)\n\n关键结果:风机多体动力学文献调研情况完成 (5.5/10)\n关键结果:风机模型线性化原理、方法掌握 (7.5/10)","x":-76,"y":-693,"width":456,"height":347}, {"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":"# 7月已完成\n\nP1 工况点稳态变形量求解,F=kx\n- 文献调研,初步确定思路 done\n- 推导方程 done\n- 编写组建增广矩阵,求解广义坐标代码 done","x":-220,"y":134,"width":440,"height":560}, + {"id":"82708a439812fdc7","type":"text","text":"# 7月已完成\n\nP1 工况点稳态变形量求解,F=kx\n- 文献调研,初步确定思路 done\n- 推导方程 done\n- 编写组建增广矩阵,求解广义坐标代码 done\n- 测试广义坐标到叶片变形量功能 可以变形,气动Cp会改变\n\nP1 职称评审系统填写,材料梳理上传 盖章","x":-220,"y":134,"width":440,"height":560}, {"id":"505acb3e6b119076","type":"text","text":"# 6月已完成\n\n\nP1 结果对比\n- Herowind 带3.5气动与fast3.5对比 相同\n- Herowind 带4.0气动与fast4.0对比 相同\n- Herowind 带hrl气动与fast对比 需气动支持15MW\n- 叶根坐标系转换 \n\t- 叶尖变形量 - 变形向量 dot product 叶根坐标系方向\n\t- 叶片载荷输入量呢 载荷传递在blade mesh.force moment,mesh.orientation = coord_sys.n\n\nP1 Bladed交流问题汇总\n\nP1 模型线性化原理 done\n- Bladed 线性化理论手册 仔细阅读\n- multibody blade transform\n- fast线性化理论\n- 梳理Bladed线性化方法框架\n\n\nP1 编写线性化理论手册 done\nP1 上手Bladed \\ fast 线性化功能,研究OpenFAST线性化实现原理 done","x":-700,"y":134,"width":440,"height":560}, {"id":"30cb7486dc4e224c","type":"text","text":"# 8月已完成\n\n","x":260,"y":134,"width":440,"height":560}, - {"id":"c18d25521d773705","type":"text","text":"# 计划\n这周要做的3~5件重要的事情,这些事情能有效推进实现OKR。\n\nP1 必须做。P2 应该做\n\n\nP1 柔性部件 叶片、塔架主动力惯性力算法 主线\n- 变形体动力学 简略看看ing\n- 柔性梁弯曲变形振动学习,主线 \n\t- 广义质量 刚度矩阵及含义\n- 如何静力学求解 \n\t- 基于本构方程 读孟的论文\n\t- normal mode shape 能否使用?\n\t\n- 梳理bladed动力学框架 this week\n\t- 子结构文献阅读\n\t- 叶片模型建模 done\n\nP1 工况点稳态变形量求解,F=kx\n- 测试广义坐标到叶片变形量功能\n- 连接气动测试,存在一个问题,气动是否要用稳态模型\n- 迭代,有限差分?用虚拟时间步来迭代了\nP1 数值扰动+回归的线性化方法原理探究\n\nP1 职称评审系统填写,材料梳理上传 盖章\n\nP2 如何优雅的存储、输出结果。\nP2 yaw 自由度再bug确认 已知原理了\n","x":-597,"y":-693,"width":450,"height":347} + {"id":"c18d25521d773705","type":"text","text":"# 计划\n这周要做的3~5件重要的事情,这些事情能有效推进实现OKR。\n\nP1 必须做。P2 应该做\n\n\nP1 柔性部件 叶片、塔架主动力惯性力算法 主线\n- 变形体动力学 简略看看ing\n- 柔性梁弯曲变形振动学习,主线 \n\t- 广义质量 刚度矩阵及含义\n- 如何静力学求解 \n\t- 基于本构方程 读孟的论文\n\t- normal mode shape 能否使用?\n\t\n- 梳理bladed动力学框架 this week\n\t- 子结构文献阅读\n\t- 叶片模型建模 done\n\nP1 工况点稳态变形量求解,F=kx\n\n- 连接气动测试,完成。存在一个问题,气动是否要用稳态模型\n- 直接迭代到变形量收敛 思路确定了\n- x.qt x.qdt数据如何从dxdt.qdt拿来/更新,预估校正方法\n\n\nP1 数值扰动+回归的线性化方法原理探究\n\n\n\nP2 如何优雅的存储、输出结果。\nP2 yaw 自由度再bug确认 已知原理了\n","x":-597,"y":-693,"width":453,"height":347} ], "edges":[] } \ No newline at end of file diff --git a/工作OKRs/xxx.md b/工作OKRs/xxx.md index f4001dc..604c7ef 100644 --- a/工作OKRs/xxx.md +++ b/工作OKRs/xxx.md @@ -1,11 +1,17 @@ -自主开发基于Python的风电机组叶片气动设计软件,实现稳态叶素动量理论(BEM)方法的全自主实现。该软件在气动性能评估精度上达到行业主流软件Bladed的水平相当,构建高自由度叶片外形控制点体系。采用多目标优化算法确保各叶素截面工作在最优攻角区间。软件架构采用模块化设计思想,集成多线程并行计算框架,显著缩短复杂叶片的优化设计周期。应用于16MW级叶片气动设计,气动性能满足设计要求。 -自主开发基于Rust语言的风电机组多体动力学求解器,实现从基础结构到关键柔性部件(叶片、塔架)的全系统建模能力,支持固定式与漂浮式风电机组的多场景仿真。采用多体系统动力学理论建立风电机组各部件(塔架、叶片、机舱等)的运动学与动力学方程,考虑柔性体的模态分解与刚柔耦合效应。该求解器采用完全自主知识产权的算法框架,基于Rust语言的内存安全机制与高性能编译特性,实现代码自主可控,计算精度达到国际主流软件OpenFAST的同等水平。通过理论建模、算法开发实现了多体动力学理论在风电工程中的深度落地。 +基于Rust语言,独立开发风电机组多体动力学求解器,实现从基础结构到关键柔性部件(叶片、塔架)的全系统建模能力,支持固定式与漂浮式风电机组的多场景仿真。采用多体系统动力学理论建立风电机组各部件(塔架、机舱、传动链、轮毂、叶片等)的运动学与动力学方程,考虑柔性体的模态分解与刚柔耦合效应。编写yaml文件解析模块,该求解器可使用yaml格式输入文件,实现模型和工况的快速读取。该求解器采用完全自主知识产权的算法框架,基于Rust语言的内存安全机制与高性能编译特性,实现代码自主可控,计算精度达到国际主流软件OpenFAST的同等水平。 + +基于Rust语言,牵头开发风电机组正常发电工况求解器,使用预估矫正方法实现风电机组整机状态的时间推进,耦合气动、多体、水动模块,同时为控制模块保留接口。能够实现固定式、漂浮式风电机组正常发电工况时域仿真。牵头开发稳态运行工况,稳态停机工况求解器,编写稳态机组变形量计算求解器,基于有限差分方法实现气动、多体耦合迭代,创新性实现稳态运行工况中转速、变桨速度自动查找算法,显著提升稳态工况仿真效率。 + +基于Python,独立开发风电机组叶片气动外形设计软件,实现稳态叶素动量理论(BEM)方法的全自主实现。该软件在气动性能评估精度上与行业主流软件Bladed水平相当,构建高自由度叶片外形控制点体系。采用多目标优化算法确保各叶素截面工作在最优攻角区间。软件架构采用模块化设计思想,集成多线程并行计算框架,显著缩短复杂叶片的优化设计周期。应用于16MW级叶片气动设计,气动性能满足设计要求。 +| 技术报告 | | +| ------------- | --- | +| 软件调研报告 | | +| 气动设计报告 | | +| 气动理论及叶片设计软件开发 | | +| 多体动力学求解器开发手册 | | +| | | +本报告详细介绍了叶片、塔架的模态计算方法,基于多体动力学理论建立塔架、机舱、传动链、轮毂、叶片等刚性、柔性部件的多体动力学公式。基于此报告理论内容,开发了多体动力学求解器,包含每个部件随体坐标系定义,偏速度、偏角速度、加速度求解,力和力矩的求解等函数。同时开发正常发电工况求解器,使用预估校正方法实现风电机组整机状态的时间推进,耦合气动、多体、水动模块,同时为控制模块保留接口。能够实现固定式、漂浮式风电机组正常发电工况时域仿真。因保密原因在报告中隐去软件架构相关内容。该求解器采用完全自主知识产权的算法框架,基于Rust语言的内存安全机制与高性能编译特性,实现代码自主可控,计算精度达到国际主流软件OpenFAST的同等水平。 -| 技术报告 | | -| ------------ | --- | -| 软件调研报告 | | -| 气动设计报告 | | -| 多体动力学求解器开发手册 | | diff --git a/工作总结/周报/周报86-郭翼泽.docx b/工作总结/周报/周报86-郭翼泽.docx new file mode 100644 index 0000000000000000000000000000000000000000..fac561355b18a1f9e00e515de04f930e2f48b385 GIT binary patch literal 22339 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