vault backup: 2026-01-31 22:03:41
This commit is contained in:
parent
213ac2cd5f
commit
3068c9ba4e
@ -0,0 +1,413 @@
|
||||
---
|
||||
epoch: 1769393625906
|
||||
modelKey: gemini-2.5-flash|google
|
||||
tags:
|
||||
- copilot-conversation
|
||||
---
|
||||
|
||||
**user**: [[CalculateForcesMoments]][[Tower]]详解PFrcT0Trb and PMomX0Trb部分的计算原理,已知p%DOFs%NPTE的含义是Number of DOFs that contribute to the QD2T-related linear accelerations of the tower nodes (point T) in the inertia frame, based on which DOFs are presently enabled,如果有其他不清楚的变量含义,告诉我我来补充
|
||||
[Timestamp: 2026/01/26 10:13:45]
|
||||
|
||||
**ai**: `PFrcT0Trb` 和 `PMomX0Trb` 是在 `CalculateForcesMoments` 子程序中计算的,它们代表了在塔基(点 T(0))处,与塔架节点(点 T)在惯性系中的 `QD2T` 相关线性加速度(由 `p%DOFs%NPTE` 定义的自由度)相关的**总偏力**和**总偏力矩**。这些计算综合了风力发电机组塔架以上所有部件以及塔架自身的贡献。
|
||||
|
||||
计算原理如下:
|
||||
|
||||
1. **初始化塔架以上部件的贡献:**
|
||||
* `RtHSdat%PFrcT0Trb` 首先被初始化为 `RtHSdat%PFrcONcRt`。
|
||||
* `RtHSdat%PMomX0Trb` 首先被初始化为 `RtHSdat%PMomBNcRt`。
|
||||
* `PFrcONcRt` 和 `PMomBNcRt` 是在偏航轴承(点 O)/底板(体 B)处,由机舱、发电机、转子和尾翼效应产生的偏力与偏力矩。这意味着 `PFrcT0Trb` 和 `PMomX0Trb` 的初始值已经包含了偏航轴承以上所有部件的贡献。
|
||||
|
||||
2. **将偏航轴承以上部件的力矩贡献平移到塔基:**
|
||||
* 代码会遍历所有激活的自由度 (`p%DOFs%NActvDOF`)。
|
||||
* 对于每个自由度 `I`,通过 `TmpVec = CROSS_PRODUCT( RtHSdat%rT0O, RtHSdat%PFrcONcRt(:,p%DOFs%SrtPS(I)) )` 计算 `PFrcONcRt` 在点 O 处产生的力,相对于塔基 T(0) 的力矩。其中 `RtHSdat%rT0O` 是从塔基 T(0) 到偏航轴承 O 的位置矢量。
|
||||
* 这个计算出的力矩 `TmpVec` 被加到 `RtHSdat%PMomX0Trb` 中,从而将偏航轴承以上部件的力矩贡献正确地平移到塔基。
|
||||
|
||||
3. **添加偏航轴承质量的贡献:**
|
||||
* 代码会遍历所有对塔架线性加速度有贡献的自由度 (`p%DOFs%NPTE`)。
|
||||
* `TmpVec1 = -p%YawBrMass*RtHSdat%PLinVelEO(p%DOFs%PTE(I),0,:)` 计算了与偏航轴承质量 (`p%YawBrMass`) 及其偏线性速度 (`RtHSdat%PLinVelEO`) 相关的偏力。这本质上是一个惯性力项。
|
||||
* 这个偏力 `TmpVec1` 被加到 `RtHSdat%PFrcT0Trb` 中。
|
||||
* `TmpVec2 = CROSS_PRODUCT( RtHSdat%rT0O, TmpVec1 )` 计算了由这个偏航轴承质量偏力相对于塔基 T(0) 产生的力矩。
|
||||
* 这个力矩 `TmpVec2` 被加到 `RtHSdat%PMomX0Trb` 中。
|
||||
|
||||
4. **集成塔架单元的贡献:**
|
||||
* 代码通过嵌套循环遍历每个塔架单元 (`J`) 和每个相关的自由度 (`I`)。
|
||||
* `TmpVec1 = RtHSdat%PFTHydro(:,J,p%DOFs%PTE(I))*abs(p%DHNodes(J)) - p%TElmntMass(J)*RtHSdat%PLinVelET(J,p%DOFs%PTE(I),0,:)` 计算了特定塔架单元 `J` 在给定自由度 `I` 下的偏力贡献。
|
||||
* `RtHSdat%PFTHydro(:,J,p%DOFs%PTE(I))*abs(p%DHNodes(J))` 代表作用在塔架单元 `J` 上的偏水动力(或其他外部力),乘以其长度 `abs(p%DHNodes(J))`。
|
||||
* `- p%TElmntMass(J)*RtHSdat%PLinVelET(J,p%DOFs%PTE(I),0,:)` 代表由塔架单元质量 (`p%TElmntMass(J)`) 及其偏线性速度 (`RtHSdat%PLinVelET`) 产生的惯性力贡献。
|
||||
* 这个 `TmpVec1` 被加到 `RtHSdat%PFrcT0Trb` 中。
|
||||
* `TmpVec2 = CROSS_PRODUCT( RtHSdat%rT0T(:,J), TmpVec1 )` 计算了由 `TmpVec1` 相对于塔基 T(0) 产生的力矩。`RtHSdat%rT0T(:,J)` 是从塔基 T(0) 到塔架单元 `J` 的位置矢量。
|
||||
* `TmpVec3 = RtHSdat%PMFHydro(:,J,p%DOFs%PTE(I))*abs(p%DHNodes(J))` 代表作用在塔架单元 `J` 上的偏水动力矩(或其他外部力矩),乘以其长度。
|
||||
* `TmpVec2` 和 `TmpVec3` 被加到 `RtHSdat%PMomX0Trb` 中。
|
||||
|
||||
**总结:**
|
||||
|
||||
`PFrcT0Trb` 和 `PMomX0Trb` 是通过将风力发电机组塔架以上所有部件(转子、机舱、尾翼等)的偏力/偏力矩贡献,以及偏航轴承质量的惯性偏力/偏力矩贡献,再加上塔架每个单元的惯性偏力/偏力矩和外部(如水动力)偏力/偏力矩贡献,全部累加并平移到塔基 T(0) 处得到的。这些“偏”量是与塔架节点线性加速度相关的运动方程中的力/力矩分量。
|
||||
|
||||
[[Tower]] 笔记中提到的塔架广义惯性力、弹性力、阻尼力、气动力和重力等概念,为理解这些偏力与偏力矩的来源提供了理论基础。例如,代码中的 `PFTHydro` 和 `PMFHydro` 项与 [[Tower]] 笔记中描述的“塔架气动特性”和“水动力贡献”相符,而质量和速度项则与广义惯性力相关。
|
||||
[Timestamp: 2026/01/26 10:15:19]
|
||||
|
||||
**user**: [[CalculateForcesMoments]]结合凯恩方法,解释整个计算原理
|
||||
[Timestamp: 2026/01/26 11:28:17]
|
||||
|
||||
**ai**: `CalculateForcesMoments` 子程序在 OpenFAST 动力学模型中扮演着核心角色,它根据凯恩方程(Kane's Equations)的原理计算广义力和广义惯性力。凯恩方程是一种用于推导多体系统运动方程的有效方法,尤其适用于具有复杂运动和大量自由度的系统,如风力涡轮机。
|
||||
|
||||
**凯恩方程的核心思想:**
|
||||
|
||||
凯恩方程避免了直接计算约束力,而是通过引入“偏速度”(partial velocities)和“偏角速度”(partial angular velocities)的概念,将牛顿-欧拉方程投影到广义坐标系中。其基本形式为:
|
||||
|
||||
$F_r^* + F_r = 0$
|
||||
|
||||
其中:
|
||||
* $F_r^*$ 是第 $r$ 个广义坐标对应的广义惯性力(Generalized Inertia Force)。
|
||||
* $F_r$ 是第 $r$ 个广义坐标对应的广义主动力(Generalized Active Force)。
|
||||
|
||||
**`CalculateForcesMoments` 子程序的计算原理与凯恩方法结合:**
|
||||
|
||||
该子程序的目标是计算风力涡轮机系统中各个部件(叶片、轮毂、机舱、塔架、平台)的广义力和广义力矩,这些力矩最终会用于构建系统的运动方程。它通过以下步骤实现:
|
||||
|
||||
1. **定义系统部件和自由度:**
|
||||
* 风力涡轮机被分解为多个相互连接的刚体或柔性体(如叶片、轮毂、机舱、塔架、平台)。
|
||||
* 每个部件都有其自身的质量、惯性特性以及相对于其他部件或惯性系的运动。
|
||||
* 系统通过一组广义坐标 $q_r$ 来描述其运动,每个广义坐标对应一个自由度。
|
||||
* `p%DOFs%NPSE(K)`、`p%DOFs%NPCE`、`p%DOFs%NPDE`、`p%DOFs%NPIE`、`p%DOFs%NPUE`、`p%DOFs%NPTE`、`p%DOFs%NPYE` 等参数定义了不同部件(叶片、轮毂、转子-机舱、尾翼、机舱、塔架、平台)中对 `QD2T` 相关线性加速度有贡献的激活自由度。这些自由度是凯恩方程中的广义坐标。
|
||||
|
||||
2. **计算偏速度和偏角速度(隐含在 `PLinVel` 和 `PAngVel` 变量中):**
|
||||
* 凯恩方法的核心是计算每个质点或刚体的线速度和角速度对每个广义速度的偏导数,即偏速度和偏角速度。
|
||||
* 在 OpenFAST 中,这些偏速度和偏角速度通常在其他模块(如 `RtHndSide` 模块)中预先计算并存储在 `RtHSdat` 结构体中,例如 `RtHSdat%PLinVelES` (叶片单元的偏线性速度)、`RtHSdat%PAngVelEH` (轮毂的偏角速度) 等。
|
||||
* 这些偏速度和偏角速度是连接部件运动与广义坐标的关键。
|
||||
|
||||
3. **计算广义惯性力 ($F_r^*$ 的组成部分):**
|
||||
* 广义惯性力通常由两部分组成:与广义加速度相关的项(质量矩阵的一部分)和与广义速度平方相关的项(科里奥利力和离心力项)。
|
||||
* 在 `CalculateForcesMoments` 中,与广义加速度相关的项通过以下形式计算:
|
||||
* `TmpVec1 = -p%TipMass(K)*RtHSdat%PLinVelES(K,p%TipNode,p%DOFs%PSE(K,I),0,:)` (叶尖质量的惯性力)
|
||||
* `TmpVec1 = -p%BElmntMass(J,K)*RtHSdat%PLinVelES(K,J,p%DOFs%PSE(K,I),0,:)` (叶片单元质量的惯性力)
|
||||
* `TmpVec1 = -p%HubMass*RtHSdat%PLinVelEC(p%DOFs%PCE(I),0,:)` (轮毂质量的惯性力)
|
||||
* `TmpVec1 = -p%RFrlMass*RtHSdat%PLinVelED(p%DOFs%PDE(I) ,0,:)` (转子-机舱结构质量的惯性力)
|
||||
* `TmpVec1 = -p%BoomMass*RtHSdat%PLinVelEI(p%DOFs%PIE(I),0,:)` (尾翼臂质量的惯性力)
|
||||
* `TmpVec2 = -p%TFinMass*RtHSdat%PLinVelEJ(p%DOFs%PIE(I),0,:)` (尾翼质量的惯性力)
|
||||
* `TmpVec1 = -p%NacMass*RtHSdat%PLinVelEU(p%DOFs%PUE(I),0,:)` (机舱质量的惯性力)
|
||||
* `TmpVec1 = -p%YawBrMass*RtHSdat%PLinVelEO(p%DOFs%PTE(I),0,:)` (偏航轴承质量的惯性力)
|
||||
* `TmpVec1 = RtHSdat%PFTHydro(:,J,p%DOFs%PTE(I))*abs(p%DHNodes(J)) - p%TElmntMass(J)*RtHSdat%PLinVelET(J,p%DOFs%PTE(I),0,:)` (塔架单元的惯性力与水动力)
|
||||
* `TmpVec1 = -p%PtfmMass*RtHSdat%PLinVelEY(p%DOFs%PYE(I),0,:) ` (平台质量的惯性力)
|
||||
* 这些 `PLinVel` (Partial Linear Velocity) 和 `PAngVel` (Partial Angular Velocity) 乘以质量或惯性张量,并结合负号,构成了广义惯性力中与广义加速度相关的部分。
|
||||
* 与广义速度平方相关的项(科里奥利力和离心力)在代码中也通过 `CROSS_PRODUCT` 和 `DOT_PRODUCT` 结合角速度和惯性张量来计算,例如:
|
||||
* `TmpVec3 = CROSS_PRODUCT( -RtHSdat%AngVelEH, TmpVec )` (轮毂的科里奥利/离心力矩)
|
||||
* `TmpVec4 = CROSS_PRODUCT( -RtHSdat%AngVelER, TmpVec )` (转子-机舱结构的科里奥利/离心力矩)
|
||||
* `TmpVec5 = CROSS_PRODUCT( -RtHSdat%AngVelEG, TmpVec )` (发电机的科里奥利/离心力矩)
|
||||
* `TmpVec5 = CROSS_PRODUCT( -RtHSdat%AngVelEA, TmpVec )` (尾翼的科里奥利/离心力矩)
|
||||
* `CROSS_PRODUCT( -RtHSdat%AngVelEN, TmpVec )` (机舱的科里奥利/离心力矩)
|
||||
* `TmpVec4 = CROSS_PRODUCT( -RtHSdat%AngVelEX, TmpVec )` (平台的科里奥利/离心力矩)
|
||||
|
||||
4. **计算广义主动力 ($F_r$ 的组成部分):**
|
||||
* 广义主动力包括所有非惯性力,如气动力、重力、弹性力、阻尼力、水动力等。
|
||||
* 在 `CalculateForcesMoments` 中,这些力通过以下方式计算:
|
||||
* **气动力:** `RtHSdat%FSAero` (叶片气动力)、`RtHSdat%MMAero` (叶片气动力矩)、`RtHSdat%FSTipDrag` (叶尖阻力)。这些力直接来自 `u` (输入) 结构体,代表了外部气动载荷。
|
||||
* **重力:** `p%Gravity*CoordSys%z2` 乘以质量项,例如 `-p%TipMass(K)*( p%Gravity*CoordSys%z2 + ... )`。
|
||||
* **水动力/外部载荷:** `RtHSdat%PFTHydro` 和 `RtHSdat%PMFHydro` (塔架水动力/力矩),以及 `u%TowerPtLoads%Force` 和 `u%TowerPtLoads%Moment` (塔架点载荷),`u%PtfmAddedMass` (平台附加质量效应),`u%PlatformPtMesh%Force` 和 `u%PlatformPtMesh%Moment` (平台点载荷)。这些项包含了水动力、基础刚度/阻尼、系泊线恢复力/阻尼等。
|
||||
* **外部点载荷:** `u%HubPtLoad%Force` 和 `u%HubPtLoad%Moment` (轮毂点载荷),`u%TFinCMLoads%Force` 和 `u%TFinCMLoads%Moment` (尾翼质心载荷),`u%NacelleLoads%Force` 和 `u%NacelleLoads%Moment` (机舱载荷)。
|
||||
|
||||
5. **通过力矩平移和叠加进行集成:**
|
||||
* 凯恩方法的一个关键优势是可以通过力矩平移(`CROSS_PRODUCT`)将作用在不同点的力/力矩等效到参考点,并进行叠加。
|
||||
* 子程序中大量使用了 `CROSS_PRODUCT` 函数,例如 `CROSS_PRODUCT( RtHSdat%rS0S(:,K,p%TipNode), TmpVec1 )`,这表示将作用在叶尖的力 `TmpVec1` 平移到叶根 `S(0)` 产生的力矩。
|
||||
* 通过这种逐级向上(从叶片到轮毂,到转子-机舱,到机舱,到塔架,再到平台)的集成方式,将所有部件的力和力矩贡献累加到系统的各个关键点(如叶根 `S(0)`、摆振销 `P`、转子-机舱轴 `V`、尾翼轴 `W`、偏航轴承 `O`、塔基 `T(0)`、平台参考点 `Z`)。
|
||||
* 最终,`RtHSdat%PFrcZAll` 和 `RtHSdat%PMomXAll` 代表了整个风力涡轮机系统在平台参考点 `Z` 处的总广义偏力与偏力矩,而 `RtHSdat%FrcZAllt` 和 `RtHSdat%MomXAllt` 则代表了总的广义主动力与力矩。
|
||||
|
||||
**与 [[Tower]] 笔记的关联:**
|
||||
|
||||
[[Tower]] 笔记详细阐述了塔架的广义惯性力、弹性力、阻尼力、气动力和重力。在 `CalculateForcesMoments` 子程序中,这些概念体现在对塔架单元的计算中:
|
||||
* **广义惯性力:** `p%TElmntMass(J)*RtHSdat%PLinVelET(J,p%DOFs%PTE(I),0,:)` 和 `p%TElmntMass(J)*( p%Gravity*CoordSys%z2 + RtHSdat%LinAccETt(:,J) )` 等项直接对应了塔架质量和加速度产生的惯性力。
|
||||
* **广义主动力(水动力/外部载荷):** `RtHSdat%PFTHydro` 和 `RtHSdat%PMFHydro` 直接对应了塔架上的水动力或其他外部载荷。
|
||||
* **重力:** `p%Gravity*CoordSys%z2` 明确表示了重力项。
|
||||
* **弹性力/阻尼力:** 虽然在 `CalculateForcesMoments` 中没有直接计算塔架的弹性力和阻尼力(这些通常在运动方程的刚度矩阵和阻尼矩阵中处理),但 `PFTHydro` 和 `PMFHydro` 的注释中提到它们“包含来自基础刚度和阻尼 [非浮动] 或系泊线恢复力和阻尼 [浮动] 的贡献”,这表明这些效应被纳入了外部载荷的范畴。
|
||||
|
||||
**总结来说,`CalculateForcesMoments` 子程序是 OpenFAST 中实现凯恩方程的关键部分。它通过系统地计算每个部件的偏力/偏力矩和主动力/力矩,并逐级向上集成,最终得到整个风力涡轮机系统在关键参考点处的总广义力和广义力矩。这些计算结果将用于构建系统的运动方程,从而模拟风力涡轮机的动态响应。**
|
||||
[Timestamp: 2026/01/26 11:28:35]
|
||||
|
||||
**user**: 逐个部件介绍计算原理
|
||||
[Timestamp: 2026/01/26 11:30:05]
|
||||
|
||||
**ai**: 好的,我们来逐个部件地详细介绍 `CalculateForcesMoments` 子程序中力矩和力计算的原理,并结合凯恩方法进行解释。
|
||||
|
||||
凯恩方法的核心是计算每个部件的广义惯性力 ($F_r^*$) 和广义主动力 ($F_r$)。在 `CalculateForcesMoments` 中,这些力通常以“偏力”(Partial Forces)和“偏力矩”(Partial Moments)的形式出现,它们是作用在部件上的力/力矩对广义速度的偏导数。同时,也计算了总的力 (`Frc...t`) 和力矩 (`Mom...t`),这些包含了所有非惯性力(如气动、重力、外部载荷)以及与广义加速度无关的惯性力项(如科里奥利力、离心力)。
|
||||
|
||||
我们将按照代码中计算的顺序,从叶片开始,逐步向上到平台。
|
||||
|
||||
---
|
||||
|
||||
### 1. 叶片 (Blade)
|
||||
|
||||
**相关变量:** `FSTipDrag`, `FSAero`, `MMAero`, `PFrcS0B`, `PMomH0B`, `FrcS0Bt`, `MomH0Bt`
|
||||
|
||||
**计算原理:**
|
||||
|
||||
* **气动力和力矩 (`FSAero`, `MMAero`, `FSTipDrag`):**
|
||||
* **`FSTipDrag` (叶尖阻力):** 代码中被初始化为0,但注释表明它原本用于计算叶尖刹车产生的阻力。这是一种外部主动力。
|
||||
* **`FSAero` (叶片气动力) 和 `MMAero` (叶片气动力矩):**
|
||||
* 这些力矩是根据 `u%BladePtLoads` (来自 AeroDyn 模块的叶片点载荷) 计算的。
|
||||
* `RtHSdat%rSAerCen` 计算了从叶片上的点 S 到气动中心的位置矢量。
|
||||
* 如果 `p%UseAD14` 为真(使用 AeroDyn v14),则气动力 `FSAero` 是 `u%BladePtLoads` 的分量在 `CoordSys%te1` 和 `CoordSys%te2` 方向上的投影,并除以 `p%DRNodes(J)` (单元长度)。气动力矩 `MMAero` 则包括 `FSAero` 产生的力矩 (`CROSS_PRODUCT( RtHSdat%rSAerCen, RtHSdat%FSAero )`) 和直接作用的俯仰力矩 (`u%BladePtLoads%Moment(3,NodeNum)/p%DRNodes(J) * CoordSys%te3`)。
|
||||
* 如果 `p%UseAD14` 为假(使用 AeroDyn v15+),则直接从 `u%BladePtLoads` 获取力矩分量,并进行坐标系转换。
|
||||
* 这些都是作用在叶片上的外部主动力。
|
||||
|
||||
* **叶根处的偏力与偏力矩 (`PFrcS0B`, `PMomH0B`):**
|
||||
* 这些是与叶片自由度相关的广义惯性力/力矩的组成部分,在叶根点 S(0) 处计算。
|
||||
* **初始化:** `PFrcS0B` 和 `PMomH0B` 首先被初始化为0。
|
||||
* **叶尖质量贡献:** 遍历所有对叶片 `K` 线性加速度有贡献的自由度 `I` (`p%DOFs%NPSE(K)`)。
|
||||
* `TmpVec1 = -p%TipMass(K)*RtHSdat%PLinVelES(K,p%TipNode,p%DOFs%PSE(K,I),0,:)`:计算叶尖质量 `p%TipMass(K)` 产生的惯性偏力。这里的 `RtHSdat%PLinVelES` 是叶尖的偏线性速度。
|
||||
* `RtHSdat%PFrcS0B` 累加 `TmpVec1`。
|
||||
* `RtHSdat%PMomH0B` 累加 `CROSS_PRODUCT( RtHSdat%rS0S(:,K,p%TipNode), TmpVec1 )`,即将叶尖惯性偏力平移到叶根 S(0) 产生的偏力矩。`RtHSdat%rS0S` 是从叶根到叶尖的位置矢量。
|
||||
* **叶片单元质量贡献:** 遍历每个叶片单元 `J` 和每个相关自由度 `I`。
|
||||
* `TmpVec1 = -p%BElmntMass(J,K)*RtHSdat%PLinVelES(K,J,p%DOFs%PSE(K,I),0,:)`:计算叶片单元质量 `p%BElmntMass(J,K)` 产生的惯性偏力。
|
||||
* `RtHSdat%PFrcS0B` 累加 `TmpVec1`。
|
||||
* `RtHSdat%PMomH0B` 累加 `CROSS_PRODUCT( RtHSdat%rS0S(:,K,J), TmpVec1 )`,即将叶片单元惯性偏力平移到叶根 S(0) 产生的偏力矩。
|
||||
|
||||
* **叶根处的总力与总力矩 (`FrcS0Bt`, `MomH0Bt`):**
|
||||
* 这些是作用在叶根点 S(0) 处的总主动力/力矩,包括外部载荷、重力以及与广义加速度无关的惯性力(如科里奥利力、离心力)。
|
||||
* **叶尖贡献:**
|
||||
* `TmpVec1 = RtHSdat%FSTipDrag(:,K) - p%TipMass(K)*( p%Gravity*CoordSys%z2 + RtHSdat%LinAccESt(:,K,p%TipNode) )`:计算叶尖的总力。包括叶尖阻力、叶尖质量的重力 (`p%Gravity*CoordSys%z2`) 和叶尖质量的惯性力 (`-p%TipMass(K)*RtHSdat%LinAccESt`)。这里的 `RtHSdat%LinAccESt` 是叶尖的总线性加速度。
|
||||
* `RtHSdat%FrcS0Bt` 累加 `TmpVec1`。
|
||||
* `RtHSdat%MomH0Bt` 累加 `CROSS_PRODUCT( RtHSdat%rS0S(:,K,p%TipNode), TmpVec1 )`,即将叶尖总力平移到叶根 S(0) 产生的总力矩。
|
||||
* **叶片单元贡献:** 遍历每个叶片单元 `J`。
|
||||
* `TmpVec1 = RtHSdat%FSAero(:,K,J)*p%DRNodes(J) - p%BElmntMass(J,K)*( p%Gravity*CoordSys%z2 + RtHSdat%LinAccESt(:,K,J) )`:计算叶片单元的总力。包括气动力 (`RtHSdat%FSAero*p%DRNodes(J)`)、单元质量的重力 (`p%Gravity*CoordSys%z2`) 和单元质量的惯性力 (`-p%BElmntMass(J,K)*RtHSdat%LinAccESt`)。
|
||||
* `TmpVec2 = CROSS_PRODUCT( RtHSdat%rS0S(:,K,J), TmpVec1 )`:将单元总力平移到叶根 S(0) 产生的力矩。
|
||||
* `TmpVec3 = RtHSdat%MMAero(:,K,J)*p%DRNodes(J)`:单元上的总气动力矩。
|
||||
* `RtHSdat%FrcS0Bt` 累加 `TmpVec1`。
|
||||
* `RtHSdat%MomH0Bt` 累加 `TmpVec2 + TmpVec3`。
|
||||
|
||||
---
|
||||
|
||||
### 2. 轮毂 (Hub)
|
||||
|
||||
**相关变量:** `PFrcPRot`, `PMomLPRot`, `FrcPRott`, `MomLPRott`
|
||||
|
||||
**计算原理:**
|
||||
|
||||
* **摆振销处的偏力与偏力矩 (`PFrcPRot`, `PMomLPRot`):**
|
||||
* 这些是与轮毂自由度相关的广义惯性力/力矩的组成部分,在摆振销点 P 处计算。
|
||||
* **初始化:** `PFrcPRot` 和 `PMomLPRot` 首先被初始化为0。
|
||||
* **轮毂质量贡献:** 遍历所有对轮毂质心 `C` 线性加速度有贡献的自由度 `I` (`p%DOFs%NPCE`)。
|
||||
* `TmpVec1 = -p%HubMass*RtHSdat%PLinVelEC(p%DOFs%PCE(I),0,:)`:计算轮毂质量 `p%HubMass` 产生的惯性偏力。
|
||||
* `TmpVec2 = CROSS_PRODUCT( RtHSdat%rPC, TmpVec1 )`:将轮毂惯性偏力平移到摆振销 P 产生的偏力矩。`RtHSdat%rPC` 是从摆振销 P 到轮毂质心 C 的位置矢量。
|
||||
* `RtHSdat%PFrcPRot` 累加 `TmpVec1`。
|
||||
* `RtHSdat%PMomLPRot` 累加 `TmpVec2`,并减去与轮毂惯性张量 (`p%Hubg1Iner`, `p%Hubg2Iner`) 和偏角速度 (`RtHSdat%PAngVelEH`) 相关的惯性力矩项。
|
||||
* **叶片效应贡献:** 遍历所有叶片 `K` 和所有对叶片 `K` 线性加速度有贡献的自由度 `I` (`p%DOFs%NPSE(K)`)。
|
||||
* `TmpVec = CROSS_PRODUCT( RtHSdat%rPS0(:,K), RtHSdat%PFrcS0B(:,K,p%DOFs%PSE(K,I)) )`:将叶根处的偏力 `PFrcS0B` 平移到摆振销 P 产生的偏力矩。`RtHSdat%rPS0` 是从摆振销 P 到叶根 S(0) 的位置矢量。
|
||||
* `RtHSdat%PFrcPRot` 累加 `RtHSdat%PFrcS0B`。
|
||||
* `RtHSdat%PMomLPRot` 累加 `RtHSdat%PMomH0B` (叶根处的偏力矩) 和 `TmpVec`。
|
||||
|
||||
* **摆振销处的总力与总力矩 (`FrcPRott`, `MomLPRott`):**
|
||||
* 这些是作用在摆振销点 P 处的总主动力/力矩。
|
||||
* **轮毂质量贡献:**
|
||||
* `TmpVec1 = -p%HubMass*( p%Gravity*CoordSys%z2 + RtHSdat%LinAccECt )`:计算轮毂质量的总力。包括重力 (`p%Gravity*CoordSys%z2`) 和惯性力 (`-p%HubMass*RtHSdat%LinAccECt`)。
|
||||
* `TmpVec2 = CROSS_PRODUCT( RtHSdat%rPC, TmpVec1 )`:将轮毂总力平移到摆振销 P 产生的力矩。
|
||||
* `TmpVec` 和 `TmpVec3` 计算了与轮毂角速度 (`RtHSdat%AngVelEH`) 和惯性张量相关的科里奥利/离心力矩。
|
||||
* `RtHSdat%FrcPRott` 累加 `TmpVec1` 和 `u%HubPtLoad%Force` (轮毂外部点载荷)。
|
||||
* `RtHSdat%MomLPRott` 累加 `TmpVec2 + TmpVec3`,并减去与轮毂惯性张量和总角加速度 (`RtHSdat%AngAccEHt`) 相关的惯性力矩项,最后加上 `u%HubPtLoad%Moment` (轮毂外部点力矩)。
|
||||
* **叶片效应贡献:** 遍历所有叶片 `K`。
|
||||
* `TmpVec = CROSS_PRODUCT( RtHSdat%rPS0(:,K), RtHSdat%FrcS0Bt(:,K) )`:将叶根处的总力 `FrcS0Bt` 平移到摆振销 P 产生的力矩。
|
||||
* `RtHSdat%FrcPRott` 累加 `RtHSdat%FrcS0Bt`。
|
||||
* `RtHSdat%MomLPRott` 累加 `RtHSdat%MomH0Bt` (叶根处的总力矩) 和 `TmpVec`。
|
||||
|
||||
---
|
||||
|
||||
### 3. 转子-机舱结构 (Rotor-Furl Structure) 和 发电机 (Generator)
|
||||
|
||||
**相关变量:** `PFrcVGnRt`, `PMomNGnRt`, `FrcVGnRtt`, `MomNGnRtt`
|
||||
|
||||
**计算原理:**
|
||||
|
||||
* **转子-机舱轴处的偏力与偏力矩 (`PFrcVGnRt`, `PMomNGnRt`):**
|
||||
* 这些是与转子-机舱结构和发电机自由度相关的广义惯性力/力矩的组成部分,在转子-机舱轴点 V 处计算。
|
||||
* **初始化:** `PFrcVGnRt` 和 `PMomNGnRt` 首先被初始化为轮毂/叶片效应的贡献 (`RtHSdat%PFrcPRot`, `RtHSdat%PMomLPRot`)。
|
||||
* **轮毂/叶片效应平移:** 遍历所有激活自由度 `I` (`p%DOFs%NActvDOF`)。
|
||||
* `TmpVec = CROSS_PRODUCT( RtHSdat%rVP, RtHSdat%PFrcPRot(:,p%DOFs%SrtPS(I)) )`:将摆振销 P 处的偏力 `PFrcPRot` 平移到转子-机舱轴 V 产生的偏力矩。`RtHSdat%rVP` 是从转子-机舱轴 V 到摆振销 P 的位置矢量。
|
||||
* `RtHSdat%PMomNGnRt` 累加 `TmpVec`。
|
||||
* **转子-机舱结构质量贡献:** 遍历所有对转子-机舱结构质心 `D` 线性加速度有贡献的自由度 `I` (`p%DOFs%NPDE`)。
|
||||
* `TmpVec1 = -p%RFrlMass*RtHSdat%PLinVelED(p%DOFs%PDE(I) ,0,:)`:计算转子-机舱结构质量 `p%RFrlMass` 产生的惯性偏力。
|
||||
* `TmpVec2 = CROSS_PRODUCT( RtHSdat%rVD, TmpVec1 )`:将惯性偏力平移到转子-机舱轴 V 产生的偏力矩。`RtHSdat%rVD` 是从转子-机舱轴 V 到质心 D 的位置矢量。
|
||||
* `RtHSdat%PFrcVGnRt` 累加 `TmpVec1`。
|
||||
* `RtHSdat%PMomNGnRt` 累加 `TmpVec2`,并减去与转子-机舱结构惯性张量 (`p%RrfaIner`) 和发电机惯性张量 (`p%GenIner`) 以及各自偏角速度相关的惯性力矩项。
|
||||
* **发电机方位角自由度贡献:** 如果 `DOF_GeAz` 自由度激活,则单独添加发电机惯性张量和偏角速度相关的力矩项。
|
||||
|
||||
* **转子-机舱轴处的总力与总力矩 (`FrcVGnRtt`, `MomNGnRtt`):**
|
||||
* 这些是作用在转子-机舱轴点 V 处的总主动力/力矩。
|
||||
* `TmpVec1 = -p%RFrlMass*( p%Gravity*CoordSys%z2 + RtHSdat%LinAccEDt )`:计算转子-机舱结构质量的总力。
|
||||
* `TmpVec2 = CROSS_PRODUCT( RtHSdat%rVD , TmpVec1 )`:将总力平移到转子-机舱轴 V 产生的力矩。
|
||||
* `TmpVec3 = CROSS_PRODUCT( RtHSdat%rVP , RtHSdat%FrcPRott )`:将摆振销 P 处的总力 `FrcPRott` 平移到转子-机舱轴 V 产生的力矩。
|
||||
* `TmpVec`、`TmpVec4`、`TmpVec5` 计算了与转子-机舱结构和发电机角速度和惯性张量相关的科里奥利/离心力矩。
|
||||
* `RtHSdat%FrcVGnRtt` 累加 `RtHSdat%FrcPRott` 和 `TmpVec1`。
|
||||
* `RtHSdat%MomNGnRtt` 累加 `RtHSdat%MomLPRott`、`TmpVec2`、`TmpVec3`、`TmpVec4`、`TmpVec5`,并减去与转子-机舱结构和发电机惯性张量以及各自总角加速度相关的惯性力矩项。
|
||||
|
||||
---
|
||||
|
||||
### 4. 尾翼 (Tail)
|
||||
|
||||
**相关变量:** `PFrcWTail`, `PMomNTail`, `FrcWTailt`, `MomNTailt`
|
||||
|
||||
**计算原理:**
|
||||
|
||||
* **尾翼轴处的偏力与偏力矩 (`PFrcWTail`, `PMomNTail`):**
|
||||
* 这些是与尾翼自由度相关的广义惯性力/力矩的组成部分,在尾翼轴点 W 处计算。
|
||||
* **初始化:** `PFrcWTail` 和 `PMomNTail` 首先被初始化为0。
|
||||
* **尾翼臂和尾翼质量贡献:** 遍历所有对尾翼臂质心 `I` 线性加速度有贡献的自由度 `I` (`p%DOFs%NPIE`)。
|
||||
* `TmpVec1 = -p%BoomMass*RtHSdat%PLinVelEI(p%DOFs%PIE(I),0,:)`:计算尾翼臂质量 `p%BoomMass` 产生的惯性偏力。
|
||||
* `TmpVec2 = -p%TFinMass*RtHSdat%PLinVelEJ(p%DOFs%PIE(I),0,:)`:计算尾翼质量 `p%TFinMass` 产生的惯性偏力。
|
||||
* `TmpVec3 = CROSS_PRODUCT( RtHSdat%rWI, TmpVec1 )`:将尾翼臂惯性偏力平移到尾翼轴 W 产生的偏力矩。`RtHSdat%rWI` 是从尾翼轴 W 到尾翼臂质心 I 的位置矢量。
|
||||
* `TmpVec4 = CROSS_PRODUCT( RtHSdat%rWJ, TmpVec2 )`:将尾翼惯性偏力平移到尾翼轴 W 产生的偏力矩。`RtHSdat%rWJ` 是从尾翼轴 W 到尾翼质心 J 的位置矢量。
|
||||
* `RtHSdat%PFrcWTail` 累加 `TmpVec1 + TmpVec2`。
|
||||
* `RtHSdat%PMomNTail` 累加 `TmpVec3 + TmpVec4`,并减去与尾翼惯性张量 (`p%AtfaIner`) 和偏角速度 (`RtHSdat%PAngVelEA`) 相关的惯性力矩项。
|
||||
|
||||
* **尾翼轴处的总力与总力矩 (`FrcWTailt`, `MomNTailt`):**
|
||||
* 这些是作用在尾翼轴点 W 处的总主动力/力矩。
|
||||
* `Force` 和 `Moment` 来自 `u%TFinCMLoads` (尾翼质心载荷),是外部气动力和力矩。
|
||||
* `TmpVec1 = -p%BoomMass*( p%Gravity*CoordSys%z2 + RtHSdat%LinAccEIt )`:计算尾翼臂质量的总力。
|
||||
* `TmpVec2 = -p%TFinMass*( p%Gravity*CoordSys%z2 + RtHSdat%LinAccEJt )`:计算尾翼质量的总力。
|
||||
* `TmpVec3 = CROSS_PRODUCT( RtHSdat%rWI , TmpVec1 )`:将尾翼臂总力平移到尾翼轴 W 产生的力矩。
|
||||
* `TmpVec4 = CROSS_PRODUCT( RtHSdat%rWJ , TmpVec2 )`:将尾翼总力平移到尾翼轴 W 产生的力矩。
|
||||
* `TmpVec` 和 `TmpVec5` 计算了与尾翼角速度 (`RtHSdat%AngVelEA`) 和惯性张量相关的科里奥利/离心力矩。
|
||||
* `RtHSdat%FrcWTailt` 累加 `Force + TmpVec1 + TmpVec2`。
|
||||
* `RtHSdat%MomNTailt` 累加 `Moment + TmpVec3 + TmpVec4 + TmpVec5`,加上 `CROSS_PRODUCT( RtHSdat%rWJ , Force )` (外部力在尾翼轴 W 产生的力矩),并减去与尾翼惯性张量和总角加速度 (`RtHSdat%AngAccEAt`) 相关的惯性力矩项。
|
||||
|
||||
---
|
||||
|
||||
### 5. 机舱 (Nacelle)
|
||||
|
||||
**相关变量:** `PFrcONcRt`, `PMomBNcRt`, `FrcONcRtt`, `MomBNcRtt`
|
||||
|
||||
**计算原理:**
|
||||
|
||||
* **偏航轴承处的偏力与偏力矩 (`PFrcONcRt`, `PMomBNcRt`):**
|
||||
* 这些是与机舱自由度相关的广义惯性力/力矩的组成部分,在偏航轴承点 O 处计算。
|
||||
* **初始化:** `PFrcONcRt` 和 `PMomBNcRt` 首先被初始化为转子-机舱结构和尾翼效应的贡献 (`RtHSdat%PFrcVGnRt + RtHSdat%PFrcWTail`, `RtHSdat%PMomNGnRt + RtHSdat%PMomNTail`)。
|
||||
* **转子-机舱结构效应平移:** 遍历所有激活自由度 `I` (`p%DOFs%NActvDOF`)。
|
||||
* `TmpVec = CROSS_PRODUCT( RtHSdat%rOV, RtHSdat%PFrcVGnRt(:,p%DOFs%SrtPS(I)) )`:将转子-机舱轴 V 处的偏力 `PFrcVGnRt` 平移到偏航轴承 O 产生的偏力矩。`RtHSdat%rOV` 是从偏航轴承 O 到转子-机舱轴 V 的位置矢量。
|
||||
* `RtHSdat%PMomBNcRt` 累加 `TmpVec`。
|
||||
* **尾翼效应平移:** 遍历所有对尾翼臂质心 `I` 线性加速度有贡献的自由度 `I` (`p%DOFs%NPIE`)。
|
||||
* `TmpVec = CROSS_PRODUCT( RtHSdat%rOW, RtHSdat%PFrcWTail(:,p%DOFs%PIE(I) ) )`:将尾翼轴 W 处的偏力 `PFrcWTail` 平移到偏航轴承 O 产生的偏力矩。`RtHSdat%rOW` 是从偏航轴承 O 到尾翼轴 W 的位置矢量。
|
||||
* `RtHSdat%PMomBNcRt` 累加 `TmpVec`。
|
||||
* **机舱质量贡献:** 遍历所有对机舱质心 `U` 线性加速度有贡献的自由度 `I` (`p%DOFs%NPUE`)。
|
||||
* `TmpVec1 = -p%NacMass*RtHSdat%PLinVelEU(p%DOFs%PUE(I),0,:)`:计算机舱质量 `p%NacMass` 产生的惯性偏力。
|
||||
* `TmpVec2 = CROSS_PRODUCT( RtHSdat%rOU, TmpVec1 )`:将惯性偏力平移到偏航轴承 O 产生的偏力矩。`RtHSdat%rOU` 是从偏航轴承 O 到机舱质心 U 的位置矢量。
|
||||
* `RtHSdat%PFrcONcRt` 累加 `TmpVec1`。
|
||||
* `RtHSdat%PMomBNcRt` 累加 `TmpVec2`,并减去与机舱惯性张量 (`p%Nacd2Iner`) 和偏角速度 (`RtHSdat%PAngVelEN`) 相关的惯性力矩项。
|
||||
|
||||
* **偏航轴承处的总力与总力矩 (`FrcONcRtt`, `MomBNcRtt`):**
|
||||
* 这些是作用在偏航轴承点 O 处的总主动力/力矩。
|
||||
* `TmpVec1 = -p%NacMass*( p%Gravity*CoordSys%z2 + RtHSdat%LinAccEUt )`:计算机舱质量的总力。
|
||||
* `TmpVec2 = CROSS_PRODUCT( RtHSdat%rOU, TmpVec1 )`:将总力平移到偏航轴承 O 产生的力矩。
|
||||
* `TmpVec3 = CROSS_PRODUCT( RtHSdat%rOV, RtHSdat%FrcVGnRtt )`:将转子-机舱轴 V 处的总力 `FrcVGnRtt` 平移到偏航轴承 O 产生的力矩。
|
||||
* `TmpVec4 = CROSS_PRODUCT( RtHSdat%rOW, RtHSdat%FrcWTailt )`:将尾翼轴 W 处的总力 `FrcWTailt` 平移到偏航轴承 O 产生的力矩。
|
||||
* `TmpVec` 计算了与机舱角速度 (`RtHSdat%AngVelEN`) 和惯性张量相关的科里奥利/离心力矩。
|
||||
* `RtHSdat%FrcONcRtt` 累加 `RtHSdat%FrcVGnRtt`、`RtHSdat%FrcWTailt`、`TmpVec1` 和 `u%NacelleLoads%Force` (机舱外部载荷)。
|
||||
* `RtHSdat%MomBNcRtt` 累加 `RtHSdat%MomNGnRtt`、`RtHSdat%MomNTailt`、`TmpVec2`、`TmpVec3`、`TmpVec4`,加上 `CROSS_PRODUCT( -RtHSdat%AngVelEN, TmpVec )` (科里奥利/离心力矩),减去与机舱惯性张量和总角加速度 (`RtHSdat%AngAccENt`) 相关的惯性力矩项,最后加上 `u%NacelleLoads%Moment` (机舱外部力矩)。
|
||||
|
||||
---
|
||||
|
||||
### 6. 塔架 (Tower)
|
||||
|
||||
**相关变量:** `PFTHydro`, `PMFHydro`, `FTHydrot`, `MFHydrot`, `PFrcT0Trb`, `PMomX0Trb`, `FrcT0Trbt`, `MomX0Trbt`
|
||||
|
||||
**计算原理:**
|
||||
|
||||
* **塔架单元的水动力/外部偏力与偏力矩 (`PFTHydro`, `PMFHydro`):**
|
||||
* 这些是作用在每个塔架单元 `J` 上的偏力/偏力矩,主要来自水动力或其他外部载荷,并与塔架自由度相关的广义惯性力/力矩的组成部分。
|
||||
* **初始化:** `PFTHydro` 和 `PMFHydro` 首先被初始化为0。
|
||||
* **计算:** 遍历每个塔架单元 `J` 和所有对塔架线性加速度有贡献的自由度 `I` (`p%DOFs%NPTE`)。
|
||||
* `PFTHydro` 和 `PMFHydro` 的计算涉及 `u%TwrAddedMass` (塔架附加质量矩阵) 和塔架单元的偏线性速度 (`RtHSdat%PLinVelET`) 及偏角速度 (`RtHSdat%PAngVelEF`)。这里的附加质量矩阵包含了水动力效应。
|
||||
* 这些项代表了塔架单元在各个自由度方向上的水动力/外部偏力与偏力矩。
|
||||
|
||||
* **塔架单元的水动力/外部总力与总力矩 (`FTHydrot`, `MFHydrot`):**
|
||||
* 这些是作用在每个塔架单元 `J` 上的总主动力/力矩,包括外部载荷、重力以及与广义加速度无关的惯性力。
|
||||
* **计算:** 遍历每个塔架单元 `J`。
|
||||
* `FTHydrot` 和 `MFHydrot` 的计算涉及 `u%TowerPtLoads` (塔架点载荷)、`u%TwrAddedMass` (塔架附加质量矩阵) 以及塔架单元的总线性加速度 (`RtHSdat%LinAccETt`) 和总角加速度 (`RtHSdat%AngAccEFt`)。
|
||||
* 这些项代表了塔架单元在各个自由度方向上的水动力/外部总力与总力矩。
|
||||
|
||||
* **塔基处的偏力与偏力矩 (`PFrcT0Trb`, `PMomX0Trb`):**
|
||||
* 这些是与塔架自由度相关的广义惯性力/力矩的组成部分,在塔基点 T(0) 处计算。
|
||||
* **初始化:** `PFrcT0Trb` 和 `PMomX0Trb` 首先被初始化为偏航轴承以上所有部件的贡献 (`RtHSdat%PFrcONcRt`, `RtHSdat%PMomBNcRt`)。
|
||||
* **偏航轴承以上部件效应平移:** 遍历所有激活自由度 `I` (`p%DOFs%NActvDOF`)。
|
||||
* `TmpVec = CROSS_PRODUCT( RtHSdat%rT0O, RtHSdat%PFrcONcRt(:,p%DOFs%SrtPS(I)) )`:将偏航轴承 O 处的偏力 `PFrcONcRt` 平移到塔基 T(0) 产生的偏力矩。`RtHSdat%rT0O` 是从塔基 T(0) 到偏航轴承 O 的位置矢量。
|
||||
* `RtHSdat%PMomX0Trb` 累加 `TmpVec`。
|
||||
* **偏航轴承质量贡献:** 遍历所有对偏航轴承质心 `O` 线性加速度有贡献的自由度 `I` (`p%DOFs%NPTE`)。
|
||||
* `TmpVec1 = -p%YawBrMass*RtHSdat%PLinVelEO(p%DOFs%PTE(I),0,:)`:计算偏航轴承质量 `p%YawBrMass` 产生的惯性偏力。
|
||||
* `TmpVec2 = CROSS_PRODUCT( RtHSdat%rT0O, TmpVec1 )`:将惯性偏力平移到塔基 T(0) 产生的偏力矩。
|
||||
* `RtHSdat%PFrcT0Trb` 累加 `TmpVec1`。
|
||||
* `RtHSdat%PMomX0Trb` 累加 `TmpVec2`。
|
||||
* **塔架单元贡献(集成):** 遍历每个塔架单元 `J` 和所有对塔架线性加速度有贡献的自由度 `I` (`p%DOFs%NPTE`)。
|
||||
* `TmpVec1 = RtHSdat%PFTHydro(:,J,p%DOFs%PTE(I))*abs(p%DHNodes(J)) - p%TElmntMass(J)*RtHSdat%PLinVelET(J,p%DOFs%PTE(I),0,:)`:计算塔架单元 `J` 的总偏力。包括水动力/外部偏力 (`PFTHydro`) 和单元质量的惯性偏力。
|
||||
* `TmpVec2 = CROSS_PRODUCT( RtHSdat%rT0T(:,J), TmpVec1 )`:将单元总偏力平移到塔基 T(0) 产生的偏力矩。`RtHSdat%rT0T` 是从塔基 T(0) 到塔架单元 `J` 的位置矢量。
|
||||
* `TmpVec3 = RtHSdat%PMFHydro(:,J,p%DOFs%PTE(I))*abs(p%DHNodes(J))`:单元上的水动力/外部偏力矩。
|
||||
* `RtHSdat%PFrcT0Trb` 累加 `TmpVec1`。
|
||||
* `RtHSdat%PMomX0Trb` 累加 `TmpVec2 + TmpVec3`。
|
||||
|
||||
* **塔基处的总力与总力矩 (`FrcT0Trbt`, `MomX0Trbt`):**
|
||||
* 这些是作用在塔基点 T(0) 处的总主动力/力矩。
|
||||
* **初始化:** `FrcT0Trbt` 和 `MomX0Trbt` 首先被初始化为偏航轴承以上所有部件的贡献 (`RtHSdat%FrcONcRtt`, `RtHSdat%MomBNcRtt`)。
|
||||
* **偏航轴承质量贡献:**
|
||||
* `TmpVec1 = -p%YawBrMass*( p%Gravity*CoordSys%z2 + RtHSdat%LinAccEOt )`:计算偏航轴承质量的总力。
|
||||
* `TmpVec2 = CROSS_PRODUCT( RtHSdat%rT0O, TmpVec1 )`:将总力平移到塔基 T(0) 产生的力矩。
|
||||
* `TmpVec3 = CROSS_PRODUCT( RtHSdat%rT0O, RtHSdat%FrcONcRtt )`:将偏航轴承 O 处的总力 `FrcONcRtt` 平移到塔基 T(0) 产生的力矩。
|
||||
* `RtHSdat%FrcT0Trbt` 累加 `TmpVec1`。
|
||||
* `RtHSdat%MomX0Trbt` 累加 `TmpVec2 + TmpVec3`。
|
||||
* **塔架单元贡献(集成):** 遍历每个塔架单元 `J`。
|
||||
* `TmpVec1 = ( RtHSdat%FTHydrot(:,J) )*abs(p%DHNodes(J)) - p%TElmntMass(J)*( p%Gravity*CoordSys%z2 + RtHSdat%LinAccETt(:,J) )`:计算塔架单元 `J` 的总力。包括水动力/外部总力 (`FTHydrot`)、单元质量的重力 (`p%Gravity*CoordSys%z2`) 和单元质量的惯性力 (`-p%TElmntMass(J)*RtHSdat%LinAccETt`)。
|
||||
* `TmpVec2 = CROSS_PRODUCT( RtHSdat%rT0T(:,J), TmpVec1 )`:将单元总力平移到塔基 T(0) 产生的力矩。
|
||||
* `TmpVec3 = ( RtHSdat%MFHydrot(:,J) )*abs(p%DHNodes(J))`:单元上的水动力/外部总力矩。
|
||||
* `RtHSdat%FrcT0Trbt` 累加 `TmpVec1`。
|
||||
* `RtHSdat%MomX0Trbt` 累加 `TmpVec2 + TmpVec3`。
|
||||
|
||||
---
|
||||
|
||||
### 7. 平台 (Platform)
|
||||
|
||||
**相关变量:** `PFZHydro`, `PMXHydro`, `FZHydrot`, `MXHydrot`, `PFrcZAll`, `PMomXAll`, `FrcZAllt`, `MomXAllt`
|
||||
|
||||
**计算原理:**
|
||||
|
||||
* **平台水动力/外部偏力与偏力矩 (`PFZHydro`, `PMXHydro`):**
|
||||
* 这些是作用在平台参考点 Z 处的偏力/偏力矩,主要来自水动力或其他外部载荷,并与平台自由度相关的广义惯性力/力矩的组成部分。
|
||||
* **初始化:** `PFZHydro` 和 `PMXHydro` 首先被初始化为0。
|
||||
* **计算:** 遍历所有对平台质心 `Y` 线性加速度有贡献的自由度 `I` (`p%DOFs%NPYE`)。
|
||||
* `PFZHydro` 和 `PMXHydro` 的计算涉及 `u%PtfmAddedMass` (平台附加质量矩阵) 以及平台的偏线性速度 (`RtHSdat%PLinVelEZ`) 和偏角速度 (`RtHSdat%PAngVelEX`)。
|
||||
|
||||
* **平台水动力/外部总力与总力矩 (`FZHydrot`, `MXHydrot`):**
|
||||
* 这些是作用在平台参考点 Z 处的总主动力/力矩,包括外部载荷、重力以及与广义加速度无关的惯性力。
|
||||
* **计算:**
|
||||
* `FZHydrot` 和 `MXHydrot` 的计算涉及 `u%PlatformPtMesh%Force` (平台点载荷)、`u%PlatformPtMesh%Moment` (平台点力矩) 以及平台的偏线性速度 (`RtHSdat%PLinVelEZ`) 和偏角速度 (`RtHSdat%PAngVelEX`)。
|
||||
|
||||
* **平台参考点处的总偏力与偏力矩 (`PFrcZAll`, `PMomXAll`):**
|
||||
* 这些是整个风力涡轮机系统在平台参考点 Z 处的总广义惯性力/力矩的组成部分。
|
||||
* **初始化:** `PFrcZAll` 和 `PMomXAll` 首先被初始化为塔基以上所有部件的贡献 (`RtHSdat%PFrcT0Trb`, `RtHSdat%PMomX0Trb`)。
|
||||
* **塔架效应平移:** 遍历所有激活自由度 `I` (`p%DOFs%NActvDOF`)。
|
||||
* `TmpVec = CROSS_PRODUCT( RtHSdat%rZT0, RtHSdat%PFrcT0Trb(:,p%DOFs%SrtPS(I)) )`:将塔基 T(0) 处的偏力 `PFrcT0Trb` 平移到平台参考点 Z 产生的偏力矩。`RtHSdat%rZT0` 是从平台参考点 Z 到塔基 T(0) 的位置矢量。
|
||||
* `RtHSdat%PMomXAll` 累加 `TmpVec`。
|
||||
* **平台质量贡献:** 遍历所有对平台质心 `Y` 线性加速度有贡献的自由度 `I` (`p%DOFs%NPYE`)。
|
||||
* `TmpVec1 = -p%PtfmMass*RtHSdat%PLinVelEY(p%DOFs%PYE(I),0,:)`:计算平台质量 `p%PtfmMass` 产生的惯性偏力。
|
||||
* `TmpVec2 = CROSS_PRODUCT( RtHSdat%rZY , TmpVec1 )`:将惯性偏力平移到平台参考点 Z 产生的偏力矩。`RtHSdat%rZY` 是从平台参考点 Z 到平台质心 Y 的位置矢量。
|
||||
* `RtHSdat%PFrcZAll` 累加 `RtHSdat%PFZHydro(p%DOFs%PYE(I),:) + TmpVec1`。
|
||||
* `RtHSdat%PMomXAll` 累加 `RtHSdat%PMXHydro(p%DOFs%PYE(I),:) + TmpVec2`,并减去与平台惯性张量 (`p%PtfmRIner`, `p%PtfmYIner`, `p%PtfmPIner`) 和偏角速度 (`RtHSdat%PAngVelEX`) 相关的惯性力矩项。
|
||||
|
||||
* **平台参考点处的总力与总力矩 (`FrcZAllt`, `MomXAllt`):**
|
||||
* 这些是整个风力涡轮机系统在平台参考点 Z 处的总主动力/力矩。
|
||||
* `TmpVec1 = -p%PtfmMass*( p%Gravity*CoordSys%z2 + RtHSdat%LinAccEYt )`:计算平台质量的总力。
|
||||
* `TmpVec2 = CROSS_PRODUCT( RtHSdat%rZY , TmpVec1 )`:将总力平移到平台参考点 Z 产生的力矩。
|
||||
* `TmpVec3 = CROSS_PRODUCT( RtHSdat%rZT0 , RtHSdat%FrcT0Trbt )`:将塔基 T(0) 处的总力 `FrcT0Trbt` 平移到平台参考点 Z 产生的力矩。
|
||||
* `TmpVec` 和 `TmpVec4` 计算了与平台角速度 (`RtHSdat%AngVelEX`) 和惯性张量相关的科里奥利/离心力矩。
|
||||
* `RtHSdat%FrcZAllt` 累加 `RtHSdat%FrcT0Trbt + RtHSdat%FZHydrot + TmpVec1`。
|
||||
* `RtHSdat%MomXAllt` 累加 `RtHSdat%MomX0Trbt + RtHSdat%MXHydrot + TmpVec2 + TmpVec3 + TmpVec4`。
|
||||
|
||||
---
|
||||
|
||||
**总结:**
|
||||
|
||||
整个 `CalculateForcesMoments` 子程序严格遵循凯恩方法的结构,通过以下步骤构建系统的运动方程:
|
||||
|
||||
1. **分解:** 将复杂的风力涡轮机系统分解为多个相互连接的刚体或柔性体单元。
|
||||
2. **运动学:** 在其他模块中计算每个部件的线速度、角速度、线加速度和角加速度,以及它们对广义速度的偏导数(偏速度和偏角速度)。
|
||||
3. **力/力矩计算:**
|
||||
* **广义惯性力/力矩:** 通过将部件的质量/惯性张量与偏速度/偏角速度(或总加速度)相乘,并进行适当的叉乘(力矩平移),计算与广义加速度相关的惯性力矩项(`PFrc...` 和 `PMom...` 系列变量)以及与广义速度平方相关的惯性力矩项(科里奥利力、离心力,体现在 `Frc...t` 和 `Mom...t` 系列变量中)。
|
||||
* **广义主动力/力矩:** 收集所有外部作用力(气动、重力、水动力、外部点载荷等),并将其通过偏速度/偏角速度投影到广义坐标系中。
|
||||
4. **集成:** 从最末端的部件(叶片)开始,逐级向上将所有部件的力和力矩贡献累加到系统的关键参考点,最终得到整个系统在平台参考点处的总广义力和广义力矩。
|
||||
|
||||
这些计算出的广义力和广义力矩将作为凯恩方程的右侧项,用于求解系统的广义加速度,从而进行风力涡轮机的动态仿真。
|
||||
[Timestamp: 2026/01/26 11:30:48]
|
||||
@ -7653,48 +7653,14 @@ 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
|
||||
|
||||
DgABEuAp1gILgMAACDwAgIAgAAA=
|
||||
AA==
|
||||
```
|
||||
%%
|
||||
Loading…
x
Reference in New Issue
Block a user