ANSYS基于VC++6.0的二次开发与相互作用分析在ANSYS中的实现

ANSYS基于VC++的二次开发6.0与ANSYS基于VC++的二次开发6.0

在ANSYS中实现交互分析(转载)

1 概述

ANSYS是一套功能非常强大的有限元分析软件,可以实现多场、多场耦合分析;是实现预处理、求解、多场分析统一数据库的一体化大型有限元分析软件;支持异构和异构平台的网络浮动,用户界面系统一、数据文件在异构和异构平台上都兼容,强大的并行计算功能支持分布式并行和共享内存并行。该软件具有以下特点:

(1)完整的预处理函数

ANSYS不仅提供了强大的实体建模和网格划分工具,可以轻松构建数学模型,还为一些用户熟悉的大型通用有限元软件(如MSC/NSSTRAN、ALGOR、ABAQUS等)提供数据接口。 ,并允许从这些程序中读取有限元模型数据,甚至是材料特性和边界条件,从而在 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图形用户界面; UPFs(User Programmable Features)提供了一套Fortran77函数和例程来扩展或修改程序的功能,该技术充分展示了ANSYS的开放系统,用户不仅可以使用它来将ANSYS程序裁剪成任何组织形式,满足他们的需求(例如,您可以定义新材料、新元素或新屈服准则),并且您可以通过调用整个 ANSYS 作为子程序来编写自己的优化算法。

鉴于以上特点,ANSYS软件近年来在国内外工程建设和科学研究中得到广泛应用。但这些应用大多仅限于直接使用ANSYS软件进行实际工程分析,很少涉及使用ANSYS提供的二次开发工具进行有限元软件设计。本文首次使用ANSYS软件的二次开发功能,以VC++6.0为工具,APDL语言进行ANSYS二次开发,框架-管结构-编制了桩-筏基础-土相互作用体系和地震反应分析。程序。

2 节目独家新闻?

对于实际工程问题,ANSYS提供的APDL语言可以封装ANSYS软件。 APDL语言是ANSYS软件提供的参数化设计语言,全称ANSYS Parametric Design Language。使用APDL语言可以进行更高效的分析和计算,并且可以轻松地自动化工作(循环、分支、宏等结构),是一种高效的参数化建模方法。采用APDL语言封装的系统只需操作人员输入预处理参数,然后自动运行ANSYS求解即可。但是完全用 APDL 编写的宏仍然有弱点。例如,APDL 语言很难控制程序的进程。虽然它提供了循环语句和条件判断语句,但一般很难写出结构清晰的程序。虽然提供了参数的界面输入,但功能不是太强,交互不够流畅。针对这种情况,本文利用VC++6.0开发了框架-管结构-桩-筏基础-土相互作用的有限元分析程序(简称LWS程序)。

本程序的设计目标是使用VC++6.0封装ANSYS。使用VC++6.0进行ANSYS模拟框架-管结构-桩-筏基础-土相互作用的二次开发。用户只需输入地震波、计算时间步长、阻尼比等物理性能参数,系统即可自动调用ANSYS计算程序,自动进行网格划分、地震动加载和自动求解。系统在前台开发了友好、方便、易用的人机交互界面,在后台封装了复杂、难懂和掌握的ANSYS命令流程。因此,即使您从未认真研究过,程序设计也可以对ANSYS软件进行工程设计。人员也可以利用该系统对结构抗震性能进行有限元分析,具有较强的实际问题处理能力。

用户输入计算参数,后台调用ANSYS命令进行计算,ANSYS将计算结果返回给用户进行后期处理。

编程的主要原理和功能如下:

(1)方便原则,即程序模块应具有良好的用户界面和易用性。程序前端设计采用Windows提供的标准图形用户界面(GUI),用户无需专门培训即可使用。同时,程序应具有良好的容错和纠错能力,避免用户操作不当造成的损失。

(2)程序系统可以为用户提供以下功能:

①允许用户根据实际计算条件输入具体的计算参数,包括地震波选择、计算时间步长、地震波调幅与否等。

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

③用户在后台调用ANSYS命令流通过接口进行计算,可以得到最终的计算结果文件供用户进行后处理和结果分析。

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

(3)程序要有良好的可移植性,不依赖于特定的硬件设备。只要硬件环境可以安装ANSYS和VC++6.0,使用本系统即可保证说明程序可以使用的广泛性。

(4)程序代码应该是开放的、可复用的。这样,在进一步的设计中,可以保证设计者可以方便地修改和扩展代码;同时,提供一定的设计interface, new 根据界面,软件的设计者可以进行新的开发以满足新的特殊要求,而不需要对程序进行大的修改。

程序开发平台为Microsoft VC++6.0、ANSYS6.1,基于WindowsXP编程。程序的实现是利用微软提供的Windows编程接口MFC和ANSYS公司的ANSYS/Multiphysics产品,采用面向对象的编程方法。

3个主要模块及程序设计

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

3.1个ANSYS模块

为了满足用户的特殊需求,ANSYS建立了开放式架构,提供APDL、UIDL和UPFs(User Programming Features)等二次开发接口。其中,ANSYS接口允许用户将自己的VC代码连接到ANSYS,或者将ANSYS作为子程序调用,使ANSYS具有特殊的功能。

本文中的ANSYS模块是使用APDL语言二次开发的。上述二次开发采用参数化设计方法。参数是 APDL 变量(它们更像 FORTRAN 变量而不是 FORTRAN 参数),不需要显式声明参数类型,所有数值变量都存储为双精度数。使用但未声明的参数,给出接近0的“最小值”。二次开发采用参数化设计方法,增强了程序的可读性和可移植性。用户无需了解程序的具体结构,只需更改参数值即可自动调用ANSYS模块。

3.2 VC调用模块

VC调用模块在系统中起着重要作用,接受用户界面的输入,并创建一个进程调用ANSYS模块进行计算。在 VC 程序中调用 ANSYS 必须完成两项任务。一是使接口程序能够修改ANSYSB的命令流文件路径和文件名,可以通过注册表编程来实现;运行ANSYSB应用程序,涉及到创建进程的编程,下面介绍它们的具体实现。

1. 注册表编程

在Windows(98/NT/2000/XP)系统上运行ANSYS安装程序后,Windows系统注册表中记录了一些信息,如初始工作路径、文件名等。使用VC平台的程序调用ANSYS计算模块必须指定ANSYS软件的运行目录和用APDL语言开发的ANSYS模块程序的路径,这样ANSYS软件的批处理程序才能从给定的路径读取命令流文件。在界面程序中修改这些注册表信息,可以使用Windows[30,31]提供的注册表编辑API(Application Programming Interface)功能。具体实现如下:

HKEY hSubKey; // 定义子键

长lRet;

char RegPath[200]=”SoftWare\ANSYS, Inc.\ANSYS\ANSYS 6.1\0″;

lRet=RegOpenKeyEx(HKEY_CURRENT_USER,RegPath,0,KEY_ALL_ACCESS,&hSubKey); //打开子键

如果(lRet!=ERROR_SUCCESS)返回;

lRet=RegSetValueEx(hSubKey,”Extension”,0,REG_SZ,(LPBYTE)”txt”,3); //设置ANSYS批处理程序读取的文件扩展名

如果(lRet!=ERROR_SUCCESS)返回;

lRet=RegSetValueEx(hSubKey,”Jobname”,0,REG_SZ,(LPBYTE)”ZHY”);

//指定ANSYS模块文件名

如果(lRet!=ERROR_SUCCESS)返回;

lRet=RegSetValueEx(hSubKey,”WorkingDirectory”,0,REG_SZ,(LPBYTE)”E:\LWS\Workspace”,16);

如果(lRet!=ERROR_SUCCESS)返回; // 键值错误返回

RegCloseKey(hSubKey); // 关闭子键

以上设置后运行ANSYS批处理程序后,界面变为如图3-3所示。

从图中可以看出ANSYS模块工作路径E:\LWS\Workspace,初始文件名ZHY,ANSYS程序文件名ZHY.txt文件,计算结果输出文件名ZHY。 out 已经全部自动出现在 ANSYS 批处理程序的输入框中,ANSYS 可以自动从 ZHY.txt 中读取命令流进行计算,并将结果输出到 ZHY.out 文件中。如果要更改ANSYS模块路径或文件名,只需对上述程序稍作修改即可。

2.多进程编程

本文将ANSYS封装在VC平台上,希望前端处理系统与用户的交互,后端进行ANSYS的计算。这就要求系统具有并发性。为此,引入了多进程编程机制。进程是正在运行的程序的一个实例,具有动态、并发、独立、异步和结构化等特点。系统中的进程是动态生成和销毁的,多个进程同时运行,执行各自的程序段,为各自的目标工作。一个程序可以包含多个进程。

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

在VC++6.0中,可以使用CreateProcess函数创建一个进程来执行其他程序,并且可以设置进程的优先级。 CreateProcess函数的原型是:

BOOL CreateProcess(

LPCTSTR lpAppliciatonName

LPTSTR lpCommandLine

LPSECURITY_ATTRIBUTES lpProcessAttributes

LPSECURITY_ATTRIBUTES lpThreadAttributes

BOOL bInheritHandles

DWORD dwCreationFlags

LPVOID lpEnvironment

LPCTSTR lpCurrentDirectory

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_ATTRIBUTES 结构并对其进行初始化以创建自己的安全权限并将它们分配给进程对象和线程对象。为 psaProcess 和 psaThread 参数使用 SECRURITY_ATTRIBUTES 结构的另一个原因是,由父进程生成的任何未来子进程都可以继承这两个对象句柄中的任何一个。本程序除了创建按键调用ANSYS计算模块的进程外,不需要创建其他进程。所以psaProcess和psaThread的参数都是NULL。同样,binheritHandles 参数为 FALSE。

fdwCreate 参数用于标识可用于指定如何创建新进程的标志。 fdwCreate 参数也可以用来设置优先级,但是对于大多数应用程序不应该这样做,因为系统会给进程一个默认的优先级。

PszCurDir 参数允许父进程设置子进程的当前驱动器和目录。如果此参数为 NULL,则新进程的工作目录将与生成新进程的应用程序的目录相同;如果它不为空,它必须指向一个以 0 结尾的字符串,其中包含所需的工作驱动器和工作目录。在主题中,该参数可以选择为NULL。

PsiStartInfo 参数用于指向 STARTUPINFO 结构。当 Windows 创建一个新进程时,它会使用该结构的相关成员。大多数应用程序将要求生成的应用程序仅使用默认值。至少,结构中的所有成员都应该初始化为零,然后 cb(cb 是 STARTUPINFO 结构的成员)应该设置为结构的大小。 STARTUPINFO结构的其他具体成员请参考VC++6.0帮助系统MSDN。

PpiProcInfo 参数用于指向您必须指定的 PROCESS_INFORMATION 结构。 CreateProcess 在返回之前初始化此结构的成员。结构形式如下:

Typedef 结构 _PROCESS_INFORMATION{

处理 hProcess;

处理线程;

DWORD dwProcessId;

DWORD dwThreadId;

}PROCESS_INFORMATION;

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

综上所述,项目创建过程的关键流程如下:

STARTUPINFO 启动信息;

PROCESS_INFORMATION 过程信息;

memset(&StartupInfo,0,sizeof(STARTUPINFO)); //分配内存

StartupInfo.cb=sizeof(STARTUPINFO); // 初始化

StartupInfo.dwFlags=STARTF_USESHOWWINDOW;

StartupInfo.wShowWindow=SW_SHOWMAXIMIZED;

if(!::CreateProcess(NULL,d:\ProgramFiles\Ansys

Inc\ANSYS61\bin\intel\AnsysB”,NULL,NULL,FALS E,0,NULL,NULL,&StartupInfo,&ProcessInfo))

{

AfxMessageBox(“错误!”);

GetLastError();

} // 创建进程

3. 进程终止

可以使用以下四种方法来终止进程的运行:①主线程的入口点函数返回; ②进程中的某个线程调用ExitProcess函数; ③另一个进程中的一个线程调用TerminateProcess函数; ④ 线程中的所有进程都自动终止(这通常不会发生)。本文采用第一种方法终止创建的进程,即当ANSYS计算结束时,函数返回。

在 Windows XP 中,如果 ANSYS 批处理程序运行完毕,窗口标题将显示“ANSYS Completed”。本文的程序开发可以利用这个特性来终止系统创建的进程。当ANSYS计算模块运行完毕后,会弹出消息框提示ANSYS计算完成,可以进行后处理。

3.3.3 用户界面接口模块

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

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

程序设置了每个参数的输入范围。如果用户输入的参数超过此设置,系统会弹出对话框提醒用户输入错误,需要重新输入。 ANSYS 程序调用是通过菜单进行的。该菜单起初不处于激活状态,但在输入完成3D数值模拟所需的参数后得到消息激活菜单。这种设计的优点是可以提醒用户输入和检查相关参数进行3D数值模拟,避免用户不输入参数直接调用ANSYS进行计算而导致的错误。

程序设计采用文档读写的方式,将输入的计算参数插入到ANSYS计算模块中,用APDL语言进行二次开发。参数化设计的ANSYS计算模块可以根据输入的参数进行数值模拟计算。

3.3.4 ANSYS后处理模块的二次开发

ANSYS 软件提供了两个后处理器,用于对结果进行时程后处理

和通用的后处理。对于相互作用系统的地震响应分析,它可以将模拟结果以应力图、等高线(面)和动画的形式输出和转换。 POST1通用后处理器可用于观察整个模型或部分模型在某一时刻的模拟结果,可显示结构在地震作用下的应力图和位移变形图;时间历史后处理器 POST26 用于检查模型。指定点的分析结果与时间的函数关系,可以在模型上显示出各节点各变量的时程曲线。可以看出,对于大部分的后处理分析我们可以直接使用ANSYS后处理器。但是,由于ANSYS是通用软件,对于一些特殊领域的后处理分析,无能为力或不便。因此需要重新开发,以减少后处理工作,提高后处理效率。

在相互作用系统的地震响应分析中,除了各物理量的时程曲线外,有时还包括结构高度方向的分布(如层间位移、层间剪力、层间加速度响应、等)也受到关注。解决该问题的二次开发需要结合相互作用系统地震响应分析的特点。

(1)物理量分析

在地震响应时程分析中,我们更关注楼板位移时程、加速度时程、柱应力-应变时程、剪力墙应力-应变时程,以及需要分析层间位移和层间加速度变化。 考虑到本文会计算多种工况,本程序编写了常用变量的后处理程序,通用性强,大大提高了后处理的效率。

(2)程序实现

基于以上分析,本程序通过接口程序调用ANSYS,读取写入的后处理命令流,读取ANSYS计算的结果数据库,生成各个变量的结果文件,然后使用后处理该程序的模块读取绘图处理以生成结果图。这个过程是通过VC编程实现的。 VC编程的算法流程图如图3-2中的后处理模块所示。 (

Ansys 和 VC++/Fortran 程序之间的接口数据调用 ANSYS 作为子程序

对于优化或参数化设计,ANSYS 可以作为 VC 或 FORTRAN 中的子程序调用。具体调用方式如下:

1.在VC中调用ANSYS

::WinExec(“d:/ANSYS57/BIN/INTEL/ANSYS57 -b -p ansys_product_feature -i input_file -o output_file”,SW_SHOWNORMAL);

2.在 FORTRAN 中调用 ANSYS

逻辑(4) 结果

RESULT=SYSTEMQQ(‘d:ANSYS57BININTELANSYS57 -b -p

ansys_product_feature -i input_file -o output_file’)

3.说明

在1和2中,input_file是用APDL语言编写的ANSYS输入文件。

ansys_product_feature 是您的 ANSYS 产品功能代码。

需要注意的是,在VC中调用ANSYS时,需要添加判断语句来判断ANSYS

已经被执行了。

当然,VC或FORTRAN也可以在ANSYS中作为子程序调用。可以参考ANSYS二次开发的资料。

这个方法应该是系统独立的。

在FORTRAN中无需判断数据处理模块开发,FORTRAN会等待ANSYS执行完毕再进行下一条语句。

在VC中,没找到类似FORTRAN的函数,只好加个循环判断语句。

如果有人能找到这样的功能,请告诉我,谢谢!

判断方法很简单,只需要判断错误文件file.err是否可写即可。

因为在ANSYS运行时file.err是不可写的,所以这个文件只有在运行结束时才可写

文章来源:jishulink.com/content/post/6794

微信公众号:CAE集中营

CaE/CAD 现场问题可以免费在线回答。此外,一些相关的专业文章、知识点和案例会不断更新。

© 版权声明
THE END
喜欢就支持一下吧
点赞45赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容