当前位置:文档之家› ansys二次开发及实例

ansys二次开发及实例

ansys二次开发及实例
ansys二次开发及实例

中的一些组项,提供了一种允许用户灵活使用、按个人喜好来组织设计 ANSYS 图形用户界面的强有力工具; UPFs(User Programmable

Features) 提供了一套 Fortran77 函数和例程以扩展或修改程序的功能,该项技术充分显示了 ANSYSS 序剪裁成符合自己所需的任何组织形式(如可以定义一种新的材料,一个新的单元或者给出一种新的屈服准则),而且还可以编

以VC++为工具,运用APDL 语言,对ANSYS?行二次开发,编制框筒结构一桩筏基础一土相互作用体系与地震反应分析程序。

程序设计目标

针对某一实际工程问题, ANSYS 所提供的APDL 语言可对ANSYS 软件进行封装。APDL 语言即ANSYS 软件提供的参数化设计语言,它的

全称是ANSYS°arametric Design Language ?使用APDL 语言可以更加有效地进行分析计算,可以轻松地进行自动化工作(循环、分支、 APDL 语言进行封装的系统可以只要求操作人员输入前处理参数,然后自动运

行ANSYS?行求解。但完全用 APDL 编写的宏还存在弱点。比如用

APDL 语言较难控制程序的进程,虽然它提供了循环语句和条件判断语

句,但总的来说还是难以用来编写结构清晰的程序。它虽然提供了参数的界面输入,但功能还不是太强,交互性不够流畅。针对这种情 况,本文用VC++开发框筒结构-桩筏基础-土相互作用有限元分析程序(简称

本程序设计目标是利用 VC++寸ANSYS 进行封装。用VC++寸ANSYS 模拟框筒结

构—桩筏基础—土相互作用进行二次开发,用户只需输 入诸如地震波、计算时间步长、阻尼比等物理性能参数等,系统就能自动调用 ANSYS 计算程序,自动进行网格划分、地震动加载以及自

ansys 二次开发教程 +实

第3章ANSYS 基于 VC+啲二次开发与相互作用分析在 ANSYS 中的实现 概述 ANSY 鬼一套功能十分强大的有限元分析软件,

能实现多场及多场耦合分析;是实现前后处理、求解及多场分析统一数据库的一体化

大型FEA 软件;支持异种、异构平台的网络浮动,在异种、 异构平台上用户界面统一、数据文件全部兼容,强大的并行计算功能支持分 布式并行及共享内存式并行。该软件具有如下特点: (1) 完备的前处理功能 ANSYSF 仅提供了强大的实体建模及网格划分工具,

可以方便地构造数学模型, 而且还专门设有用户所熟悉的一些大型通用有限元软 件的数据接口 (如 MSC/NSSTRANALGORABAQU 等) ,并允许从这些程序中读取有限元模型数据, 甚至材料特性和边界条件, 完成 ANSYS 中的初步建模工作。此外,ANSYS 还具有近200种单元类型,这些丰富的单元特性能使用户方便而准确地构建出反映实际结构的仿真计算 模型。 (2) 强大的求解器 ANSYS 提供了对各种物理场量的分析,是目前唯一能融结构、热、电磁、流体、声学等为一体的有限元软件。除了常规的线性、非线 性结构静力、动力分析外,还可以解决高度非线性结构的动力分析、结构非线性及非线性屈曲分析。提供的多种求解器分别适用于不同 的问题及不同的硬件配置。 (3) 方便的后处理器 ANSYS 勺后处理分为通用后处理模块( POST1和时间历程后处理模块(POST26两部分。后处理结果可能包括位移、温度、应力、 应变、速度以及热流等,输出形式可以有图形显示和数据列表两种。 (4) 多种实用的二次开发工具 ANSYS^ 了具有较为完善的分析功能外,同时还为用户进行二次开发提供了多种实用工具。如宏(

Marco )、参数设计语言( APDL )、 用户界面设计语言(UIDL )及用户编程特性(UPFs ),其中APDL (ANSYS Parametric Design Language )是一种非常类似于 Fortran77 的参数化设计解释性语言,其核心内容为宏、参数、循环命令和条件语句,可以通过建立参数化模型来自动完成一些通用性强的任务; UIDL (User Interface Design Language )是ANSYS 为用户提供专门进行程序界面设计的语言, 允许用户改变 ANSYS 勺图形用户界面(GUI) ANSYS 勺开放体系,用户不仅可以采用它将

写自己的优化算法,通过将整个

ANSYS 作为一个子程序调用的方式实现。

鉴于上述特点,近几年来, ANSYS 软件在国内外工程建设和科学研究中得到了广泛的应用。但这些应用大多局限于直接运用 ANSYS

软件进行实际工程分析,对利用

ANSYS 提供的二次开发工具进行有限元软件设计却很少涉及。本文首次利用

ANSYS 软件的二次开发功能,

宏等结构),而且,它是一种高效的参数化建模手段。使用

LWS g 序)。

动求解。该系统由于前台开发友好、方便、易用的人机交互界面,对复杂的、难于理解和掌握的ANSYS命令流进行后台封装,因此,程

序设计可让即使从未认真学习过ANSYS软件的工程设计人员也能很好地借助本系统进行结构抗震性能有限元分析,具有较强的处理实际问题能力。

图3-1程序系统结构图

图3-1是对ANSYSJ用VC+■进行二次开发系统的结构图(如图3-1 )。用户输入计算参数,即可调用后台的ANSYS命令进行计算,ANSYSS计算结果返回给用户,进行后处理。

程序设计的主要原则和功能如下:

⑴方便原则,即程序模块应具有良好的用户界面和易用性。程序前台设计采用Windows提供的标准图形用户界面(GUI),用户无须

接受专门训练即可使用。同时,程序应具有良好的容错和纠错能力,避免用户操作不当造成损失。

⑵程序系统能够提供用户以下功能:

①允许用户可以根据实际计算工况,输入特定的计算参数,包括地震波选择、计算时间步长、地震波调幅与否等。

②用户在输入各种参数以后、进行计算之前可以对输入的数据进行修改、添加和删除操作,以保证输入正确的参数。

③用户通过界面调用后台的ANSYS命令流进行计算,能够得到最后的计算结果文件,供用户进行后处理和结果分析。

④用户可以添加新的功能或新的二次开发以实现程序升级。

(3) 程序应具有良好的可移植性,不依赖于特定的硬件设备,只要能安装ANSYS和VC+ +的硬件环境都能使用本系统,保证程序使用

的广泛性。

(4) 程序代码应具有开放性和可重用性。这样,在进一步的设计中,能保证设计者可以方便地对代码进行修改扩充;同时,提供一定的设计接口,新的设计者可以根据接口,无须对程序进行大幅度的修改,就可以进行新的开发,以适应新的特殊要求。

程序的开发平台是 Microsoft VC++ 、,基于 WindowsXP 编程。程序实现是利用微软提供的 Windows 编程接口 MFC 和ANSYS 公司的

ANSYS/Multiphysics 产品,采用面向对象的程序设计方法。

程序的主要模块和设计

如图3-2所示,程序的主要模块有:用户界面模块、 ANSYS 计算模块、VC 调用接口模块和 VC 后处理模块,分别论述如下:

图3-2程序的组成模块结构图

ANSYS 模块

ANSYS^了满足用户的特殊需求,建立了开放的体系结构,提供了二次开发接口 APDL UIDL 和UPFs ( User Programming Features ,

用户编程特性)等。其中, ANSYS 接口允许用户将自己的 VC 代码连到ANSYS 中去,或将ANSYS 乍为子程序调用,从而使 ANSYS 具备特殊 的功能。

本文的ANSYS 模块是使用APDL 语言进行二次开发的。在上面的二次开发中用到了参数化设计方法。参数是

APDL 的变量(它们更象

FORTRA 变量,而不像FORTRAN^数),不必明确声明参数类型,所有数值变量都以双精度数存储。被使用但未声明的参数都被赋予接近 0的“极小值”。在二次开发中使用参数化设计方法,

增强了程序的易读性和可移植性。

用户无须了解程序的具体结构只需改变参数值就

可自动调用ANSYS 模块。ANSYS 模块的程序结构图将在节中详细介绍。

VC 调用模块

VC 调用模块在该系统中起着接受用户界面的输入、 创建进程调用ANSYS 模块进行计算的重要作用。有两项工作是在实现在 VC 程序中

调用ANSYS 必须做的,一是要使接口程序能够修改

ANSYSB 勺命令流文件路径及文件名称,这可通过注册表编程实现;二是要能在接口程

序中运行ANSYS 应用程序,这涉及到创建进程的编程,下面分别介绍它们的具体实现。

1.注册表编程

在Windows (98/NT/2000/XP )系统上运行 ANSYS 安装程序后,便在 Windows 系统的注册表里记录了一些信息,如初始工作路径,文件 名等。利用VC 平台调用ANSYS^算模块的程序必须指定 ANSYS 软件的运行目录以及用 APDL 语言开发的ANSYS 模块程序路径,这样,ANSYS

由址理程

调用绘医程序

,

提职计算

软件的批处理程序才能从给定的路径下读取命令流文件。在接口程序中修改这些注册表信息,可以使用Win dows提供的注册表编辑API (Applicatio n Programmi ng In terface )函数[30,31],具体实现如下:

HKEY hSubKey; \ANSYS\\ANSYS \\0";

IRet二RegOpe nKeyEx(HKEY_CURRENT_USER,RegPath,0,KEY_ALL_ACCESS,[$hSubKey)多进程编程

本文在VC平台上对ANSYS进行封装,希望前台处理系统和用户的交互,而后台进行ANSYS勺计算。这就要求系统具有并发性,为此, 引入多进程编程机制。进程是一个正在运行程序的实例,它具有动态性、并发性、独立性、异步性和结构性等特点。系统中的进程动态

产生与消亡,多个进程并发运行,分别执行各自对应的程序段,为各自的目标而工作。一个程序可以包含多个进程。

图3-3 ANSYS批处理运行界面

在VO +中可以利用CreateProcess函数来创建一个进程去执行其他程序,而且可以设置该进程的优先级。CreateProcess函数的

原型是:

BOOL CreateProcess(

LPCTSTR lpAppliciat on Name

LPTSTR lpComma ndLi ne

LPSECURITY_ATTRIBUTES lpProcessAttributes

LPSECURITY_ATTRIBUTES lpThreadAttributes

BOOL bln heritHa ndles

DWORD dwCreatio nFlags

LPVOID lpE nvironment

LPCTSTR lpCurre ntDirectory

LPSTARTUPINFO lpStartupInfo

LPPROCESS_INFORMATION lpProcessInformation

);

当系统调用CreateProcess 时,会创建一个进程内核对象,其初始使用计数是1。该进程内核对象不是进程本身,而是操作系统管理

进程时使用的一个较小的数据结构。然后,系统为新进程创建一个虚拟地址空间,并将可执行文件或任何必要的DLL文件的代码和数据

加载到该进程的地址空间中。接着,系统为新进程的主线程创建一个线程内核对象(其使用计数为1)。与进程内核对象一样,线程内核

对象也是操作系统用来管理线程的小型数据结构。通过执行C/C++运行期启动代码,该主线程便开始运行,它最终调用WinMain、wWinMain、

main 或wmain 函数。如果系统成功创建了新进程和主线程,CreateProcess 便返回True 。

PszApplicationName和pszCommandLine参数分别用于设定新进程将要使用的可执行文件的名字和传递给新进程的命令行字符串。PszApplicationName的参数可以是NULL,表示系统将使用全路径来查看可执行文件,并且不再搜索这些目录;如果参数不是NULL可以

将地址传递给pszApplicationName 参数中包含可运行的文件的名字字符串。当系统找到了可执行文件后,就创建一个新进程,并将可执行文件的代码和数据映

射到新进程的地址空间中。

PsaProcess和psaThread参数分别设定进程对象和线程对象需要的安全性。可以为这些参数传递NULL,这种情况下,系统为这些对

象赋予默认安全性描述符;也可以指定两个SECURITY_ATTRIBUTE结构,并对它们进行初始化,以便创建自己的安全性权限,并将它们

赋予进程对象和线程对象。将SECRURITY_ATTRIBUTE结构用于psaProcess和psaThread参数的另一个原因是,父进程将来生成的任何

子进程都可以继承这两个对象句柄中的任何一个。本程序除了创键调用ANSYS计算模块的进程外,无需再创建其它进程,因而,psaProcess

和psaThread 参数都为NULL。同理,binheritHandles 参数为FALSE

fdwCreate 参数用于标识标志,以便用于规定如何来创建新进程,fdwCreate 参数也可以用来设定优先级类,不过对于大多数应用程

序来说不应该这样做,因为系统会为新进程赋予一个默认优先级。

PszCurDir参数允许父进程设置子进程的当前驱动器和目录。如果本参数为NULL,则新进程的工作目录将与生成新进程的应用程序

的目录相同;若不为空,则必须指向包含需要的工作驱动器和工作目录的以0结尾的字符串。课题中该参数选择为NULL就可以了。

PsiStartInfo 参数用于指向一个STARTUPINF结构。当Windows创建新进程时,它将使用该结构的有关成员。大多数应用程序将要

求生成的应用程序仅仅使用默认值。至少应该将该结构中的所有成员初始化为零,然后将cb(cb为STARTUPINF结构成员)设置为该结

构的大小。STARTUPINF结构的其他具体成员参见VC++帮助系统MSDN

PpiProcInfo 参数用于指向你必须指定的PROCESS_INFORMATIO构。CreateProcess在返回之前要对该结构的成员进行初始化。该

结构的形式如下面所示:

Typedef struct _PROCESS_INFORMATION{

HANDLE hProcess;

HANDLE hThread;

DWORD dwProcessId;

DWORD dwThreadId;

}PROCESS_INFORMATION;

CreateProcess在返回之前打开进程对象和线程对象,并将每个对象的与进程相关的句柄放入PROCESS_INFORMATIO构的hProcess 和hThread 成员中。

综上所述,课题创建进程的关键程序如下:

STARTUPINFO StartupInfo;

PROCESS_INFORMATION ProcessInfo;

memset([$Startuplnfo,0,sizeof(STARTUPINFO))] 进程的终止

要终止进程的运行可以使用如下四种方法:①主线程的进入点函数返回;②进程中的一个线程调用ExitProcess函数;③另一个进

程中的线程调用TerminateProcess函数;④所有进程中的线程自动终止运行(这种情况一般不会发生)。本文采用第一种方法终止所创建的进程,即当ANSYS 十算结束时通过函数返回。

在WindowsXP系统中,如果ANSYS批处理程序运行完后,窗口标题会显示“ ANSYS已完成”。本文程序开发便可通过这一特点来终止

系统所创建的进程。当ANSYS十算模块运行完毕后,系统会弹出一个消息框提示ANSYS已计算完毕,可以进行后处理了。

用户界面接口模块

用户界面模块主要完成系统和用户的交互。用户界面模块包括计算参数输入和程序调用两部分。计算参数输入部分的主要功能是负责输入诸如地震波数据、是否调幅、时间步长等。计算输入是由对话框构成。计算参数输入对话框界面如下:

图3-4计算参数输入界面

程序对各参数的输入范围都进行了设定,如果用户输入的参数超过了这一设定,系统就会弹出对话框以提醒用户输入错误,需要重

新输入。ANSYS g序调用通过菜单方式进行。该菜单首先不处于激活状态,而是当三维数值模拟所需参数输入完成后才得到消息激活菜单。

这样设计的优点:能够提醒用户输入并检查用于三维数值模拟的相关参数,避免用户在不输入参数的情况下直接调用ANSYS?行计算而

造成错误。

程序设计采用文档读写的方式将输入的计算参数插入到用APDL语言进行二次开发的ANSYS+算模块。参数化设计的ANSYS计算模块

就可以根据输入的参数进行数值模拟计算。

ANSYS后处理模块的二次开发

ANSYS软件提供了两个后处理器,可以对结果进行时间-历程后处理

和通用后处理。对于相互作用体系地震反应分析,它可以将模拟结果用应力图、等值线(面)、动画等形式输出与转换。其中POST1通用后处理器可用于观察整个模型或模型的一部分在某一时间的模拟结果,可显示结构在地震作用下的应力图和位移变形图;时间一历程后处理器POST26用于检查模型中指定点的分析结果与时间的函数关系,可显示模型上各个节点的各变量的时程曲线。可见,对于大多

数的后处理分析我们可以直接使用ANSYS勺后处理器。但由于ANSYS是一个通用软件,而对某些特殊领域的后处理分析无能为力或者不

是很方便,因而,需要对其进行二次开发,以减轻后处理工作和提高后处理效率。

在相互作用体系地震反应分析中,有时除了关注各物理量时程曲线外,还关心其在结构高度方向的分布(如层间位移、层间剪力、

层间加速度反应等)。解决这一问题的二次开发需要结合相互作用体系地震反应分析特点进行。

(1)物理量分析

在地震反应时程分析中,我们对楼层位移时程、加速度时程、柱应力应变时程、剪力墙应力应变时程比较关心,同时还需要分析层

间位移和层间加速度变化。考虑到本文将计算多种工况,本程序对常见的变量编写了后处理程序,具有通用性,极大地提高了后处理效率。

⑵程序实现

基于上面分析,本程序是通过接口程序调用ANSYS读入编写的后处理命令流,读取ANSYS计算的结果数据库,生成各变量的结果文

件,然后用本程序的后处理模块进行读数绘图处理,进而生成结果图形。这一过程采用VC编程实现的,VC编程的算法流程图如图3-2

的后处理模块。用本程序后处理图效果如下:

算例:

上部结构为框架-筒体结构,共29层,总高度为m,各层平面均为正八边形,截面尺寸均相同,平面最大尺寸为32 m,如图3-12所示,上部结构截面尺寸及配筋见表3-1。

表3-2结构自振频率(Hz) ANSYS^算结果与试验结果对比

阶数1 2 3 4 5 6 7 8 9 10

试验值

计算值

相关主题
文本预览
相关文档 最新文档