☰
OptiStruct卡片详解:从有限元分析基础到工程实战
2026/10/26 16:35:49 网站建设 项目流程

Altair OptiStruct™ 是 Altair HyperWorks 平台中的一款结构分析与优化求解器,在汽车、航空航天、机械装备等行业应用非常广泛。很多初学者在第一次接触 OptiStruct 时,最不习惯的就是它那套“卡片”式输入文件写法。明明是做有限元分析,为什么还要像写配置一样去写卡片?这些卡片到底起到什么作用?如果不小心写错一个字段,求解器又会给出什么样的提示?

这篇文章就围绕 OptiStruct 的卡片使用方法展开,结合完整建模案例,从卡片的基本概念、文件结构、常见卡片类型、实际建模流程,到错误排查和工程建议,一次性把“卡片”这件事讲清楚。无论你是刚接触 Altair 系列工具的学生,还是从其他求解器转过来的工程师,这篇文章都能帮你少走弯路。

1. OptiStruct 卡片到底是什么

1.1 卡片在 OptiStruct 中的角色

在解释 OptiStruct 卡片之前,先看一个最基础的问题:OptiStruct 求解器是如何读取模型信息的?

OptiStruct 的输入文件通常是以.fem结尾的文本文件,这个文件的本质是 Altair 求解器的“数据交换格式”。模型中的所有信息——节点、单元、材料、属性、载荷、边界条件、分析工况、输出请求等——都会以固定格式的文本记录写入这个文件。每一行或者每一个数据块,就被称为一张“卡片”(Card)。

如果以前接触过 Nastran,会发现 OptiStruct 的卡片格式和 Nastran 的 Bulk Data 格式非常相似。实际上 OptiStruct 在设计时确实参考并兼容了很多 Nastran 的卡片写法,这让很多有 Nastran 使用经验的工程师能很快上手。

一张卡片通常由“卡片名称”和若干“字段”组成,例如:

GRID 1 10.0 20.0 30.0

这里GRID是卡片名称,表示定义一个节点;1是节点编号;10.0、20.0、30.0分别是节点的 X、Y、Z 坐标。这就是一张最简单的卡片。

1.2 为什么用卡片而不是图形界面

很多初学者会问:在 HyperMesh 里可以很直观地建网格、加约束、施加载荷,为什么还要去理解底层卡片?

主要有三个原因:

第一,卡片是模型的最终表达形式。不论你在 HyperMesh 的图形界面里操作得多熟练,最后提交求解器计算的,仍然是那个.fem文件。只有理解卡片,才能真正理解你的模型“在求解器眼里是什么样子”。

第二,卡片是排查问题的关键。当求解失败、输出异常、载荷方向不对时,光看图形界面往往看不出问题,打开.fem文件检查卡片字段就会发现错误根源。

第三,卡片是参数化和优化工作的基础。在做 DOE 分析、参数优化、批量提交计算时,脚本直接修改卡片字段比每次都重新打开图形界面要高效得多。

1.3 卡片的分类方式

从用途上来分,OptiStruct 卡片大致可以分为以下几类:

分类典型卡片作用
模型定义卡GRID、ELEMENT、CQUAD4、CTETRA定义节点和单元
材料属性卡MAT1、MAT2、MATS1定义材料本构和参数
单元属性卡PSHELL、PSOLID、PCOMP定义单元物理属性
载荷与边界卡SPC、SPCD、LOAD、DLOAD、FORCE定义约束、载荷和加载方式
工况控制卡SUBCASE、STEP、ANALYSIS定义分析类型和工况
求解参数卡PARAM、OUTPUT、TITLE控制求解过程与输出

这里需要特别注意的是,OptiStruct 的输入文件分为两个区域:SOL与BEGIN BULK之前的区域是求解控制区,用来声明分析类型、输出请求等;BEGIN BULK之后的数据区则是模型数据卡,也就是上面说的各类卡片所在区域。

2. 环境准备与版本说明

2.1 软件环境

要运行 OptiStruct 求解器,需要安装 Altair HyperWorks 套件。通常包含以下几个组件:

  • HyperMesh:前处理工具,用于建模、网格划分、卡片编辑、提交计算。
  • OptiStruct:求解器本体,负责执行有限元分析和优化计算。
  • HyperView:后处理工具,用于查看位移、应力、应变等结果。

如果你的工作流偏向命令行或者自动化,也可以在安装 HyperWorks 之后,直接在终端中调用optistruct命令提交求解。

不同版本的 HyperWorks 界面和卡片选项会略有差异。本文中的示例以常见版本为例,重点演示卡片书写思路和求解流程,具体菜单名称和按钮位置请以你安装的版本为准。

2.2 是否需要单独安装求解器

不需要。OptiStruct 随 HyperWorks 套件一起安装。安装完成后,可以在安装目录下找到optistruct.exe(Windows)或optistruct(Linux)可执行文件。

如果你只想测试卡片格式是否正确,可以先不启动 HyperMesh,直接用文本编辑器编写一个.fem文件,然后通过命令行提交求解。下面是一个典型的命令行提交方式:

optistruct model.fem

在提交之前,请确保optistruct命令所在的目录已经加入系统环境变量,否则需要写完整路径。

2.3 示例文件结构

为了方便后续讲解,本文会围绕一个简单的静力分析示例展开。项目文件夹结构如下:

optistruct_card_demo/ ├── model.fem # OptiStruct 输入文件 ├── results/ # 求解结果输出目录 └── README.md # 说明文档

实际项目中,.fem文件是由 HyperMesh 导出的;本文为了演示卡片字段,会直接手工编写一个最简可算的模型文件。

3. 卡片语法基础与关键卡片详解

3.1 卡片字段格式

OptiStruct 卡片文件有一些基本书写规则。每张卡片占据若干行,行内字段有固定宽度约定。常见格式分为两种:自由格式和固定格式。

自由格式用逗号分隔字段,例如:

GRID,1,,10.0,20.0,30.0

固定格式则严格按照列位置对齐,例如:

GRID 1 10.0 20.0 30.0

HyperMesh 导出文件通常使用固定格式,因为这种格式兼容性最好,不会因为逗号、空格问题导致读取错误。手工编写时,自由格式更方便,但要注意字段顺序不能颠倒。

无论是哪种格式,卡片名称都是从第 1 列开始,字段之间用空格或逗号分隔。多余的空格一般不会影响读取,但为了可读性,建议对齐书写。

3.2 常用模型定义卡片

GRID 卡片

GRID 卡片用于定义节点。常见字段如下:

GRID NID CID X Y Z
  • NID:节点编号,必须唯一。
  • CID:坐标系编号,默认为空,表示在全局坐标系中定义。
  • X、Y、Z:节点坐标。

示例:

GRID 1 0.0 0.0 0.0 GRID 2 100.0 0.0 0.0 GRID 3 100.0 50.0 0.0 GRID 4 0.0 50.0 0.0

这 4 张卡片定义了一个平面矩形的 4 个角点。

CQUAD4 卡片

CQUAD4 卡片用于定义 4 节点四边形壳单元。

CQUAD4 EID PID G1 G2 G3 G4
  • EID:单元编号。
  • PID:属性编号。
  • G1 到 G4:4 个节点编号,顺序必须按逆时针方向,否则单元法向可能出错。

示例:

CQUAD4 1 1 1 2 3 4

这张卡片表示将节点 1、2、3、4 组合成一个四边形单元,单元属性引用编号为 1 的 PSHELL 卡片。

3.3 材料与属性卡片

MAT1 卡片

MAT1 用于定义各向同性材料。

MAT1 MID E G NU RHO
  • MID:材料编号。
  • E:弹性模量。
  • G:剪切模量。
  • NU:泊松比。
  • RHO:密度。

通常只需要给出 E、NU、RHO,G 可通过材料力学公式计算,但显式给出也可以。

示例:

MAT1 1 210000.0 0.3 7.85E-9

这个示例定义了一种弹性模量为 210000 MPa、泊松比为 0.3、密度为 7.85E-9 t/mm³ 的钢材参数。注意单位制,OptiStruct 本身不关心单位,所有数值都是“纯数字”,单位一致性完全由用户保证。

PSHELL 卡片

PSHELL 用于定义壳单元属性。

PSHELL PID MID1 T MID2 12I/T3
  • PID:属性编号。
  • MID1:膜应力计算所用材料编号。
  • T:壳厚度。
  • MID2:弯曲应力计算所用材料编号,通常与 MID1 相同。
  • 12I/T3:弯曲刚度修正系数,一般可以不填,使用默认值。

示例:

PSHELL 1 1 2.0

这张卡片表示单元厚度为 2.0 mm,膜和弯曲行为都使用材料 1。

3.4 载荷与边界卡片

SPC 卡片

SPC 卡片用于定义单点约束。

SPC SID G C D
  • SID:约束集合编号。
  • G:节点编号。
  • C:约束自由度分量,1 表示 X 方向平动,2 表示 Y 方向平动,3 表示 Z 方向平动,4、5、6 分别表示绕 X、Y、Z 轴的转动。
  • D:约束位移值,通常为 0。

如果要约束节点 1 的所有平动自由度,可以写:

SPC 1 1 123 0.0

这里的123含义是同时约束自由度 1、2、3。如果同时约束 1、2、3、4、5、6,可以写123456。

FORCE 卡片

FORCE 卡片用于定义作用在节点上的集中力。

FORCE SID G CID F N1 N2 N3
  • SID:载荷集合编号。
  • G:节点编号。
  • CID:力方向的坐标系编号,空为全局坐标系。
  • F:力的大小。
  • N1、N2、N3:力的方向向量分量。

示例:

FORCE 1 2 0 1000.0 0.0 0.0 1.0

该卡片表示在节点 2 上施加一个大小为 1000 N、方向为(0,0,1)的集中力,也就是指向 Z 正方向。方向向量只需要给出方向,求解器会自动归一化。

3.5 工况控制卡片

SUBCASE 卡片

SUBCASE 卡片用于定义分析工况,把载荷、约束、输出请求组合起来。

SUBCASE 1 SPC = 1 LOAD = 1 DISPLACEMENT = ALL STRESS = ALL

这里的SPC = 1表示工况 1 使用编号为 1 的约束集合,LOAD = 1表示使用编号为 1 的载荷集合,DISPLACEMENT = ALL和STRESS = ALL表示输出所有节点的位移和所有单元的应力。

ANALYSIS 卡片

ANALYSIS 卡片位于求解控制区,用于指定分析类型。

ANALYSIS = STATICS

STATICS表示静力分析。OptiStruct 支持的常见分析类型还有MODAL(模态分析)、BUCKLING(屈曲分析)、FREQ(频率响应分析)等。

4. 完整实战案例:从卡片到求解

下面通过一个完整的静力分析示例,把上面讲到的卡片串联起来。这个案例模拟一块 100 mm × 50 mm、厚度为 2 mm 的钢板,左端固定,右端中点施加一个向下的集中力,计算它的位移和应力分布。

4.1 创建模型文件

创建一个文本文件,命名为model.fem,内容如下。

由于是手工编写,这里采用自由格式,字段之间用逗号分隔。

TITLE = OptiStruct Card Demo - Flat Plate Bending BEGIN BULK GRID,1,,0.0,0.0,0.0 GRID,2,,100.0,0.0,0.0 GRID,3,,100.0,50.0,0.0 GRID,4,,0.0,50.0,0.0 MAT1,1,210000.0,,0.3,7.85E-9 PSHELL,1,1,2.0 CQUAD4,1,1,1,2,3,4 SPC,1,1,123456,0.0 SPC,1,4,123456,0.0 FORCE,1,2,0,500.0,0.0,-1.0,0.0 BEGIN SCENARIO ANALYSIS = STATICS SUBCASE 1 SPC = 1 LOAD = 1 DISPLACEMENT = ALL STRESS = ALL END SCENARIO END BULK

4.2 文件结构解析

下面逐段解释这个文件的含义。

首先是TITLE行,这个不是必须的,但建议写上,方便识别不同模型。

然后是BEGIN BULK,它表示从此处开始进入模型数据卡区域。

接下来的数据卡:

  • 4 张GRID卡片定义了矩形钢板的 4 个角点。
  • MAT1定义了线弹性材料。
  • PSHELL将厚度为 2.0 的壳属性指向材料 1。
  • CQUAD4将 4 个节点组合成一个四边形壳单元。
  • 2 张SPC卡片固定了节点 1 和节点 4 的 6 个自由度,模拟左端固定。
  • FORCE卡片在节点 2 上施加大小为 500 N、方向沿 Y 轴负方向的力,也就是把钢板右端向下压。

再往下是BEGIN SCENARIO,这是 OptiStruct 的工况定义区。ANALYSIS = STATICS声明了静力分析,SUBCASE 1把约束、载荷和输出请求组合起来。

最后END SCENARIO和END BULK分别结束工况区和数据区。

需要说明的是,不同版本的 OptiStruct 对于工况区的写法略有差异。较老版本可能直接使用SEND、BEGIN BULK等划分方式,新版则推荐使用BEGIN SCENARIO。如果使用旧版格式,请参考你安装版本的帮助文档。

4.3 提交求解

保存model.fem后,打开命令行,进入文件所在目录,执行:

optistruct model.fem

求解开始后,终端会输出求解进度。正常完成时,会生成如下结果文件:

model.out # 求解日志文件 model.h3d # HyperView 结果文件 model.stat # 求解统计信息 model.html # 可视化摘要报告(部分版本)

其中.h3d文件可以在 HyperView 中打开,查看位移云图、应力云图等结果。

如果不想使用命令行,也可以在 HyperMesh 的 OptiStruct 面板中,选择输入文件model.fem,点击运行按钮提交求解。

4.4 预期结果说明

由于本例只包含一个壳单元,结果精度没有工程参考意义,仅用于验证卡片语法是否正确。正常求解后,位移结果应该显示节点 2 和节点 3 有向下的位移,其中节点 2 位移量更大;节点 1 和节点 4 的位移为 0,因为它们被完全固定。

应力结果可以查看四边形单元的 von Mises 应力。虽然数值可能不具备实际工程参考价值,但整个流程验证了“文本卡片 → 求解 → 结果查看”的闭环。

4.5 扩展:增加多个单元和多种载荷

实际工程模型不可能只有一个单元,当你需要把模型细化时,可以扩展节点和单元卡片。例如像下面这样增加中间节点并把一个四边形拆成两个三角形单元:

GRID,5,,50.0,25.0,0.0 CTRIA3,1,1,1,5,4 CTRIA3,2,1,1,2,5

这里CTRIA3表示三角形壳单元,字段格式与CQUAD4类似:

CTRIA3 EID PID G1 G2 G3

如果需要在同一个模型里施加多种载荷,比如既有集中力又有压力,可以使用多个载荷卡片,然后在LOAD卡片中进行叠加。简单情况下,也可以直接让SUBCASE中的LOAD指向同一个载荷集合编号,把所有力都放在该集合中。

4.6 在 HyperMesh 中查看卡片

如果你更喜欢在图形界面中操作,可以在 HyperMesh 中通过“Card Edit”功能查看或修改任意一张卡片的字段。方法如下:

  1. 在 HyperMesh 中加载或导入模型。
  2. 在模型浏览树中选择要查看的组件、属性或载荷。
  3. 右键选择“Edit Card”或“Card Edit”。

此时会弹出卡片编辑器,里面会明确显示每个字段的名称、数值和默认状态。对于不熟悉的卡片,建议先使用 Card Edit 查看字段含义,再回到手工编写中套用。

5. 常见问题与排查思路

5.1 卡片字段写错导致求解失败

这是最常遇到的问题。比如CQUAD4的节点顺序不是逆时针,求解器可能不会直接报错,但计算出的单元法向方向是反的,导致应力结果异常。

排查方法:打开.fem文件,检查单元卡片中的节点编号顺序;在 HyperMesh 中打开模型,查看单元法向方向;必要时使用“Element Normal”功能统一法向。

5.2 单位不统一导致结果量级异常

OptiStruct 不关心单位,只做数值计算。如果你用 mm 建模,但密度用了 kg/m³ 的单位,得到的质量、力、应力就会差好几个数量级。

建议在建模前确定统一单位制。常用的一组合适单位是:

物理量单位
长度mm
力N
质量t(吨)
时间s
应力MPa
密度t/mm³

此时弹性模量应使用 MPa,密度使用 t/mm³。例如钢材密度约为7.85E-9 t/mm³。

5.3 没有定义输出请求

很多情况下,模型可以正常求解,但结果文件里没有想要的数据。原因往往是忘记在SUBCASE中定义输出请求。

常见输出请求写法如下:

SUBCASE 1 DISPLACEMENT = ALL STRESS = ALL STRAIN = ALL FORCE = ALL

如果只需要部分节点的结果,也可以写成类似DISPLACEMENT = 1, 2, 3的形式,只输出指定节点编号的位移。

5.4 PARAM 卡片不生效

OptiStruct 中PARAM卡片用于设置各类求解参数,例如:

PARAM, AUTOSPC, YES

AUTOSPC用于自动约束模型中可能存在的刚体位移,避免求解失败。默认情况下 OptiStruct 有自己的处理逻辑,但如果你显式设置了参数却不生效,多半是PARAM卡片放置的位置不对。

PARAM卡片通常放在BEGIN BULK之后,与其他数据卡放在一起。如果放在BEGIN SCENARIO区,求解器可能不会读取。

5.5 常见错误速查表

问题现象常见原因解决思路
求解器报“LOAD not found”SUBCASE 中引用了不存在的载荷集合编号检查 FORCE/LOAD 卡片编号是否和 SPC/LOAD 引用一致
节点编号冲突GRID 卡片出现重复编号搜索重复编号并修改
单元出现负体积或负雅可比单元节点顺序错误、节点坐标异常检查节点编号顺序和坐标值
求解结果过大或过小单位不一致统一单位制,检查弹性模量和密度
没有应力结果SUBCASE 中未写 STRESS = ALL在工况卡中加入输出请求
提示“NO ELEMENTS”单元卡片 PID 指向不存在属性检查 PSHELL/PSOLID 的 PID 编号是否存在

5.6 排查建议

遇到求解失败,建议按下述顺序排查:

  1. 先看.out文件中的错误摘要,定位到具体卡片和行号。
  2. 打开.fem文件,检查报错卡片附近的字段。
  3. 在 HyperMesh 中用 Card Edit 对报错卡片做图形化检查。
  4. 用最小模型验证问题是否由特定卡片引起,比如只保留一个单元和一个载荷。
  5. 确认单位和材料参数是否合理。

6. 最佳实践与工程建议

6.1 保持模型单位制统一

这是做有限元分析最重要的一条经验。建议在每个模型文件开头添加注释或命名约定,标明单位制。对于大型项目,可以维护一个单位制对照表,放在项目文档中,所有成员共享。

6.2 熟练使用卡片编辑器

在 HyperMesh 中,卡片编辑器是理解卡片字段的最佳工具。不要只看图形界面,多打开 Card Edit 看字段含义。看多了以后,你会发现很多卡片虽然在界面上看起来不同,底层字段其实是相通的。

6.3 从简单模型开始验证

每次新建一个分析流程,不要直接把整个整车模型或整个装配体丢进求解器。先用一个单元、两个单元的最小模型跑通流程,确认所有卡片引用关系正确后,再逐步增加模型复杂度。这样可以把“模型问题”和“卡片设置问题”分离开。

6.4 保留原始文件与版本记录

.fem文件是文本文件,非常方便做版本管理。建议把模型文件纳入 Git 或 SVN 管理,每次修改卡片后提交一次,方便回滚和追溯。对于团队协作,还可以在文件头部的注释区写明模型版本、修改人、修改日期和修改内容。

6.5 合理使用 PARAM 参数

OptiStruct 提供大量PARAM参数来控制求解行为,但不要盲目添加。默认参数通常已经经过大量工程验证,只有在确实需要调整时才修改。添加时,建议在PARAM卡片旁边添加注释,说明该参数的作用和设置依据。

6.6 自动生成与手动编写结合

实际项目中,手动编写整个.fem文件并不现实,因为模型规模太大。更推荐的工作方式是:

  1. 在 HyperMesh 中完成网格划分和大部分设置。
  2. 导出.fem文件后,用脚本或文本工具检查关键卡片。
  3. 对于重复性的卡片修改,用 Python 脚本批量处理。

例如可以用 Python 脚本批量修改多个MAT1卡片的弹性模量:

import re def update_young_modulus(file_path, output_path, new_e): with open(file_path, 'r') as f: lines = f.readlines() updated_lines = [] for line in lines: if line.strip().startswith('MAT1'): parts = line.strip().split(',') # 自由格式 MAT1 卡片:MAT1,MID,E,G,NU,RHO if len(parts) >= 3: parts[2] = str(new_e) updated_lines.append(','.join(parts) + '\n') else: updated_lines.append(line) else: updated_lines.append(line) with open(output_path, 'w') as f: f.writelines(updated_lines) update_young_modulus('model.fem', 'model_updated.fem', 200000.0)

这个示例展示了如何用脚本自动处理卡片,适合批量参数扫描和优化计算场景。

6.7 学习路线建议

如果你希望系统掌握 OptiStruct 卡片,建议按以下顺序学习:

  1. 掌握GRID、CQUAD4、MAT1、PSHELL这些最基础卡片。
  2. 熟悉SPC、FORCE、SUBCASE的组合方式,能独立完成静力分析。
  3. 学习PARAM常用参数,理解默认参数的含义。
  4. 掌握模态分析、屈曲分析的卡片写法。
  5. 学习DLOAD等动态载荷卡片的用法。
  6. 最后再接触优化相关卡片,如DESVAR、DRESP1、DCONSTR。

篇幅所限,这篇文章没有展开优化卡片的内容。对于想深入了解优化卡片的朋友,可以在掌握基础卡片后,查阅 Altair 官方的《OptiStruct User Guide》中关于优化设计的章节。

卡片是 OptiStruct 模型的灵魂。无论你日常习惯在 HyperMesh 中做多少图形化操作,最终都需要回到卡片层面来检查和理解模型。刚开始接触卡片时可能会觉得字段繁杂、格式死板,但只要按“模型定义卡 → 材料属性卡 → 载荷约束卡 → 工况控制卡”这条主线去学习,再配合实际算例反复练习,很快就能建立起完整的卡片知识体系。希望这篇文章能帮助你理解 OptiStruct 卡片的基本用法,在后续的学习和工程实践中少踩一些坑。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询