ABAQUS中Fortran子程序调用方法—自己总结
- 格式:doc
- 大小:17.00 KB
- 文档页数:5
第一种方法:/ o/ J5 @6 U/ ^- o$ 1. 建立工作目录/ ]"2. 将Abaqus安装目录\6.4-pr11\site下的aba_param_dp.inc或aba_param_sp.inc拷贝到工作目录,并改名为aba_param.inc;# ~/ |0 I0 E6 {, @4 X3 q: W3. 将编译的fortran程序拷贝到工作目录;4. 将.obj文件拷贝到工作目录;5. 建立好输入文件.inp;6. 运行abaqusjob=inp_name user=fortran name即可。
第二种方法:在Job模块里,创建工作,在EditJob对话框中选择General选项卡,在Usersubroutine file中点击Select 按钮,从弹出对话框中选择你要调用的子程序文件(后缀为.for或.f)。
, D8 i7 d/r c6 @" |以下是网上摘录的资料,供参考:. |$ t/ }$W7 Y6 m4 h6 D6 j用户进行二次开发时,要在命令行窗口执行下面的命令:4 O. R+ ^,@( ? abaqus job=job_name user=sub_nameABAQUS会把用户的源程序编译成obj文件,然后临时生成一个静态库standardU.lib和动态库standardU.dll,还有其它一些临时文件,而它的主程序(如standard.exe和explicit.exe等)则没有任何改变,由此看来ABAQUS是通过加载上述2个库文件来实现对用户程序的连接,而一旦运行结束则删除所有的临时文件。
这种运行机制与ANSYS、LS-DYNA、marc等都不同。
: j6 g' R-o( {0 [* N2 J3 X这些生成的临时文件要到文件夹C:\Documentsand Settings\Administrator\Local Settings\Temp\中才能找到,这也是6楼所说的藏了一些工作吧,大家不妨试一下。
Fortran⼊门——函数调⽤当我的第⼀个Fortran程序 "Hello World" 诞⽣后,我的下⼀个⽬标便是写⼀个包含函数调⽤的程序,⾄于那些什么代码格式,数据类型,语法等等全部⾛马观花浏览⼀遍,既然需要速成,那么细节⽅⾯只能略过,将来有需要可以再补。
在VS中新建⼀个 Fortran-Console Application项⽬,选择默认的EmptyProject模板。
然后添加⼀个Source⽂件。
在新添加的Source⽂件中输⼊如下代码1 integer function Add(x,y)2implicit none3 integer ::x,y4 Add=x+y5 end function如上代码所⽰便是⼀个⾮常简单的Fortran函数,写成C#代码的话如下1int Add(int x,int y)2 {3return x+y;4 }可以看到在Fortran中代码块没有C#的⼤括号表⽰法。
interger function end 等关键字皆为⼩写。
在旧版本中,貌似必须⼤写。
在Fortran函数中,参数的数据类型在函数体中定义,如"integer ::x,y",函数的返回值则需要赋给函数的名称"Add=x+y",这点着实不太习惯。
函数有了,接下来该是调⽤了,再敲点代码吧1 program main2 integer:: x,y3 integer Add4 read *, x,y5 print *,Add(x,y)6 read *,x7 end在主程序中,需要声明Add函数的类型"integer Add",否则调⽤会失败。
可以看到,⼀个简单的函数调⽤程序,相⽐C#等语⾔,在语法格式上还是有不少区别的。
Abaqus运行子程序方法试了好几种调用子程序的方法最后总算找到了最简单的了,非常感谢仿真论坛上的网友的分享:首先需要装Microsoft Visual Studio(简写mvs),再装Intel Visual Fortran(IVF)。
通常的组合是Abaqus 可使用:MVS2008+ MVS2008+ 这二种组合最好都使用英文版的。
照着附录1 方法装一般没什么问题。
但是一般都是先装abaqus后才想到去装MVS以及IVF的。
很多时候都把MVS 以及 IVF装好以后才想到去验证的,而且MVS很多都是中文的,MVS不仅装的慢卸载残留也很多好麻烦。
搞了好久都验证不了,看了附录二的方法下面2个网友的回复后豁然开朗,一切都是那么简单。
附录二的方法的主要作用可能就是将VC++和Fortran的环境变量一并启动了,参考过以前版上的安装教程,通过在ABAQUS的快捷方式中添加命令,亦能够达到同样效果,同样也是不能通过verification,但是可以运行子程序,通过在ABAQUS CAE的快捷方式的目标中,添加"D:\Program Files (x86)\Intel\Compiler\Fortran\" && (跟附录1中的修改快捷方式的目标一样)达到了同样的效果(摘自ppengine,tcboywjr网友的回复)。
只需在搜索栏中搜索,再把路径添加上去照上面的形式修改便可。
本人用的是win7系统装的是(中文版)IVF11,abaqus好早就装了,装MVS2008之前装了mvs2010,发现2010不好装ivf,然后又卸了装mvs2008中文,验证时出现附录Ⅰ的情况,就C++项通不过还以为装C++2010就好了,又重装了一下mvs2010的C++(囧),发现还是用不了,校园网速太慢又不想下mvs2008(英文版),最后在附录2的方法下面发现了两位网友的分享非常感谢。
附录二的方法也试过好像运算完了会出错误,不知道什么原因。
第一种方法:在Job模块里,创建工作,在Edit Job对话框中选择General选项卡,在Usersubroutine file中点击Select按钮,从弹出对话框中选择你要调用的子程序文件(后缀为.for或.f)。
第二种方法:1. 建立工作目录?崠2. 将Abaqus安装目录\6.4-pr11\site下的aba_param_dp.inc 或aba_param_sp.inc 拷贝到工作目录,并改名为aba_param.inc;3. 将编译的fortran程序拷贝到工作目录;4.将.obj文件拷贝到工作目录;5. 建立好输入文件.inp;6. 运行abaqus job=inp_name user=fortran name即可。
以下是网上摘录的资料,供参考:用户进行二次开发时,要在命令行窗口执行下面的命令:abaqus job=job_name user=sub_nameABAQUS会把用户的源程序编译成obj文件,然后临时生成一个静态库standardU.lib和动态库standardU.dll,还有其它一些临时文件,而它的主程序(如standard.exe和explicit.exe等)则没有任何改变,由此看来ABAQUS是通过加载上述2个库文件来实现对用户程序的连接,而一旦运行结束则删除所有的临时文件。
这种运行机制与ANSYS、LS-DYNA、marc等都不同。
这些生成的临时文件要到文件夹C:\Documents and Settings\Administrator\Local Settings\Temp\中才能找到,这也是6楼所说的藏了一些工作吧,大家不妨试一下。
1子程序格式(程序后缀是.f; .f90; .for;.obj??)答:我试过,.for格是应该是不可以的,至少6.2和6.3版本应该是不行,其他的没用过,没有发言权。
在Abaqus中,运行abaqus j=jobname user=username时,默认的用户子程序后缀名是.for(.f,.f90应该都不行的,手册上也有讲过),只有在username.for文件没有找到的情况下,才会去搜索username.obj,如果两者都没有,就会报错误信息。
Abaqus焊接模拟—基于Fortran的移动热源子程序1 概述Abaqus的二次开发一般用Python,而Abaqus中应用到的子程序(包括材料和载荷等)用Fortran编写。
Abaqus的子程序接口比较多,在模拟焊接时对热源的描述只能采用子程序的方式进行加载。
2 热源焊接时的热源其实是比较复杂的,但是为了便于计算,比较常用的做法是将热源采用高斯函数的形式进行描述。
其形式如下,分别是直角坐标系下和极坐标系下。
这个方程的坐标值是基于热源中心的坐标,热源形式如图1所示:图1 热源分布3 建模(1)Part建立一个矩形平板如图2。
图2 Part(2)Property定义材料属性,热导率(Conductuvity),密度(Density),弹性模量(Elastic),膨胀系数(Expansion)、塑性参数(Plastic)、比热容(SpecificHeat)。
图3 Property(3)Assembly建立组件。
(4)Step焊接模拟如果只求温度场,那么就建立Heat Transfer载荷步,如果需要热应力,那么就需要建立耦合分析步,Couple temp-displacement 。
定义两个载荷步分别是焊接过程和冷却过程,同时打开大变形。
图4 Step根据需要设置Fieldoutput输出场数据和历史输出数据HistoryOutput.(5)Interaction平板的所有表面与外界存在对流传热,需要定义对流传热属性,对流传热系数Film condition,定义的时候还需要指定外界的温度。
图5 Interaction(6)Load焊接热源属于体热源,需要定义Body heat flux,热源只作用于第一个载荷步,体热源的作用对象是所有的体,不单单是焊接那一部分。
定义热源时选择用户自定义(User-defined),由子程序加载。
图 6 Heat flux然后施加约束。
再然后通过Predefined Field Manager管理器定义初始温度。
第一种方法:在Job模块里,创建工作,在Edit Job对话框中选择General选项卡,在User subroutine file中点击Select按钮,从弹出对话框中选择你要调用的子程序文件(后缀为.for 或.f)。
第二种方法:1. 建立工作目录2. 将Abaqus安装目录\\site下的或拷贝到工作目录,并改名为;3. 将编译的fortran程序拷贝到工作目录;4. 将.obj文件拷贝到工作目录;5. 建立好输入文件.inp;6. 运行abaqus job=inp_name user=fortran name即可。
以下是网上摘录的资料,供参考:用户进行二次开发时,要在命令行窗口执行下面的命令:abaqus job=job_name user=sub_nameABAQUS会把用户的源程序编译成obj文件,然后临时生成一个静态库和动态库,还有其它一些临时文件,而它的主程序(如和等)则没有任何改变,由此看来ABAQUS是通过加载上述2个库文件来实现对用户程序的连接,而一旦运行结束则删除所有的临时文件。
这种运行机制与ANSYS、LS-DYNA、marc等都不同。
这些生成的临时文件要到文件夹C:\Documents and Settings\Administrator\LocalSettings\Temp\中才能找到,这也是6楼所说的藏了一些工作吧,大家不妨试一下。
1 子程序格式(程序后缀是.f; .f90; .for;.obj)答:我试过,.for格是应该是不可以的,至少和版本应该是不行,其他的没用过,没有发言权。
在Abaqus中,运行abaqus j=jobname user=username时,默认的用户子程序后缀名是.for (.f,.f90应该都不行的,手册上也有讲过),只有在文件没有找到的情况下,才会去搜索,如果两者都没有,就会报错误信息。
如果username包括扩展名for或obj,那么就根据各自的扩展名ABAQUS会自动选择进行操作。
abaqus6.13+vs2012+IntelFortran2013 (abaqus6.13中Fortran编译器的配置)目前Abaqus的最新版本已经是 6.13-1,Intel Fortran编译器的最新版本也已经到了IntelParallel Studio XE 2013 Fortran Compiler, visual studio的版本也有2012了。
想要在Abaqus里用子程序,必须安装Intel Visual Fortran,而安装Intel Visual Fortran前需要安装Microsoft Visual Studio,做好相关设置后通过Abaqus Verification测试子程序以及其他Abaqus功能是否能正常使用。
一、ABAQUS 与Intel Fortran及Visual Studio的兼容性介绍:大家知道ABAUQS如果需要用User Subroutine必须有Intel Fortran,而Intel Fortran又必须在Visual Studio的环境下运行。
三者之间存在的两两兼容问题,必须引起注意。
目前用的比较多的配搭:Abaqus 6.9+VS2005+Intel Fortran 9.1/10.0/10.1Abaqus 6.10/6.11/6.12+VS2008+Intel Fortran 10.1Abaqus 6.13+VS2012+Intel Fortran XE2013(我所使用的)二、ABAQUS 、Intel Fortran、Visual Studio的安装顺序及安装方法:(1)、安装顺序:step1、安装visual studio(VS)(必须在Intel Fortran XE2013安装之前):一般而言安装VS没有任何难度,需要注意的一点是对于64位系统需要安装64位支持,而在有些版本中该模块是默认安装中没有选中的。
为了避免漏装可以在安装时选择完全安装(complete)。
第一种方法: 在Job模块里,创建工作,在Edit Job对话框中选择General选项卡,在User subroutine file中点击Select按钮,从弹出对话框中选择您要调用的子程序文件(后缀为、for或、f)。
第二种方法:1、建立工作目录2、将Abaqus安装目录\6、4-pr11\site下的aba_param_dp、inc 或aba_param_sp、inc拷贝到工作目录,并改名为aba_param、inc;3、将编译的fortran程序拷贝到工作目录;4、将、obj文件拷贝到工作目录;5、建立好输入文件、inp;6、运行abaqus job=inp_name user=fortran name即可。
以下就是网上摘录的资料,供参考:用户进行二次开发时,要在命令行窗口执行下面的命令:abaqus job=job_name user=sub_nameABAQUS会把用户的源程序编译成obj文件,然后临时生成一个静态库standardU、lib与动态库standardU、dll,还有其它一些临时文件,而它的主程序(如standard、exe与explicit、exe等)则没有任何改变,由此瞧来ABAQUS就是通过加载上述2个库文件来实现对用户程序的连接,而一旦运行结束则删除所有的临时文件。
这种运行机制与ANSYS、LS-DYNA、marc等都不同。
这些生成的临时文件要到文件夹C:\Documents and Settings\Administrator\Local Settings\Temp\中才能找到,这也就是6楼所说的藏了一些工作吧,大家不妨试一下。
1子程序格式(程序后缀就是、f; 、f90; 、for;、obj??)答:我试过,、for格就是应该就是不可以的,至少6、2与6、3版本应该就是不行,其她的没用过,没有发言权。
在Abaqus中,运行abaqus j=jobname user=username时,默认的用户子程序后缀名就是、for(、f,、f90应该都不行的,手册上也有讲过),只有在username、for文件没有找到的情况下,才会去搜索username、obj,如果两者都没有,就会报错误信息。
第一种方法:在Job模块里,创建工作,在Edit Job 对话框中选择General选项卡,在User subroutine file中点击Select按钮,从弹出对话框中选择你要调用的子程序文件(后缀为.for或.f)。
第二种方法:
1. 建立工作目录
2. 将Abaqus安装目录\6.4-pr11\site下的aba_param_dp.inc 或
aba_param_sp.inc拷贝到工作目录,并改名为aba_param.inc;
3. 将编译的fortran程序拷贝到工作目录;
4.将.obj文件拷贝到工作目录;
5. 建立好输入文件.inp;
6. 运行abaqus job=inp_name user=fortran name即可。
以下是网上摘录的资料,供参考:
用户进行二次开发时,要在命令行窗口执行下面的命令:
abaqus job=job_name user=sub_name
ABAQUS会把用户的源程序编译成obj文件,然后临时生成一个静态库standardU.lib和动态库standardU.dll,还有其它一些临时文件,而它的主程序(如standard.exe和explicit.exe等)则没有任何改变,由此看来ABAQUS是通过加载上述2个库文件来实现对用户程序的连接,而一旦运行结束则删除所有的临时文件。
这种运行机制与ANSYS、LS-DYNA、marc等都不同。
这些生成的临时文件要到文件夹C:\Documents and
Settings\Administrator\Local Settings\Temp\中才能找到,这也是6楼所说的藏了一些工作吧,大家不妨试一下。
1子程序格式(程序后缀是.f; .f90; .for;.obj??)
答:我试过,.for格是应该是不可以的,至少6.2和6.3版本应该是不行,其他的没用过,没有发言权。
在Abaqus中,运行abaqus j=jobname user=username时,默认的用户子程序后缀名是.for (.f,.f90应该都不行的,手册上也有讲过),只有在username.for文件没有找到的情况下,才会去搜索username.obj,如果两者都没有,就会报错误信息。
如果username包括扩展名for或obj,那么就根据各自的扩展名ABAQUS会自动选择进行操作。
2CAE中如何调用?Command下如何调用?
答:CAE中在creat job的job manager中的general中可以指定子程序;
Command下用命令:abaqus j=jobname user=userfilename(无后缀);
3若有多个子程序同时存在,如何处理
答:将其写在一个文件中即可,然后用一个总的子程序调用(具体参见手册)
4我对VF不是很熟,是否可以用VC,C++编写子程序?
A: 若要在vf中调试,那么应该根据需要把SITE文件夹中的
ABA_PARAM_DP.INC(双精度)或ABA_PARAM_SP.INC(单精度)拷到相应的位置,并改名为ABA_PARAM.INC即可。
据说6.4的将可以,6.3的你可以尝试着将VC,C++程序编译为obj文件,没试过。
在你的工作目录下应该已经存在ufield.obj和uvarm.obj这两个文件(这两个文件应该是你分别单独调试ufield.FOR和uvarm.FOR时自动编译生成的,你可以将他们删掉试试看),但是由于你的FOR文件中已经有了UV ARM和UFIELD这两个subroutine,显然会造成重复定义,请查实。
用户子程序的使用
假设你的输入文件为:a.inp b.for
那么在ABAQUS Command中的命令应该是这样的:
abaqus job=a user=b
对于abaqus64pr11,command 中输入:
abq64pr11 job=a user=b就可以了。
当然首先你要用cd 命令进入输入文件所在的当前文件目录。
强烈建议使用command来操作。
子程序文件名后缀应为.for,而不是.f
ABAQUS/CAE处理有两个程序:①内核程序;②GUI (graphical user interface—图形用户界面)程序。
内核程序实际上就是它的脚本语言,它采用的是Python语言,同时扩展了Python语言,额外提供了大约500个对象模型,对象模型之间的关系复杂。
GUI程序(图像用户界面程序)是一个方便用户输入或选择参数的图形用户接口。
ABAQUS/CAE是采用IPC协议来完成内核程序和GUI程序的通信的。
ABAQUS有限元程序通过集成Python语言向二次开发者提供了很多库函数,通过ABAQUS 脚本接口(ABAQUS Scripting Interface),Python语言调用这些库函数来增强ABAQUS的交互式操作功能。
它允许用户绕过ABAQUS/CAE的GUI(graphical user interfaces)直接与内核交互,可以大大提高工作效率或完成ABAQUS/CAE没有提供的功能。
但是因为它没有通过GUI,显的不那么直观,而且如想改变某些参数就不得不修改脚本程序,这些对一般用户来说就显的比较麻烦。
因此,对ABAQUS二次开发一般应先开发出GUI后,让用户输入或选择有关参数后,然后生成ABAQUS的脚本语言来自动处理。
ABAQUS的GUI是用ABAQUS GUI Toolkit来编写,它也是对FOX GUI Toolkit的拓展,它在编写程序时也是遵循Python语言的格式。
ABAQUS二次开发有如下几种途径:
①通过用户子程序可以开发新的模型,控制ABAQUS计算过程和计算结果;
②通过环境初始化文件可以改变ABAQUS的许多缺省设置;
③通过内核脚本可以实现前处理建模和后处理分析计算结果;
④通过GUI脚本可以创建新的图形用户界面和用户交互。
目前使用较多的是第1种方法和第3种方法。
仿真论坛上的帖子:
Abaqus中python的二次开发都是基于前后处理的(差不多就是和CAE进行交流的),要么直接利用Python生成自己需要的模型或者INP(前处理),要么就是利用Python从已有的*.odb 中高效地读取自己想要的数据(后处理)。
ABAQUS的自适应网格不改变网格的拓扑结构(单元和连接的关系),它结合了纯拉格朗日分析(网格随材料移动)和欧拉分析(网格位置固定,材料在网格中流动),被称为“任意拉格朗日-欧拉分析(ALE)”。
它通常比纯拉格朗日分析更高效、更精确和更稳定。