找回密码
 注册
查看: 2332|回复: 1

求助!USER_GETVAR引用出错

[复制链接]
发表于 2012-4-9 09:58:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

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等,均会在此处报错。

希望有过相关经验的大牛给给意见帮助!!
 楼主| 发表于 2012-5-30 17:55:04 | 显示全部楼层
发现只有在调用压力梯度是才出错,应该是软件的bug,再后来发现把模拟的介质直接以原来的为模板,命名为sdl(self define liquid)调用出错的可能性就更小了……总算有了点经验
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表