|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
小弟现用5.6 CFX做模拟,需要使用fortran导入外部的子程序。本人已经重复了Tutorial 9 Flow Through a Butterfly Valve
本人现在学习使用USER_GETVAR,为了简化,模拟了一直圆管,定义新变量求管内的压力梯度(尽管程序也会给出,但本人想要学会USER_GETVAR)
duct.F程序如下
#include "cfx5ext.h"
#include "stack_point.h"
dllexport(getpx)
SUBROUTINE Getpx (
& NLOC, NRET, NARG, RET, ARGS, CRESLT, CZ,DZ,IZ,LZ,RZ )
INTEGER NLOC,NARG,NRET
CHARACTER CRESLT*(*)
REAL ARGS(NLOC,NARG), RET(NLOC,NRET)
INTEGER IZ(*)
CHARACTER CZ(*)*(1)
DOUBLE PRECISION DZ(*)
LOGICAL LZ(*)
REAL RZ(*)
__stack_point__ pGrid_LSF
CALL SET_A_0( RET, NLOC*NRET )
CRESLT = 'GOOD'
CALL USER_GETVAR( 'lsf liquid.Pressure.Gradient', CRESLT,
& pGrid_LSF, CZ, DZ, IZ, LZ, RZ )
IF (CRESLT .NE. 'GOOD') THEN
CALL MESAGE( 'BUFF', 'error:')
CALL MESAGE('BUFF', CRESLT )
CALL MESAGE('BUFF-OUT', ' ')
RETURN
ENDIF
CALL USER_CALnx( RET(1,1), RZ(pGrid_LSF), NLOC)
END
SUBROUTINE USER_CALnx(nx, Grid_LSF,NLOC)
INTEGER NLOC
REAL nx(NLOC)
REAL Grid_LSF(3,NLOC)
INTEGER ILOC
DO ILOC = 1, NLOC
nx(ILOC)= Grid_LSF(1,ILOC)
ENDDO
END
在command editor中运行!system(“cfx5mkext duct.F”);定义USER Function 为Getpx,添加变量为upgx,在Domain中设置了upgx为Getpx(1) 程序正常运行后,报错如下:
Error detected at the end of the expression. Expression has wrong dimensions required units: m^-1 s^1, expression's units: kg^1 m^-2 s^-2. Error processing expression: Additional Variable Value = Getpx(1)
通过其他设置正常运行后,依旧报错如未能识别Getpx(1)中的1;通过设置常量a=1 a=x或 a=r等,均会在此处报错。
希望有过相关经验的大牛给给意见帮助!! |
|