ABAQUS与FORTRAN论坛问题小结
Q:索了一下论坛发现以前的问题都是不同类型的子程序,如UEL, UMAT...这样把它们放在一个.for文件里不会有误会,但是如果都是UEL的话,该怎么识别呢?
A:subroutine Umat()
IF (CMNAME(1:4) .EQ. 'MAT1') THEN
CALL UMAT_MAT1(argument_list)
ELSE IF(CMNAME(1:4) .EQ. 'MAT2') THEN
CALL UMAT_MAT2(argument_list)
END IF
上面是区分不同umat的方法,区分uel应该类似吧
Q:行abaqus的时候出现这样的提示"Problem during compilation - df.exe not found in PATH."请问这是什么原因.
A: 就是说找不到用于编译的df.exe文件(好像是Fortran的编译运行文件),在Windows控制面板的“系统”里,打开高级属性,将系统的PATH添加上Fortran的路径,最好也一并把INCLUDE和LIB也都添加上对应的FORTRAN的路径。
Q: 如何在ABAQUS中调用用户子程序UMAT
A:abaqus job=*** user=*.for or *.obj
A: 装好fortran编译器的前提下,有两种方式:
1、命令行:abaqus job=*.inp user=*.for
或 abaqus job=*.inp user=*.obj (可以由*.f90编译后得到)
2、菜单格式:先运行CAE,在general设置中可以指定Umat用户子程序
A: job=jobname user=yourfortran.for(其它类型子程序)
A:如果是本构的二次开发:*material, user
Q: abaqus job=job-name user={source-file | object-file}source-file和object-file各是什么?
A: fortran的源文件(.for)或者目标文件(.o)在command下面输入以上命令行就可以正常运行. 用户子程序再调用别的fortran程序时,要加入abaqus 子程序中的include 'ABA_PARAM.INC'。
Q: 自己编写子程序需要哪些工作步骤
A: 1.建立工作
目录
工贸企业有限空间作业目录特种设备作业人员作业种类与目录特种设备作业人员目录1类医疗器械目录高值医用耗材参考目录
2.将abaqus安装目录\6.4-pr11\site下的aba_param_dp.inc 或 aba_param_sp.inc拷贝到工作目录,并改名为aba_param.inc ;
3.将编好的fortran程序拷贝到工作目录;
4.编译fortran程序,将.obj文件拷贝到工作目录;
5.建立好输入文件.inp;
6.运行abaqus job=inp file name user=fortan name即可。
我的要运行
abq64pr11 job=inp file name user=fortan name
我也学了没多久,按照这个过程成功了一个!你们试一下吧!
Q: 想用FORTRAN实现:
...
result = SYSTEMQQ('abq job=e:\abaqusexamples\beam interactive')
...
出错提示:
ABAQUS ERROR:Unable to create a temporary directory C:\DOCUME~1\ADMINI~1\LOCALS~1\
TEMP\Administrato_ e:\abaqusexamples\beam_3628 to be used for scratch files.ABAQUS/Analysis exited with errors.但如果是 result = SYSTEMQQ('abq job=beam interactive'),但需要在FORTRAN弹出的DOS窗口里手工输入文件的绝对路径则计算正常。但我的目的是实现Fortran程序对ABAQUS的计算程序的自动调用。
A: 说个投机的花招,有没有试过在前面加上result = SYSTEMQQ('path=e:/abaqusexamples')
这样的命令~~方法简单,不过能解决问题最好
A:把要算的工况都集中在一个文件夹下,fortran生成.exe文件,放在该文件夹下,然后双击运行。计算结束之后再把各种工况分类。笨招,但好用。
A: 我想,或者把systemQQ改一下,先cd e:\... ,然后再systemQQ(abaqus job=jobname interactive)。
Q: 偶想在FORTRAN里设定一个计时器,其功能就是每隔一段时间(如10s)就去读一次ABAQUS的(.fil)文件。哪个函数可以实现这个功能?怎么实现??
A: 通过一个while循环和下面的语句:call sleepqq(时间间隔)就可以了。
Q: 本人尝试使用ABAQUS的子程序SUBROUTINE,根据帮助文件需要编译通过生成*.for和*.lib文件,可是编译的时候出现错误:Error: Cannot open include file 'ABA_PARAM.INC'不知道是什么原因,怎么解决?
A: 1.确认Visual Fortran及VC++正确安装,并在安装ABAQUS之前安装。
2.首先将用户子程序*.f文件后缀名改为*.for。
3.到控制面板-》系统-》高级-》环境变量中的 Administrator用户变量:
修改—— 变量名:lib变量值:C:\Program Files\Microsoft Visual Studio\DF98\LIB;C:\Program Files\Microsoft Visual Studio\VC98\LIB (我的问题就是因为只加了一个LIB,必须两个都加!!)完成以上步骤以后,就可以运行了。
Q: 怎样把自己编写的子程序倒入到*.INP文件中。
A: Using the following command :
abaqus job=
job-id
As can be seen this is no different from running a standard abaqus job. The user subroutine itself can be embedded in the abaqus input file. Here it is illustrated with the umat subroutine.
<....part of the abaqus input file ....>
........
*END STEP
*USER SUBROUTINES
SUBROUTINE UMAT(........)
........
END
........
Alternatively the user subroutine can be in a separate file (say my_material.f) and the INPUT parameter is set to that file name.
<....part of the abaqus input file ....>
........
*USER SUBROUTINES, INPUT=my_material.f
........
Q: 用Fortran SYSTEMQQ函数作批处理遇到问题,在fortran中使用result = systemqq(abaqus job=job1 interactive)作批处理,总是在计算两个job之后就不继续往下算了,cmd明令行提示:run time error:floating-point...请问这是怎么回事?
A: 个方法就是做一个批处理文件,
abaqus job=beam interactive
abaqus job=beam1 interactive
abaqus job=beam2 interactive
abaqus job=beam n? interactive
存为.bat文件即可。python好像一般是做CAE前后处理界面的。
A:前面加call.
call abaqus job=1 interactive
call abaqus job=2 interactive
call abaqus job=3 interactive
Q:FORTRAN如何调用ABAQUS?
A: use the function "system" or "systemqq"
USE DFLIB
LOGICAL(4) result
result = SYSTEMQQ('abaqus job=xx')
QA: 首先我用ABAQUS的VARIFY命令对系统进行修正和检测,这个命令会自动运行,对ABAQUS进行调试等操作,其中涉及到对用户子程序的模拟计算,如果计算失败,就会在VARIFY.LOG文件中说明,确实发现"USER SUBROUTINE...和SINGLE...和DOUBLE..."失败,说明用户子程序安装不成功,肯定与VISUAL FORTRAN6.5有关!
然后,找到FORTRAN_MAKE文本文件,发现错误,可能是与FORTRAN安装有关!于是卸载FORTRAN,重新安装在C盘!安装完毕后,改变环境变量如下:
INCLUDE C:\Program Files\Microsoft Visual Studio\DF98\IMSL\INCLUDE;C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE;D:\程序文件\VC98\INCLUDE;
LIB C:\Program Files\Microsoft Visual Studio\DF98\IMSL\LIB;C:\Program Files\Microsoft Visual Studio\DF98\LIB;C:\Program Files\Microsoft Visual Studio\VC98\LIB;D:\程序文件\VC98\LIB;
PATH C:\Program Files\Microsoft Visual Studio\Common\Tools;D:\程序文件\VC98\BIN;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\KAV6;D:\程序文件\KV6;c:\program files\microsoft visual studio\df98\bin;c:\program files\microsoft visual studio\vc98\bin;c:\program files\microsoft visual studio\common\msdev98\bin;D:\ABAQUS\Commands;C:\Program Files\Microsoft Visual Studio\DF98\BIN
我们只需要关注MICROSOFT VISUAL STUDIO文件夹!
最后,再次执行VARIFY命令,等运行完毕后,检查VARIFY文本文件,发现: ABAQUS/Standard with User Subroutines
...PASS
Continuing...
ABAQUS/Explicit with User Subroutines (single precision)
...PASS
Continuing...
ABAQUS/Explicit with User Subroutines (double precision)
...PASS
Continuing...
OK!!!!!!!!!!!!!!!!!!搞定
Q: 因为ABAQUS是用PYTHON编写的, 那么我想要PYTHON 的原代码,因为我想 在其中加一个椭圆程序,不知可行么?(访问原代码问题)
A: 所有的PY都是差不多一样的,把ABAQUS的PY拿到MARC试试看
与别人分享是快乐的!godown整理于2005-9-1
荷
· 发新话题
· 发布悬赏
boseshow
· 发短消息
· 加为好友
boseshow 当前离线
UID
159927
帖子
157
精华
0
积分
21
积分
21
仿真币
257
阅读权限
30
性别
男
在线时间
164 小时
注册时间
2006-3-31
最后登录
2010-9-11
6级会员
INCLUDEPICTURE "http://forum.simwe.com/templates/simwe/images/star_level2.gif" \* MERGEFORMATINET
帖子
157
积分
21
仿真币
257
阅读权限
30
1#
打印
字体大小: tT
发表于 2006-11-15 04:03 | 只看该作者
多种方法实现变参数,变载荷
载荷, 参数
最近在学习Documentation时候,看到一个关于film的例子,大受启发。与大家分享,这几个方法不仅仅可以定义变化的heat transfer coefficient(下称HTC),sink temperature,同时也可以应用于变化的载荷。 O) c" h L# g# M/ L
* B% J& s+ Y+ e* D实例背景: 一物体放在水中或空气中冷却,冷却过程中,HTC是随sink temperature(就是周围水或者空气的温度)变化,同时sink temperature是时间的函数.# t+ u& j( I( c. K% i
关系为:
' j, j6 k0 X. w' o( b( d! P! wTemp=100(1+t/3600)4 d9 ~8 t, [! K/ K3 W1 M* e
h=10+0.02*Temp/ @) k: Z4 `0 h! B- p
1 E3 P, `8 j' B$ g
Where:# b* D% Z' i6 ]9 y1 p, K
t is the time of the quenching process0 o! K! W- }. |$ h
9 O7 }3 R$ S# f+ S) N8 F, K* s" q8 C- w( f6 V9 }
实现方法一:' F& N" @1 l2 K: g4 R0 w0 I4 x6 h
虽然他们是变量,但是都是线性变化,利用abaqus会进行线性插值的特点,直接修改inp文件就可以了。
2 ^. [% f. c! j& R! I4 n: c这里指给出material 部分的命令。( y2 O3 `2 l# W1 W4 W# F
*material, name=mat0 l6 M7 F! C, P1 H7 q" d
*conductiviey ... y! a# x* {" s/ | U# H
*sepcific heat ...& o1 m3 v' H3 `! b- t' ~6 ?
*density .....1 `: g6 _0 u+ P1 h
8 ~- l- s1 J& A r0 b
*film property, name=filmp **这个名字可以自己随便取,但是要和下面调用的一致。( |8 ~& u1 o a! {' r
10.0, 0.0
- q1 M5 k l s" G. }' |16.0,330.0 **巧妙实现h=10+0.02*Temp
6 d) A/ C7 @, @' q9 I! p* e*amplitude, name=sink **这个名字可以自己随便取,但是要和下面调用的一致。/ h. s1 j3 ~5 G+ U& v) f0 K
0.0, 100.0, 3600.0, 200.0 **巧妙实现Temp=100(1+t/3600)+ y! L! S% e7 m$ x8 X1 {
' k( p. ]* e: E& a定义好他们之间的关系,接下来在调用的时候就可以这写变化了
- O! \+ Q6 P3 G*film, amp=sink **调用上面定义的sink变量
5 [- n3 x( b x: |element #,face #,1.0,filmp **调用上面定义的filmp变量,另注意这里的1.0本来应该是amplitude 的,由于上面定义好了amplitude,这里直接写上1.0就行了。
! \0 D: F B7 k& O! T
% F+ D4 q, O( M0 _这样很巧妙的实现了上面那两个变量的值。
1
评分次数
· 赞同 积分 + 1 仿真币 + 5
aresaran
收藏 分享 评分
小狗与小鸟 ^_^
回复 引用
订阅 报告 道具 TOP
boseshow
· 发短消息
· 加为好友
boseshow 当前离线
UID
159927
帖子
157
精华
0
积分
21
积分
21
仿真币
257
阅读权限
30
性别
男
在线时间
164 小时
注册时间
2006-3-31
最后登录
2010-9-11
HYPERLINK "http://forum.simwe.com/space-uid-159927.html" \o "查看详细资料" \t "_blank"
6级会员
INCLUDEPICTURE "http://forum.simwe.com/templates/simwe/images/star_level2.gif" \* MERGEFORMATINET
帖子
157
积分
21
仿真币
257
阅读权限
30
2#
发表于 2006-11-15 04:13 | 只看该作者
实现方法二:/ h" y2 l, a4 s4 h: A8 I
' W3 S# x4 R) x
写sobroutine film。这里还可以实现更复杂,非线性的函数。
$ ` r$ p/ `5 q- V) Q+ L子程序如下:/ w3 G- w9 g, r: ]$ J
subroutine film(h,sink,temp,jstep,jinc,time,noel,npt,coords,
$ g& y1 a; T& g9 u2 i# N* y 1 jltyp, field, nfield, sname, jusernode,area)
# m, J' P5 g& d# Y1 Jc
" q1 L. ?% W6 e( g include 'aba_param.inc'* u& S9 p: W7 w2 i% d, f
c
) V& @; _8 t. F- Q! x+ n! l dimension coords(3),time(2),field(nfield),h(2)
- z" w) }- ?/ [: |- y6 H( ^" ?5 j0 N character*80 sname! m& ~! j9 X7 T2 d, M( t
c
" i8 L$ r: T! P h0 = 10.d0
$ z3 p7 i" {/ `- w* h1 P# }0 |( m, P h1 = 0.02d0
3 j" B$ y. W8 g h(1) = h0 + h1 * temp
" |0 l1 Q8 V6 Z h(2) = h1
/ ?' R" S# I$ t P6 wc
7 U, H D# a* o% a3 i sink = 100.0d0 * (1.d0 + time(1) / 3600.d0)
" U; f% t2 ~- R3 p3 qc
& F+ s+ ^- i1 E return! Z& Q& ^: a3 G3 }' p
end$ i4 F+ M; `0 N7 q2 B: t8 X
% K& W6 B) Q/ a3 {& c+ u
# L7 F2 p& C8 T' ^5 G/ j9 c Y7 F值得注意的是,inp中的film命令只需要提高前面两个参数) Q" c, k( p* Z" O4 P
*film,0 ?8 N) R0 u2 |' }: q+ t
element #, face #
; x6 P, v& L& P9 y6 h& g: u' J- s [: Z- _
[ 本帖最后由 boseshow 于 2006-11-15 04:37 编辑 ]
1
评分次数
· 感谢 积分 + 1 仿真币 + 10
aresaran
小狗与小鸟 ^_^
回复 引用
报告 道具 TOP
boseshow
· 发短消息
· 加为好友
boseshow 当前离线
UID
159927
帖子
157
精华
0
积分
21
积分
21
仿真币
257
阅读权限
30
性别
男
在线时间
164 小时
注册时间
2006-3-31
最后登录
2010-9-11
HYPERLINK "http://forum.simwe.com/space-uid-159927.html" \o "查看详细资料" \t "_blank"
6级会员
INCLUDEPICTURE "http://forum.simwe.com/templates/simwe/images/star_level2.gif" \* MERGEFORMATINET
帖子
157
积分
21
仿真币
257
阅读权限
30
3#
发表于 2006-11-15 04:24 | 只看该作者
实现方法三:
0 W, M4 i9 q: x
* b% x K o/ F& H% ~- o( Z写sobroutine ufield。这里也可以实现更复杂,非线性的函数。Ufield应用场合很广,实现方法也多种多样,这里紧紧给出一个可行的方法:
/ S7 n# z: I+ L5 a! H: m3 L6 F
9 w+ H) j' Q6 {" t: Y% L! s; j3 ]子程序如下:
, z: i9 \' |+ C N subroutine ufield(field,kfield,nsecpt,kstep,kinc,time,node,coords,
6 M; {- g n* V6 p8 Z/ t 1 temp,dtemp,nfield)) [( g7 T4 Y7 f1 c( R
c
/ L( x" l5 c+ n include 'aba_param.inc'
4 V/ a+ A) Y- q9 ]0 ^0 u- z+ wc/ j. K# U1 H6 O$ Y% M- O
dimension field(nsecpt,nfield),coords(3),time(2),temp(nsecpt),
( e5 s. {5 C5 O) y' h 1 dtemp(nsecpt)7 {- g/ x6 @+ P. f# K" f, \% b; O
c
8 h/ B- G0 h) ~' i8 w5 g field(1,1) = temp(1)
7 @" |6 H. w: M( ]c
. x% D3 F% h/ i' V) Z1 M return
1 m2 P1 X' B" v! }. C5 o `3 s q end; d$ j# r9 k9 b6 E
% E) {# F) q7 U
值得注意的是,inp中的相应命令为
: u }/ ^" n' k: \
4 S5 n$ X3 T6 }) W*film property,name=filmp,dep=1
" q0 F* T* k# O" K- m6 u10.0,, 0.0
4 v7 ~+ Q& L& S0 G16.0,,300.0, O6 N' X8 L+ `. G% u* ^! ]9 m7 Q
*amplitude,name=sink
6 M J( G/ N# W5 E- M, h( @. x0.0,100.0, 3600.0,200.0. N. h$ P0 l# P
* V* _- ^8 |6 U. [/ `. i6 P2 N2 n, G*sfilm,amp=sink
2 T) N% D/ P8 R s1, f, 1.0, filmp
' T' I, L2 u6 F7 `9 E8 d- `2 {. \4 \
/ |+ [0 _3 d, K) f# O*field,var=1,user
7 I* u& @! b) g7 E: Rtop,0.0
) ]' l6 @: o1 d: H2 P0 [( Y" C: y3 ^+ |
注意这里只是给出了和普通CAE下生成inp文件不通的地方,其他相同的省略掉了。
A) Q" m d6 {特别注意最后一个命令中的 user 选项,这是告诉ABAQUS,将会使用UFIELD来定义variables。7 {6 V/ o! E6 S
, K0 m" Q3 t- B% ]0 [2 n[ 本帖最后由 boseshow 于 2006-11-15 04:39 编辑 ]
1
评分次数
· 感谢 积分 + 1
aresaran
小狗与小鸟 ^_^
回复 引用
报告 道具 TOP
回复 引用
报告 道具 TOP
窗体顶端
窗体顶端