如何在ansys中检查计算精度?
ANSYS中相互作用分析的实现
1概述
ANSYS是功能强大的有限元分析软件,可以实现多场、多场耦合分析。它是一个集成的大型有限元分析软件,实现了前后处理、求解和多场分析的统一数据库;支持异构和异构平台的网络浮动。用户界面是统一的,所有数据文件在不同种类和不同平台上是兼容的。强大的并行计算功能支持分布式并行和基于内存的并行。该软件具有以下特点:
(1)完整的预处理功能
ANSYS不仅提供了强大的实体建模和网格生成工具,可以方便地构造数学模型,而且对于用户熟悉的一些大型通用有限元软件(如MSC/NSSTRAN、ALGOR、ABAQUS等)有专门的数据接口。),并允许从这些程序中读取有限元模型数据,甚至材料特性和边界条件,以完成ANSYS中的初步建模工作。此外,ANSYS中有近200种单元类型,这些丰富的单元特征使用户能够方便、准确地建立反映实际结构的仿真计算模型。
(2)强大的求解器
ANSYS提供了各种物理场的分析,是唯一一个可以集结构、热、电磁、流体、声学于一体的有限元软件。除了常规的线性和非线性结构的静动力分析外,还可以解决高度非线性结构的动力分析、结构非线性和非线性屈曲分析。所提供的求解器适用于不同的问题和不同的硬件配置。
(3)方便的后处理器
ANSYS的后处理分为通用后处理模块(POST1)和时间历程后处理模块(POST26)。后处理结果可能包括位移、温度、应力、应变、速度和热流等。输出形式可以是图形显示和数据列表。
(4)多种实用的二次开发工具。
ANSYS不仅具有完善的分析功能,还提供了多种实用工具供用户进行二次开发。如宏(macro)、参数化设计语言(APDL)、用户界面设计语言(UIDL)和用户编程特性(UPFs),其中APDL (ANSYS参数化设计语言)是一种与Fortran77非常相似的参数化设计解释语言,其核心内容是宏、参数、循环命令和条件语句,通过建立参数化模型可以自动完成一些通用任务。UIDL(User Interface Design Language)是ANSYS为用户提供专门的编程界面设计的语言,它允许用户更改ANSYS的图形用户界面(GUI)中的一些项目,并提供了一个强大的工具,允许用户根据个人喜好灵活地使用和组织ANSYS图形用户界面的设计。UPFs(用户可编程特性)提供了一组Fortran77函数和例程来扩展或修改程序的功能。这项技术充分显示了ANSYS的开放性。用户不仅可以用它将ANSYS程序裁剪成自己需要的任何组织形式(如定义一种新材料、一种新元素或给出一个新的屈服准则),还可以编写自己的优化算法,并通过调用整个ANSYS作为子程序来实现。
鉴于上述特点,近年来,ANSYS软件在国内外工程建设和科学研究中得到了广泛的应用。但这些应用大多局限于直接使用ANSYS软件进行实际工程分析,使用ANSYS提供的二次开发工具进行有限元软件设计的情况很少涉及。本文首次利用ANSYS软件的二次开发功能,以VC++6.0为工具,用APDL语言对ANSYS进行二次开发,编制了框架-筒体结构-桩-筏基础-土相互作用体系及地震反应分析程序。
2个规划目标
针对一个实际的工程问题,ANSYS提供的APDL语言可以封装ANSYS软件。APDL语言是ANSYS软件提供的参数化设计语言,全称是ANSYS参数化设计语言。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)程序系统可以为用户提供以下功能:
①允许用户根据实际计算条件输入具体计算参数,包括地震波选择、计算时间步长、地震波调幅等。
②用户在输入各种参数后,计算前,可以对输入的数据进行修改、添加和删除,以确保输入的参数正确。
(3)用户可以通过界面在后台调用ANSYS命令流进行计算,得到最终的计算结果文件,供用户对结果进行后处理和分析。
④用户可以添加新功能或新的二次开发来实现程序升级。
(3)程序应该是可移植的,独立于特定的硬件设备。只要能安装ANSYS和VC++6.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(用户编程特性)。其中,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,365,438+0]提供的注册表编辑API(应用程序编程接口)函数,实现如下:
HKEY·苏贝;//定义子项
长lRet
char RegPath[200]= " SoftWare \ \ ANSYS,Inc . \ \ ANSYS \ \ ANSYS 6.1 \ \ 0 ";
lRet=RegOpenKeyEx(HKEY当前用户,RegPath,0,KEY_ALL_ACCESS,& amphSubKey);//打开子项
if(lRet!=ERROR_SUCCESS)返回;
lRet=RegSetValueEx(hSubKey," Extension ",0,REG_SZ,(LPBYTE)"txt ",3);//设置ANSYS批处理程序读取的文件扩展名。
if(lRet!=ERROR_SUCCESS)返回;
lRet=RegSetValueEx(hSubKey," Jobname ",0,REG_SZ,(LP byte)" ZHY ");
//指定ANSYS模块的文件名。
if(lRet!=ERROR_SUCCESS)返回;
lRet=RegSetValueEx(hSubKey," WorkingDirectory ",0,REG_SZ,(LP byte)" E:\ \ LWS \ \工作区",16);
if(lRet!=ERROR_SUCCESS)返回;//返回了键值错误
RegCloseKey(hSubKey);//关闭子项
完成上述设置后,运行ANSYS批处理程序,界面将变成如图3-3所示。
从图中可以看出,ANSYS模块的工作路径e: \ \ lws \ \ workspace,初始文件名ZHY,ANSYS程序文件名ZHY.txt,计算结果输出文件名ZHY.out都已经自动出现在ANSYS批处理程序的输入框中,down ANSYS可以自动从ZHY.txt中读取命令流进行计算,并将结果输出到ZHY.out文件中。如果要改变ANSYS模块的路径或文件名,只需对上述程序稍加修改即可。
2.多进程编程
本文将ANSYS封装在VC平台上,希望系统与用户的交互在前台处理,而ANSYS的计算在后台进行。这就要求系统是并发的,所以引入了多进程编程机制。进程是正在运行的程序的实例,它是动态的、并发的、独立的、异步的和结构化的。系统中的进程动态产生和消亡,多个进程并发运行,分别执行各自对应的程序段,为各自的目标而工作。一个程序可以包含多个进程。
图3-3 ANSYS批量操作界面
在VC++6.0中,可以使用CreateProcess函数创建一个进程来执行其他程序,并且可以设置进程的优先级。CreateProcess函数的原型是:
布尔创建过程(
LPCTSTR lpAppliciatonName
LPTSTR lpCommandLine
LP security _ ATTRIBUTES lpProcessAttributes
LP security _ ATTRIBUTES lpThreadAttributes
布尔·宾赫利坦德尔斯
DWORD dwCreationFlags
LPVOID lpEnvironment
LPCTSTR lpCurrentDirectory
LPSTARTUPINFO lpStartupInfo
LP process _ INFORMATION LP process INFORMATION
);
当系统调用CreateProcess时,会创建一个进程内核对象,其初始使用计数为1。进程内核对象不是进程本身,而是操作系统用来管理进程的一个更小的数据结构。然后,系统为新进程创建一个虚拟地址空间,并将可执行文件或任何必要的DLL文件的代码和数据加载到该进程的地址空间中。接下来,系统为新进程的主线程创建一个线程内核对象(它的使用计数是1)。与进程内核对象一样,线程内核对象是操作系统用来管理线程的小型数据结构。通过执行C/C++运行时启动代码,主线程开始运行,最后调用WinMain、wWinMain、main或wmain函数。如果系统成功创建了一个新进程和一个主线程,CreateProcess返回True。
PszApplicationName和pszCommandLine参数分别用于设置新进程要使用的可执行文件的名称和要传递给新进程的命令行字符串。PszApplicationName的参数可以为NULL,表示系统会使用完整路径查看可执行文件,不会搜索这些目录;如果参数不为NULL,可以将地址传递给pszApplicationName参数中包含的runnable文件的名称字符串。当系统找到可执行文件时,它创建一个新进程,并将可执行文件的代码和数据映射到新进程的地址空间。
PsaProcess和psaThread参数分别设置进程对象和线程对象所需的安全性。您可以为这些参数传递NULL,在这种情况下,系统会为这些对象分配默认的安全描述符;您还可以指定两个SECURITY_ATTRIBUTES结构,并初始化它们以创建您自己的安全权限,并将它们分配给进程对象和线程对象。对psaProcess和psaThread参数使用SECRURITY_ATTRIBUTES结构的另一个原因是,将来父进程生成的任何子进程都可以继承这两个对象句柄中的任何一个。该程序除了调用ANSYS计算模块的过程外,不需要创建其他过程。因此,psaProcess和psaThread的参数为NULL。同样,binheritHandles参数为FALSE。
fdwCreate参数用于标识该标志,以便指定如何创建新流程。fdwCreate参数也可以用来设置优先级,但是对于大多数应用程序来说不应该这样做,因为系统会给新进程一个默认的优先级。
PszCurDir参数允许父进程设置子进程的当前驱动器和目录。如果该参数为空,则新进程的工作目录将与生成新进程的应用程序的目录相同;如果不为空,它必须指向以0结尾的字符串,该字符串包含所需的工作驱动器和工作目录。该参数在项目中可以选择为空。
PsiStartInfo参数用于指向STARTUPINFO结构。当Windows创建一个新进程时,它将使用该结构的相关成员。大多数应用程序会要求生成的应用程序只使用默认值。至少要将结构中的所有成员初始化为零,然后将cb(cb是STARTUPINFO结构的成员)设置为结构的大小。关于STARTUPINFO结构的其他具体成员,请参考VC++6.0的帮助系统MSDN。
PpiProcInfo参数用于指向您必须指定的PROCESS_INFORMATION结构。CreateProcess在返回之前初始化此结构的成员。这种结构的形式如下:
Typedef结构_过程_信息{
处理hProcess
处理hThread
DWORD dwProcessId
DWORD dwThreadId
}过程_信息;
CreateProcess在返回前打开Process对象和thread对象,并将每个对象的进程相关句柄放入PROCESS_INFORMATION结构的hProcess和hThread成员中。
综上所述,项目创建过程的关键步骤如下:
STARTUPINFO StartupInfo
PROCESS _ INFORMATION ProcessInfo;
memset(& amp;StartupInfo,0,sizeof(startup info));//分配内存
startup info . CB = sizeof(startup info);//初始化
startup info . dw flags = STARTF _ USESHOWWINDOW;
startup info . wshowindow = SW _ show maximized;
如果(!* CreateProcess(NULL,d:\\ProgramFiles\\Ansys
Inc \ \ ANSYS 61 \ \ bin \ \ Intel \ \ AnsysB ",NULL,NULL,FALS E,0,NULL,NULL & amp;StartupInfo。ProcessInfo))
{
AfxMessageBox("错误!");
GetLastError();
}//创建流程
3.过程的终止
终止进程有四种方式:①主线程入口点函数返回;②进程中的一个线程调用ExitProcess函数;③另一个进程中的线程调用TerminateProcess函数;(4)进程中所有线程自动停止运行(这种情况一般不会发生)。本文采用第一种方法终止已创建的进程,即当ANSYS计算完成后,通过函数返回。
在WindowsXP系统中,如果ANSYS批处理程序运行,窗口标题会显示“ANSYS completed”。本文的程序开发可以通过这个特性终止系统创建的进程。当ANSYS计算模块运行完毕后,系统会弹出一个消息框,提示ANSYS已经计算完毕,可以进行后处理。
用户界面模块
用户界面模块主要完成系统与用户的交互。用户界面模块包括两部分:计算参数输入和程序调用。计算参数输入部分的主要功能是输入地震波数据、调幅、时间步长等。计算输入由对话框组成。计算参数输入对话框界面如下:
图3-4计算参数输入界面
程序已经设置了每个参数的输入范围。如果用户输入的参数超过此设置,系统会弹出对话框提醒用户输入错误,需要重新输入。ANSYS程序调用是通过菜单进行的。该菜单最初并未激活,但在输入三维数值模拟所需的参数后,得到消息激活菜单。这种设计的优点是:可以提醒用户输入并检查用于三维数值模拟的相关参数,避免用户不输入参数直接调用ANSYS进行计算,造成错误。
程序设计采用读写文件的方法,将输入的计算参数插入ANSYS计算模块,用APDL语言进行二次开发。ANSYS计算模块的参数化设计可以根据输入的参数进行数值模拟。
3 . 3 . 4 ANSYS后处理模块的二次开发
ANSYS软件提供了两个后处理器,可以对结果进行时间历程后处理。
和一般的后处理。对于相互作用体系的地震反应分析,可以将模拟结果以应力图、等值线(面)和动画的形式输出和转换。POST1通用后处理器,可用于观察整个模型或模型某一时刻的部分仿真结果,并可显示结构在地震作用下的应力图和位移变形图;时间历程后处理器POST26用于检查模型中指定点的分析结果与时间的函数关系,可以显示模型中各节点变量的时间历程曲线。所以对于大多数后处理分析,我们可以直接使用ANSYS的后处理器。但由于ANSYS是通用软件,对于一些特殊领域的后处理分析无能为力或不方便,需要进行二次开发,以减少后处理工作,提高后处理效率。
在相互作用体系的地震反应分析中,我们有时不仅要关注各物理量的时程曲线,还要关注其在结构高度方向上的分布(如层间位移、层间剪力、层间加速度反应等。).解决这个问题的二次开发需要结合相互作用体系的地震反应分析特点。
(1)物理量的分析
在地震反应时程分析中,我们关心的是楼层位移时程、加速度时程、柱应力应变时程、剪力墙应力应变时程,还需要分析楼层位移和楼层加速度的变化。考虑到本文会计算多种工况,本程序针对常见变量编写了后处理程序,具有通用性,大大提高了后处理效率。
(2)项目实施
基于以上分析,本程序通过接口程序调用ANSYS,读取编写的后处理命令流,读取ANSYS计算的结果数据库,生成各种变量的结果文件,然后利用本程序的后处理模块进行读取和绘图处理,生成结果图。这个过程是用VC编程实现的,VC编程的算法流程图如图3-2的后处理模块所示。(转贴)
我已经记下了你的序列号,等它被采用后我会帮你制作的。