STAR-CCM+二维NACA翼型气动计算全流程:从几何建模到极曲线
1. 为什么用STAR-CCM算二维翼型——先把目标和思路理清楚1.1 二维翼型气动性能计算到底要算什么先说结论NACA翼型的二维气动性能计算是整个空气动力学入门绕不开的一关。无论你是在校学生做课程设计还是在企业里做无人机螺旋桨、风机叶片、飞行器机翼的初步选型第一件事基本都是同一件——把翼型的升力系数、阻力系数、升阻比随攻角变化的曲线拿到手。这个活儿听着简单但牵扯到的细节比想象中多。我当年第一次做的时候建完几何直接画网格、设了模型就开始跑结果算出来的升力系数跟实验数据差了快20%后来才发现是计算域太小、远场边界反射污染了流场。这一课印象太深了所以这篇内容把所有关键环节摊开讲一遍从翼型坐标怎么找、几何怎么建、网格怎么画到边界条件和湍流模型怎么选、后处理怎么提取数据全流程走一遍。我用STAR-CCM作为工具是因为它在这个场景下有天然优势。不需要额外的前处理软件从几何创建到网格划分、求解、后处理全部在一个界面里完成。相比OpenFOAM这种需要折腾脚本和字典文件的工具STAR-CCM的图形化交互方式更适合快速迭代特别是做攻角扫描或者改几何参数的时候效率差距非常明显。1.2 为什么选择STAR-CCM这套流程二维翼型计算虽然模型简单但它是你理解CFD整套流程的最好载体。用STAR-CCM跑通一次二维NACA翼型计算等于把几何准备、网格生成、物理模型选择、求解设置、收敛判断、后处理提取这些环节完整过了一遍。我选择这套流程还有几个实际考量第一二维问题计算量小。普通工作站上几分钟就能算完一个工况适合做参数扫描。我记得自己做过一组NACA 4412从0度到15度攻角的扫描用了大概几个小时就跑完了这在三维算例里是不可能的事情。第二STAR-CCM的自动化程度高。特别是网格划分环节相比Pointwise或ICEM那种“一切手动控制”的思路STAR-CCM基于部件的网格划分方法对新手很友好。你只需要设定边界层参数和网格尺寸剩下的交给工具自动生成。第三一杆子捅到底。STAR-CCM的3D-CAD模块可以直接用坐标点生成翼型曲线拉伸成面体再设置计算域全程不出这个软件。不会遇到“CAD软件导出的几何文件有破面、导进网格工具又要修半天”这种尴尬。1.3 NACA翼型数据库怎么查、怎么用很多人一开始就卡在“翼型坐标从哪里来”这一步。naca翼型数据库查询其实很简单常用渠道有三个。最方便的是直接用UIUC大学维护的翼型坐标数据库UIUC Airfoil Data Site这是全球做飞行器设计的人都在用的公共资源。里面收录了几百种翼型的坐标文件NACA系列的经典翼型基本都有下载下来的.dat文件里面就是上下表面的离散坐标点。另一个渠道是用Airfoil Tools这类在线工具。这个网站的好处是自带翼型生成器、极曲线估算和一些基础分析功能当你需要对比多个翼型时非常方便。它还能直接生成特定弦长、特定攻角下的几何模型预览做方案阶段够用。第三个就是自己算坐标。NACA四位数字翼型的几何是可以用公式生成的以NACA 4412为例四位数字的含义分别是第一位4代表最大弯度是弦长的4%第二位4代表最大弯度位置在距前缘40%弦长处后两位12代表最大厚度是弦长的12%。厚度分布和中弧线的公式在《Theory of Wing Sections》里有现成的用Python或者MATLAB几十行代码就能生成坐标。这个方法的好处是你可以完全控制坐标点的数量和分布后面做网格敏感性分析时特别方便。我自己的建议是如果是验证学习直接下载坐标文件就行省事如果是做研究最好自己写脚本生成坐标因为你可以控制前缘点和后缘点的密度分布提高网格质量。2. 几何建模与计算域设置前处理这一步决定了后面所有事情2.1 用STAR-CCM的3D-CAD从坐标点生成翼型拿到翼型坐标点之后接下来要在STAR-CCM里生成几何。这一步我用的是STAR-CCM自带的3D-CAD模块实际的路径是Geometry 3D-CAD Models右键New创建一个新的3D-CAD模型。进入3D-CAD界面后用Sketch模式创建草图。这里有个小技巧先把坐标点文件准备好格式是x和y两列比如NACA 4412上表面加下表面总共一百多个点。然后通过Sketch菜单里的Curve from XYZ File选项导入这些点STAR-CCM会自动生成一条通过所有点的样条曲线。这一步要注意一个细节翼型坐标文件通常是从上表面后缘开始沿前缘到下表面后缘结束形成一条闭合曲线。但STAR-CCM的样条曲线生成工具需要你指定端点条件默认情况下它可能会把首尾用直线连起来而不是平滑闭合。我在实际使用中会检查一下前缘和后缘附近的曲线形状如果发现后缘处有尖角或者交叉就要调整一下坐标点的排序或者插值方式。导入曲线后用Create Surface工具把这个封闭曲线变成面这个面就是翼型截面。这里说个经验STA-RCCM的3D-CAD里创建表面时要检查一下Surface的朝向法向应该朝外否则后面拉伸成体的时候会出问题。2.2 从二维曲线到单层网格模型的拉伸思路这里有一个很多人第一次接触时不太理解的地方STAR-CCM传统上是一个三维CFD求解器虽然它有二维求解能力但它的二维计算实际上是把“单层网格”作为三维网格来处理的。具体做法是把翼型面的草图通过拉伸操作Extrude生成一个单层的三维体拉伸的厚度就是一层网格的厚度。这层网格的厚度方向上只有一层网格并且在这个方向上设置周期性边界条件Periodic Condition这样求解器就会把这个单层网格当作二维问题来处理。这个“拉伸一层网格”的操作在STAR-CCM里非常关键。我通常的做法是在3D-CAD里用Extrude工具拉伸距离设置为弦长的1%左右比如弦长1米就拉伸0.01米。这个值不能太大否则网格在展向方向的宽高比会变得不合理也不能太小太小会导致网格体积过小影响收敛。拉伸完成后在Create Part时勾选“Create a part from the 3D-CAD model”选项把拉伸出来的体导入到STAR-CCM的仿真模型中。需要注意的是拉伸得到的体应该包含翼型表面、前后面周期性边界和外部边界这几个面后面在分配区域时要用到。2.3 计算域尺寸怎么定才不会被远场边界“污染”计算域大小是二维翼型仿真中最容易被忽视、但影响极大的参数。远场边界距离翼型表面太近边界条件会对翼型附近的流场产生直接影响。直观地理解就是翼型在空气中运动它对周围气体的扰动会向四面八方传播。如果计算域的边界离得太近这个扰动还没衰减到可以忽略的程度就被边界“弹”回来了形成虚假的反射波污染流场。我自己的经验值是入口边界距前缘至少10倍弦长出口边界距后缘至少20倍弦长上下边界距翼型至少15倍弦长。这个尺寸在大多数教科书和论文里也都有推荐。比如NASA的二维翼型验证算例典型做法是采用C型或O型计算域外边界距离通常在20倍弦长以上。实际设置时我用的是STAR-CCM 3D-CAD里的Rectangle或Circle工具绘制计算域外边界。例如做一个矩形计算域入口在翼型前缘前方12米处弦长1米出口在后方20米处上下各15米这样能保证远场边界不会干扰翼型附近的流场。创建完成后用Trim或Boolean操作把翼型和外边界之间围成计算域最终形成Domain内只有一个翼型孔的几何体。这里还有一个实用技巧外边界上网格要画得比较粗让网格尺寸从翼型表面向远场逐渐增大。STAR-CCM的自动网格功能默认会做这种渐变但你需要设置合理的“目标尺寸”和“最小尺寸”否则可能生成过密或过疏的网格。我的经验值翼型表面的目标尺寸在0.001倍弦长左右远场边界的目标尺寸在0.5到1倍弦长左右这样网格数量控制在10万到20万之间既保证精度又保证速度。2.4 区域的分配和边界条件的预设几何导入后需要把计算域的各个面分配给不同的区域。在STAR-CCM中通常的做法是使用“Assign Parts to Regions”功能把几何体的所有边界分配到一个区域中。然后在这个区域内设置边界类型。具体来说翼型表面Wall类型设置为无滑移壁面拉伸方向的侧面设置为周期性边界Periodic这是实现二维计算的关键计算域入口Velocity Inlet或Freestream类型计算域出口Pressure Outlet或Freestream类型上下远场边界Freestream或Symmetry类型在实际建模中STAR-CCM的区域和边界设置可以通过右键Region Assign Conditions来操作。我一般会把入口、出口和远场边界合并为一个边界条件类型——Freestream因为这个边界条件内部会处理入口和出口的不同行为更适合外部绕流问题。如果你使用传统的Inlet和Outlet分离设置在攻角不为0的时候需要分别设置流向分量比较麻烦。Freestream条件只需要指定来流速度大小和方向即可STAR-CCM会自动判断哪些部分是入口、哪些是出口。3. 网格划分二维翼型算得准不准网格占六成3.1 网格策略选型棱柱层加切割体STAR-CCM里自动网格划分的方法有几种切割体网格、四面体网格、多面体网格。对于翼型这种带明显边界层效应的外流场问题我强烈建议使用切割体网格Trimmed Cell Mesher加棱柱层网格Prism Layer Mesher的组合。切割体网格的本质是笛卡尔网格它在远离壁面的区域按规则的正交网格划分再通过切割操作让靠近壁面的网格贴合几何表面。这种网格的优势是整体网格质量高计算稳定性好内存消耗也比四面体网格低。棱柱层网格则是在壁面附近生成的多层三棱柱网格用来捕捉边界层里的速度梯度变化。对于翼型周围的流动来说边界层内的速度梯度非常剧烈如果没有足够的棱柱层网格就无法准确捕捉壁面的剪切应力阻力系数算出来一定不准。我实际使用的设置参数如下以弦长1米、雷诺数3百万为例棱柱层层数25层棱柱层总高度0.02米约为弦长的2%第一层高度0.000002米2微米棱柱层增长率1.23.2 第一层网格高度怎么算y值的工程估算方法很多人直接拿默认参数去画网格结果算了半天发现阻力系数和实验对不上最后发现是边界层网格高度完全不对。这里面的核心概念是y值。y是一个无量纲距离用来衡量壁面第一层网格中心到壁面的距离在边界层尺度下的相对大小。湍流模型对y的敏感程度不同对于k-omega SST模型要求壁面附近y 1最好在0.1到1之间对于k-epsilon模型配合壁面函数y在30到300之间也可以接受。计算第一层网格高度通常用平板边界层的经验公式先估算壁面摩擦系数Cf 0.058 / Re_x^0.2其中Re_x是基于当地距离的雷诺数然后估算壁面剪切应力τ_w 0.5 × ρ × U^2 × Cf再由剪切应力得到摩擦速度u_τ sqrt(τ_w / ρ)最后第一层网格高度y y × μ / (ρ × u_τ)以NACA 4412在弦长1米、来流速度50m/s的条件下为例。标准海平面空气密度取1.225kg/m³动力粘度取1.789×10⁻⁵ Pas这时候基于弦长的雷诺数约为3.4×10⁶。先算出Cf约等于0.0032摩擦速度u_τ约等于1.58m/s那么y 1时y约等于9.3×10⁻⁶米。也就是说第一层网格高度应该在10微米左右。我再取一个安全余量设置成2×10⁻⁶米确保y远小于1这样SST模型就能完整解析边界层最内层的粘性底层。很多人问这个计算复杂有没有简单办法。STAR-CCM里其实自带一个工具在生成网格之前可以用“Surface Preparation”功能里的“Wall Distance”估算来辅助判断但我还是建议大家把公式过一遍搞清楚物理意义之后再依赖工具。3.3 网格数量、增长率与质量检查网格数量不是越多越好。网格太密计算时间成倍增加网格太疏翼型表面的压力分布失真。二维翼型的CFD我一般控制在15万到30万网格之间这个量级的网格在一台8核以上的工作站上跑一个工况大概需要10到30分钟。网格生长率的设置直接决定从翼型表面到远场的过渡是否平滑。STAR-CCM的自动网格默认增长率是1.5我一般会调小到1.1到1.2之间。增长率太大会导致网格尺寸在很短距离内急剧增大造成数值扩散气流经过这个区域时会产生虚假的数值粘性结果就是阻力偏大。网格画完之后检查质量要养成习惯。STAR-CCM的网格质量检查指标里我主要看两个参数网格体积变化率和面有效性。体积变化率Volume Change反映相邻网格体积的差异程度一般要求小于10面有效性Face Validity要求接近1如果某个面上有大量的负法向面积说明网格有严重的畸形。实际检查时选Mesh Diagnostics进行网格诊断重点关注是否有负体积网格和低质量网格。如果发现问题先在问题区域局部加密不要盲目调小整体参数。4. 物理模型、边界条件与求解策略把仿真工况“翻译”给求解器4.1 湍流模型选择SST k-omega为什么是二维外流的首选物理连续体Continua的设置是仿真正确性的核心。很多人会忽略一个前提二维翼型在不同攻角下的流动状态差异很大。小攻角下流动整体附着大攻角下会出现分离、失速等复杂现象这要求湍流模型能准确处理逆压梯度下的边界层分离。SST k-omega是这类外流场计算的默认首选。它综合了k-omega模型在近壁面区域的稳定性能直接计算到粘性底层和k-epsilon模型在远场区域的低敏感性还专门考虑了湍流剪切应力的输运在强逆压梯度和分离流条件下表现优于绝大多数其他两方程模型。对比一下几个常用模型的适用场景SASpalart-Allmaras主要用在航空外流场计算量小但分离流预测能力偏弱k-epsilon 标准适合高雷诺数内部流动配合壁面函数使用不适合预测分离SST k-omega适合外流场、分离流、翼型绕流精度好计算量适中层流模型只在非常低的雷诺数下适用工程问题中很少用我实际算NACA翼型的经验是在中小攻角0到8度下SST和SA算出来的升力系数相差不大但阻力系数SST更接近实验值。到了接近失速的攻角范围NACA 4412大约13度到15度SST对分离点位置的预测更可靠。另外很多人忽略了一个参数湍流强度Turbulence Intensity和湍流粘度比Turbulent Viscosity Ratio。远场来流的湍流强度一般设置在0.1%到1%之间对应干净的外流场条件。STAR-CCM的SST模型默认会给来流设定湍流强度和长度尺度你不能完全放任默认值要根据实际工况调整。一般情况下我把入口湍流强度设为0.5%湍流粘度比设为10。4.2 边界条件设置入口速度、出口压力、攻角的实现方式模型建好后接下来设置边界条件。我用的是速度入口加压力出口的搭配。速度入口设置的关键是把来流速度分解成x和y方向的分量。比如攻角是5度来流速度50m/s那么x方向分量就是50×cos(5°)≈49.81m/sy方向分量就是50×sin(5°)≈4.36m/s。这两个分量需要在速度入口的Velocity Specification里分别设置。这里有个常见坑如果你使用的Freestream边界条件它内部会自动处理入口和出口的分辨你只需要指定速度大小和方向即可。如果你用传统的入口/出口分离设置那么出口压力参考值需要一个物理合理的基准值通常设置表压为0Pa即可。温度场方面STAR-CCM默认使用恒定密度气体模型但如果速度较高Ma 0.3就要考虑可压缩性。二维翼型计算大多数情况是低速不可压缩问题我建议使用恒密度空气模型省去能量方程的计算收敛速度更快。最后要确认参考值Reference Values设置。升力系数和阻力系数的计算需要参考面积和参考速度。对于二维翼型STAR-CCM里参考面积习惯上设置为弦长乘以单位展长即参考面积 1m × 1m 1m²。这里容易出错的地方是参考长度和参考面积的设置混乱。参考面积用在升阻力系数计算中参考长度用在力矩系数计算中两者不要混了。4.3 求解器参数与收敛判断残差下降不代表算完了求解器的默认设置在大多数情况下是能用的。我只会改两处一是把求解停止条件改成按物理时间或者迭代步数控制二是把压力-速度耦合方式保持默认的SIMPLE算法二维稳态问题SIMPLE足够。需要提醒的是残差曲线下降到一个低水平并不意味着计算就一定收敛了。对于翼型这种外部绕流问题更可靠的收敛判据是监控升力系数和阻力系数是否稳定。在STAR-CCM中创建监控报告的方法是Reports New Report Force Coefficient选择翼型壁面作为受力面设定升力方向通常垂直于来流方向和阻力方向平行于来流方向。把这两个报告加到Monitors里面通过Monitor Plot观察曲线。当升力系数和阻力系数随迭代不再变化保持在一个固定值附近波动不再变化才算真正的收敛。某个攻角下的典型表现残差在300步内降到10⁻⁴以下但升力系数要等到1500到2000步才完全稳定。所以不要盯着残差图看要盯着力系数监控曲线看。4.4 攻角扫描效率提升从伯努利到数据表的完整流程单点的攻角计算学会后批量做攻角扫描就是水到渠成的事情。我分享一下自己常用的流程第一种是手动方式。设一个攻角算完收敛记录升力系数和阻力系数然后改边界条件里的速度方向分量再算下一个攻角依次类推。这种方式适合只算几个攻角的情况但手动操作误差大容易记错数据。第二种是用STAR-CCM的Design Manager功能或者用Java宏脚本批量修改攻角参数。我会把攻角定义为一个参数然后在Design Manager里设置扫描范围从-4度到16度每2度算一个点共11个算例。STAR-CCM会自动提交批量计算所有工况算完后一次性导出数据。这种方式适合需要做极曲线的场景省心太多。第三种是如果安装了Optimate或者使用了Simeenter STAR-CCM的云版本还可以做自动优化不过对于二维翼型性能计算Design Manager已经足够。5. 结果后处理与数据分析从云图到极曲线5.1 压力云图与流线直观判断流动状态计算收敛后首先看压力云图和速度流线。在STAR-CCM里创建Scene Scalar Scene选择压力标量场就能显示压力分布。再叠加一个Streamline场景能够直接看到翼型周围的流线形态。小攻角时候流线在整个计算域中平滑地贴着翼型表面走前缘驻点位置在靠近前缘的某个点上下表面的流速差异直接反映在压力云图上的高低压区。注意观察上表面吸力峰的位置这是NACA 4412这类凸起翼型在中小攻角下的典型特征。大攻角时重点关注上表面后缘附近是否有回流区。当回流区出现并蔓延到前缘附近时说明已经进入了失速前的深度分离状态。如果流线在翼型后缘附近出现不规则的涡旋结构说明分离泡或涡脱落已经开始SST模型在这种区域的计算精度会有所下降但不影响工程判断。5.2 压力系数Cp分布和实验数据对比的核心指标压力系数分布是验证计算结果最有效的手段。在STAR-CCM中可以先创建一个平面剖切Section然后使用X-Y Plot功能提取翼型表面上的压力系数Cp随弦向位置x/c的变化曲线。公式是Cp (p - p∞) / (0.5 × ρ × U²)其中p∞是远场静压U是来流速度。STAR-CCM里有内置的场函数可以计算Cp或者在后处理中直接用表达式定义。就我个人经验来说小攻角比如0到8度下CFD算出来的Cp曲线和实验值通常吻合得很好尤其是前缘的吸力峰和后缘的压力恢复段。但要注意在低雷诺数比如Re 10⁵条件下前缘可能会出现层流分离泡SST模型如果不开转捩模型就会错误地预测为完全湍流边界层导致吸力峰偏低、阻力偏大。如果做的是低雷诺数工况建议开启Gamma-Theta转捩模型。5.3 提取升力、阻力系数并绘制极曲线提取力系数本身很简单STAR-CCM的Report里直接读取最终值。关键是数据的组织方式。我习惯把不同攻角、不同雷诺数下的计算结果整理成表格便于后续对比攻角(°)ClCdL/D-2-0.1200.0082-14.600.2800.007139.420.6800.007590.741.0800.0088122.761.4800.0112132.181.8500.0165112.1102.1500.026082.7122.3100.048048.1142.0200.074027.3上面的数据是示意性质真实的数值会受到网格量、湍流模型和雷诺数的影响。但注意看趋势在小攻角阶段升力系数呈现很好的线性增长斜率大约是每度0.105左右接近理论值2π per radian约每度0.109。过了某个攻角后升力系数增长变缓然后回头下降这个转折点就是失速攻角。对于NACA 4412实验失速攻角大约在13到15度。画极曲线时横轴是Cd纵轴是Cl一个大开口的抛物线形状。曲线最靠左上角的那个点就是最大升阻比工况通常也是设计巡航点。升力线斜率在失速前保持稳定如果发现斜率明显偏小大概率是网格太粗或者计算域边界太近。6. 常见问题与排查技巧实录6.1 残差不下降或者震荡不收敛这是翼型仿真中最常见的问题没有之一。如果你发现残差卡在某一个水平不再下降或者升力系数监控曲线一直抖按照下面的顺序排查第一先确认计算域尺寸是否足够大。把远场边界放到至少20倍弦长以外这能解决大部分“残差下不去”的问题。计算域太小远场反射波会在流场里来回震荡残差会周期性起伏。第二检查网格质量。特别是翼型前缘区域的网格前缘曲率大网格要局部加密。如果前缘网格太粗驻点位置捕捉不准整个压力分布都会受影响。在STAR-CCM里可以用“Surface Control”在前缘创建局部细化区域。第三降低Courant数。STAR-CCM的稳态求解器也有内迭代的Courant数设置默认值偏大时可以手动调小到0.5甚至0.1试试让求解器更稳定。第四如果是大攻角工况比如超过10度流场本身存在非定常的涡脱落残差无法收敛到非常低的水平是正常现象。如果只需要平均气动力建议切换为非稳态求解Implicit Unsteady配合较大的物理时间步长监测一段时间内的平均力系数。6.2 升力系数偏小或偏大怎么定位问题升力系数偏小最常见的原因是网格太粗或者边界层网格不够。特别是y值没有小于1壁面剪切力计算不准边界层内的动量传递被低估导致压力分布失真。建议重新核算第一层网格厚度或者用STAR-CCM的Report检查一下翼型表面的y值分布。升力系数偏大的情况也有。我踩过一次坑湍流强度设置太高来流中包含了过大的湍动能导致边界层提前从层流转捩为湍流等效于改变了翼型表面的有效形状升力就偏高了。解决方法是把远场湍流强度调到0.1%以下再试一次。攻角方向也要检查。升力系数对攻角的敏感度很高0.5度的误差就会造成5%左右的Cl偏差。确认来流速度的x和y分量计算正确参考面积设置正确力系数方向指向正确。这个常见错误防不胜防我曾经用错参考面积导致整个数据表作废。6.3 网格敏感性验证如何确认你的结果可信网格敏感性验证是CFD结果可靠性的基石这个概念很多初学者没概念。简单来说你需要用至少三套不同密度的网格计算同一个工况观察升阻力系数的变化趋势。网格从粗到细力系数的变化逐渐减小当连续两套网格的计算结果差异小于1%时可以认为达到了“网格无关解”。我的做法是粗网格翼型表面目标尺寸0.002c总网格量8万左右中等网格翼型表面目标尺寸0.001c总网格量18万左右细网格翼型表面目标尺寸0.0005c总网格量35万左右用这三套网格分别计算0度攻角下的升力和阻力系数。如果中等和细网格的结果差异已经很小就用中等网格做批量扫描节省时间。STAR-CCM里可以通过创建不同的网格“Configuration”来管理多套网格设置或者直接把网格连续体的尺寸参数设为参数通过Design Manager做参数扫描。6.4 关于Y值和壁面处理的再提醒最后再强调一次y。很多初学者用STAR-CCM默认的低y壁面处理认为“多层棱柱层网格就是低y”。但低y意味着第一层网格中心的y值必须在1以下这是一个硬指标。如果算完发现翼型表面y分布大部分区域在5以上甚至几十那说明第一层高度设置过高需要降低。我在实际工作中遇到过一种情况升力系数收敛但阻力系数明显偏高排查了网格、模型都没发现问题最后发现是棱柱层总高度不够边界层外缘的速度梯度没有完全被棱柱层覆盖部分边界层区域进入了切割体网格区域。切割体现在比棱柱层大得多相当于在边界层内部做了一个“跳跃式”的网格过渡造成数值粘性虚高。解决方法是增加棱柱层总高度到边界层厚度的1.5倍以上或者增加棱柱层层数。最后再分享一个小技巧我每次新建一个翼型项目时会先把几何、网格和求解设置跑通一个0度攻角的基准工况拿到一套可信的参考数据之后再放开做批量参数扫描。这样万一后面大批量计算出了问题至少有一个基准数据可以用来排查是哪个环节出了变化。这套流程你跑通了以后换NACA 0012、NACA 2415、NACA 4415等任何四位数字翼型都只是换一个坐标文件的事。