ANSYS二次开发.doc_第1页
ANSYS二次开发.doc_第2页
ANSYS二次开发.doc_第3页
ANSYS二次开发.doc_第4页
ANSYS二次开发.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ANSYS二次开发手册UIDL解析APDL解析目录第二章 解析UIDL篇12.1结识UIDL12.2看看UIDL的模样12.3 Ansys调用UIDL的过程4第三章UIDL实例解析一63.1问题描述:63.2环境准备:63.3添加菜单:73.4结束语9第四章UIDL实例解析二104.1问题描述:104.2环境准备及构建对话框:104.3参数提取杂谈124.4结束语13附录13第五章UIDL实例解析三155.1问题描述155.2环境准备及构建联机帮助:155.3几点说明185.4 结束语19第六章 解析APDL206.1 熟悉新朋友APDL206.2 二次开发工具之间的比较206.3 结束语20第七章 APDL综合实例217.1 问题说明217.2 解题思想227.3 构建步骤227.4 几点说明267.5 结束语26第二章 解析UIDL篇2.1结识UIDLUIDL是什么?Ansys二次开放语言的一种。OK,那么它能带给我们什么?很多很多,如果你想让你在Ansys中制作的用户界面具有专业水准的话,请来结识一下我们的UIDL把。l 全称: UIDL的全名是User Interface Design Language,是Ansys中二次开发工具方面的三大金刚之一。GUI方面几乎全部的二次开发功能都将由它运筹帷幄。l 功用:n 组织我们自己强大的菜单系统。想象一下我们在Ansys中也能轻松做出可以和VC,VB之类主流GUI开发工具媲美的菜单响应效果,Ansys的世界将是多么的亲切、友好。n 构建功能繁复的对话框。Ansys中美观易用的ContactWizard对话框级联界面一定让你印象很深把,有了它,即使是最菜鸟的门外汉也能构建一流的工程算例,Ansys5.7中的DesignSpace应该就是无可争辩的例证之一。虽然从UNIX内核上讲(Windows下的东西是Ansys的后期移植,很多技术还不成熟,这里就不加讨论了),它们多构建在繁复的TCL编程基础上,但我们利用强大的UIDL工具,也能轻松架构起我们自己的实用对话框向导。n 建立自己的联机帮助Ansys中的联机帮助(尤其是UNIX下的搜索引擎)非常实用,可以说是我所接触过许多有限元平台中最为好用的几种帮助平台之一。UNIX下的关键字查询简直是帅呆了,想构建自己完善的帮助系统吗?UIDL同样是这方面不可或缺的理想开发工具。2.2看看UIDL的模样认识了这位Ansys二次开发中的大侠了巴,现在我们就来进一步和它交流交流,把我们的感性认识上升到理性层次中。2.2.1 UIDL控制文件总结构一个完整的UIDL控制文件大致如一下结构:控制文件头结构块结构说明:任何一个UIDL控制文件开头都是一个控制文件头,其后接一个或多个结构块结构。2.2.2控制文件头结构为避免鄙人在这里滔滔不绝,而读者在台下不知所云的尴尬,我们在以后的讲解中都将从一些典型结构例子入手,剖析清楚其各个部分的详细结构,当然这里从例子入手的剖析手段只能做到抛砖引玉,要想熟悉的了解各个命令的详细信息,请参阅UIDL手册:一个典型的控制文件头如下所示:-:F UIMENU.GRN:D Modified on %E%, Revision (SID) = 5.181.1.67 - For use with ANSYS 5.5:I 0, 0, 0:!-几点说明:1. 控制文件头第一行必须有:F filename,filename是UIDL控制文件名。2. 控制文件头第二行必须有:D description,description是对本文件的一些说明。注意到description中有时能带%E%扩展,但只有当你拥有类似SCCS的系统(含一源码控制系统),ANSYS才能 有效的进行%E%扩展,否则请手动把这些说明替代%E%写入description中。3. 控制文件第三行必须有:I 0, 0, 0,各个0必须出现在第9、18、27行。用户只需要在这些位置填入0,ANSYS在调用该文件后会自动在这些位置填入GUI界面的位置信息。4. :!这一行通常是用来在UIDL控制文件中做分隔标记的,可有可无,这里用来分隔控制文件头和结构块结构,建议在控制文件头和结构文件块之间,以及各个控制文件块之间都加一行:!加以间隔。2.2.3结构块结构结构块结构是一个UIDL控制文件的核心,它涵盖了菜单信息,命令信息,以及帮助文件信息,按照其不同的类型可划分为菜单结构块,命令结构块和帮助结构块。一般来说函数结构块还都伴随着构建一个对话框结构。1. 结构块结构基本框架麻雀虽小,五脏俱全,让我们先看一看结构块的基本结构:头部分数据控制部分尾部分2. 例子说明这里基于一个菜单结构块描述一下这些基本结构的细节,让大家有一个感性认识:-头部分:N Men_Add:S 0, 0, 0:T Menu:A Add:C :D Add数据控制部分Fnc_VADDFnc_AADDFnc_LCOMB尾部分:E END分隔:!-几点说明:l 头部分u :N行定义一唯一的结构控制块名。u :S行定义结构控制块位置信息。用户只需在第9、16、23行输入0即可,ANSYS在调用该文件中将自动为这些域填入合适的值。u :T行定义该结构控制块的类型,可选类型有Menu、Cmd或者Help。u :A行对不同类型的结构控制块有不同的功用,在Menu块中通常用来定义出现在GUI菜单上的名字。u :D行通常用来描述该结构块的信息。u 头部分中还可以带许多其他命令,例如ANSYS内部命令等,这里就不详述了,我们将在例子中看到其具体用法。l 数据控制部分数据控制部分根据不同的结构控制块有不同的写法,但必须至少有一个数据控制行。例如在菜单结构块中我们可以在其中使用Men_String来调用其他菜单项,还可以使用Fnc_String命令调用一些命令。String对应于特定的菜单名部分或者命令名部分。其他具体细节这里就不详述了。我们将在具体实例中看到他们是如何构建实现的。l 尾部分:E END标志着一个结构块的结束。l 分隔(可选)一般说来,我们将在结构块和结构块之间加入:!来间隔(可选)。2.3 Ansys调用UIDL的过程上面我们已经熟悉了整个UIDL控制文件的结构,可惜我们还是空有武器,鲜有用武之地,Ansys到底是怎么使用UIDL的呢?搞清楚这一点,我们才能够游刃有余的控制整个GUI界面的定制,在这部分里我们将描述一下Ansys控制UIDL文件的过程。下面的一些设置情况都是基于工作站版本的ANSYS5.5,其他版本的ANSYS的设置处理也类似,这里就不加赘述了。ANSYS在调用GUI界面时会自动调用menulist55.ans文件,该文件中描述了UIDL前处理器到哪里去寻找UIDL控制文件。ANSYS在其docu/目录中有一个基本的menulist55.ans文件和对应的基本UIDL控制文件。默认情况下,ANSYS就调用这一menulist55.ans文件。下面是这一基本menulist55.ans文件的内容:-/ansys55/docu/UIMENU.GRN/ansys55/docu/UIFUNC1.GRN/ansys55/docu/UIFUNC2.GRN/ansys55/docu/UICMDS.HLP/ansys55/docu/UICMDS.HPS/ansys55/docu/UIELEM.HLP/ansys55/docu/UIELEM.HPS/ansys55/docu/UIGUID.HLP/ansys55/docu/UIGUID.HPS/ansys55/docu/UITHRY.HLP/ansys55/docu/UITHRY.HPS/ansys55/docu/UIOTHR.HLP/ansys55/docu/UIOTHR.HPS-可见,正是因为这一menulist55.ans文件的指定,ANSYS系统将默认调用对应的基本UIDL控制文件。由此,我们可以产生一个想法:只要我们改变这一基本menulist55.ans中的指定,就能使用我们自己的UIDL控制文件。但其实我们有更加好的方法,一般来说我们不建议改变系统ansys55目录里任何文件内容,以避免不必要的失误。ANSYS本身在调用menulist55.ans文件的方式上就提供了便于进行UIDL开发的机制:通常ANSYS按照以下顺序寻找menulist55.ans文件: 用户工作目录(可以在Interactive启动方式中设定)-用户根目录-/ansys/docu目录,可见只要我们在用户工作目录中编辑自己的menulist55.ans文件,ANSYS将优先使用我们自己的menulist55.ans文件。如果生成了自己的UIDL控制文件,并在我们自己的menulist55.ans文件中指向它们,我们就能实现对UIDL的全控制。以后的实例中我们将看到通用的UIDL开发过程。最后要指出的是,UIDL前处理器在处理UIDL控制文件后,将自动在:I行(控制文件头部分)和:S行(结构块的头部分)中填入相应的位置信息,并在整个文件最后写入一系列:X行(索引行)。第三章UIDL实例解析一3.1问题描述:任何一个级联菜单的最底级总是调用命令,在这个实例里我们试着添加一个菜单联结,指向一个我们自己构建的命令。这个命令的构建方式我们将在实例二中给出。为方便起见,我们将在主菜单下添加一个MyProject菜单项,调用MyProject子菜单。MyProject子菜单中含有一个DoProject命令,该命令对一个实际问题进行优化设计,我们将在以后的实例中实现它。3.2环境准备:1. 配置好ANSYS环境,这里略过。2. 在当前用户目录下建立一个子目录UIDL-%mkdir /UIDL-3. 拷贝相应文件进入该子目录-%cp /ansys55/docu/menulist55.ans .%cp /ansys55/docu/UIMENU.GRN .%cp /ansys55/docu/UIFUNC1.GRN .%cp /ansys55/docu/UIFUNC2.GRN .-4. 编辑该子目录下文件menulist55.ans前面我们已经看到了这个基本menulist55.ans的内容,这里我们想使用自己的UIDL控制文件,而不用默认目录/ansys55/docu下的UIDL控制文件,因此我们把该文件修改成如下内容:-./UIMENU.GRN./UIFUNC1.GRN./UIFUNC2.GRN/ansys55/docu/UICMDS.HLP/ansys55/docu/UICMDS.HPS/ansys55/docu/UIELEM.HLP/ansys55/docu/UIELEM.HPS/ansys55/docu/UIGUID.HLP/ansys55/docu/UIGUID.HPS/ansys55/docu/UITHRY.HLP/ansys55/docu/UITHRY.HPS/ansys55/docu/UIOTHR.HLP/ansys55/docu/UIOTHR.HPS-5. 运行测试是不是能够正常启动ANSYS以Interactive方式启动,设置工作目录为刚刚创建的UIDL目录,并设置初始工作名为uidl,启动ANSYS,这是ANSYS的GUI界面应该和默认情况下启动,只不过不同的是调用的UIDL控制文件是当前UIDL目录下的了(只不过两者内容相同而已)。3.3添加菜单:ANSYS的浮动根菜单名字叫MenuRoot,我们将在根菜单下添加一个菜单项MyProject,点击这个菜单项自动调用MyProject子菜单。MyProject子菜单中我们将放入一个命令DoProject,点击这个命令,将进入我们的问题处理。1. 定制DoProject命令这里我们把DoProject命令的定义写入UIFUNC2.GRN中,编辑UIFUNC2.GRN文件,在其中两个结构块之间加入一个DoProject命令结构块:-:N Fnc_DoProject:S 86, 73, 6:T Cmd:A DoProject:D Lets goInp_P:E END:!-当然这样一个结构块什么也不干,只是一个虚块,在以后的实例中我们将完成这个命令的功能。2. 定制MyProject子菜单这一步中我们把MyProject子菜单的定制写入UIMENU.GRN中,编辑UIMENU。GRN文件,在其中两个结构块之间加入一个MyProject菜单结构块:-:N Men_MyProject:S 120, 88, 25:T Menu:A MyProject:D Optimize the structure-Optimize-Fnc_DoProject:E END:!-这里-Optimize-是出现在菜单上的静态文本,Ansys对任何寻找不到定义的调用均当做静态文本处理。如果某子菜单中只有静态文本的话,Ansys一般情况下将不显示这个子菜单。3. 将MyProject子菜单加到根菜单下这里我们再次编辑UIMENU.GRN文件,在MenuRoot菜单结构块中添加到MyProject的链接。最后UIMENU.GRN的MenuRoot菜单结构块定义类似如下写法:-:N MenuRoot:S 433, 76, 350:T Menu:A Main Menu:D ANSYS ROOT MENUMen_UVBA_Main_T1Men_UVBA_Main_T2Men_UVBA_Main_T3Fnc_PreferencesSep_Men_PreprocMen_SolutionMen_GenlPostMen_TimePostSep_Men_MyProjectSep_K_LN(alpha)Men_DesOpt-可见我们把Men_MyProject子菜单链接加入到基于时间历程后处理的菜单项后。当我们重新启动ANSYS时看到的主菜单应该如下图(a)所示,点击MyProject菜单项将出现图(b)的情形。(b)(a)3.4结束语上面我们看到了怎么在浮动菜单中简单添加自己定制子菜单的方法,但这个时候我们点击DoProject命令什么也不发生,因为我们在命令定制中就是这么设定的。以后我们将完善这个命令,让它逐渐强大起来。大家也许会问,既然定义的这个命令是空命令,那能不能索性不定义呢。答案应该是不可以,大家可以试一试删去UIFUNC2.GRN中DoProject函数的定义,当你点击根菜单中的MyProject菜单链接,MyProject应该都不会弹出。第四章UIDL实例解析二(a)图1(b)Hr4.1问题描述: 如图1(a)一所示,一带孔薄板,长4000mm,宽2000mm,顶部中心部分1800mm处承受42MP的压力,左右两个长圆孔中心分别踞四周1000mm,长圆孔的具体形式如图1(b)所示,上下分别为半圆,中部用直线衔接。这里假设长圆长轴与水平方向夹角为。为了使得孔边缘应力集中最小,这里拟调整的大小(-/2, /2),以便在固定的H情况下达到长圆孔周围应力集中最小。本章中,我们将仅仅限于UIDL部分完成这个问题,即实现如下功能:通过菜单和对话框,用户输入参数H的大小,我们让Ansys自动生产整个分析模型。4.2环境准备及构建对话框:1. 基于上一个实验的环境,在/UIDL目录下构建一个输入脚本,这里我们权且称其为create.inp,该脚本能针对固定的r、H、来构建出分析模型。Create.inp脚本文件可以参看附录。图22. 在文件UIFUNC2.GRN中任意两个结构块之间添加函数DoProject的定义:-:N Fnc_DoProject:S 0, 0, 0:T Command:A Optimize My Project:D Please Input the Custom Information:C )*SET,My_H,150Inp_NoApplyCmd_)*Cset,1,1 Fld_0 Typ_Lab Prm_Custom the Geographic Information Fld_2 Prm_Please Input the H for Analysis(100200)图3 Typ_INT Def_*PAR(MY_H)Cmd_)/GoCmd_)finiCmd_)/clearCmd_)*GET,My_H,CPAR,1Cmd_)/Input,create,inp:E END:!-这里我们可以清晰的看到,在命令结构块中,:A命令后的说明将出现在调用该函数的菜单项中,如图2所示,:D命令后的说明将出现在我们定制的对话框标题上。几点说明:u 这里我们定制了一个对话框(无拾取点线等的功能),在任何一个自定义的对话框中,至少应该有一个Typ_命令,但不能有Inp_P命令。u 本对话框由于比较简单,不需要Apply按钮(该按钮多用来处理复杂输入,动态刷新功能),因此我们设定为 Inp_NoApply命令。u 下面的Fld_0,Fld_2什么的都是一个个对话框域。不同的数据输入域,比方说:输入框、多选框、列表框的都必须有独立的域号,象本例中一个数值输入框域代号为2。但所有静态文本都可以写在Fld_0域内,因为不会出现我们调用时的冲突。这里,我们的Fld_0域内是Typ_Lab的静态文本,内容书写在Prm_后。Fld_2域是一个整数输入对话框域(Typ_INT),前面Prm_后有一段文字说明,并设定默认值(Def_)。u 下面的几行Cmd_)后跟的都是针对这一数值输入域处理的Ansys命令,主要功能是先清数据库,再取到域2内用户输入的H参数值,然后进行基于该参数的模型构建。3. 输出结果:这是=/4,H150情况下自动生成的几何模型。虽然例子比较简单,但我们从中可以掌握一种GUI定制参数并运用到脚本建模中的技巧,掌握了这种技巧,我们就不难轻松的构建各种更加复杂的模型。4.3参数提取杂谈上面我们看到了一种比较简单有效的对话框参数提取、传递的技巧,其实在Ansys中参数的提取有好些方法。通常的用户命令中(比方说设定实常数等),Ansys中由于有固定的命令与其对应,在GUI函数命令中Ansys是这样定制的,在对话框起始处给出一个Cmd_R命令(这里以提取实常数命令R为例),其后对应的Fld_2、Fld_3等域Ansys将自动拾取之并对应R命令的第二个参数、第三个参数等。但我们初学二次开发时不可能拥有自己的命令,因此这里我们弃而不用。等以后我们学习了UPF二次开发工具,能够定制自己的命令后,我们再来回顾一下这种参数话方法。这里我们使用的是CSET命令和CPAR命令,也是一种比较简洁有效的方式。命令结构块头部分我们用:C )*SET,My_H,150命令在环境中设定一变量My_H,初值为150,并用Def_*PAR(MY_H)命令指定为数值域的初值。然后用Cmd_)*CSET,1,1命令把第一个数值域的内容指定存储到*CSET命令对应的一矢量数值中,其次在数值域中指定用Cmd_)*GET,My_H,CPAR,1命令让参数My_H再把用户输入的数值域内容从该矢量数组中读回来,这样我们就有了一个用户输入的参数值My_H,最后就可以直接调用脚本文件,生成需要得到的参数化建模结果。在UIFUNC2.GRN中我们还可以看到其他一些参数化提取方式,比如说利用系统参数_z1_z9,用命令*GET,PAR,CMD,0,FIELD,2来拾取命令中域2中的内容到自己设定的参数中。以后我们可以对各种方法都练练手,这里就不再赘述了。4.4结束语上面我们用UIDL对话框的技术轻松实现了有用户化界面的参数化建模,在以后的例子中我们将对这个实例进行完善,并融入APDL和UPF的内容。附录create.inp清单:-!This is a script which can create the modal with a parameter sita.!Clear the workspace!fini!/clear,nostart!Setup the ParametersPI=4*atan(1)sita=PI/4r=200!H=150H=My_H !Customize the Material Propertykeyw,pr_struc,1/prep7et,1,shell63r,1,120,120,120,120uimp,1,ex,dens,nuxy,2400,1.2,0.375!Modeling!Create plate k,1,0,0k,2,2000,0k,3,2000,2000k,4,0,2000k,5,1800,0k,6,1000,1000l,1,5l,5,2l,2,3l,3,4l,4,1al,1,2,3,4,5!Create hole!Create my coordinatek,7,1000+H*cos(sita),1000+H*sin(sita)k,10,1000+H*cos(sita),1000+H*sin(sita),100k,8,1000+r*cos(sita+PI/2),1000+r*sin(sita+PI/2)cskp,11,0,6,7,8csys,11!Create Holek,9,H,rl,7,9l,7,6adrag,6,7arotat,6,7,10,-90arsys,y,2,3,1arsym,x,2,5,1aadd,2,3,4,5,6,7,8,9asba,1,10-第五章UIDL实例解析三5.1问题描述本章我们我们将描述UIDL的最后一个功能构建我们自己的联机帮助文档。诚然联机帮助在一般的开发过程中有点无足轻重,但如果你想让你的工作更加完善、更加专业的话,建立起自己强大的帮助系统是必不可少的,这一个实例中我们将对UIDL实例二构建我们自己的联机帮助文档。构建完联机帮助文档后,在菜单中点击DoProject菜单项将显示如下对话框:看到了把,现在这个对话框中增加了一个Help按钮,点击这个Help按钮看看效果把,显示结果如下:这里的文字可以任意,轻松写入任何泥想写入的帮助信息巴。下面我们就详细的说明如何建立这样的一个联机帮助。5.2环境准备及构建联机帮助:Ansys中的联机帮助一般有三种形式:ASCII形式,ZBitmap形式,PostScript形式。PostScript形式的联机帮助多是在Unix下和打印功能有关的,我们这里就不加详述了。ZBitmap形式的联机文档应该是功能最强大的,应该类似于Windows下的PDF格式帮助文档把,可以在帮助文档中有图形或者文字的超级链接,构建这样的帮助文件我们得需要构建744pixels925pixels的XWD格式图像,xwd格式是UNIX中用xwd工具抓图所得的一种图像格式,可惜的是这里我们崭时缺少这样能够生成固定尺寸格式的XWD图像文件的工具,所以这里我们也不准备仔细对它的构建方法进行描述(你可以试验用任意尺寸的XWD格式构建ZBitmap格式的帮助文档,正常情况下Ansys系统应该不加显示任何图片)。这里我们在上一个实例的基础上描述一下如何建立ASCII形式的帮助文档。1. 在Unix下,构建你的帮助文档文字信息,把它存成文件hlp_other2:ZengP Work GroupThis Project is designed by Heling.Enjoy it!2. 检查hlp_other2文件字节数:Unix下可以用命令ls hlp_other2或者wc c hlp_other2命令查看该文件的字节数,这里得出的字节数为633. 构建帮助文件的数据控制部分,把它存成hlp_other1Customized HelpHlp_Hlp_ASCII 63END_OF_HYPERLINKS这里的数据控制部分是有固定格式的,第一行表示帮助对话框的标题。第二行和第三行是描述该帮助文件的前端链接和后端链接。这里由于是我们自己定义的帮助文档,没有前端链接和后端链接,因此我们都把它写成Hlp_就可以了,第四行是描述帮助文件格式、字节信息的,这里我们是ASCII格式,字节数是上一步中得到的字节数63(对ZBitmap格式后面需要提供压缩后字节数和压缩前字节数两个信息,具体做法请自己参看UIDL帮助手册)。以下到最后一行的END_OF_HYPERLINKS之间是定义帮助文档之间超级链接的,由于我们这里是做ASCII的帮助信息,不是ZBitmap格式的,因此没有任何超级链接需要定义。4. 把hlp_other1和hlp_other2合成一个文件hlp_other%cat hlp_other1 hlp_other2 hlp_other5. 检查一下文件hlp_other的字节数%wc c hlp_other这个例子中得到的字节数是1166. 构建帮助文件的头信息,把它存储为head_other:N Hlp_0_Contents:S 0, 0, 0 :T HELP 1167. 构建帮助文件尾信息,把它存储为end:E End8. 构建帮助文件的控制文件头,把它存储为control_other:F OTHER.HLP:D Modified on 1/17:I 0, 0, 0:!9. 构建总的帮助文件OTHER.HLPcat control_other head_other hlp_other end OTHER.HLP10. 把我们构建好的帮助文件OTHER.HLP加入menulist55.ans中去。最后menulist55.ans显示内容如下:./UIMENU.GRN./UIFUNC1.GRN./UIFUNC2.GRN/ansys55/docu/UICMDS.HLP/ansys55/docu/UICMDS.HPS/ansys55/docu/UIELEM.HLP/ansys55/docu/UIELEM.HPS/ansys55/docu/UIGUID.HLP/ansys55/docu/UIGUID.HPS/ansys55/docu/UITHRY.HLP/ansys55/docu/UITHRY.HPS/ansys55/docu/UIOTHR.HLP/ansys55/docu/UIOTHR.HPS./OTHER.HLP11. 在我们的函数定义DoProject中加入联机帮助信息.编辑UIFUNC2.GRN中的DoProject函数定义,由于我们定制的帮助文件名为Hlp_0_Contents,我们把它加入到函数定义中去,编辑完后该函数定义内容结果如下::N Fnc_DoProject:S 396, 147, 242:T Command:A Optimize my Project :D Please Input Custom Information:C )*Set,My_H,150:H Hlp_0_ContentsInp_NoApplyCmd_)*Cset,1,1 Fld_0 Typ_Lab Prm_Custom the Geographic Information Fld_2 Prm_Please Input the H for Analysis(100200) Typ_INT Def_*PAR(My_H)Cmd_)/GoCmd_)finiCmd_)/clearCmd_)*GET,My_H,CPAR,1Cmd_)/Input,create,inp:E END:!12. 万事具备,测试一下你自己构建的帮助文档把。5.3几点说明从前面可以看到,一个帮助文件一般有文件控制头和若干帮助文件结构块组成,对帮助文件结构块来说,其包含四个部分:头部分,数据控制部分,帮助内容部分和尾部分。与函数说明不同的是它增加了帮助内容部分,这里存放各种格式的帮助文档,其次它需要提供许多帮助内容部分的字节信息。所以构建帮助文件的时候一般都是分块构建,不断用wc或者ls命令观看字节信息,最后生成完善的帮助文件。感兴趣的同学可以自己生成强大的帮助文档信息,由于这一部分不是二次开发的重点,我们在这里也不详细讨论其细节了,利用上面的知识我们已经足以构建任何复杂的ASCII文档信息。5.4 结束语到这里为止,我们已经对UIDL的所有功能都基于例子进行了详细描述,讲到这里大家已经有足够的UIDL知识构建比较专业化的基于GUI界面的参数化建模本领了。在后续章节,我们将基于APDL和UPF知识对这一例子进行优化处理实现,希望大家保持充足的兴趣继续向下学习。第六章 解析APDL6.1 熟悉新朋友APDLAPDL是我们即将结识的第二个强大二次开发工具。它的全称是ANSYS Parametric Design Language。APDL可以帮助你更加有效的进行分析计算,可以让你轻松自动化你的工作(循环、分支、宏等结构),并是一种高效的参数化建模手段。很多情况下,APDL主要用在优化设计或者自适应网格划分中。但在日常分析中如果你知道善用,APDL也将发挥其强大的优势,让你的工作变的生动起来。6.2 二次开发工具之间的比较APDL所能实现的功能通俗的说来应该是次于UPF而强与UIDL,但实际上是由于三者具体侧重点不同造成的:UIDL主要控制GUI界面的各类二次开发方法,涉及的分析部分就要少一些,APDL可以称其为和分析部分频繁打交道的一组小型工具,功能强大,但不和UIDL一样能够非常具体的针对某一两方面的二次开发处理,通常情况下的他融合在分析的角角落落中。UPF是三者之间的最强者,他能完成最复杂的二次开发工作,比如说构建新单元,复杂数据库交互,外围命令定制等,但UPF在很多情况下也借助了APDL命令来完全实现其功能。同样我们也能在UIDL中欠入APDL命令,来构建比较复杂的GUI二次开发工作。一句话,UIDL、APDL和UPF三者各有所长,密不可分。结合使用三者,我们将能够实现任何强大的分析功能。6.3 结束语我们这里对APDL的介绍将着重于它的一些基本功能,而不会象UIDL那样用一组实例来完整的描述他的所有功能,当然其间也会夹杂讲述一些例子,来加强大家对APDL工具应用技巧。第七章 APDL综合实例7.1 问题说明本章在阐明APDL技术时本想也采取实例的方式,把APDL的各个细节都用一个个详细的实例说清楚,无奈APDL细节内容比较繁复,而且不和UIDL那样各成体系,APDL的应用很多情况下都是和UIDL、UPF结合在一起应用的,它甚至渗透到基础分析中的各个环节中,可以说也是ANSYS的脚本基础。考虑到大家都不会有兴趣来聆听枯燥的数组构建法,宏函数的参元特性等罗嗦的APDL语法,这里我们打算用一个比较大的综合实例来想大家描述一部分APDL的功能,从这里你将能看到我们能用APDL干些什么。还记得UIDL实例解析二中的一个例子巴,这里我们有必要重温一下:(a)图1(b)Hr如图1(a)一所示,一带孔薄板,长4000mm,宽2000mm,顶部中心部分1800mm处承受42MP的压力,左右两个长圆孔中心分别踞四周1000mm,长圆孔的具体形式如图1(b)所示,上下分别为半圆,中部用直线衔接。这里假设长圆长轴与水平方向夹角为。为了使得孔边缘应力集中最小,这里拟调整的大小(-/2, /2),以便在固定的H情况下达到长圆孔周围应力集中最小。在UIDL实例二的部分我们只是在GUI界面下实现了它的参数化建模,这部分工作在本章的综合实例中仍然有效,下面我们将一步步完全实现这一问题。7.2 解题思想本问题是在用户给定H的情况下求得角的最优解,使得孔边最大拉应力最小(这是因为材料抗拉性能比较弱)。这里我们的想法是把取每一个角度时候得到的孔边最大拉应力都求出,比较一下,得到孔边拉应力最小情况下对应的取值。现在的问题是,我们只能够对每一离散的值求取其孔边最大拉应力,让在0360之间连续取值不仅是无法做到的,而且在工程中也没有必要,这里我们拟每隔一定角度计算一下孔边最大拉应力,最终在这些有限的角度中求取出最佳的值。因此我们还需要用户自定义求解的精度参数,即我们每隔多少角度来计算一次(决定了结果精确到什么程度)。比方说我们定义每隔5计算一次的话,整个优化过程需要进行180/5=36次求解运算。7.3 构建步骤下面说明一下在构建过程中的一些全局参数:My_H:用户输入的H参数值My_sita:每次计算对应的参数值My_dsita:每两次计算之间间隔的角度值(用户输入的参数)。My_N:总共需要分析计算的次数。My_N=180/My_dsitaMy_sita0:初始值,这里统一定义为0。My_MinS1:最优化位置处的最大拉应力值。(计算完以后才是)My_Msita:最优化位置处对应的值。Mysmin:每次分析计算得到对应特定角时的孔边最大拉应力。(一般都是孔边产生应力集中,所以也是整个板料内部的最大拉应力处)_s1数组:对应特定时求解得到各个节点上的最大拉应力值。1. 首先我们重新构建一比较完善的参数话建模脚本,取名为modaling.mac,该脚本针对固定的My_H和My_sita将构建整个几何模型,加好载荷和约束,具体细节请参看附录。2. 构建脚本mysolve.mac:My_sita0=0My_N=180/My_dsita*do,I,0,My_N-1parsav,all,myparfini/clear,startparres,new,myparMy_sita=My_sita0+My_dsita*Imodaling/solusolve/post1ar11=ndinqr(0,14)_s1=*dim,_s1,ar11*vget,_s1(1),node,1,s,1*vscfun,mysmin,max,_s1(1)*if,I,eq,0,then My_MinS1=mysmin My_Msita=My_sita*ELSE *IF,mysmin,lt,My_MinS1,then My_MinS1=mysmin My_Msita=My_sita *ENDIF*ENDIFparsav,all,mypar*enddo下面是几点说明:u 程序整个框架是先根据用户输入的参数定制好一些解题环境,比方说求出需要重复计算的次数My_N,然后用APDL的*do循环结构繁复执行My_N次,每次求得对应角度的孔边最大拉应力值,不断积累出这些对应角度孔边最大拉应力值的最小结果。完成了My_N次结果后,最优结果My_MinS1和对应的角度My_Msita也就求出来了。u 不同次分析计算过程前必须对ANSYS环境中的现有模型清零,用到/clear命令,但该命令会使用户参数同时清零,这里用到parsav和parres技术,在每次清零过程前先把当前工作区的参数保存起来,清模型结束后再调入工作区,这样就实现了只清模型、不清参数的效果。u 解题结束后,我们先用ndinqr(0,14)这一UPF命令求取模型中的节点总数。然后用*vget命令把所有节点上的最大拉应力都保存到_s1数组中,最后用*vscfun函数得到_s1数组中的最大值。u 注意每次求解完提取数据时都要重新定义_s1数组的大小(因为每次划分单元后总节点数不同),这时候每次ANSYS都回出现让你确认是否把已经存在的_s1数组结构改变的对话框,这将导致自动化求解中断,这里我们采用的一个技巧是每次重新定义_s1数组前先清掉_s1数组(用_s1=命令行)。这样救避免了Ansys的询问。同样解决/clear命令的Ansys询问方法就是写全/clear命令:/clear,start。注意这里我们是必须要用start参数的,它表面我们在新建模型时读入start55.ans文件,我们必须在工作目录中构建一个我们自己的start55.ans文件,里面添加上PI参数的说明(因为modaling.mac宏文件中将利用这一参数,如果系统环境中没有这一参数的说明,将产生建模错误)。u 解决完一次运算,保存完数据后记得用parsav函数保存环境参数。3. 完善GUI参数化界面这里我们要比上次UIDL实例二中多增加一个参数My_dsita,为此我们修改UIFUNC2.GRN函数中DoProject函数::N Fnc_DoProject:S 0, 0,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论