ansys基于vc++6.0的二次开发与相互作用分析在ansys中的实现_第1页
ansys基于vc++6.0的二次开发与相互作用分析在ansys中的实现_第2页
ansys基于vc++6.0的二次开发与相互作用分析在ansys中的实现_第3页
ansys基于vc++6.0的二次开发与相互作用分析在ansys中的实现_第4页
ansys基于vc++6.0的二次开发与相互作用分析在ansys中的实现_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1 概述 ANSYS 是一套功能十分强大的有限元分析软件,能实现多场及多场耦合分析;是实现前后处理、求解及 多场分析统一数据库的一体化大型 FEA 软件;支持异种、异构平台的网络浮动,在异种、异构平台上用 户界面统一、数据文件全部兼容,强大的并行计算功能支持分布式并行及共享内存式并行。该软件具有如 下特点: (1) 完备的前处理功能 ANSYS 不仅提供了强大的实体建模及网格划分工具,可以方便地构造数学模型,而且还专门设有用户所 熟悉的一些大型通用有限元软件的数据接口(如 MSCNSSTRAN,ALGOR,ABAQUS 等),并允许从 这些程序中读取有限元模型数据,甚至材料特性和边界条件,完成 ANSYS 中的初步建模工作。此外,A NSYS 还具有近 200 种单元类型,这些丰富的单元特性能使用户方便而准确地构建出反映实际结构的仿真 计算模型。 (2) 强大的求解器 ANSYS 提供了对各种物理场量的分析,是目前唯一能融结构、热、电磁、流体、声学等为一体的有限元 软件。除了常规的线性、非线性结构静力、动力分析外,还可以解决高度非线性结构的动力分析、结构非 线性及非线性屈曲分析。提供的多种求解器分别适用于不同的问题及不同的硬件配置。 (3) 方便的后处理器 ANSYS 的后处理分为通用后处理模块(POST1)和时间历程后处理模块(POST26)两部分。后处理结果 可能包括位移、温度、应力、应变、速度以及热流等,输出形式可以有图形显示和数据列表两种。 (4) 多种实用的二次开发工具 ANSYS 除了具有较为完善的分析功能外,同时还为用户进行二次开发提供了多种实用工具。如宏(Marco )、参数设计语言(APDL)、用户界面设计语言(UIDL)及用户编程特性(UPFs),其中 APDL(ANS YS Parametric Design Language)是一种非常类似于 Fortran77 的参数化设计解释性语言,其核心内容为 宏、参数、循环命令和条件语句,可以通过建立参数化模型来自动完成一些通用性强的任务;UIDL(Use r Interface Design Language)是 ANSYS 为用户提供专门进行程序界面设计的语言,允许用户改变 ANSY S 的图形用户界面(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 语言进行封装的系统可以只要求操作人员输入前处理参数,然后自动运行 A NSYS 进行求解。但完全用 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 和 VC6.0 的硬件环境 都能使用本系统,保证程序使用的广泛性。 (4)程序代码应具有开放性和可重用性。这样,在进一步的设计中,能保证设计者可以方便地对代码进行 修改扩充;同时,提供一定的设计接口,新的设计者可以根据接口,无须对程序进行大幅度的修改,就可 以进行新的开发,以适应新的特殊要求。 程序的开发平台是 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 提供的注册表编辑 AP I(Application Programming Interface)函数30,31,具体实现如下: HKEY hSubKey; / 定义子键 LONG lRet; char RegPath200=“SoftWareANSYS, Inc.ANSYSANSYS 6.10“; lRet=RegOpenKeyEx(HKEY_CURRENT_USER,RegPath,0,KEY_ALL_ACCESS, / 打开子键 if(lRet!=ERROR_SUCCESS)return; lRet=RegSetValueEx(hSubKey,“Extension“,0,REG_SZ,(LPBYTE)“txt“,3); /设置 ANSYS 批处理程序读取的 文件扩展名 if(lRet!=ERROR_SUCCESS)return; lRet=RegSetValueEx(hSubKey,“Jobname“,0,REG_SZ,(LPBYTE)“ZHY“); /指定 ANSYS 模块文件名 if(lRet!=ERROR_SUCCESS)return; lRet=RegSetValueEx(hSubKey,“WorkingDirectory“,0,REG_SZ,(LPBYTE)“E:LWSWorkspace “,16); if(lRet!=ERROR_SUCCESS)return; / 键值出错返回 RegCloseKey(hSubKey); / 关闭子键 通过以上的设置后运行 ANSYS 批处理程序,界面变成如图 3-3 所示。 从图中可看出 ANSYS 模块工作路径 E:LWSWorkspace、初始文件名 ZHY、ANSYS 程序文件名 ZHY.txt 文件、计算结果输出文件名 ZHY.out 都已经自动出现在 ANSYS 批处理程序的输入框,往下 ANSYS 就可 以自动从 ZHY.txt 读取命令流进行计算并将结果输出到 ZHY.out 文件中。若想改 ANSYS 模块路径或文件 名只需对上面程序稍加修改即可。 2. 多进程编程 本文在 VC 平台上对 ANSYS 进行封装,希望前台处理系统和用户的交互,而后台进行 ANSYS 的计算。 这就要求系统具有并发性,为此,引入多进程编程机制。进程是一个正在运行程序的实例,它具有动态性 、并发性、独立性、异步性和结构性等特点。系统中的进程动态产生与消亡,多个进程并发运行,分别执 行各自对应的程序段,为各自的目标而工作。一个程序可以包含多个进程。 图 3-3 ANSYS 批处理运行界面 在 VC6.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 结构, 并对它们进行初始化,以便创建自己的安全性权限,并将它们赋予进程对象和线程对象。将 SECRURITY _ATTRIBUTES 结构用于 psaProcess 和 psaThread 参数的另一个原因是,父进程将来生成的任何子进程都 可以继承这两个对象句柄中的任何一个。本程序除了创键调用 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 struct _PROCESS_INFORMATION HANDLE hProcess; HANDLE hThread; DWORD dwProcessId; DWORD dwThreadId; PROCESS_INFORMATION; CreateProcess 在返回之前打开进程对象和线程对象,并将每个对象的与进程相关的句柄放入 PROCESS_IN FORMATION 结构的 hProcess 和 hThread 成员中。 综上所述,课题创建进程的关键程序如下: STARTUPINFO StartupInfo; PROCESS_INFORMATION ProcessInfo; memset( /分配内存 StartupInfo.cb=sizeof(STARTUPINFO); / 初始化 StartupInfo.dwFlags=STARTF_USESHOWWINDOW; StartupInfo.wShowWindow=SW_SHOWMAXIMIZED; if(!:CreateProcess(NULL,d:ProgramFilesAnsys IncANSYS61binintelAnsysB”,NULL,NULL,FALS E,0,NULL,NULL, GetLastError(); / 创建进程 3. 进程的终止 要终止进程的运行可以使用如下四种方法:主线程的进入点函数返回;进程中的一个线程调用 ExitPr ocess 函数;另一个进程中的线程调用 TerminateProcess 函数;所有进程中的线程自动终止运行( 这种 情况一般不会发生)。本文采用第一种方法终止所创建的进程,即当 ANSYS 计算结束时通过函数返回。 在 WindowsXP 系统中,如果 ANSYS 批处理程序运行完后,窗口标题会显示“ANSYS 已完成”。本文程序 开发便可通过这一特点来终止系统所创建的进程。当 ANSYS 计算模块运行完毕后,系统会弹出一个消息 框提示 ANSYS 已计算完毕,可以进行后处理了。 3.3.3 用户界面接口模块 用户界面模块主要完成系统和用户的交互。用户界面模块包括计算参数输入和程序调用两部分。计算参数 输入部分的主要功能是负责输入诸如地震波数据、是否调幅、时间步长等。计算输入是由对话框构成。计 算参数输入对话框界面如下: 图 3-4 计算参数输入界面 程序对各参数的输入范围都进行了设定,如果用户输入的参数超过了这一设定,系统就会弹出对话框以提 醒用户输入错误,需要重新输入。ANSYS 程序调用通过菜单方式进行。该菜单首先不处于激活状态,而 是当三维数值模拟所需参数输入完成后才得到消息激活菜单。这样设计的优点:能够提醒用户输入并检查 用于三维数值模拟的相关参数,避免用户在不输入参数的情况下直接调用 ANSYS 进行计算而造成错误。 程序设计采用文档读写的方式将输入的计算参数插入到用 APDL 语言进行二次开发的 ANSYS 计算模块。 参数化设计的 ANSYS 计算模块就可以根据输入的参数进行数值模拟计算。 3.3.4 ANSYS 后处理模块的二次开发 ANSYS 软件提供了两个后处理器,可以对结果进行时间历程后处理 和通用后处理。对于相互作用体系地震反应分析,它可以将模拟结果用应力图、等值线(面)、动画等形 式输出与转换。其中 POST1 通用后处理器可用于观察整个模型或模型的一部分在某一时间的模拟结果, 可显示结构在地震作用下的应力图和位移变形图;时间历程后处理器 POST26 用于检查模型中指定点的 分析结果与时间的函数关系,可显示模型上各个节点的各变量的时程曲线。可见,对于大多数的后处理分 析我们可以直接使用 ANSYS 的后处理器。但由于 ANSYS 是一个通用软件,而对某些特殊领域的后处理 分析无能为力或者不是很方便,因而,需要对其进行二次开发,以减轻后处理工作和提高后处理效率。 在相互作用体系地震反应分析中,有时除了关注各物理量时程曲线外,还关心其在结构高度方向的分布( 如层间位移、层间剪力、层间加速度反应等)。解决这一问题的二次开发需要结合相互作用体系地震反应 分析特点进行。 (1)物理量分析 在地震反应时程分析中,我们对楼层位移时程、加速度时程、柱应力应变时程 、剪力墙应力应变时程比 较关心,同时还需要分析层间位移和层间加速度变化。考虑到本文将计算多种工况,本程序对常见的变量 编写了后处理程序,具有通用性,极大地提高了后处理效率。 (2) 程序实现 基于上面分析,本程序是通过接口程序调用 ANSYS,读入编写的后处理命令流,读取 ANSYS 计算的结 果数据库,生成各变量的结果文件,然后用本程序的后处理模块进行读数绘图处理,进而生成结果图形。 这一过程采用 VC 编程实现的,VC 编程的算法流程图如图 3-2 的后处理模块。 问:在用 patran 等建立了几何模型,划分网格后,删除了几何模型,有何办法可以重新恢复几何模型,当 然不是重新建点、线、面、体等。大家看有没有好的方法。 答:首先将有限元模型转换为 ANSYS 格式,然后可以利用 ANSYS 从实体单元的单元面再产生几何体。 下面给出一个从四面体单元再产生几何实体的示例命令流(如果要转换六面体网格,可以通过修改下面的 命令流实现。): 1. 转换未变形的网格: esel,s,ma

温馨提示

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

评论

0/150

提交评论