第四章 子结构
什么是子结构?
子结构就是将一组单元用矩阵凝聚为一个单元的过程。这个单一的矩阵单元称为超单元。在ANSYS分析中,超单元可以象其他单元类型一样使用。唯一的区别就是必须先进行结构生成分析以生成超单元。子结构可以在ANSYS/Mutiphysics,ANSYS/Mechanical和ANSYS/Structural中使用。
使用子结构主要是为了节省机时,并且允许在比较有限的计算机设备资源的基础上求解超大规模的问题。原因之一如a)非线性分析和带有大量重复几何结构的分析。在非线性分析中,可以将模型线性部分作成子结构,这样这部分的单元矩阵就不用在非线性迭代过程中重复计算。在有重复几何结构的模型中(如有四条腿的桌子),可以对于重复的部分生成超单元,然后将它拷贝到不同的位置,这样做可以节省大量的机时。
子结构还用于模型有大转动的情况下。对于这些模型,ANSYS假定每个结构都是围绕其质心转动的。在三维情况下,子结构有三个转动自由度和三个平动自由度。在大转动模型中,用户在使用部分之前无须对子结构施加约束,因为每个子结构都是作为一个单元进行处理,是允许刚体位移的。
另外一个原因b)一个问题就波前大小和需用磁盘空间来说相对于一个计算机系统太庞大了。这样,用户可以通过子结构将问题分块进行分析,每一块对于计算机系统来说都是可以计算的。
如何使用子结构子结构分析有以下三个步骤:
生成部分使用部分扩展部分生成部分就是将普通的有限元单元凝聚为一个超单元。凝聚是通过定义一组主自由度来实现的。主自由度用于定义超单元与模型中其他单元的边界,提取模型的动力学特性。图4-1是一个板状构件用接触单元分析的示意。由于接触单元需要迭代计算,将板状构件形成子结构将显著地节省机时。本例中,主自由度是板与接触单元相连的自由度。
图4-1 子结构使用示例
使用部分就是将超单元与模型整体相连进行分析的部分。整个模型可以是一个超单元,也可以象上例一样是超单元与非超单元相连的。使用部分的计算只是超单元的凝聚(自由度计算仅限于主自由度)和非超单元的全部计算。
扩展部分就是从凝聚计算结果开始计算整个超单元中所有的自由度。如果在使用部分有多个超单元,那么每个超单元都需要有单独的扩展过程。
图4-2示出了整个子结构分析的数据流向和所用的文件。三个步骤的详细解释见以后的叙述。
图4-2 典型子结构分析中的数据流向
生成部分:生成超单元本部分主要有两步:
建立模型。
施加边界条件,生成超单元矩阵。
第一步:建立模型在这一步中,指定文件名和分析名称,用PREP7定义单元类型,单元实参,材料特性和模型几何结构。这些任务在ANSYS绝大多数分析中都是通用的,在ANSYS Basic Analysis Procedures Guide有所叙述。在生成部分,需要记住以下几点:
文件名——在子结构分析中很有用处。有效地使用文件名,在三部分分析中可以省略很多文件处理操作。
用以下方法指定文件名:
Command,/FILENAME
GUI,Utility Menu>File>Change Jobname
如:/FILENAME,GEN
将生成过程中所有文件名都定义为GEN。缺省的文件名是FILE(或file)或在进入ANSYS 后定义的任意文件名。
单元类型——ANSYS提供的绝大多数单元都可以用来生成超单元。唯一的限制是单元必须是线性的。如果生成超单元时有双线性单元的话,ANSYS将自动作为线性单元处理。
注意:在直接耦合中带载荷向量的耦合单元是不能做子结构分析的。可以用同种形状的单元来替代。细节参看ANSYS Coupled-Field Analysis Guide。
材料特性——定义所有必须的材料特性。例如,如果生成质量矩阵,就必须定义密度或其他形式的质量;如果要生成热传导矩阵,就要定义比热。同样,超单元是线性的,非线性材料将被忽略。
模型生成——在生成部分,主要生成模型的超单元部分。非超单元部分是在以后的使用部分生成的。但是,在建模的开始就需要对模型的两个部分有所规划,主要是确定超单元部分和非超单元部分如何连接。为了保证连接正确,应该保证接触部分结点号一致。(其他可以方便用户的方法在本章“使用部分”一节还有介绍。)
要生成整体模型应该这样做:将模型存储在数据库文件中,选择子结构部分进行生成计算。在以后的使用部分,RESUME(Utility Menu>File>Resume from)数据库文件,不选(unselect)子结构,用超单元矩阵代替。
第二步:施加边界条件,生成超单元矩阵。
生成部分的结果包含超单元矩阵。象其他分析一样,用户要定义分析类型和分析设置,施加边界条件,定义载荷步,开始计算。如何完成这些工作见下面的叙述:
进入求解器:
Command,/SOLU
GUI,Main Menu>Solution
定义分析类型和分析设置:
分析类型——选择生成超单元使用下列方法:
Command,ANTYPE
GUI,Main Menu>Solution>-Analysis Type-New Analysis
新的分析或重启动——如果是开始一个新的分析时,只要指定分析类型(如上所述)即可。如果是重启动计算,必须在ANTYPE命令中设定STATUS=REST( Main Menu>Solution>-Analysis Type-Restart)。如果要另外施加载荷时,可以用重启动。(重启动时,初始运算后的Jobname.EMAT,Jobname.ESAV和Jobname.DB文件要存在。)
超单元矩阵文件名——指定超单元矩阵文件名(Sename)。程序将自动添加后缀.SUB,因此完整的文件名是Sename.SUB。缺省是使用工作文件名[/FILENAME]定义超单元矩阵文件名,可以使用以下命令:
Command,SEOPT
GUI,Main Menu>Solution>Analysis Options
要生成的矩阵——可以指定仅生成刚度矩阵(或传导矩阵,电磁系数矩阵);生成刚度和质量矩阵(或热传导矩阵等);生成刚度,质量和阻尼矩阵。质量矩阵用于结构动力学分析和在使用部分有惯性载荷的情况下。在热分析中,只有瞬态热分析才用到热传导矩阵。对于其他分析和阻尼矩阵也大同小异。用SEOPT命令或其GUI路径来定义。
输出矩阵——这个选项允许输出超单元矩阵。可以指定输出矩阵和载荷向量,也可以只输出载荷向量。缺省值是不输出任何矩阵。要输出矩阵,用SEOPT命令或其相应的GUI路径。
质量矩阵形成——只在想生成质量矩阵时使用。用户可以选择缺省生成(取决于所用单元类型)或集中质量近似。对于绝大多数情况,推荐使用缺省生成的方式。但是,在极薄构件的分析中,如细长杆或极薄壳体,集中质量近似将得到更好的结果。用下列方法指定集中质量近似:
Command,LUMPM
GUI,Main Menu>Solution>Analysis Options
用下列方法定义主自由度:
Command,M
GUI,Main Menu>Solution>Master DOFs>Define
在子结构中,主自由度有四种作用:
它们作为超单元与非超单元的边界。应保证将超单元与非超单元接触的结点自由度都定义为超单元(在M命令中Lab=ALL),如图4-1所示。当模型中只有超单元时同样要定义主自由度。
如果在动力学分析中使用超单元,那么主自由度规定了结果的动力学特性。在ANSYS Structural Analysis Guide 第三章的“Matrix Reduction”中有所说明。
如果在使用部分要施加约束[D]或集中力[F]时,这些位置结点的自由度也要定义为主自由度。
在大位移情况下[NLGEOM,ON](Main Mene>Solution>Analysis Options)的使用部分需要主自由度,或者在使用SETRAN命令(Main Menu>Preprocessor>Create>Elements>-Superelements-By CS Tranfer)时。在这些时候,所有主自由度的结点都要定义6个方向的自由度(UX,UY,UX,ROTX,ROTY,ROTZ)。
施加边界条件。在生成部分可以施加所有的载荷类型,但有以下几点情况需要注意:
程序将生成一个包括所有施加的载荷的等效载荷向量。每个载荷步一个载荷向量将写入超单元矩阵文件中。载荷向量的最大允许值是31个。
在生成部分可以使用非零的自由度约束并作为载荷向量的一部分。(在扩展部分,如果被扩展的载荷步中有非零的自由度约束时,数据库中必须有相应的自由度数值。如果没有的话,自由度约束就要在扩展部分重新定义。
自由度约束和集中载荷的施加可以推迟到使用部分,但在这些位置的主自由度一定要先定义好。
同样,线或角加速度的施加也可以推迟到使用部分,但只有在生成质量矩阵时。如果在使用部分要旋转超单元时,推荐使用这种作法,因为此时载荷向量的方向是“冻结”的,它随着超单元旋转。
Maxwell力的标志通常用于电磁分析中,用来标记计算哪个单元面上的电磁力分布。这个标志在电磁子结构分析中无效,因此不要使用。
注——如果生成质量矩阵,建议在使用部分对主自由度(在生成部分定义)施加约束。这样就保证所有的质量都包含在子结构中。
定义载荷步选项。子结构生成部分只能使用动力选项(阻尼)。
阻尼(动力选项)——只在生成阻尼矩阵时可用。
指定质量(alpha)阻尼使用下列方法:
Command,ALPHAD
GUI,Main Menu>Solution>Time/Frequenc>Damping
指定刚度(beta)阻尼使用下列方法:
Command,BETAD
GUI,Main Menu>Solution>Time/Frequenc>Damping
指定与材料有关的beta阻尼使用下列方法:
Command,MP,DAMP
GUI,Main Menu>Preprocessor>Material Props>-Constan-Isotropic
Main Menu>Preprocessor>Material Props>Polynomial
表4-1 子结构中可以施加的载荷
存储数据库的备份文件。
注——这样做的目的是需要在扩展部分使用同样的数据库文件。用下列方法完成本步操作:
Command,SAVE
GUI,Utility Menu>File>Save as Jobname.db
开始计算:
Command,SOLVE
GUI,Main Menu>Solution>Current LS
计算结果包括超单元矩阵文件,Sename.SUB,Sename是通过[SEOPT]指定的文件名或是工作文件名[/FILENAME]。矩阵文件包括根据施加的载荷计算出的载荷向量。(如果没有施加载荷,载荷向量将为零。)
如有另外的载荷步,重复步骤7来生成其他的载荷向量。载荷向量的号码是递增的,并添加到同一个超单元矩阵文件内。关于多载荷步的其他方法见ANSYS Basic Analysis Procedures Guide。
退出SOLUTION:
Command,FINISH
GUI,Main Menu>Finish
使用部分:使用超单元使用部分可以是任何ANSYS分析类型(FLOTRAN和显式动力分析除外)。和普通分析的区别就是一个或几个单元是前面生成的超单元。每个单独的分析指南中都有做不同分析的详细介绍。在这一部分,我们主要介绍如何将超单元变成模型的一部分。这个过程有以下几个步骤:
清除数据库并指定一个新的工作文件名。
建立模型。
施加边界条件并求解。
第一步:清除数据库并指定一个新的工作文件名。
使用部分包含新的模型和新的边界条件。因此,第一步是清除现存的数据库。这与退出并重新进入ANSYS的效果是一样的。清除数据库用下列方法:
Command,/CLEAR
GUI,Utility Menu>File>Clear&Start New
缺省情况下,清除数据库就会重新读入START.ANS文件。(可以改变这个设置)
注:如果通过命令行输入来清除数据库时,在/CLEAR命令行中不能有其他的命令。
新定义的文件名要与生成部分使用的文件名不同。这样,生成部分的文件就不会被覆盖。用下列方式之一定义新的工作文件名:
Command,/FILNAME
GUI,Utility Menu>File>Change Jobname
第二步:建立模型本步是在PREP7中实现的。主要完成以下任务:
定义MATRIX50(超单元)为一种单元。用以下方法:
Command,ET
GUI,Main Menu>Preprocessor>Element Type>Add/Edit/Delete
定义其他非超单元的单元类型。非线性可以使用,取决于进行分析的类型。
定义非超单元的单元实参和材料特性。非线性可以使用,取决于进行分析的类型。
定义非超单元的几何形状。在定义与超单元接触部分时应非常注意。其结点位置要精确重合。(见图4-3)
图4-3 超单元与非超单元的接触处结点应与主自由度精确重合
共有三种方法保证结点重合:
使用与生成部分同样的结点号码。
在生成部分的接触部分结点和使用部分的接触结点使用相同的结点号码增值(或平移)。(使用SETRAN,在第五步中说明)
将这两部分结点所有的自由度固连起来。(用CP系列命令)在不能使用前两种方法时,这种方法是有效的。定义自由度固连可以用下列方法:
Command,CP
GUI,Main Menu>Preprocessor>Coupling/Ceqn>Couple DOFs
如果超单元与其他单元不相连时,在使用部分可以不定义任何单元。
用正确的单元类型定义超单元,读入超单元矩阵。
选择正确的单元类型:
Command,TYPE
GUI,Main Menu>Preprocessor>-Modeling-Create>Elements>Elem Attributes
用下列方法读入超单元矩阵(可能要先用其他命令修改矩阵,见后):
Command,SE
GUI,Main Menu>Preprocessor>Create>Elements>-Superlements->From,SUB File
如果模型中不包含非超单元,或是包含非超单元但接触处的结点号与主自由度结点号一致,那么可以用SE命令直接读入超单元:
TYPE,… !单元类型号
SE,GEN !从文件GEN.SUB中读入超单元
SE命令的文件名域表示超单元矩阵的文件名。扩展名.SUB是给定的,因此整个文件名就是Sename.SUB(GEN.SUB如上例)。超单元就给定下一个可用的单元号。
如果模型中有非超单元存在,并且接触处的结点号与主自由度的结点号是有一个偏移量的话,就必须先用新的结点号生成一个新的超单元矩阵,然后读入新的矩阵。
用下列方法生成新的超单元矩阵:
Command,SETRAN
GUI,Main Menu>Preprocessor>Create>Elements>-Superelements-By CS Transfer
Main Menu>Preprocessor>Create>Elements>-Superelements-By Geom Offset 用下列方法读入新的矩阵:
Command,SE
GUI,Main Menu>Preprocessor>Create>Elements>-Supreelements-From,SUB File
例如,给出超单元矩阵文件GEN.SUB和新的结点偏移量为2000,命令如下:
SETTRAN,GEN,,2000,GEN2,SUB !生成新的超单元GEN2.SUB,偏移
量为 2000
TYPE,… !单元类型号
SE,GEN2 !读入新的超单元文件GEN2.SUB
如果模型中包含非超单元而且接触处结点与主自由度结点无任何关系(一般是结点自由生成的情况),那么先看下面的注意事项:
注意:生成部分的主自由度的结点号往往会覆盖使用部分的模型结点号。这样,读入超单元将覆盖使用部分的模型结点。为了避免这种覆盖,在读入超单元前使用结点号偏移。在这种情况下,在使用SE命令前先存储数据库文件。
因此,应该先存储数据库文件[SAVE],再用SETRAN命令用新的结点偏移量生成新的超单元矩阵,最后用SE命令读入新的矩阵。用CRINTF命令(Main Menu>Preprocessor>Coupling/Ceqn>Coincident Nodes)将接触处的结点连接。例如,给出超单元矩阵文件GEN.SUB:
*GET,MAXNOD,NODE,,NUM,MAX !MAXNOD=最大结点号
SETRAN,GEN,,MAXNOD,GEN2,SUB!生成新的超单元,结点偏移量为
MAXNOD,文件名为GEN2.SUB
SE,GEN2 !读入新的超单元
NSEL,… !选择接触处的所有结点
CPINTF,ALL !固连所有结点的所有自由度
NSEL,ALL
如果要对超单元进行移动或拷贝到不同的位置,或进行镜向操作,必须用SETRAN命令SESYMM命令(Main Menu>Preprocessor>Create>Elements>
By Reflection),并给出正确的结点偏移量,生成新的超单元矩阵文件,然后用SE命令读入新的矩阵。连接超单元与非超单元同样用上面的方法——用相同的结点号,结点偏移量,或用CPINTF命令。
注——如果用SETRAN命令将超单元传递到不同的坐标系中,缺省是超单元的主自由度随之旋转。这一点在初始的超单元主自由度发生旋转时很有用,比如旋转到柱坐标系中。(在这种情况下,传递不影响超单元刚度矩阵。)如果初始超单元没有结点发生旋转,那么传递的超单元也无须旋转结点。用户可以通过设定SETRAN命令的NOROT域为1来防止结点旋转。(在这种传递中,超单元的刚度矩阵和载荷向量由程序自动修改)。
用图形显示和列表功能验证超单元的位置是否正确。超单元用轮廓线表示,数据在生成部分写到矩阵文件中。
要生成图形显示,用下列命令:
Command,EPLOT
GUI,Utility Menu>Plot>Elements
要生成列表,用下列命令:
Command,SELIST
GUI,Utility Menu>List>Other>Superelem Data
存储整个模型文件:
Command,SAVE
GUI,Utility Menu>File>Save as Jobname.db
退出PREP7:
Command,FINISH
GUI,Main Menu>Finish
第三步:施加边界条件并求解。
本步在求解器中完成。取得使用部分结果的过程取决于所做的分析类型。以上提到,可以在绝大多数分析中使用超单元。用户应当有相应的通过生成部分生成的矩阵。例如,如果要做结构动力学分析,必须有质量矩阵。具体过程如下:
进入SOLUTION。
Command,/SOLU
GUI,Main Menu>Solution
定义分析类型和分析选项。
对于大转动分析,打开大位移效果[NLGEOM,ON],并正确定义非线性分析的子步数。
在非超单元上施加边界条件。主要包括自由度约束和对称边界,集中载荷,平面载荷,体载荷,和惯性载荷。注意惯性载荷只有在通过生成部分生成了质量矩阵时才生效。
注——对大转动分析,在本步中要施加正确的约束条件。
用以下方法施加超单元载荷向量:
Command,SFE
GUI,Main Menu>Solution>-Loads-Apply>Load Vector>For Superelement
在超单元矩阵文件中,每个载荷步对应一个载荷向量,用参考号来区别。如,
SFE,63,1,SELV,,0.75
在63号单元上施加载荷向量,号为1,比例系数为0.75。因此,ELEM域代表超单元的单元号,LKEY域代表载荷向量号(缺省为1),Lab是SELV,VAL1代表比例系数(缺省为0)。(参看SFE命令)
注——载荷向量的方向是固定在超单元上的,因此如果超单元旋转了,载荷向量就随之旋转。对于自由度方向也是如此(UX,UY,ROTY等),它们同样随着超单元的旋转而旋转(除非SETRAN命令中NOROT=1,此时结点坐标系不旋转)。
定义与分析类型相适应的载荷步选项。
注——用MATRIX50超单元时不要用PCG求解器。
开始计算:
Command,SOLVE
GUI,Main Menu>Solution>Current LS
本步计算包括非超单元的完整解和超单元的凝聚解——主自由度解。非超单元的完整解记录在结果文件中(Jobname.RST,RTH或RMG),可以进行普通的后处理操作。
凝聚解记录在文件Jobname.DSUB中。可以通过如下方法查看这个文件:
Command,SEDLIST
GUI,Main Menu>General Postproc>List Results>Superelem DOF
Utility Menu>List>Results>Superelem DOF Solu
如果想得到超单元中所有自由度的解,就要用到扩展部分。下面还会说明。
退出SOLUTION。
Command,FINISH
GUI,Main Menu>Finish
扩展部分:在超单元中扩展求解结果扩展部分从使用部分的凝聚解计算出整个超单元的完整解。 下面说明扩展部分的过程。本部分要求生成部分的.EMAT,.ESAV,.SUB,.TRI,.DB和.SELD文件,使用部分的.DSUB文件存在。如果在使用部分中使用了结点偏移,在扩展部分中将自动计入。
清除数据库。相当于退出并重新进入ANSYS。用下列方法:
Command,/CLEAR
GUI,Utility Menu>File>Clear&Start New
将文件名切换到生成部分的文件名。这样,程序就可以识别扩展部分所用的文件。用下列方法:
Command,/FILENAME
GUI,Utility Menu>File>Change Jobname
读入生成部分的数据库文件。用下列方法:
Command,RESUME
GUI,Utility Menu>File>Resume Jobname.db
进入SOLUTION。用下列方法:
Command,/SOLU
GUI,Main Menu>Solution
激活扩展部分及其选项。
扩展部分开关——选为ON。
Command,EXPASS
GUI,Main Menu>Solution>ExpasionPass
被扩展的超单元名——指定SENAME。
Command,SEEXP
GUI,Main Menu>Solution>ExpasionPass>Expand Superelem
(完整的文件名假定为Sename.SUB)
使用部分生成的凝聚解文件。用SEEXP命令(或其相应的GUI路径)指定该文件名。完整的文件名假定为Usefil.DSUB。
位移的实部或虚部——只有在使用部分是谐波分析时使用。用SEEXP命令(或其相应的GUI路径)。
被扩展的解——指定被扩展的使用部分结果。可以通过给出载荷步和子步,也可以通过给出时间或频率来指定结果。用下列方法:
Command,EXPSOL
GUI,Main Menu>Solution>ExpansionPass>By Load Step
Main Menu>Solution>ExpansionPass>By Time/Freq
注——如果被扩展的载荷步中包含非零自由度约束时,数据库中应该有相应的自由度数值。如果没有,那么自由度约束必须在扩展部分中重新声明[D]。
指定载荷步选项。对于子结构扩展部分,只有输出控制选项是可用的:
输出控制——这些选项控制打印输出,数据库和结果文件输出和结果的插值。
如果在打印输出文件(Jobname.OUT)中包含某些内容,使用下列方法:
Command,OUTPR
GUI,Main Menu>Solution>Output Ctrls>DB/Results File
如果控制结果文件(Jobname.RST)中的数据,使用下列方法:
Command,OUTRES
GUI,Main Menu>Solution>Output Ctrls>DB/Results File
如果想用将单元积分点上的数据拷贝到结点的方法代替插值方法(缺省)时,用下列命令:
Command,ERESX
GUI,Main Menu>Solution>Output Ctrls>Integration Pt
开始扩展部分:
Command,SOLVE
GUI,Main Menu>Solution>Current LS
重复步骤5到7对其他使用部分结果进行扩展。如果要扩展不同超单元的解,需要退出并重新进入SOLUTION。
最后,退出SOLUTION。
Command,FINISH
GUI,Main Menu>Finish
10.用通用方法对超单元扩展结果进行后处理。
注——扩展部分不适用于功率谱密度分析。
输入示例下面给出一个子结构分析的命令流文件示例。本例假定一个超单元与非超单元连接。
! 生成部分
!建模(超单元部分)
/FILNAME,GEN !文件名为GEN
/TITLE,…
/PREP7 !进入PREP7
------ !生成超单元部分模型
FINISH
!加载并生成超单元矩阵
/SOLU !进入SOLUTION
ANTYPE,SUBST !子结构分析
SEOPT,GEN,… !超单元名和其他子结构分析选项
M,… !主自由度
D,… !载荷。一个载荷向量将产生并写入超单元矩
阵文件
----- !载荷步选项
SAVE !存储数据库文件
SOLVE !开始求解——生成GEN.SUB文件,包含超
单元矩阵载荷向量。
----- !载荷。生成第二个载荷向量(D和M可以
不变)
SOLVE !加入第二个载荷向量。
----- !重复加载和求解生成其他的载荷向量(最多
达到31个)。
FINISH
!使用部分
!建模
/CLEAR !清除数据库
/FILNAME,USE !文件名为USE
/PREP7 !进入PREP7
ET,1,MATRIX50 !MATRIX50为超单元类型
ET,2,…,!非超单元的单元类型
----- !生成非超单元部分模型
TYPE,1 !指向超单元类型
SETRAN,… !结点偏移量
SE,… !读入由SETRAN生成的超单元
EPLOT !检查超单元位置
NSEL,… !选择接触处的结点
CPINTF,ALL !固连接触处结点(在结点号不相等时使用)
NSEL,ALL
FINISH
!加载并求解
/SOLU !进入求解器
ANTYPE,… !分析类型和分析选项
---
D,… !非超单元上的载荷
---
SFE,… !施加超单元载荷向量
--- !载荷步选项
SAVE !存储数据库文件
SOLVE !开始求解,计算非超单元完整解和超单元凝聚
解。
FINISH
!查看非超单元结果
!扩展部分
/CLEAR !清除数据库
/FILNAME,GEN !文件名切换到生成部分文件名
RESUME !读入生成部分数据库
/SOLU !进入求解器
EXPASS,ON !激活扩展选项
SEEXP,GEN,USE !要扩展的超单元名
--- !载荷步选项(主要是输出控制)
SOLVE !开始扩展部分求解。超单元完整解写入文件
GEN.RST或RTH,RMG中。
FINISH
!查看超单元解请查阅ANTYPE,SEOPT,M,ET,SETRAN,SE,CPINTF,EXPASS和SEEXP命令得到更加详细的说明。
自顶而下子结构分析
上述的子结构方法称为自底而上的子结构生成方法,每个超单元是通过独立的生成过程来生成,然后通过使用过程组装。这种方法适用于超大型的模型,分解为小的超单元便于求解。
如果对相对小一些的模型或具有统一的几何外型控制和不同的结构分析的情况,可以用一种与上述方法有一点细微差别的技术,称之为自顶而下的子结构分析。这种方法适于将非线性模型中线性部分(应相对计算机系统大小比较适中)作成子结构。这种做法的优点是可以在后处理中将几个子结构的结果加以组合。自顶而下子结构分析的步骤如下:
首先建立整体模型,包括超单元和非超单元部分。将模型存储在一个命名的数据库文件中。这个整体的数据库在后面扩展部分中还要使用。如果模型中包含非超单元部分,在使用部分中也要用到这个文件。
将模型的一部分选出完成生成部分操作。因为整体模型都已经建立了,用户所要做的就是选择要生成超单元部分的单元,施加载荷(目的是生成载荷向量),然后SOLVE命令生成超单元(Main Menu>Solution>-Solve-Current LS)。
完成使用部分。进入PREP7,读入整体模型数据库并选择非超单元部分。接下来定义超单元类型[ET,TYPE],读入相应的超单元矩阵。绝大多数情况下,用户不必担心接触处的结点连接,因为它们是由一个模型生成的。进入SOLUTION,定义分析类型和分析选项。在非超单元上施加载荷,读入载荷向量(如果有的话),指定载荷步选项,并开始使用部分的求解。
完成扩展部分。首先读入整体模型,需包含所有结点和单元,然后对每个超单元做扩展,每次应定义不同的文件名,并每次进入和退出SOLUTION。用户可以用通用的后处理过程查看每个超单元的结果。注——使用整个数据库文件,可以读入多个超单元结果:
RESUME,FULL,DB
/POST1
FILE,GEN1
SET,…
FILE,GEN2
SET,… !不清除上一个超单元的结果。
以下给出一个自顶而下子结构分析的输入示例。本例假定模型有一个超单元和其他非超单元部分。
!自顶而下子结构分析的输入示例
!建立整体模型
/FILNAME,FULL !文件名为FULL
/TITLE,…
/PREP7 !进入PREP7
------ !生成整体模型,包括超单元部分和非超单元
部分
SAVE !存储整体模型,以备(使用部分和)扩展部
分使用
FINISH
! 生成部分
/FILNAME,GEN !文件名为GEN
/SOLU !进入SOLUTION
ANTYPE,SUBST !子结构分析
SEOPT,GEN,… !子结构分析选项
ESEL,… !选择超单元部分的单元和结点
NSEL
M,… !主自由度
D,… !载荷。一个载荷向量将产生并写入超单元矩
阵文件
----- !载荷步选项
SOLVE !开始求解——生成超单元矩阵文件GEN.SUB
----- !载荷。生成第二个载荷向量(D和M可以
不变)
SOLVE !加入第二个载荷向量。
----- !重复加载和求解生成其他的载荷向量(最多
达到31个)。
FINISH
!使用部分
/CLEAR !清除数据库
/FILNAME,USE !文件名为USE
RESUME,FFULL,DB !读入整体模型数据库
ESEL,… !选择非超单元部分的单元和结点
NSEL
/PREP7
ET,…,MATRIX50 !MATRIX50为超单元类型
TYPE,… !指向超单元类型
SE,GEN !读入超单元矩阵
EPLOT
FINISH
/SOLU !进入求解器
ANTYPE,… !分析类型和分析选项
---
D,… !非超单元上的载荷
---
SFE,… !施加超单元载荷向量
--- !载荷步选项
SOLVE !开始求解,计算非超单元完整解和超单元凝聚解。
FINISH
!扩展部分
/CLEAR !清除数据库
/FILNAME,GEN !文件名切换到生成部分文件名
RESUME,FULL,DB !读入整体模型数据库
/SOLU !进入求解器
ANTYPE,SUBSTR
EXPASS,ON !激活扩展选项
EXPSOL,… !指定要扩展的解
SEEXP,GEN,USE !要扩展的超单元名
--- !载荷步选项(主要是输出控制)
SOLVE !开始扩展部分求解。超单元完整解写入文件
GEN.RST或RTH,RMG中。
FINISH
!查看超单元解请查阅ANTYPE,SEOPT,M,ET,SETRAN,SE,EXPASS和SEEXP命令得到更加详细的说明。
超单元嵌套在ANSYS中一个强有力的子结构特性就是允许嵌套:允许一个子结构中包含另一个子结构。也就是说,在生成超单元时,生成部分的其中一个单元可以是以前生成的超单元。
例如,有一个超单元名为PISTON,可以在生成一个名为CYLINDER的超单元,其中包含超单元PISTON。为了完成柱体及其内部的活塞的分析,就要进行一个使用部分计算和两个扩展部分的计算。使用部分计算超单元CYLINDER的主自由度凝聚解,第一个扩展部分计算CYLINDER的完整解和超单元PISTON的凝聚解,第二个扩展部分计算PISTON的完整解。
有预应力的子结构在建模中正确的描述系统特性,很重要的一点就是考虑其应力情况。应力情况会影响刚度矩阵项的数值。前一步结构分析的应力情况在超单元生成部分形成刚度矩阵时会被计入。应力刚化使得一般不能承受某种载荷的结构加强。比如说,拉紧的绳索能够承受法向力而松弛的绳索就不能。应力刚化同样可以影响同时有模态和瞬态动力问题时系统的响应频率。
有两种不同的方法能够生成有预应力的子结构。以下用方法A和方法B列出:
方法A:
建立模型,定义分析类型为静力分析(ANTYPE,Main Menu>Solution>New Analysis),施加刚化载荷。
指定计算预应力效果(PSTRES或Main Menu>Solution>Analysis Options)。
开始静力计算(SOLVE或Main Menu>Solution>-Solve-Current LS)。
完成生成部分。用PSTRES命令或其等效的GUI路径计入静力分析的预应力效果。(注——在静力分析和生成部分一定要打开预应力效果。)
完成使用部分和扩展部分。
查看结果。
方法B:
注——本方法不需进行整体模型的静力计算。
建模并完成生成部分。要通过将SEOPT(Main Menu>Solution>
Analysis Options)命令选项SESST设为1为应力刚度矩阵保留空间。
加载并完成静力的使用部分。
完成扩展部分并用PSTRES(Main Menu>Solution>Analysis Options)计入预应力效果。
保持预应力效果打开进行其他的生成部分以生成新的超单元。
求解新的生成部分并完成使用部分。
完成扩展部分并查看结果。
子结构分析实例(命令行格式)
问题描述
圆盘承受沿垂直方向的对称载荷,材料特性和几何特征如下,求其应力应变情况。
/PREP7
smrt,off
/DEVICE,VECTOR,ON
/TITLE,DIAMETRAL COMPRESSION OF A DISK
ANTYPE,STATIC ! 静力分析
ET,1,PLANE2,,,3,,,,1
ET,2,PLANE82,,,3,,,,1
ET,3,PLANE82,,,3,,2 ! 选择结点应力输出
R,1,.2 ! 厚度
MP,EX,1,30E6
MP,NUXY,1,0.3
CSYS,1 ! 柱坐标系
K,1,1,90
K,2,.5,90
K,4,1
K,5,1,50
L,1,5
LESIZE,1,,,7,5
L,5,4
LESIZE,2,,,4,2
CSYS,0 ! 笛卡儿坐标系
K,3
L,3,4
LESIZE,3,,,5
L,2,3
LESIZE,4,,,4,2
L,2,5
LESIZE,5,,,5
L,1,2
LESIZE,6,,,7,5
A,1,2,5,5
A,2,3,4,5
TYPE,2
MSHK,1
MSHA,0,2D
AMESH,2
EPLOT
TYPE,1
MSHK,0
MSHA,1,2D
AMESH,1
EPLOT
NSEL,S,LOC,X,0
NSEL,R,LOC,Y,0
ESLN
TYPE,3
EMODIF,ALL
SAVE,VM141,DB
NSEL,S,LOC,Y,0
DSYM,SYMM,Y ! 沿X轴对称
NSEL,S,LOC,X,0
DSYM,SYMM,X ! 沿Y轴对称
NSEL,ALL
ESEL,ALL
OUTPR,NSOL,NONE ! 结点位移和支反力解输出
OUTPR,ESOL,ALL ! 单元解输出
FK,1,FY,-1000 ! 施加载荷值的一半(对称)
FINISH
/SOLU
SOLVE
FINISH
/POST1
NSEL,S,LOC,X,0 !选择感兴趣的结点
NSEL,A,LOC,X,0.1
NSEL,R,LOC,Y,0
PRNSOL,S,COMP
NSEL,R,LOC,X,0
NSEL,A,LOC,X,0.2
NSEL,R,LOC,Y,0
*GET,SNOD,NODE,,NUM,MIN ! 选择路径起点结点(X=0)
*GET,FNOD,NODE,,NUM,MAX ! 选择路径终点结点(X=0.2)
NSEL,ALL
ESEL,ALL
PATH,STRESS1,2,,48 ! 定义路径名为‘STRESS1’
PPATH,1,SNOD ! 用结点定义路径点
PPATH,2,FNOD
PDEF,SY,S,Y
PRANGE,24
PRPATH,SY !显示路径的SY应力
*GET,S1,PATH,0,MIN,SY
NSEL,R,LOC,X,0
NSEL,A,LOC,X,0.1
NSEL,R,LOC,Y,0
*GET,FNOD,NODE,,NUM,MAX
PATH,STRESS2,2,,48 ! 定义路径名为‘STRESS2’
PPATH,1,SNOD
PPATH,2,FNOD
PDEF,SY,S,Y
PRANGE,24
PRPATH,SY ! 显示路径的SY应力
*GET,S2,PATH,0,MAX,SY
*DIM,LABEL,CHAR,2,2
*DIM,VALUE,,2,3
LABEL(1,1) = 'P (psi)','P (psi)'
LABEL(1,2) = ' X=0 ',' X=.1'
*VFILL,VALUE(1,1),DATA,-9549,-9298
*VFILL,VALUE(1,2),DATA,S1,S2
*VFILL,VALUE(1,3),DATA,ABS(S1/9549),ABS(S2/9298)
SAVE,TABLE_1
FINISH
/CLEAR,NOSTART
/FILNAM,GEN
/PREP7
smrt,off
! 生成部分(SHELL ELEMENTS,SHELL93)
RESUME,VM141,DB
ANTYPE,SUBST ! 子结构生成部分
SEOPT,GEN
! 注:因为PLANE2和SHELL93结点顺序不同,删除原来的网格
ACLEAR,1,2
ETDELE,1,3
ET,1,SHELL93,,,,,,,1
ET,2,SHELL93,,,,,,,1
ET,3,SHELL93,,,,,2
/OUTPUT,SCRATCH
NUMCMP,NODE ! 将结点号压缩
/OUTPUT
TYPE,2
MSHK,1
MSHA,0,2D
AMESH,2
EPLOT
TYPE,1
MSHK,0
MSHA,1,2D
AMESH,1
EPLOT
NSEL,S,LOC,X,0
NSEL,R,LOC,Y,0
ESLN
TYPE,3
EMODIF,ALL
NSEL,S,LOC,Y,0
DSYM,SYMM,Y
NSEL,S,LOC,X,0
DSYM,SYMM,X
NSEL,ALL
ESEL,ALL
D,ALL,UZ,,,,,ROTX,ROTY ! 约束不用的结点自由度
NSEL,S,LOC,X
NSEL,R,LOC,Y,1
*GET,NDOF,NODE,,NUM,MAX ! 主自由度的结点号
M,NDOF,UY !选择载荷施加点的主自由度
NSEL,ALL
FINISH
/SOLU
SOLVE
SAVE ! 存储子结构数据库用于扩展部分
PARSAV,SCALAR,GEN,PARM
FINISH
/CLEAR,NOSTART
/FILNAM,USE
PARRES,,GEN,PARM
/PREP7
smrt,off
/TITLE,DIAMETRAL COMPRESSION OF A DISK (S.E,USE PASS)
ET,1,MATRIX50
SE,GEN
F,NDOF,FY,-1000
FINISH
/SOLU
SOLVE
FINISH
/CLEAR,NOSTART
/FILNAM,GEN
RESUME
/SOLU
EXPASS,ON,YES
SEEXP,GEN,USE
/TITLE,DIAMETRAL COMPRESSION OF A DISK (S.E,EXPANSION PASS)
OUTPR,NSOL,NONE ! 控制位移输出
OUTPR,ESOL,ALL
EXPSOL,1,1
SOLVE
FINISH
/POST1
NSEL,R,LOC,X,0
NSEL,A,LOC,X,0.2
NSEL,R,LOC,Y,0
*GET,SNOD,NODE,,NUM,MIN ! 路径起点结点号(X=0)
*GET,FNOD,NODE,,NUM,MAX ! 路径终点结点号(X=0.2)
NSEL,ALL
ESEL,ALL
PATH,STRESS3,2,,48 !定义路径名为‘STRESS3’
PPATH,1,SNOD
PPATH,2,FNOD
PDEF,SY,S,Y
PRANGE,24
PRPATH,SY ! 输出路径上的SY应力
*GET,S1,PATH,0,MIN,SY
NSEL,R,LOC,X,0
NSEL,A,LOC,X,0.1
NSEL,R,LOC,Y,0
*GET,FNOD,NODE,,NUM,MAX
NSEL,ALL
ESEL,ALL
PATH,STRESS4,2,,48 ! 定义路径名为‘STRESS4’
PPATH,1,SNOD
PPATH,2,FNOD
PDEF,SY,S,Y
PRANGE,24
PRPATH,SY
*GET,S2,PATH,0,LAST,SY
*DIM,LABEL,CHAR,2,2
*DIM,VALUE,,2,3
LABEL(1,1) = 'P (psi)','P (psi)'
LABEL(1,2) = ' X=0 ',' X=.1'
*VFILL,VALUE(1,1),DATA,-9549,-9298
*VFILL,VALUE(1,2),DATA,S1,S2
*VFILL,VALUE(1,3),DATA,ABS(S1/9549),ABS(S2/9298)
SAVE,TABLE_2
FINISH
FINISH
/CLEAR,NOSTART
/PREP7
smrt,off
/TITLE,DIAMETRAL COMPRESSION OF A DISK
ET,1,PLANE145,4,5,3
R,1,.2 ! 厚度
MP,EX,1,30E6 !定义材料特性
MP,NUXY,1,0.3
PCIRC,,1,0,90 ! 建立模型
ESIZE,,5
AMESH,ALL
EPLOT
FINISH
/SOLU
NSEL,S,LOC,Y,0
DSYM,SYMM,Y
NSEL,S,LOC,X,0
DSYM,SYMM,X
NSEL,ALL
ESEL,ALL
F,NODE(0,1,0),FY,-1000 !施加载荷值的一般(对称)
PCONV,1,S,Y,NODE(0,0,0) !中心SY为收敛准则
PCONV,1,S,Y,NODE(.10,0,0) ! X=0.1,Y=0处SY为收敛准则
SOLVE
PRCONV
/POST1
*GET,S1,NODE,12,S,Y
*GET,S2,NODE,22,S,Y
*DIM,LABEL,CHAR,2,2
*DIM,VALUE,,2,3
LABEL(1,1) = 'P (psi)','P (psi)'
LABEL(1,2) = ' X=0 ',' X=.1'
*VFILL,VALUE(1,1),DATA,-9549,-9298
*VFILL,VALUE(1,2),DATA,S1,S2
*VFILL,VALUE(1,3),DATA,ABS(S1/9549),ABS(S2/9298)
SAVE,TABLE_3
RESUME,TABLE_1
FINISH
《ANSYS Verification Manual》中关于子结构分析的实例:
VM141 磁盘的对径压缩
什么是子结构?
子结构就是将一组单元用矩阵凝聚为一个单元的过程。这个单一的矩阵单元称为超单元。在ANSYS分析中,超单元可以象其他单元类型一样使用。唯一的区别就是必须先进行结构生成分析以生成超单元。子结构可以在ANSYS/Mutiphysics,ANSYS/Mechanical和ANSYS/Structural中使用。
使用子结构主要是为了节省机时,并且允许在比较有限的计算机设备资源的基础上求解超大规模的问题。原因之一如a)非线性分析和带有大量重复几何结构的分析。在非线性分析中,可以将模型线性部分作成子结构,这样这部分的单元矩阵就不用在非线性迭代过程中重复计算。在有重复几何结构的模型中(如有四条腿的桌子),可以对于重复的部分生成超单元,然后将它拷贝到不同的位置,这样做可以节省大量的机时。
子结构还用于模型有大转动的情况下。对于这些模型,ANSYS假定每个结构都是围绕其质心转动的。在三维情况下,子结构有三个转动自由度和三个平动自由度。在大转动模型中,用户在使用部分之前无须对子结构施加约束,因为每个子结构都是作为一个单元进行处理,是允许刚体位移的。
另外一个原因b)一个问题就波前大小和需用磁盘空间来说相对于一个计算机系统太庞大了。这样,用户可以通过子结构将问题分块进行分析,每一块对于计算机系统来说都是可以计算的。
如何使用子结构子结构分析有以下三个步骤:
生成部分使用部分扩展部分生成部分就是将普通的有限元单元凝聚为一个超单元。凝聚是通过定义一组主自由度来实现的。主自由度用于定义超单元与模型中其他单元的边界,提取模型的动力学特性。图4-1是一个板状构件用接触单元分析的示意。由于接触单元需要迭代计算,将板状构件形成子结构将显著地节省机时。本例中,主自由度是板与接触单元相连的自由度。
图4-1 子结构使用示例
使用部分就是将超单元与模型整体相连进行分析的部分。整个模型可以是一个超单元,也可以象上例一样是超单元与非超单元相连的。使用部分的计算只是超单元的凝聚(自由度计算仅限于主自由度)和非超单元的全部计算。
扩展部分就是从凝聚计算结果开始计算整个超单元中所有的自由度。如果在使用部分有多个超单元,那么每个超单元都需要有单独的扩展过程。
图4-2示出了整个子结构分析的数据流向和所用的文件。三个步骤的详细解释见以后的叙述。
图4-2 典型子结构分析中的数据流向
生成部分:生成超单元本部分主要有两步:
建立模型。
施加边界条件,生成超单元矩阵。
第一步:建立模型在这一步中,指定文件名和分析名称,用PREP7定义单元类型,单元实参,材料特性和模型几何结构。这些任务在ANSYS绝大多数分析中都是通用的,在ANSYS Basic Analysis Procedures Guide有所叙述。在生成部分,需要记住以下几点:
文件名——在子结构分析中很有用处。有效地使用文件名,在三部分分析中可以省略很多文件处理操作。
用以下方法指定文件名:
Command,/FILENAME
GUI,Utility Menu>File>Change Jobname
如:/FILENAME,GEN
将生成过程中所有文件名都定义为GEN。缺省的文件名是FILE(或file)或在进入ANSYS 后定义的任意文件名。
单元类型——ANSYS提供的绝大多数单元都可以用来生成超单元。唯一的限制是单元必须是线性的。如果生成超单元时有双线性单元的话,ANSYS将自动作为线性单元处理。
注意:在直接耦合中带载荷向量的耦合单元是不能做子结构分析的。可以用同种形状的单元来替代。细节参看ANSYS Coupled-Field Analysis Guide。
材料特性——定义所有必须的材料特性。例如,如果生成质量矩阵,就必须定义密度或其他形式的质量;如果要生成热传导矩阵,就要定义比热。同样,超单元是线性的,非线性材料将被忽略。
模型生成——在生成部分,主要生成模型的超单元部分。非超单元部分是在以后的使用部分生成的。但是,在建模的开始就需要对模型的两个部分有所规划,主要是确定超单元部分和非超单元部分如何连接。为了保证连接正确,应该保证接触部分结点号一致。(其他可以方便用户的方法在本章“使用部分”一节还有介绍。)
要生成整体模型应该这样做:将模型存储在数据库文件中,选择子结构部分进行生成计算。在以后的使用部分,RESUME(Utility Menu>File>Resume from)数据库文件,不选(unselect)子结构,用超单元矩阵代替。
第二步:施加边界条件,生成超单元矩阵。
生成部分的结果包含超单元矩阵。象其他分析一样,用户要定义分析类型和分析设置,施加边界条件,定义载荷步,开始计算。如何完成这些工作见下面的叙述:
进入求解器:
Command,/SOLU
GUI,Main Menu>Solution
定义分析类型和分析设置:
分析类型——选择生成超单元使用下列方法:
Command,ANTYPE
GUI,Main Menu>Solution>-Analysis Type-New Analysis
新的分析或重启动——如果是开始一个新的分析时,只要指定分析类型(如上所述)即可。如果是重启动计算,必须在ANTYPE命令中设定STATUS=REST( Main Menu>Solution>-Analysis Type-Restart)。如果要另外施加载荷时,可以用重启动。(重启动时,初始运算后的Jobname.EMAT,Jobname.ESAV和Jobname.DB文件要存在。)
超单元矩阵文件名——指定超单元矩阵文件名(Sename)。程序将自动添加后缀.SUB,因此完整的文件名是Sename.SUB。缺省是使用工作文件名[/FILENAME]定义超单元矩阵文件名,可以使用以下命令:
Command,SEOPT
GUI,Main Menu>Solution>Analysis Options
要生成的矩阵——可以指定仅生成刚度矩阵(或传导矩阵,电磁系数矩阵);生成刚度和质量矩阵(或热传导矩阵等);生成刚度,质量和阻尼矩阵。质量矩阵用于结构动力学分析和在使用部分有惯性载荷的情况下。在热分析中,只有瞬态热分析才用到热传导矩阵。对于其他分析和阻尼矩阵也大同小异。用SEOPT命令或其GUI路径来定义。
输出矩阵——这个选项允许输出超单元矩阵。可以指定输出矩阵和载荷向量,也可以只输出载荷向量。缺省值是不输出任何矩阵。要输出矩阵,用SEOPT命令或其相应的GUI路径。
质量矩阵形成——只在想生成质量矩阵时使用。用户可以选择缺省生成(取决于所用单元类型)或集中质量近似。对于绝大多数情况,推荐使用缺省生成的方式。但是,在极薄构件的分析中,如细长杆或极薄壳体,集中质量近似将得到更好的结果。用下列方法指定集中质量近似:
Command,LUMPM
GUI,Main Menu>Solution>Analysis Options
用下列方法定义主自由度:
Command,M
GUI,Main Menu>Solution>Master DOFs>Define
在子结构中,主自由度有四种作用:
它们作为超单元与非超单元的边界。应保证将超单元与非超单元接触的结点自由度都定义为超单元(在M命令中Lab=ALL),如图4-1所示。当模型中只有超单元时同样要定义主自由度。
如果在动力学分析中使用超单元,那么主自由度规定了结果的动力学特性。在ANSYS Structural Analysis Guide 第三章的“Matrix Reduction”中有所说明。
如果在使用部分要施加约束[D]或集中力[F]时,这些位置结点的自由度也要定义为主自由度。
在大位移情况下[NLGEOM,ON](Main Mene>Solution>Analysis Options)的使用部分需要主自由度,或者在使用SETRAN命令(Main Menu>Preprocessor>Create>Elements>-Superelements-By CS Tranfer)时。在这些时候,所有主自由度的结点都要定义6个方向的自由度(UX,UY,UX,ROTX,ROTY,ROTZ)。
施加边界条件。在生成部分可以施加所有的载荷类型,但有以下几点情况需要注意:
程序将生成一个包括所有施加的载荷的等效载荷向量。每个载荷步一个载荷向量将写入超单元矩阵文件中。载荷向量的最大允许值是31个。
在生成部分可以使用非零的自由度约束并作为载荷向量的一部分。(在扩展部分,如果被扩展的载荷步中有非零的自由度约束时,数据库中必须有相应的自由度数值。如果没有的话,自由度约束就要在扩展部分重新定义。
自由度约束和集中载荷的施加可以推迟到使用部分,但在这些位置的主自由度一定要先定义好。
同样,线或角加速度的施加也可以推迟到使用部分,但只有在生成质量矩阵时。如果在使用部分要旋转超单元时,推荐使用这种作法,因为此时载荷向量的方向是“冻结”的,它随着超单元旋转。
Maxwell力的标志通常用于电磁分析中,用来标记计算哪个单元面上的电磁力分布。这个标志在电磁子结构分析中无效,因此不要使用。
注——如果生成质量矩阵,建议在使用部分对主自由度(在生成部分定义)施加约束。这样就保证所有的质量都包含在子结构中。
定义载荷步选项。子结构生成部分只能使用动力选项(阻尼)。
阻尼(动力选项)——只在生成阻尼矩阵时可用。
指定质量(alpha)阻尼使用下列方法:
Command,ALPHAD
GUI,Main Menu>Solution>Time/Frequenc>Damping
指定刚度(beta)阻尼使用下列方法:
Command,BETAD
GUI,Main Menu>Solution>Time/Frequenc>Damping
指定与材料有关的beta阻尼使用下列方法:
Command,MP,DAMP
GUI,Main Menu>Preprocessor>Material Props>-Constan-Isotropic
Main Menu>Preprocessor>Material Props>Polynomial
表4-1 子结构中可以施加的载荷
存储数据库的备份文件。
注——这样做的目的是需要在扩展部分使用同样的数据库文件。用下列方法完成本步操作:
Command,SAVE
GUI,Utility Menu>File>Save as Jobname.db
开始计算:
Command,SOLVE
GUI,Main Menu>Solution>Current LS
计算结果包括超单元矩阵文件,Sename.SUB,Sename是通过[SEOPT]指定的文件名或是工作文件名[/FILENAME]。矩阵文件包括根据施加的载荷计算出的载荷向量。(如果没有施加载荷,载荷向量将为零。)
如有另外的载荷步,重复步骤7来生成其他的载荷向量。载荷向量的号码是递增的,并添加到同一个超单元矩阵文件内。关于多载荷步的其他方法见ANSYS Basic Analysis Procedures Guide。
退出SOLUTION:
Command,FINISH
GUI,Main Menu>Finish
使用部分:使用超单元使用部分可以是任何ANSYS分析类型(FLOTRAN和显式动力分析除外)。和普通分析的区别就是一个或几个单元是前面生成的超单元。每个单独的分析指南中都有做不同分析的详细介绍。在这一部分,我们主要介绍如何将超单元变成模型的一部分。这个过程有以下几个步骤:
清除数据库并指定一个新的工作文件名。
建立模型。
施加边界条件并求解。
第一步:清除数据库并指定一个新的工作文件名。
使用部分包含新的模型和新的边界条件。因此,第一步是清除现存的数据库。这与退出并重新进入ANSYS的效果是一样的。清除数据库用下列方法:
Command,/CLEAR
GUI,Utility Menu>File>Clear&Start New
缺省情况下,清除数据库就会重新读入START.ANS文件。(可以改变这个设置)
注:如果通过命令行输入来清除数据库时,在/CLEAR命令行中不能有其他的命令。
新定义的文件名要与生成部分使用的文件名不同。这样,生成部分的文件就不会被覆盖。用下列方式之一定义新的工作文件名:
Command,/FILNAME
GUI,Utility Menu>File>Change Jobname
第二步:建立模型本步是在PREP7中实现的。主要完成以下任务:
定义MATRIX50(超单元)为一种单元。用以下方法:
Command,ET
GUI,Main Menu>Preprocessor>Element Type>Add/Edit/Delete
定义其他非超单元的单元类型。非线性可以使用,取决于进行分析的类型。
定义非超单元的单元实参和材料特性。非线性可以使用,取决于进行分析的类型。
定义非超单元的几何形状。在定义与超单元接触部分时应非常注意。其结点位置要精确重合。(见图4-3)
图4-3 超单元与非超单元的接触处结点应与主自由度精确重合
共有三种方法保证结点重合:
使用与生成部分同样的结点号码。
在生成部分的接触部分结点和使用部分的接触结点使用相同的结点号码增值(或平移)。(使用SETRAN,在第五步中说明)
将这两部分结点所有的自由度固连起来。(用CP系列命令)在不能使用前两种方法时,这种方法是有效的。定义自由度固连可以用下列方法:
Command,CP
GUI,Main Menu>Preprocessor>Coupling/Ceqn>Couple DOFs
如果超单元与其他单元不相连时,在使用部分可以不定义任何单元。
用正确的单元类型定义超单元,读入超单元矩阵。
选择正确的单元类型:
Command,TYPE
GUI,Main Menu>Preprocessor>-Modeling-Create>Elements>Elem Attributes
用下列方法读入超单元矩阵(可能要先用其他命令修改矩阵,见后):
Command,SE
GUI,Main Menu>Preprocessor>Create>Elements>-Superlements->From,SUB File
如果模型中不包含非超单元,或是包含非超单元但接触处的结点号与主自由度结点号一致,那么可以用SE命令直接读入超单元:
TYPE,… !单元类型号
SE,GEN !从文件GEN.SUB中读入超单元
SE命令的文件名域表示超单元矩阵的文件名。扩展名.SUB是给定的,因此整个文件名就是Sename.SUB(GEN.SUB如上例)。超单元就给定下一个可用的单元号。
如果模型中有非超单元存在,并且接触处的结点号与主自由度的结点号是有一个偏移量的话,就必须先用新的结点号生成一个新的超单元矩阵,然后读入新的矩阵。
用下列方法生成新的超单元矩阵:
Command,SETRAN
GUI,Main Menu>Preprocessor>Create>Elements>-Superelements-By CS Transfer
Main Menu>Preprocessor>Create>Elements>-Superelements-By Geom Offset 用下列方法读入新的矩阵:
Command,SE
GUI,Main Menu>Preprocessor>Create>Elements>-Supreelements-From,SUB File
例如,给出超单元矩阵文件GEN.SUB和新的结点偏移量为2000,命令如下:
SETTRAN,GEN,,2000,GEN2,SUB !生成新的超单元GEN2.SUB,偏移
量为 2000
TYPE,… !单元类型号
SE,GEN2 !读入新的超单元文件GEN2.SUB
如果模型中包含非超单元而且接触处结点与主自由度结点无任何关系(一般是结点自由生成的情况),那么先看下面的注意事项:
注意:生成部分的主自由度的结点号往往会覆盖使用部分的模型结点号。这样,读入超单元将覆盖使用部分的模型结点。为了避免这种覆盖,在读入超单元前使用结点号偏移。在这种情况下,在使用SE命令前先存储数据库文件。
因此,应该先存储数据库文件[SAVE],再用SETRAN命令用新的结点偏移量生成新的超单元矩阵,最后用SE命令读入新的矩阵。用CRINTF命令(Main Menu>Preprocessor>Coupling/Ceqn>Coincident Nodes)将接触处的结点连接。例如,给出超单元矩阵文件GEN.SUB:
*GET,MAXNOD,NODE,,NUM,MAX !MAXNOD=最大结点号
SETRAN,GEN,,MAXNOD,GEN2,SUB!生成新的超单元,结点偏移量为
MAXNOD,文件名为GEN2.SUB
SE,GEN2 !读入新的超单元
NSEL,… !选择接触处的所有结点
CPINTF,ALL !固连所有结点的所有自由度
NSEL,ALL
如果要对超单元进行移动或拷贝到不同的位置,或进行镜向操作,必须用SETRAN命令SESYMM命令(Main Menu>Preprocessor>Create>Elements>
By Reflection),并给出正确的结点偏移量,生成新的超单元矩阵文件,然后用SE命令读入新的矩阵。连接超单元与非超单元同样用上面的方法——用相同的结点号,结点偏移量,或用CPINTF命令。
注——如果用SETRAN命令将超单元传递到不同的坐标系中,缺省是超单元的主自由度随之旋转。这一点在初始的超单元主自由度发生旋转时很有用,比如旋转到柱坐标系中。(在这种情况下,传递不影响超单元刚度矩阵。)如果初始超单元没有结点发生旋转,那么传递的超单元也无须旋转结点。用户可以通过设定SETRAN命令的NOROT域为1来防止结点旋转。(在这种传递中,超单元的刚度矩阵和载荷向量由程序自动修改)。
用图形显示和列表功能验证超单元的位置是否正确。超单元用轮廓线表示,数据在生成部分写到矩阵文件中。
要生成图形显示,用下列命令:
Command,EPLOT
GUI,Utility Menu>Plot>Elements
要生成列表,用下列命令:
Command,SELIST
GUI,Utility Menu>List>Other>Superelem Data
存储整个模型文件:
Command,SAVE
GUI,Utility Menu>File>Save as Jobname.db
退出PREP7:
Command,FINISH
GUI,Main Menu>Finish
第三步:施加边界条件并求解。
本步在求解器中完成。取得使用部分结果的过程取决于所做的分析类型。以上提到,可以在绝大多数分析中使用超单元。用户应当有相应的通过生成部分生成的矩阵。例如,如果要做结构动力学分析,必须有质量矩阵。具体过程如下:
进入SOLUTION。
Command,/SOLU
GUI,Main Menu>Solution
定义分析类型和分析选项。
对于大转动分析,打开大位移效果[NLGEOM,ON],并正确定义非线性分析的子步数。
在非超单元上施加边界条件。主要包括自由度约束和对称边界,集中载荷,平面载荷,体载荷,和惯性载荷。注意惯性载荷只有在通过生成部分生成了质量矩阵时才生效。
注——对大转动分析,在本步中要施加正确的约束条件。
用以下方法施加超单元载荷向量:
Command,SFE
GUI,Main Menu>Solution>-Loads-Apply>Load Vector>For Superelement
在超单元矩阵文件中,每个载荷步对应一个载荷向量,用参考号来区别。如,
SFE,63,1,SELV,,0.75
在63号单元上施加载荷向量,号为1,比例系数为0.75。因此,ELEM域代表超单元的单元号,LKEY域代表载荷向量号(缺省为1),Lab是SELV,VAL1代表比例系数(缺省为0)。(参看SFE命令)
注——载荷向量的方向是固定在超单元上的,因此如果超单元旋转了,载荷向量就随之旋转。对于自由度方向也是如此(UX,UY,ROTY等),它们同样随着超单元的旋转而旋转(除非SETRAN命令中NOROT=1,此时结点坐标系不旋转)。
定义与分析类型相适应的载荷步选项。
注——用MATRIX50超单元时不要用PCG求解器。
开始计算:
Command,SOLVE
GUI,Main Menu>Solution>Current LS
本步计算包括非超单元的完整解和超单元的凝聚解——主自由度解。非超单元的完整解记录在结果文件中(Jobname.RST,RTH或RMG),可以进行普通的后处理操作。
凝聚解记录在文件Jobname.DSUB中。可以通过如下方法查看这个文件:
Command,SEDLIST
GUI,Main Menu>General Postproc>List Results>Superelem DOF
Utility Menu>List>Results>Superelem DOF Solu
如果想得到超单元中所有自由度的解,就要用到扩展部分。下面还会说明。
退出SOLUTION。
Command,FINISH
GUI,Main Menu>Finish
扩展部分:在超单元中扩展求解结果扩展部分从使用部分的凝聚解计算出整个超单元的完整解。 下面说明扩展部分的过程。本部分要求生成部分的.EMAT,.ESAV,.SUB,.TRI,.DB和.SELD文件,使用部分的.DSUB文件存在。如果在使用部分中使用了结点偏移,在扩展部分中将自动计入。
清除数据库。相当于退出并重新进入ANSYS。用下列方法:
Command,/CLEAR
GUI,Utility Menu>File>Clear&Start New
将文件名切换到生成部分的文件名。这样,程序就可以识别扩展部分所用的文件。用下列方法:
Command,/FILENAME
GUI,Utility Menu>File>Change Jobname
读入生成部分的数据库文件。用下列方法:
Command,RESUME
GUI,Utility Menu>File>Resume Jobname.db
进入SOLUTION。用下列方法:
Command,/SOLU
GUI,Main Menu>Solution
激活扩展部分及其选项。
扩展部分开关——选为ON。
Command,EXPASS
GUI,Main Menu>Solution>ExpasionPass
被扩展的超单元名——指定SENAME。
Command,SEEXP
GUI,Main Menu>Solution>ExpasionPass>Expand Superelem
(完整的文件名假定为Sename.SUB)
使用部分生成的凝聚解文件。用SEEXP命令(或其相应的GUI路径)指定该文件名。完整的文件名假定为Usefil.DSUB。
位移的实部或虚部——只有在使用部分是谐波分析时使用。用SEEXP命令(或其相应的GUI路径)。
被扩展的解——指定被扩展的使用部分结果。可以通过给出载荷步和子步,也可以通过给出时间或频率来指定结果。用下列方法:
Command,EXPSOL
GUI,Main Menu>Solution>ExpansionPass>By Load Step
Main Menu>Solution>ExpansionPass>By Time/Freq
注——如果被扩展的载荷步中包含非零自由度约束时,数据库中应该有相应的自由度数值。如果没有,那么自由度约束必须在扩展部分中重新声明[D]。
指定载荷步选项。对于子结构扩展部分,只有输出控制选项是可用的:
输出控制——这些选项控制打印输出,数据库和结果文件输出和结果的插值。
如果在打印输出文件(Jobname.OUT)中包含某些内容,使用下列方法:
Command,OUTPR
GUI,Main Menu>Solution>Output Ctrls>DB/Results File
如果控制结果文件(Jobname.RST)中的数据,使用下列方法:
Command,OUTRES
GUI,Main Menu>Solution>Output Ctrls>DB/Results File
如果想用将单元积分点上的数据拷贝到结点的方法代替插值方法(缺省)时,用下列命令:
Command,ERESX
GUI,Main Menu>Solution>Output Ctrls>Integration Pt
开始扩展部分:
Command,SOLVE
GUI,Main Menu>Solution>Current LS
重复步骤5到7对其他使用部分结果进行扩展。如果要扩展不同超单元的解,需要退出并重新进入SOLUTION。
最后,退出SOLUTION。
Command,FINISH
GUI,Main Menu>Finish
10.用通用方法对超单元扩展结果进行后处理。
注——扩展部分不适用于功率谱密度分析。
输入示例下面给出一个子结构分析的命令流文件示例。本例假定一个超单元与非超单元连接。
! 生成部分
!建模(超单元部分)
/FILNAME,GEN !文件名为GEN
/TITLE,…
/PREP7 !进入PREP7
------ !生成超单元部分模型
FINISH
!加载并生成超单元矩阵
/SOLU !进入SOLUTION
ANTYPE,SUBST !子结构分析
SEOPT,GEN,… !超单元名和其他子结构分析选项
M,… !主自由度
D,… !载荷。一个载荷向量将产生并写入超单元矩
阵文件
----- !载荷步选项
SAVE !存储数据库文件
SOLVE !开始求解——生成GEN.SUB文件,包含超
单元矩阵载荷向量。
----- !载荷。生成第二个载荷向量(D和M可以
不变)
SOLVE !加入第二个载荷向量。
----- !重复加载和求解生成其他的载荷向量(最多
达到31个)。
FINISH
!使用部分
!建模
/CLEAR !清除数据库
/FILNAME,USE !文件名为USE
/PREP7 !进入PREP7
ET,1,MATRIX50 !MATRIX50为超单元类型
ET,2,…,!非超单元的单元类型
----- !生成非超单元部分模型
TYPE,1 !指向超单元类型
SETRAN,… !结点偏移量
SE,… !读入由SETRAN生成的超单元
EPLOT !检查超单元位置
NSEL,… !选择接触处的结点
CPINTF,ALL !固连接触处结点(在结点号不相等时使用)
NSEL,ALL
FINISH
!加载并求解
/SOLU !进入求解器
ANTYPE,… !分析类型和分析选项
---
D,… !非超单元上的载荷
---
SFE,… !施加超单元载荷向量
--- !载荷步选项
SAVE !存储数据库文件
SOLVE !开始求解,计算非超单元完整解和超单元凝聚
解。
FINISH
!查看非超单元结果
!扩展部分
/CLEAR !清除数据库
/FILNAME,GEN !文件名切换到生成部分文件名
RESUME !读入生成部分数据库
/SOLU !进入求解器
EXPASS,ON !激活扩展选项
SEEXP,GEN,USE !要扩展的超单元名
--- !载荷步选项(主要是输出控制)
SOLVE !开始扩展部分求解。超单元完整解写入文件
GEN.RST或RTH,RMG中。
FINISH
!查看超单元解请查阅ANTYPE,SEOPT,M,ET,SETRAN,SE,CPINTF,EXPASS和SEEXP命令得到更加详细的说明。
自顶而下子结构分析
上述的子结构方法称为自底而上的子结构生成方法,每个超单元是通过独立的生成过程来生成,然后通过使用过程组装。这种方法适用于超大型的模型,分解为小的超单元便于求解。
如果对相对小一些的模型或具有统一的几何外型控制和不同的结构分析的情况,可以用一种与上述方法有一点细微差别的技术,称之为自顶而下的子结构分析。这种方法适于将非线性模型中线性部分(应相对计算机系统大小比较适中)作成子结构。这种做法的优点是可以在后处理中将几个子结构的结果加以组合。自顶而下子结构分析的步骤如下:
首先建立整体模型,包括超单元和非超单元部分。将模型存储在一个命名的数据库文件中。这个整体的数据库在后面扩展部分中还要使用。如果模型中包含非超单元部分,在使用部分中也要用到这个文件。
将模型的一部分选出完成生成部分操作。因为整体模型都已经建立了,用户所要做的就是选择要生成超单元部分的单元,施加载荷(目的是生成载荷向量),然后SOLVE命令生成超单元(Main Menu>Solution>-Solve-Current LS)。
完成使用部分。进入PREP7,读入整体模型数据库并选择非超单元部分。接下来定义超单元类型[ET,TYPE],读入相应的超单元矩阵。绝大多数情况下,用户不必担心接触处的结点连接,因为它们是由一个模型生成的。进入SOLUTION,定义分析类型和分析选项。在非超单元上施加载荷,读入载荷向量(如果有的话),指定载荷步选项,并开始使用部分的求解。
完成扩展部分。首先读入整体模型,需包含所有结点和单元,然后对每个超单元做扩展,每次应定义不同的文件名,并每次进入和退出SOLUTION。用户可以用通用的后处理过程查看每个超单元的结果。注——使用整个数据库文件,可以读入多个超单元结果:
RESUME,FULL,DB
/POST1
FILE,GEN1
SET,…
FILE,GEN2
SET,… !不清除上一个超单元的结果。
以下给出一个自顶而下子结构分析的输入示例。本例假定模型有一个超单元和其他非超单元部分。
!自顶而下子结构分析的输入示例
!建立整体模型
/FILNAME,FULL !文件名为FULL
/TITLE,…
/PREP7 !进入PREP7
------ !生成整体模型,包括超单元部分和非超单元
部分
SAVE !存储整体模型,以备(使用部分和)扩展部
分使用
FINISH
! 生成部分
/FILNAME,GEN !文件名为GEN
/SOLU !进入SOLUTION
ANTYPE,SUBST !子结构分析
SEOPT,GEN,… !子结构分析选项
ESEL,… !选择超单元部分的单元和结点
NSEL
M,… !主自由度
D,… !载荷。一个载荷向量将产生并写入超单元矩
阵文件
----- !载荷步选项
SOLVE !开始求解——生成超单元矩阵文件GEN.SUB
----- !载荷。生成第二个载荷向量(D和M可以
不变)
SOLVE !加入第二个载荷向量。
----- !重复加载和求解生成其他的载荷向量(最多
达到31个)。
FINISH
!使用部分
/CLEAR !清除数据库
/FILNAME,USE !文件名为USE
RESUME,FFULL,DB !读入整体模型数据库
ESEL,… !选择非超单元部分的单元和结点
NSEL
/PREP7
ET,…,MATRIX50 !MATRIX50为超单元类型
TYPE,… !指向超单元类型
SE,GEN !读入超单元矩阵
EPLOT
FINISH
/SOLU !进入求解器
ANTYPE,… !分析类型和分析选项
---
D,… !非超单元上的载荷
---
SFE,… !施加超单元载荷向量
--- !载荷步选项
SOLVE !开始求解,计算非超单元完整解和超单元凝聚解。
FINISH
!扩展部分
/CLEAR !清除数据库
/FILNAME,GEN !文件名切换到生成部分文件名
RESUME,FULL,DB !读入整体模型数据库
/SOLU !进入求解器
ANTYPE,SUBSTR
EXPASS,ON !激活扩展选项
EXPSOL,… !指定要扩展的解
SEEXP,GEN,USE !要扩展的超单元名
--- !载荷步选项(主要是输出控制)
SOLVE !开始扩展部分求解。超单元完整解写入文件
GEN.RST或RTH,RMG中。
FINISH
!查看超单元解请查阅ANTYPE,SEOPT,M,ET,SETRAN,SE,EXPASS和SEEXP命令得到更加详细的说明。
超单元嵌套在ANSYS中一个强有力的子结构特性就是允许嵌套:允许一个子结构中包含另一个子结构。也就是说,在生成超单元时,生成部分的其中一个单元可以是以前生成的超单元。
例如,有一个超单元名为PISTON,可以在生成一个名为CYLINDER的超单元,其中包含超单元PISTON。为了完成柱体及其内部的活塞的分析,就要进行一个使用部分计算和两个扩展部分的计算。使用部分计算超单元CYLINDER的主自由度凝聚解,第一个扩展部分计算CYLINDER的完整解和超单元PISTON的凝聚解,第二个扩展部分计算PISTON的完整解。
有预应力的子结构在建模中正确的描述系统特性,很重要的一点就是考虑其应力情况。应力情况会影响刚度矩阵项的数值。前一步结构分析的应力情况在超单元生成部分形成刚度矩阵时会被计入。应力刚化使得一般不能承受某种载荷的结构加强。比如说,拉紧的绳索能够承受法向力而松弛的绳索就不能。应力刚化同样可以影响同时有模态和瞬态动力问题时系统的响应频率。
有两种不同的方法能够生成有预应力的子结构。以下用方法A和方法B列出:
方法A:
建立模型,定义分析类型为静力分析(ANTYPE,Main Menu>Solution>New Analysis),施加刚化载荷。
指定计算预应力效果(PSTRES或Main Menu>Solution>Analysis Options)。
开始静力计算(SOLVE或Main Menu>Solution>-Solve-Current LS)。
完成生成部分。用PSTRES命令或其等效的GUI路径计入静力分析的预应力效果。(注——在静力分析和生成部分一定要打开预应力效果。)
完成使用部分和扩展部分。
查看结果。
方法B:
注——本方法不需进行整体模型的静力计算。
建模并完成生成部分。要通过将SEOPT(Main Menu>Solution>
Analysis Options)命令选项SESST设为1为应力刚度矩阵保留空间。
加载并完成静力的使用部分。
完成扩展部分并用PSTRES(Main Menu>Solution>Analysis Options)计入预应力效果。
保持预应力效果打开进行其他的生成部分以生成新的超单元。
求解新的生成部分并完成使用部分。
完成扩展部分并查看结果。
子结构分析实例(命令行格式)
问题描述
圆盘承受沿垂直方向的对称载荷,材料特性和几何特征如下,求其应力应变情况。
/PREP7
smrt,off
/DEVICE,VECTOR,ON
/TITLE,DIAMETRAL COMPRESSION OF A DISK
ANTYPE,STATIC ! 静力分析
ET,1,PLANE2,,,3,,,,1
ET,2,PLANE82,,,3,,,,1
ET,3,PLANE82,,,3,,2 ! 选择结点应力输出
R,1,.2 ! 厚度
MP,EX,1,30E6
MP,NUXY,1,0.3
CSYS,1 ! 柱坐标系
K,1,1,90
K,2,.5,90
K,4,1
K,5,1,50
L,1,5
LESIZE,1,,,7,5
L,5,4
LESIZE,2,,,4,2
CSYS,0 ! 笛卡儿坐标系
K,3
L,3,4
LESIZE,3,,,5
L,2,3
LESIZE,4,,,4,2
L,2,5
LESIZE,5,,,5
L,1,2
LESIZE,6,,,7,5
A,1,2,5,5
A,2,3,4,5
TYPE,2
MSHK,1
MSHA,0,2D
AMESH,2
EPLOT
TYPE,1
MSHK,0
MSHA,1,2D
AMESH,1
EPLOT
NSEL,S,LOC,X,0
NSEL,R,LOC,Y,0
ESLN
TYPE,3
EMODIF,ALL
SAVE,VM141,DB
NSEL,S,LOC,Y,0
DSYM,SYMM,Y ! 沿X轴对称
NSEL,S,LOC,X,0
DSYM,SYMM,X ! 沿Y轴对称
NSEL,ALL
ESEL,ALL
OUTPR,NSOL,NONE ! 结点位移和支反力解输出
OUTPR,ESOL,ALL ! 单元解输出
FK,1,FY,-1000 ! 施加载荷值的一半(对称)
FINISH
/SOLU
SOLVE
FINISH
/POST1
NSEL,S,LOC,X,0 !选择感兴趣的结点
NSEL,A,LOC,X,0.1
NSEL,R,LOC,Y,0
PRNSOL,S,COMP
NSEL,R,LOC,X,0
NSEL,A,LOC,X,0.2
NSEL,R,LOC,Y,0
*GET,SNOD,NODE,,NUM,MIN ! 选择路径起点结点(X=0)
*GET,FNOD,NODE,,NUM,MAX ! 选择路径终点结点(X=0.2)
NSEL,ALL
ESEL,ALL
PATH,STRESS1,2,,48 ! 定义路径名为‘STRESS1’
PPATH,1,SNOD ! 用结点定义路径点
PPATH,2,FNOD
PDEF,SY,S,Y
PRANGE,24
PRPATH,SY !显示路径的SY应力
*GET,S1,PATH,0,MIN,SY
NSEL,R,LOC,X,0
NSEL,A,LOC,X,0.1
NSEL,R,LOC,Y,0
*GET,FNOD,NODE,,NUM,MAX
PATH,STRESS2,2,,48 ! 定义路径名为‘STRESS2’
PPATH,1,SNOD
PPATH,2,FNOD
PDEF,SY,S,Y
PRANGE,24
PRPATH,SY ! 显示路径的SY应力
*GET,S2,PATH,0,MAX,SY
*DIM,LABEL,CHAR,2,2
*DIM,VALUE,,2,3
LABEL(1,1) = 'P (psi)','P (psi)'
LABEL(1,2) = ' X=0 ',' X=.1'
*VFILL,VALUE(1,1),DATA,-9549,-9298
*VFILL,VALUE(1,2),DATA,S1,S2
*VFILL,VALUE(1,3),DATA,ABS(S1/9549),ABS(S2/9298)
SAVE,TABLE_1
FINISH
/CLEAR,NOSTART
/FILNAM,GEN
/PREP7
smrt,off
! 生成部分(SHELL ELEMENTS,SHELL93)
RESUME,VM141,DB
ANTYPE,SUBST ! 子结构生成部分
SEOPT,GEN
! 注:因为PLANE2和SHELL93结点顺序不同,删除原来的网格
ACLEAR,1,2
ETDELE,1,3
ET,1,SHELL93,,,,,,,1
ET,2,SHELL93,,,,,,,1
ET,3,SHELL93,,,,,2
/OUTPUT,SCRATCH
NUMCMP,NODE ! 将结点号压缩
/OUTPUT
TYPE,2
MSHK,1
MSHA,0,2D
AMESH,2
EPLOT
TYPE,1
MSHK,0
MSHA,1,2D
AMESH,1
EPLOT
NSEL,S,LOC,X,0
NSEL,R,LOC,Y,0
ESLN
TYPE,3
EMODIF,ALL
NSEL,S,LOC,Y,0
DSYM,SYMM,Y
NSEL,S,LOC,X,0
DSYM,SYMM,X
NSEL,ALL
ESEL,ALL
D,ALL,UZ,,,,,ROTX,ROTY ! 约束不用的结点自由度
NSEL,S,LOC,X
NSEL,R,LOC,Y,1
*GET,NDOF,NODE,,NUM,MAX ! 主自由度的结点号
M,NDOF,UY !选择载荷施加点的主自由度
NSEL,ALL
FINISH
/SOLU
SOLVE
SAVE ! 存储子结构数据库用于扩展部分
PARSAV,SCALAR,GEN,PARM
FINISH
/CLEAR,NOSTART
/FILNAM,USE
PARRES,,GEN,PARM
/PREP7
smrt,off
/TITLE,DIAMETRAL COMPRESSION OF A DISK (S.E,USE PASS)
ET,1,MATRIX50
SE,GEN
F,NDOF,FY,-1000
FINISH
/SOLU
SOLVE
FINISH
/CLEAR,NOSTART
/FILNAM,GEN
RESUME
/SOLU
EXPASS,ON,YES
SEEXP,GEN,USE
/TITLE,DIAMETRAL COMPRESSION OF A DISK (S.E,EXPANSION PASS)
OUTPR,NSOL,NONE ! 控制位移输出
OUTPR,ESOL,ALL
EXPSOL,1,1
SOLVE
FINISH
/POST1
NSEL,R,LOC,X,0
NSEL,A,LOC,X,0.2
NSEL,R,LOC,Y,0
*GET,SNOD,NODE,,NUM,MIN ! 路径起点结点号(X=0)
*GET,FNOD,NODE,,NUM,MAX ! 路径终点结点号(X=0.2)
NSEL,ALL
ESEL,ALL
PATH,STRESS3,2,,48 !定义路径名为‘STRESS3’
PPATH,1,SNOD
PPATH,2,FNOD
PDEF,SY,S,Y
PRANGE,24
PRPATH,SY ! 输出路径上的SY应力
*GET,S1,PATH,0,MIN,SY
NSEL,R,LOC,X,0
NSEL,A,LOC,X,0.1
NSEL,R,LOC,Y,0
*GET,FNOD,NODE,,NUM,MAX
NSEL,ALL
ESEL,ALL
PATH,STRESS4,2,,48 ! 定义路径名为‘STRESS4’
PPATH,1,SNOD
PPATH,2,FNOD
PDEF,SY,S,Y
PRANGE,24
PRPATH,SY
*GET,S2,PATH,0,LAST,SY
*DIM,LABEL,CHAR,2,2
*DIM,VALUE,,2,3
LABEL(1,1) = 'P (psi)','P (psi)'
LABEL(1,2) = ' X=0 ',' X=.1'
*VFILL,VALUE(1,1),DATA,-9549,-9298
*VFILL,VALUE(1,2),DATA,S1,S2
*VFILL,VALUE(1,3),DATA,ABS(S1/9549),ABS(S2/9298)
SAVE,TABLE_2
FINISH
FINISH
/CLEAR,NOSTART
/PREP7
smrt,off
/TITLE,DIAMETRAL COMPRESSION OF A DISK
ET,1,PLANE145,4,5,3
R,1,.2 ! 厚度
MP,EX,1,30E6 !定义材料特性
MP,NUXY,1,0.3
PCIRC,,1,0,90 ! 建立模型
ESIZE,,5
AMESH,ALL
EPLOT
FINISH
/SOLU
NSEL,S,LOC,Y,0
DSYM,SYMM,Y
NSEL,S,LOC,X,0
DSYM,SYMM,X
NSEL,ALL
ESEL,ALL
F,NODE(0,1,0),FY,-1000 !施加载荷值的一般(对称)
PCONV,1,S,Y,NODE(0,0,0) !中心SY为收敛准则
PCONV,1,S,Y,NODE(.10,0,0) ! X=0.1,Y=0处SY为收敛准则
SOLVE
PRCONV
/POST1
*GET,S1,NODE,12,S,Y
*GET,S2,NODE,22,S,Y
*DIM,LABEL,CHAR,2,2
*DIM,VALUE,,2,3
LABEL(1,1) = 'P (psi)','P (psi)'
LABEL(1,2) = ' X=0 ',' X=.1'
*VFILL,VALUE(1,1),DATA,-9549,-9298
*VFILL,VALUE(1,2),DATA,S1,S2
*VFILL,VALUE(1,3),DATA,ABS(S1/9549),ABS(S2/9298)
SAVE,TABLE_3
RESUME,TABLE_1
FINISH
《ANSYS Verification Manual》中关于子结构分析的实例:
VM141 磁盘的对径压缩