From 0e5dccdfb7a81839c9308b4067fed09f8020d666 Mon Sep 17 00:00:00 2001 From: yize Date: Fri, 25 Jul 2025 16:57:00 +0800 Subject: [PATCH] vault backup: 2025-07-25 16:56:59 --- 叶片制造装置/专利布局.md | 21 ++ .../CaseToolBox项目学习/casetoolbox项目分析.md | 205 +++++++++++++++++- 工作OKRs/25.6-8 OKR.canvas | 6 +- 工作总结/周报/周报87-郭翼泽.docx | Bin 0 -> 22629 bytes 4 files changed, 227 insertions(+), 5 deletions(-) create mode 100644 叶片制造装置/专利布局.md create mode 100644 工作总结/周报/周报87-郭翼泽.docx diff --git a/叶片制造装置/专利布局.md b/叶片制造装置/专利布局.md new file mode 100644 index 0000000..4d3aa88 --- /dev/null +++ b/叶片制造装置/专利布局.md @@ -0,0 +1,21 @@ + +叶片工艺 + +在此布局点上进行专利布局的角度如下: + +a)叶片制造工艺的整体构思,可涉及整体工艺流程的改进,例如将某个部件设计为预制件,与其他部分通过工艺过程结合在一起的整体工艺构思; + +b)特殊结构的制备工艺,例如叶片前缘具有多层防护结构,这种防护结构处的制备工艺; + +c)关于主梁、腹板、铺层等常规部件/结构的制备工艺改进,需记载较为详细的工艺步骤、参数选取等特征以提高授权几率; + +d)表面保护层的制备工艺; + +e)自动化铺层设备/模具的结构改进,可以包括模具、夹持工具、驱动装置等结构细节; + +f)叶片的打磨、涂层涂覆等处理设备的结构改进。 + + +叶片的制造工艺,对于叶片产品有重要影响,也是应该进行关注的布局点;相较之下,叶片的制造设备、测试方法、测试装置和叶片材料的重视程度可适当调低,可根据自身的研发节奏和市场策略进行布局决策。 + +在进行叶片工艺和叶片测试技术方面的专利申请时,均可优先进行设备类型(制造设备和测试装置)的专利申请,利用设备类专利易于取证的优势,起到较好的保护效果;但需注意,如果与制造设备相配套的制造工艺、与测试装置相配套的测试方法上同样取得了创新成果,制造设备与配套制造工艺、测试装置与配套测试方法应同日进行专利申请,以免在先的专利申请影响在后专利申请的授权前景。 \ No newline at end of file diff --git a/多体+耦合求解器/CaseToolBox项目学习/casetoolbox项目分析.md b/多体+耦合求解器/CaseToolBox项目学习/casetoolbox项目分析.md index 183b560..6f85066 100644 --- a/多体+耦合求解器/CaseToolBox项目学习/casetoolbox项目分析.md +++ b/多体+耦合求解器/CaseToolBox项目学习/casetoolbox项目分析.md @@ -1,6 +1,5 @@ -帽子 由xxx开发的xxxx - +CASEToolBox 是由DTU M. H. Hansen开发的一款用于执行风电机组计算气动-伺服-弹性分析的软件包。该代码仍在开发中。该软件包包含用于进行功率和稳定性分析的工具 CASEStab,以及用于分析二维翼型的推力变形和扭角的空气动力学阻尼工具 CASEDamp。目前,CASEStab 仅可用于计算具有相同叶片的风轮在均匀气流中无重力作用下的稳态,以及计算结构的叶片模态频率和模态。 ``` casetoolbox @@ -931,3 +930,205 @@ __主要组成部分和功能:__ - __目的:__ 包的入口函数,用于启动气动阻尼分析器。 - __功能:__ 尝试读取 HAWC2 或 Flex 格式的极线文件,然后实例化 `aero_damp_analyzer` 类并显示交互式绘图界面。 + + +# 计算稳态运行状态叶片模态、频率 + +从`structural_blade_modes_H2_elements.py`入口,该程序计算了DTU 10MW风电机组在standstill、风速为0,转速10rpm、风速11m/s,转速9.6rpm三种工况下叶片的十阶模态频率和形状,并于hawc2软件计算结果对比。 + +脚本中调用的主要函数及其功能: + +__1. 初始化和设置:__ + +- `os.getcwd()`: 获取当前工作目录,用于构建输入和输出文件的路径。 +- `os.path.join(work_folder, 'DTU10MW_H2_elements_few_ops.json')`: 将工作目录路径与文件名连接起来,创建 JSON 配置文件的完整路径。 +- `casestab.rotor_models(...)`: 通过从指定的 JSON 文件加载风力涡轮机模型配置来初始化 `rotor_models` 对象。此对象包含整个涡轮机的定义,包括其子结构(如叶片)。 + +__2. 静止叶片结构模态(第一个运行工况):__ + +- `rotor_models.models[0].substructures[1]`: 访问第一个运行模型(索引 0),然后选择叶片子结构(假设索引 1 代表叶片)。 +- `rotor_models.models[0].update_all_substructures(0.0)`: 更新第一个模型所有子结构的质量和刚度矩阵。`0.0` 表示静止状态,没有旋转或外部力。 +- `blade.compute_modes()`: 使用 CASEStab 方法计算叶片子结构的固有频率和模态形状。结果存储在 `casestab_sol` 中。 +- `np.loadtxt(...)`: 从 `blade.cmb` 加载频率数据,从 `blade_standstill.amp` 加载模态形状数据(HAWCStab2 结果)到 NumPy 数组中进行比较。`skiprows` 用于跳过文件中的标题信息。 +- `np.zeros(...)`: 创建全零的 NumPy 数组,用于预分配存储 HAWCStab2 模态形状的振幅 (`modeamp`) 和相位 (`modepha`) 的空间。 +- `np.radians(...)`: 将从 HAWCStab2 结果中读取的相位角从度转换为弧度。 +- `blade.plot_substructure_modes(subs_mode_solutions, nmodes, False, fname)`: 绘制计算出的结构模态。它接受一个解决方案列表(CASEStab 和 HAWCStab2)、要绘制的模态数量 (`nmodes`)、一个布尔标志(可能用于显示选项)以及用于保存绘图的文件名。 + +__3. 额定转速下的叶片结构模态(第二个运行工况):__ + +- `rotor_models.models[1].substructures[1]`: 从第二个运行模型(索引 1)中选择叶片子结构。 +- `rotor_models.models[1].compute_substructure_steady_state_deformation(1)`: 计算第二个模型子结构的稳态变形。此步骤考虑了额定转速下作用在旋转叶片上的离心力。 +- `blade.compute_modes()`: 在额定转速条件下计算叶片的结构模态。 +- `np.loadtxt(...)`, `np.zeros(...)`, `np.radians(...)`: 与静止部分类似,这些函数用于加载、处理和准备 HAWCStab2 结果 (`blade_10_rpm.amp`) 以进行比较。 +- `blade.plot_substructure_modes(...)`: 绘制额定转速工况下的模态,比较 CASEStab 和 HAWCStab2 的结果。 + +__4. 11 米/秒风速下偏转叶片的结构模态(第三个运行工况):__ + +- `rotor_models.models[2].substructures[1]`: 从第三个运行模型(索引 2)中选择叶片子结构。 +- `rotor_models.models[2].compute_rotor_stationary_steady_state(0)`: 计算整个转子模型在 11 米/秒风速下的静止稳态。这涉及计算转子在气动载荷和重力载荷共同作用下的平衡位置,这会影响叶片的结构行为。 +- `blade.compute_modes()`: 在 11 米/秒运行条件下计算叶片的结构模态。 +- `np.loadtxt(...)`, `np.zeros(...)`, `np.radians(...)`: 这些函数再次用于加载、处理和准备 HAWCStab2 结果 (`blade_11ms.amp`) 以进行比较。 +- `blade.plot_substructure_modes(...)`: 绘制 11 米/秒运行工况下的模态,比较 CASEStab 和 HAWCStab2 的结果。 + +### update_all_substructures函数 + +这个函数位于 `casetoolbox/casestab/model_assembler.py` 中的 `model` 类中。它的主要目的是在给定时间 `t` 的情况下,更新模型中所有子结构(substructures)的当前位置、方向、内部力和惯性状态。这对于模拟风力涡轮机在不同运行条件下的动态行为至关重要。 + +__功能概述:__ + +该函数遍历模型中的每一个子结构,并执行以下关键更新: + +1. __子结构内部更新 (`s.subs.update_substructure()`):__ + + - 这个调用会更新子结构(例如,`corotbeam_substructure` 实例)内部的节点三联体(nodal triads)和位置。对于柔性梁,这意味着根据其当前的变形状态更新每个梁单元的几何形状。 + - 它还会更新局部变形及其一阶和二阶导数,以及每个形状函数阶次的挠度子向量及其导数。这些是计算内部力和惯性属性的基础。 + +2. __轴承状态更新 (`s.bearing.state.update(t)`):__ + + - 如果子结构包含轴承(`s.bearing.bear_flag` 为 True),则会更新轴承的状态。这可能包括根据时间 `t` 更新轴承的旋转角度或速度,特别是对于“恒定速度”类型的轴承。 + +3. __子结构在地面固定坐标系中的位置和方向更新:__ + + - 函数会计算每个子结构在地面固定坐标系中的当前位置向量 `s.r0` 和方向矩阵 `s.R0`。 + - 如果子结构连接到另一个子结构(`s.isubs_connection > -1`),则其位置和方向是根据其支撑子结构的位置、方向以及连接节点处的局部变形来计算的。 + - 如果子结构是地面固定的(`s.isubs_connection == -1`),则其位置通常为零向量,方向由其初始方向矩阵 `s.S` 和轴承的旋转 `s.bearing.state.B` 决定。 + - 还会计算这些位置和方向的时间导数(`s.R0TdR0`, `s.R0TddR0`, `s.R0Tdr0`, `s.R0Tddr0`),这些对于惯性力的计算是必需的。 + +4. __弹性内部力和刚度矩阵更新 (`s.subs.update_elastic_internal_forces_and_stiffness()`):__ + + - 这个调用会计算子结构内部的弹性恢复力 (`s.Fint`) 和弹性刚度矩阵 (`s.K`)。对于柔性梁,这涉及到根据其当前的变形计算梁单元的应变能和相应的力。 + +5. __惯性力更新 (`s.subs.update_inertia()`):__ + + - 这个调用会更新子结构的惯性状态,包括总质量、惯性矩以及与质量和惯性相关的导数。 + +6. __离心力、陀螺矩阵和离心刚度矩阵更新 (`s.subs.inertia.compute_local_centrifugal_forces_and_matrix(...)`):__ + + - 根据子结构的时间导数(速度和角速度),计算离心力 (`Fc1`)、陀螺矩阵 (`G11`) 和离心刚度矩阵 (`Kc11`)。这些是旋转体动力学中的重要组成部分。 + +7. __气动弹性耦合更新 (`s.subs.update_aeroelastic_coupling()`):__ + + - 如果子结构是叶片的一部分(`s.subs.aero_part` 为 True),则会更新气动弹性耦合。这包括更新气动计算点(ACP)的位置和方向,以及计算将分布式气动力和力矩转换为节点力所需的转换矩阵。 + + `update_all_substructures` 是一个核心函数,它在每个时间步或每次迭代中被调用,以确保模型中所有子结构的几何、力学和惯性状态都得到准确更新,为后续的动力学或模态分析提供正确的基础。 + +## compute_rotor_stationary_steady_state 函数 + +这个函数位于 `casetoolbox/casestab/model_assembler.py` 中的 `model` 类中。它的主要目的是计算转子在静止稳态下的变形和力平衡。这通常涉及到迭代求解气动载荷和结构变形之间的耦合问题,直到达到收敛。 + +__功能概述:__ + +该函数通过一个迭代过程来寻找转子的静止稳态,即在给定风速和操作条件下,气动力和结构内部力达到平衡时的变形状态。 + +__参数:__ + +- `irotor`: 要计算的转子的索引。 +- `Rnorm_limit`: 残差的收敛容差。当力平衡残差的范数低于此值时,迭代停止。 +- `include_deform`: 布尔值,指示是否在迭代中考虑结构变形。如果为 `False`,则只计算气动力,不更新结构变形。 + +__工作流程和关键步骤:__ + +1. __初始更新 (`self.update_all_substructures(0.0)`):__ + + - 在开始迭代之前,首先调用 `update_all_substructures(0.0)`。这会初始化所有子结构在时间 `t=0.0` 时的位置、方向、内部力和惯性状态。这是稳态计算的起点。 + +2. __指向目标转子和叶片:__ + + - `r = self.rotors[irotor]`: 获取要分析的特定转子对象。 + - `b = r.blades[0]`: 由于稳态计算假设转子是轴对称的(`axissym`),因此通常只使用第一个叶片的数据进行计算,然后将结果乘以叶片数量。 + +3. __外层迭代(气动力收敛循环):__ + + - `while Anorm > Rnorm_limit:`: 这是一个外层循环,用于确保气动力的分布在迭代过程中收敛。`Anorm` 代表气动力变化的范数。 + + - __重置功率和推力:__ 在每次外层迭代开始时,将转子的功率 (`r.power`) 和推力 (`r.thrust`) 重置为零。 + + - __更新稳态叶片力 (`self.update_steady_state_all_rotors()`):__ + + - 这个调用会更新所有转子上的气动力。对于每个叶片,它会调用 `rotor.update_steady_blade_forces()`。 + - `rotor.update_steady_blade_forces()` 内部会使用 BEM(叶素动量理论)方法,通过 `scipy.optimize.root` 求解每个气动计算点(ACP)处的轴向和切向诱导因子,从而计算出气动力和力矩。这个过程本身可能包含一个内部的求解循环。 + +4. __内层迭代(结构变形收敛循环):__ + + - `while Rnorm > Rnorm_limit:`: 这是一个内层循环,用于确保结构变形达到力平衡。`Rnorm` 代表力平衡残差的范数。 + + - __更新所有子结构 (`self.update_all_substructures(0.0)`):__ 在每次内层迭代中,再次调用此函数,以根据当前的变形状态更新所有子结构的几何、力和惯性。 + + - __获取气动力和力矩:__ 从叶片中获取当前的气动力 (`force`) 和力矩 (`moment`)。 + + - __计算广义力 (`faero`) 和节点力 (`fnode`):__ + + - `faero=self.substructures[isubs].subs.TQf@force + self.substructures[isubs].subs.TQm@moment`: 将分布式气动力和力矩转换为子结构节点上的广义力。 + - `fnode=faero-self.substructures[isubs].subs.inertia.Fc1`: 计算总节点力,包括气动力和离心力(`Fc1`)。 + + - __构建切线刚度矩阵 (`K`):__ + - `K = self.substructures[isubs].subs.K+self.substructures[isubs].subs.inertia.Kc11+Ksf`: 构建总切线刚度矩阵。它包括弹性刚度 (`subs.K`)、离心刚度 (`subs.inertia.Kc11`) 和由气动力引起的几何刚度 (`Ksf`)。`Ksf` 是通过 `subs.TKQf` 和 `subs.TKQm` 矩阵计算的,这些矩阵表示气动力对刚度的贡献。 + + - __计算残差 (`R`) 和位移增量 (`x`):__ + + - `R=fnode-self.substructures[isubs].subs.Fint`: 计算力平衡残差,即外部节点力与内部弹性力 (`Fint`) 之间的差值。 + - `x=solve(K,R)`: 求解线性方程组 `K * x = R`,得到当前的位移增量 `x`。 + + - __更新变形 (`self.substructures[isubs].subs.q+=relaxation_factor*x`):__ + - 将计算出的位移增量 `x` 应用到子结构的广义坐标 `q` 上,从而更新其变形。这里使用了 `relaxation_factor` 来控制步长,以帮助收敛,防止过大的增量导致不稳定。 + + - __检查内层收敛:__ `Rnorm=np.linalg.norm(R)` 计算残差的范数,如果低于 `Rnorm_limit`,则内层循环收敛。 + +5. __更新功率和推力:__ + + - 在内层循环收敛后,根据当前的力分布计算转子的总功率 (`r.power`) 和推力 (`r.thrust`)。这涉及到将子结构坐标系中的力转换到地面固定坐标系,并与速度和角速度相乘。 + +6. __检查外层收敛:__ + + - `Anorm=np.linalg.norm(b.f-force0)`: 计算当前气动力分布与上一次外层迭代开始时的气动力分布之间的差异范数。如果 `include_deform` 为 `True`,则此值用于判断外层循环是否收敛。 + - 如果 `include_deform` 为 `False`,则 `Anorm` 被设置为 0,表示只进行一次气动力计算,不考虑变形对气动力的影响。 + +7. __轴对称转子处理:__ + + - 如果转子是轴对称的(`'axissym' in r.type`),则最终的功率和推力会乘以叶片数量 `r.Nb`,因为计算是基于单个叶片的。 + - `r.CP = r.power/Pkin`: 计算功率系数 `CP`,这是风力涡轮机性能的关键指标。 + +## `compute_modes` 函数 + +这个函数位于 `casetoolbox/casestab/model_assembler.py` 中的 `substructure` 类中。它的主要目的是计算子结构的结构模态(固有频率和模态形状)。 + +__功能概述:__ + +该函数主要针对柔性梁子结构(`corotbeam` 类型)执行模态分析: + +1. __类型检查 (`if subs.type == 'corotbeam':`):__ + + - 首先检查子结构类型是否为 `corotbeam`。如果不是,则返回空的模态解决方案,因为只有柔性梁才具有结构模态。 + +2. __获取梁单元信息:__ + + - `zpos=subs.pos[2,1:]`: 获取梁单元的纵向位置(z坐标),用于后续绘图。 + +3. __设置质量和刚度矩阵:__ + + - `K = subs.K+subs.inertia.Kc11`: 构建总刚度矩阵 `K`。它包括梁的弹性刚度矩阵 `subs.K` 和由离心力引起的几何刚度(或离心刚度)矩阵 `subs.inertia.Kc11`。 + - `M = subs.inertia.M11`: 获取梁的质量矩阵 `M`。 + +4. __求解特征值问题:__ + + - `Minv = np.linalg.inv(M)`: 计算质量矩阵的逆。 + - `A = np.concatenate(...)`: 构造一个状态空间矩阵 `A`。这是将二阶动力学方程 `M * ddot(q) + G * dot(q) + K * q = F` 转换为一阶状态空间形式 `dot(x) = A * x` 的标准方法,其中 `x = [q; dot(q)]`。这里,它考虑了质量矩阵 `M`、刚度矩阵 `K` 和陀螺矩阵 `subs.inertia.G11`(尽管在模态分析中通常假设无阻尼,但这里可能包含了陀螺效应)。 + - `evals,evecs=np.linalg.eig(A)`: 求解广义特征值问题。`evals` 包含特征值(复数,其虚部与固有频率相关),`evecs` 包含对应的特征向量(模态形状)。 + +5. __排序和处理特征值/特征向量:__ + + - `isort=np.argsort(np.imag(evals))[6*subs.nelem:]`: 根据特征值的虚部(即固有频率)对特征值和特征向量进行排序。`6*subs.nelem` 可能是为了跳过一些零频率或不相关的模态(例如,刚体模态)。 + - `freq=np.imag(evals[isort])/np.pi/2.0`: 从排序后的特征值的虚部计算固有频率(Hz)。 + - `modeamp` 和 `modepha`:初始化用于存储模态振幅和相位的 NumPy 数组。 + - 循环遍历每个模态,从特征向量中提取位移和旋转的振幅和相位。 + - `np.abs(...)` 和 `np.angle(...)`: 用于从复数特征向量中提取振幅和相位。 + - `np.radians(...)`: 将旋转角度转换为弧度。 + - __Rodrigues 参数到欧拉角的转换:__ 对于旋转自由度,代码将 Rodrigues 参数转换为欧拉角。这里特别提到“evecs 的尺度(范数)必须很小”,这暗示了 Rodrigues 参数在处理大旋转时可能遇到的非线性问题,但在小变形模态分析中通常是有效的。 + - __模态命名和归一化:__ 根据模态在三个方向(Inplane, Out-of-plane, Torsion)上的最大振幅,为模态命名(例如“1F”、“1E”、“1T”)。然后对模态形状进行归一化,通常是使最大振幅为 1。 + +6. __保存模态解决方案:__ + + - 将计算出的模态信息(z位置、频率、振幅、相位、名称)存储在一个字典 `subs_mode_solution` 中,并返回。 + +`compute_modes` 函数是进行结构动力学分析的核心,它通过求解特征值问题来确定柔性子结构的固有振动特性,这些特性对于理解结构响应和避免共振至关重要。 + diff --git a/工作OKRs/25.6-8 OKR.canvas b/工作OKRs/25.6-8 OKR.canvas index 5e2a552..427a5af 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.5/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关键结果:风机模型线性化原理、方法掌握 (8/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\n- 测试广义坐标到叶片变形量功能 可以变形,气动Cp会改变\n\nP1 职称评审系统填写,材料梳理上传 盖章","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- 连接气动测试,完成。存在一个问题,气动是否要用稳态模型\n- 直接迭代到变形量收敛 思路确定了 完成\n- x.qt x.qdt数据如何从dxdt.qdt拿来/更新,预估校正方法 steady中预估矫正方法去掉了\n\nP1 职称评审系统填写,材料梳理上传 盖章\n\nP1 数值扰动+回归的线性化方法原理探究\n\nP1 dtu casestab开源项目,稳态运行状态叶片模态、频率计算方法研究。\n- 形成项目研究报告","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\t\n- 梳理bladed动力学框架 this week\n\t- 子结构文献阅读\n\t- 叶片模型建模 done\n\nP1 工况点稳态变形量求解,F=kx\n\n- 连接气动测试,完成。存在一个问题,气动是否要用稳态模型\n- 直接迭代到变形量收敛 思路确定了\n- x.qt x.qdt数据如何从dxdt.qdt拿来/更新,预估校正方法 steady中预估矫正方法去掉了\n\n\nP1 控制信号到多体\n\nP1 数值扰动+回归的线性化方法原理探究\n\nP1 产出的报告 线性化理论手册编写\n\nP2 如何优雅的存储、输出结果。\nP2 yaw 自由度再bug确认 已知原理了\n","x":-597,"y":-693,"width":453,"height":347} + {"id":"c18d25521d773705","type":"text","text":"# 计划\n这周要做的3~5件重要的事情,这些事情能有效推进实现OKR。\n\nP1 必须做。P2 应该做\n\n\nP1 柔性部件 叶片、塔架主动力惯性力算法 主线\n- 变形体动力学 简略看看ing\n- 柔性梁弯曲变形振动学习,主线 \n\t- 广义质量 刚度矩阵及含义\n\t\n- 梳理bladed动力学框架 this week\n\t- 子结构文献阅读\n\t- 叶片模型建模 done\n\n\n\n\nP1 控制信号到多体\n\nP1 线性化方法编写\n\n\n\n\nP1 产出的报告 线性化理论手册编写\n\nP2 如何优雅的存储、输出结果。\nP2 yaw 自由度再bug确认 已知原理了\n","x":-597,"y":-693,"width":453,"height":347} ], "edges":[] } \ No newline at end of file diff --git a/工作总结/周报/周报87-郭翼泽.docx b/工作总结/周报/周报87-郭翼泽.docx new file mode 100644 index 0000000000000000000000000000000000000000..7f6f6574f6384815ed8275d04669fd4c296d8902 GIT binary patch literal 22629 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 literal 0 HcmV?d00001