子模型简介
子模型是得到模型部分区域中更加精确解的有限单元技术。在有限元分析中往往出现这种情况,即对于用户关心的区域,如应力集中区域,网格太疏不能得到满意的结果,而对于这些区域之外的部分,网格密度已经足够了。如图1所示。
图1 轮毂和轮辐的子模型 a)粗糙模型,b)叠加的子模型
要得到这些区域的较精确的解,可以采取两种办法:(a)用较细的网格重新划分并分析整个模型;(b)只在关心的区域细化网格并对其分析。显而易见,方法(a)太耗费机时,方法(b)即为子模型技术。
子模型方法又称为切割边界位移法或特定边界位移法。切割边界就是子模型从整个较粗糙的模型分割开的边界。整体模型切割边界的计算位移值即为子模型的边界条件。
子模型基于圣维南原理,即如果实际分布载荷被等效载荷代替以后,应力和应变只在载荷施加的位置附近有改变。这说明只有在载荷集中位置才有应力集中效应,如果子模型的位置远离应力集中位置,则子模型内就可以得到较精确的结果。
ANSYS并不限制子模型分析必须为结构(应力)分析。子模型也可以有效地应用于其他分析中。如在电磁分析中,可以用子模型计算感兴趣区域的电磁力。
除了能求得模型某部分的精确解以外,子模型技术还有如下几个优点:
Ø 它减少甚至取消了有限元实体模型中所需的复杂的传递区域。
Ø 它使得用户可以在感兴趣的区域就不同的设计(如不同的圆角半径)进行分析。
Ø 它帮助用户证明网格划分是否足够细。
值得注意的是,使用子模型也有一些限制条件具体如下:
Ø 只对体单元和壳单元有效。
Ø 子模型的原理要求切割边界应远离应力集中区域。用户必须验证是否满足这个要求。
子模型分析的一般步骤
子模型分析的过程一般包括以下步骤:
1、 生成并分析较粗糙的模型。
2、 生成子模型。
3、 提供切割边界插值。
4、 分析子模型。
5、 验证切割边界和应力集中区域的距离应足够远。
第一步:生成并分析较粗糙的模型
第一个步骤是对整体建模并分析。(注:为了方便区分这个原始模型,我们将其称为粗糙模型。这并不表示模型的网格划分必须是粗糙的,而是说模型的网格划分相对子模型的网格是较粗糙的。)
分析类型可以是静态或瞬态的,其操作、分析的步骤与一般分析相同。下面列出了其它的一些要特别注意的方面:
1) 文件名——粗糙模型和子模型应该使用不同的文件名。这样既可以保证文件不被覆盖,而且在切割边界插值时可以方便地指出粗糙模型的文件。用下列方法指定文件名:
Command: /FILNAME
GUI: Utility Menu>File>Change Jobname
2) 单元类型——子模型技术只能使用体单元和壳单元。分析模型中可以有其他单元类型(如梁单元作为加强筋),但切割边界只能经过体和壳单元。
3) 建模——在很多情况下,粗糙模型不需要包含局部的细节如圆角等,如图2所示。但是,有限元网格必须细化到足以得到较准确的位移解。这一点很重要,因为子模型的结果是根据切割边界的位移解插值得到的。
图2 粗糙模型可以不包括一些细节部分
4) 文件——结果文件(Jobname.RST,Jobname.RMG等)和数据库文件(Jobname.DB,包含几何模型)在粗糙模型分析中是需要的。在生成子模型前应存储数据库文件。用下列方法存储数据库:
Command: SAVE
GUI: Utility Menu>File>Save as
Utility Menu>File>Save as Jobname.db
第二步:生成子模型
子模型是完全依靠粗糙模型的。因此在初始分析后的第一步就是在初始状态清除数据库(另一种方法是退出并重新进入ANSYS)。用下列方法清除数据库:
Command: /CLEAR
GUI: Utility Menu>File>Clear&Start New
同时,应记住用另外的文件名以防止粗糙模型文件被覆盖。用下列方法指定文件名:
Command: /FILNAME
GUI: Utility Menu>File>Change Jobname
然后进入PREP7并建立子模型。需要记住下列几点:
1) 使用与粗糙模型中同样的单元类型。同时应指定相同的单元实参(如壳厚)和材料特性。(另一种子模型技术——壳到体技术——允许从粗糙模型的壳单元转换为体单元。)
2) 子模型的位置(相对全局坐标原点)应与粗糙模型的相应部分相同,如图3所示。
图3 叠加在粗糙模型上的子模型
3) 指定合适的节点旋转位移。切割边界结点的旋转角在插值步骤一一写入结点文件时不应改变(见第三步:生成切割边界插值)。用下列方法指定节点旋转:
Command:NROTAT
GUI: Main Menu>Preprocessor>Create>Nodes>-Rotate Node CS-To Active CS
Main Menu>Preprocessor>Move/Modify>-Rotate Node CS-To ACtive CS
注意:节点旋转角会因为施加节点约束,传递线上约束或面上约束等操作而改变,同样也会为更加明显的操作如[NROTAT和NMODIF]等改变。粗糙模型中节点旋转角的出现或缺省并不影响子模型。
第三步:生成切割边界插值
本步是子模型的关键步骤。用户定义切割边界的节点,ANSYS用粗糙模型结果插值方法计算这些点上的自由度数值(位移等),如图4所示。对于子模型切割边界上的所有节点,程序用粗糙模型网格中相应的单元确定自由度数值,然后这些数值用单元形状功能插值到切割边界上。
在切割边界插值中有如下几步操作:
1) 指定子模型切割边界的结点并将其写入一个文件(缺省为Jobname.NODE)中。可以
在PREP7 中选择切割边界的节点,用下列命令将其写入文件:
Command: NWRITE
GUI: Main Menu>Preprocessor>Create>Nodes>Write Node File
下面是一个NWRITE命令的例子:
NSEL,... !选择切割边界上的结点
NWRITE !将其写入Jobname.NODE
图4 子模型切割边界
在这里讨论一下温度插值的问题。在包含特性随温度变化的材料的分析中,或热-应力耦合分析中,粗糙模型和子模型中的温度分布是相同的。在这种情况下,必须将粗糙模型的温度插值到子模型中的所有结点上。要完成这步操作,要选择子模型中所有结点并写入另外一个文件中,使用NWRITE,Filename,Ext。 记住必须另外指定一个文件名,否则切割边界结点文件将被覆盖!第7步中说明了关于温度插值的命令。
2) 重新选择所有结点并将数据库存入Jobname.DB中,然后退出PREP7。 必须将数据库写入文件,因为在后面子模型分析中要使用到。
用下列命令重新选择所有结点:
Command: ALLSEL
GUI: Utility Menu>Select>Everything
用下列命令存储数据库:
Command: SAVE
GUI: Utility Menu>File>Save as Jobname.db
3) 要进行切割边界插值(和温度插值),数据库中必须包含粗糙模型的几何特征。因此要用下列一种方法读入粗糙模型数据库:
Command: RESUME
GUI: Utility Menu>File>Resume from
如粗糙模型文件名为COARSE,就输入命令RESUME,COARSE,DB。
4) 进入POST1,即通用后处理器(/POST1或Main Menu>General Postproc)。插值只有在POST1中进行。
5) 指向粗糙模型结果文件(FILE或Main Menu>General Postproc>Data & File Opts)。
6) 读入结果文件中相应的数据(SET或Main Menu>General Postproc>-Read Results-option)。
7) 开始切割边界插值。用下列方法完成本步操作:
Command: CBDOF
GUI: Main Menu>General Postproc>Submodeling>Interpolate DOF
缺省状态下,CBDOF命令假定切割边界结点在文件Jobname.NODE中。ANSYS将计算切割边界的DOF数值并用D命令的形式写入文件Jobname.CBDO中。
用下列方法作温度插值,但要保证文件包含所有子模型结点:
Command: BFINT
GUI: Main Menu>General Postproc>Submodeling>Interp Body Forc
温度插值以BF命令的格式写入文件Jobname.BFIN中。
注意:如果数据包括实部和虚部的话,比如声压等,步骤6和7就要作两遍。先用SET 命令读入实部的数据并作插值[CBDOF和/或BFINT],然后用SET命令将域设为1 读入虚部的数据并重新进行插值,但这次将虚部插值写入另一个文件。
8)至此,所有的插值任务完成,退出POST1[FINISH]并读入子模型数据库(RESUME或Main Menu>File>Resume from)。
第四步:分析子模型
在本步中,用户指定分析类型和分析选项,加入插值的DOF数值(和温度数值),施加其他的载荷和边界条件,指定载荷步选项,并对子模型求解。
首先进入求解器(/SOLU或Main Menu>Solution)。
然后定义分析类型(一般为静态)和分析选项。
要施加切割边界自由度约束,用下列命令读入CBDOF命令生成的由D命令组成的文件:
Command: /INPUT
GUI: Utility Menu>File>Read Input from
要施加温度插值,用下列命令读入BFINT命令生成的由BF命令组成的文件:
Command: /INPUT
GUI: Utility Menu>File>Read Input from
如果数据有实部和虚部,先读入实部数据文件,指定自由度约束数值和(/或)结点体载荷是否计算,然后读入虚部数据文件。
用下列方法指定计算自由度约束数值:
Command: DCUM,ADD
GUI: Main Menu>Preprocessor>Loads>-Loads-Settings>Contraints
Main Menu>Solution>-Loads-Settings>Constraints
用下列方法指定计算结点体载荷数值:
Command: BFCUM,ADD
GUI: Main Menu>Preprocessor>Loads>-Loads-Settings>Nodal Body Ld
Main Menu>Solution>-Loads-Settings>Nodal Body Ld
注意在执行DCUM和BFCUM命令时要先将其初始状态设为初始值。
重要的一点是要将粗糙模型上所有其他载荷和边界条件复制到子模型上。比如对称边界条件,面力,惯性载荷(如重量),集中力等(如图5所示)。
图5 子模型的载荷
然后指定载荷步选项(如输出控制)并开始计算:
Command: SOLVE
GUI: Main Menu>Solution>Current LS
Main Menu>Solution>Run FLOTRAN
在求解完成后,退出SOLUTION。[FINISH]
子模型的数据流向(无温度插值)如图6所示。
图6 子模型分析(无温度插值)的数据流向
第五步:验证切割边界和应力集中位置的距离是否足够
最后一步是验证子模型切割边界是否远离应力集中部分。可以通过比较切割边界上的结果(应力,磁通密度等)与粗糙模型相应位置的结果是否一致来验证。如果结果符合得很好,证明切割边界的选取是正确的。如果不符合的话,就要重新定义离感兴趣部分更远一些的切割边界重新生成和计算子模型。
一个比较结果的有效方法是使用云图显示和路径显示,如图7和8所示。
图7 比较结果时的云图显示
图8 比较结果时的路径显示
下面列出了一个子模型分析的输入示例:
!开始子模型分析
/FILNAME,coarse !工作文件名为coarse
/PREP7 !进入PREP7
....
.... !生成粗糙模型
FINISH
/SOLU !进入求解器
ANTYPE,... !分析类型和分析选项
...
D,.... !载荷和载荷步选项
DSYMM,...
ACEL,...
...
SAVE !粗糙模型数据库文件coarse.db
SOLVE !求解粗糙模型
!结果在文件coarse.rst(或rmg等)
FINISH
!生成子模型
/CLEAR !清除数据库(或退出ANSYS并重新进入)
/FILNAME,submod !新工作文件名为submod
/PREP7 !重新进入PREP7
...
... !生成子模型
!进行切割边界插值
NSEL,... !选择切割边界上的结点
NWRITE !将其写入文件submod.node
ALLSEL !读入所有实体
NWRITE,temp,node !将所有结点写入文件temp.node(用于
温度插值)
SAVE !存储子模型数据库文件submod.db
FINISH
RESUME,coarse,db !读入粗糙模型数据库(coarse.db)
/POST1 !进入POST1
FILE,coarse,rst !使用粗糙模型结果文件
SET,... !读入需要的结果数据
CBDOF !从submod.node中读入切割边界结点并
将D命令写入submod.cbdo
BFINT,temps,node !从temps.node中读入所有子模型结点
并将BF命令写入文件submod.bfin(用
于温度插值)
FINISH !结束插值过程
RESUME !读入子模型数据库(submod.db)
/SOLU !进入求解器
ANTYPE,... !分析类型和选项
...
/INPUT,submod,cbdo !切割边界自由度
/INPUT,submod,bfin !温度插值
DSYMM,... !其他载荷和载荷步选项
ACEL,...
...
SOLVE !子模型求解
FINISH
/POST1 !进入POST1
...
... !验证子模型数据
FINISH
注:新版软件遇到上述部分命令无法识别时请自行做相应修改。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删