如何将ANSYS作为子程序调用Word格式文档下载.docx
- 文档编号:6417858
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:23
- 大小:30.03KB
如何将ANSYS作为子程序调用Word格式文档下载.docx
《如何将ANSYS作为子程序调用Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《如何将ANSYS作为子程序调用Word格式文档下载.docx(23页珍藏版)》请在冰点文库上搜索。
*dim,out1,,2,1
out1
(1)=dmax!
目标函数
out1
(2)=1-eymax!
约束条件1
*cfopen,opt,out
*vwrite,out1
(1),out1
(2)
(2f10.6)
*cfclos
在VC中相应的显示数据文件命令为:
result=system("
notepadopt.out"
);
图形文件(假设ANSYS工作文件名为test,输出jpg图形文件,具体信息请参考命令/show):
/SHOW,JPEG
JPEG,QUAL,75,
JPEG,ORIENT,HORIZ
JPEG,COLOR,2
JPEG,TMOD,1
/GFILE,600,
!
*
plns,uy
/SHOW,TERM
在VC中相应的显示图形文件命令为:
mspainttest001.jpg"
**************************************************************************************
VC调用ANSYS的示例程序。
//Test.cpp
#include"
stdio.h"
#include"
process.h"
voidmain()
{
intresult;
printf("
Solving..."
/ANSYS57/BIN/INTEL/ANSYS57-b-pansysul-itest.txt-otest.out"
//不用:
WinExec,就用不着等待语句,可以实现用FORTRAN调用一样的效果。
Solutionfinished..."
}
怎么还不知道?
那个特征表找着没有?
ANSYS帮助->
ANSYS,INC.LicensingGuide->
Licensefiles->
WhatareLicensefiles->
ProductfeatureTable
以第一行为例:
ANSYS/MULTIPHYSICSane3fl
ANSYS/MULTIPHYSICS是产品特征名称,ane3fl是与其对应的产品特征代码,把这个代码填到下面的语句中:
/ANSYS57/BIN/INTEL/ANSYS57-b-pane3fl-itest.txt-otest.out"
VC中的变量与APDL语言中的变量可以进行数据交换,否则怎么实现参数化或优化设计?
不过不能直接互换.我采用的办法是,在VC中将变量结果写到一个文件中,然后再在ANSYS的APDL语言文件中读入这个文件的数据,再由ANSYS进行新的计算,计算结束之后,再由后处理处理结果,并将结果数据输出到一个文件中,然后用VC读入此文件中的数据,进行下一步处理.
UIDL二次开发基本步骤初探
一、用户环境
1.ansys8.1:
自定义安装全部组件;
2.windowsxp:
;
3.editplusv2.12:
。
二、自建用户目录d:
\AnsysUser_UIDL
三、拷贝ansys8.1下列文件到用户目录
1.C:
\ProgramFiles\AnsysInc\v81\ANSYS\gui\en-us\UIDL\menulist81.ans;
2.C:
\ProgramFiles\AnsysInc\v81\ANSYS\gui\en-us\UIDL\UIMENU.GRN;
3.C:
\ProgramFiles\AnsysInc\v81\ANSYS\gui\en-us\UIDL\UIFUNC1.GRN;
4.C:
\ProgramFiles\AnsysInc\v81\ANSYS\gui\en-us\UIDL\UIFUNC2.GRN;
5.C:
\ProgramFiles\AnsysInc\v81\ANSYS\gui\en-us\UIDL\MECHTOOL.AUI;
6.C:
\ProgramFiles\AnsysInc\v81\ANSYS\gui\en-us\UIDL\UIMENU.EUI;
7.C:
\ProgramFiles\AnsysInc\v81\ANSYS\gui\en-us\UIDL\UIFUNC1.EUI;
8.C:
\ProgramFiles\AnsysInc\v81\ANSYS\gui\en-us\UIDL\UIFUNC2.EUI;
9.C:
\ProgramFiles\AnsysInc\v81\ANSYS\gui\en-us\UIDL\MECHTOOL.EUI。
四、用editplus编辑用户目录下的UIFUNC2.GRN文件
1.在文件的控制文件头之后添加用户自定义命令结构块(或称:
结构块结构/构筑模块);
2.保存文件,然后退出。
注:
自定义模块会在UIMENU.GRN文件中相应的菜单结构块中调用。
五、用editplus编辑用户目录下的UIMENU.GRN文件
1.在文件的控制文件头之后添加用户自定义菜单结构块;
2.在MenuRoot菜单结构块中添加用户自定义菜单结构块的相应链接;
3.删除行“:
XINDEXADDEDBYANSYS”以后的全部行;
4.保存文件,然后退出。
调用用户自定义命令结构块。
六、用editplus编辑用户目录下的menulist81.ans文件
1.将文件内C:
\ProgramFiles\AnsysInc\v81\ANSYS\gui\en-us\uidl\UIMENU.GRN
改写为d:
\AnsysUser_UIDL\UIMENU.GRN;
2.将文件内C:
\ProgramFiles\AnsysInc\v81\ANSYS\gui\en-us\uidl\UIFUNC1.GRN
\AnsysUser_UIDL\UIFUNC1.GRN;
3.将文件内C:
\ProgramFiles\AnsysInc\v81\ANSYS\gui\en-us\uidl\UIFUNC2.GRN
\AnsysUser_UIDL\UIFUNC2.GRN;
4.将文件内C:
\ProgramFiles\AnsysInc\v81\ANSYS\gui\en-us\uidl\MECHTOOL.AUI
\AnsysUser_UIDL\MECHTOOL.AUI;
5.保存文件,然后退出。
ANSYS首先读取menulist81.ans文件,然后根据menulist81.ans文件指向UIDL文件。
七、启动ANSYS
1.开始〉程序〉ANSYS8.1〉ConfigureANSYSProducts;
2.将WorkingDirectory改为:
用户目录d:
\AnsysUser_UIDL;
3.将JobName改为:
字母组成的有意义的短语;
4.点击Run启动ANSYS。
八、在ANSYSMainMenu中查看自定义菜单
ansys与VC++/Fortran程序的接口资料!
将ANSYS作为子程序调用
1.在VC中调用ANSYS
2.在FORTRAN中调用ANSYS
LOGICAL(4)result
)
3.说明
需要注意的是,在VC中调用ANSYS时,需要加一条判断语句,以确定ANSYS
在ANSYS中当然也可以以VC或FORTRAN作为子程序调用。
可以参看有关ANSYS二次开发方面的资料。
这个方法应该是与系统无关的。
ANSYS与FORTRAN的相互调用
基于ANSYS57和VisualFortran6.1先详细讲一下ANSYS调用FORTRAN的步骤:
1.首先,安装ANSYS时选择custom安装;
2.建立一个新的用户目录,如upf,把custom\user\intel目录下的anscust.bat,makefile和user01.f(当然也可以用你自己的fortran文件啦)这三个文件拷贝到upf下;
3.打开makefile文件,在第一行指定ANSYS的安装路径,如:
ANSYS57_DIR=d:
\ANSYS57保存退出;
对于ANSYS7.0:
ANSYS70_DIR=d:
\ansys7\v70\ANSYS
4.复制dfport.lib,dformd.lib,dfconcol.lib(这三个文件在fortran安装目录下的df98\lib目录中可以找到,注意不要用ANSYS自己所带的,因为ANSYS自己所带的版本可能不够高,而导致连接失败)和ansysex.def(在custom\user\intel中)到upf57目录中,以避免连接时找不到这几个文件;
5.准备工作已经完成,运行“anscust.bat”进行编译连接。
要确信你的VisualFortran与ANSYS版本的兼容性,如果编译连接不成功,出现诸如“Fatalerrorlink1120:
8unresolvedexternals”的错误,则表示你的Fortran版本需要升级。
如用Vfor6.1编译连接ansys7.0,就会出现这样的错误信息。
解决的方法是安装Vfor6.6B。
对于你自己写的FORTRAN程序,先用FORTRAN编译一遍,保证没有错误。
编译连接成功之后,在upf目录下会生成ansys.exe;
6.现在你就可以运行这个新的ANSYS了。
有两个方法:
第一个方法,就象“二次开发培训练习题”中所说:
在dos命令行,先敲入ansys-pansysul,指定ansys产品特征代码运行ansys,然后OK,接着/show,win32和/menu,on启动ANSYS;
第二个方法,干脆用新生成的ansys.exe代替ANSYS安装目录(如d:
\ansys57\bin\intel)中的原ansys.exe,建议将原ansys.exe改名或备份,然后就象你平常启动ANSYS那样(如用AnsysInteractive方式)启动ANSYS。
7.启动并进入ANSYS交互界面之后,在命令输入行输入命令usr1(或者用/ucdm定义为你指定的名称,如/ucmd,aaa,1)就实现了ANSYS对Fortran程序user01.f的调用。
二将ANSYS作为子程序调用
//Test.cpp
voidmain()
{
}
ANSYS基于VC++6.0的二次开发方法
ANSYS基于VC++6.0的二次开发与
相互作用分析在ANSYS中的实现
1概述
ANSYS是一套功能十分强大的有限元分析软件,能实现多场及多场耦合分析;
是实现前后处理、求解及多场分析统一数据库的一体化大型FEA软件;
支持异种、异构平台的网络浮动,在异种、异构平台上用户界面统一、数据文件全部兼容,强大的并行计算功能支持分布式并行及共享内存式并行。
该软件具有如下特点:
(1)完备的前处理功能
ANSYS不仅提供了强大的实体建模及网格划分工具,可以方便地构造数学模型,而且还专门设有用户所熟悉的一些大型通用有限元软件的数据接口(如MSC/NSSTRAN,ALGOR,ABAQUS等),并允许从这些程序中读取有限元模型数据,甚至材料特性和边界条件,完成ANSYS中的初步建模工作。
此外,ANSYS还具有近200种单元类型,这些丰富的单元特性能使用户方便而准确地构建出反映实际结构的仿真计算模型。
(2)强大的求解器
ANSYS提供了对各种物理场量的分析,是目前唯一能融结构、热、电磁、流体、声学等为一体的有限元软件。
除了常规的线性、非线性结构静力、动力分析外,还可以解决高度非线性结构的动力分析、结构非线性及非线性屈曲分析。
提供的多种求解器分别适用于不同的问题及不同的硬件配置。
(3)方便的后处理器
ANSYS的后处理分为通用后处理模块(POST1)和时间历程后处理模块(POST26)两部分。
后处理结果可能包括位移、温度、应力、应变、速度以及热流等,输出形式可以有图形显示和数据列表两种。
(4)多种实用的二次开发工具
ANSYS除了具有较为完善的分析功能外,同时还为用户进行二次开发提供了多种实用工具。
如宏(Marco)、参数设计语言(APDL)、用户界面设计语言(UIDL)及用户编程特性(UPFs),其中APDL(ANSYSParametricDesignLanguage)是一种非常类似于Fortran77的参数化设计解释性语言,其核心内容为宏、参数、循环命令和条件语句,可以通过建立参数化模型来自动完成一些通用性强的任务;
UIDL(UserInterfaceDesignLanguage)是ANSYS为用户提供专门进行程序界面设计的语言,允许用户改变ANSYS的图形用户界面(GUI)中的一些组项,提供了一种允许用户灵活使用、按个人喜好来组织设计ANSYS图形用户界面的强有力工具;
UPFs(UserProgrammableFeatures)提供了一套Fortran77函数和例程以扩展或修改程序的功能,该项技术充分显示了ANSYS的开放体系,用户不仅可以采用它将ANSYS程序剪裁成符合自己所需的任何组织形式(如可以定义一种新的材料,一个新的单元或者给出一种新的屈服准则),而且还可以编写自己的优化算法,通过将整个ANSYS作为一个子程序调用的方式实现。
鉴于上述特点,近几年来,ANSYS软件在国内外工程建设和科学研究中得到了广泛的应用。
但这些应用大多局限于直接运用ANSYS软件进行实际工程分析,对利用ANSYS提供的二次开发工具进行有限元软件设计却很少涉及。
本文首次利用ANSYS软件的二次开发功能,以VC++6.0为工具,运用APDL语言,对ANSYS进行二次开发,编制框筒结构-桩筏基础-土相互作用体系与地震反应分析程序。
2程序设计目标
针对某一实际工程问题,ANSYS所提供的APDL语言可对ANSYS软件进行封装。
APDL语言即ANSYS软件提供的参数化设计语言,它的全称是ANSYSParametricDesignLanguage。
使用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)程序代码应具有开放性和可重用性。
这样,在进一步的设计中,能保证设计者可以方便地对代码进行修改扩充;
同时,提供一定的设计接口,新的设计者可以根据接口,无须对程序进行大幅度的修改,就可以进行新的开发,以适应新的特殊要求。
程序的开发平台是MicrosoftVC++6.0、ANSYS6.1,基于WindowsXP编程。
程序实现是利用微软提供的Windows编程接口MFC和ANSYS公司的ANSYS/Multiphysics产品,采用面向对象的程序设计方法。
3程序的主要模块和设计
如图3-2所示,程序的主要模块有:
用户界面模块、ANSYS计算模块、VC调用接口模块和VC后处理模块,分别论述如下:
3.1ANSYS模块
ANSYS为了满足用户的特殊需求,建立了开放的体系结构,提供了二次开发接口APDL、UIDL和UPFs(UserProgrammingFeatures,用户编程特性)等。
其中,ANSYS接口允许用户将自己的VC代码连到ANSYS中去,或将ANSYS作为子程序调用,从而使ANSYS具备特殊的功能。
本文的ANSYS模块是使用APDL语言进行二次开发的。
在上面的二次开发中用到了参数化设计方法。
参数是APDL的变量(它们更象FORTRAN变量,而不像FORTRAN参数),不必明确声明参数类型,所有数值变量都以双精度数存储。
被使用但未声明的参数都被赋予接近0的“极小值”。
在二次开发中使用参数化设计方法,增强了程序的易读性和可移植性。
用户无须了解程序的具体结构只需改变参数值就可自动调用ANSYS模块。
3.2VC调用模块
VC调用模块在该系统中起着接受用户界面的输入、创建进程调用ANSYS模块进行计算的重要作用。
有两项工作是在实现在VC程序中调用ANSYS必须做的,一是要使接口程序能够修改ANSYSB的命令流文件路径及文件名称,这可通过注册表编程实现;
二是要能在接口程序中运行ANSYSB应用程序,这涉及到创建进程的编程,下面分别介绍它们的具体实现。
1.注册表编程
在Windows(98/NT/2000/XP)系统上运行ANSYS安装程序后,便在Windows系统的注册表里记录了一些信息,如初始工作路径,文件名等。
利用VC平台调用ANSYS计算模块的程序必须指定ANSYS软件的运行目录以及用APDL语言开发的ANSYS模块程序路径,这样,ANSYS软件的批处理程序才能从给定的路径下读取命令流文件。
在接口程序中修改这些注册表信息,可以使用Windows提供的注册表编辑API(ApplicationProgrammingInterface)函数[30,31],具体实现如下:
HKEYhSubKey;
//
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 如何 ANSYS 作为 子程序 调用