24小时热门版块排行榜    

CyRhmU.jpeg
查看: 4080  |  回复: 0
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

bananaliu

木虫 (正式写手)

[求助] Fluent与Abaqus联合仿真计算的问题

小弟最近在编写Fluent和Abaqus的接口程序,打算实现串行算法下的(Gauss-Seidel algorithm)的流固耦合(FSI)。主要是通过UDF和Scheme配套Abaqus的Co-simulation Engine (CSE) 实现。目前工作进行到一半,碰到一些技术难题无法解决。
首先,我没有Mpcci的权限,没有权限无法发表论文,所以放弃。
碰到的问题就是,
1. 我不知道怎么实现Fluent计算过程中暂停,然后有条件(等待Abaqus CSE 传来固体计算获得的流域边界,应该是用define_on_demand & define_grid_motion实现我觉得)重启计算。比如流体总共要计算600s,每计算100s暂停,输出变量数据,等待网格更新信息,然后计算下100s。我想了一个权宜的办法,把600s分成6个任务,每个任务计算100s,采用如下命令循环:
CODE:
(define do-simulation        (lambda (a b)
                (if (<= a b)
                        (begin
                                ;;(rpsetvar 'Current_Time (* (/ Cosimu_time Num_exchange) (rpgetvar 'CurrNum_exchange)))
                                (display "\n1")
                                (%udf-on-demand "init::libudf")
                                ;;(ti-menu-load-string "/define/user-defined/execute-on-demand \"init::libudf\"")
                                (display "\n2")
                                (ti-menu-load-string (format #f "/solve/dual-time-iterate ~d ~d" Num_timestep Max_iter_per_timestep))
                          (set! a (+ a 1))
                          (rpsetvar 'CurrNum_exchange a)
                          (do-simulation a b)
                  )
                )
        )
)

就是两个任务之间不再进行初始化,可不知道这样计算和一次性计算600s效果是否相同。而且这个重启命令是在GUI情况下实现,类似于界面上点击calculate后再cancel一样,不知道能不能再dos命令状态下实现(即命令 fluent xxx.cas ....)。
2. 如果在外部程序(比如A.cpp)调用批处理文件(.scm),scm文件中又调用UDF,如何实现A文件和UDF文件共享变量?毕竟UDF是加载到Fluent运行环境中,而A是在外部直接运行。
有经验的同学能不能给点建议。多谢!
回复此楼

» 收录本帖的淘帖专辑推荐

流固热耦合

» 猜你喜欢

科研无止境,项目累死人。
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

智能机器人

Robot (super robot)

我们都爱小木虫

找到一些相关的精华帖子,希望有用哦~

科研从小木虫开始,人人为我,我为人人
相关版块跳转 我要订阅楼主 bananaliu 的主题更新
信息提示
请填处理意见