mfix输出自定义数据

更新:

之前提供的方法虽然没有什么问题,但是需要修改的代码太多,比较麻烦,后来又研究了一下,发现实际上数据自定义输出这一块是有现成接口的。

1)输出网格数据

参考https://www.cnblogs.com/Jay-CFD/p/10786299.html 这篇文章的方法二,利用 ReactionRates 这个变量来储存和输出。

2)输出颗粒数据

利用软件提供的user scalar tracking功能:

 

 

然后只要在需要输出的变量处,把变量保存到 DES_USR_VAR 中即可,例如,我这里要输出颗粒Y方向的加速度:

 

输出部分在:

 

这里一般不需要修改,可以看到,DES_USR_VAR(:,:)这个数组第一个元素代表第几种自定义DEM标量,第二个元素为颗粒编号。

重新编译运行就可以看到输出变量了:

 

------------------------------以下为原文---------------------------------

有时候需要输出一些自定义的网格或者DEM颗粒信息,比如输出颗粒的受力,这里举例颗粒自定义数据的输出。网格自定义输出方法类似。

 

首先用FileLocatorPro(网上很多绿色版),搜索一下代码里model文件下的关键字 PostCohesive,如下:

 

 

这个变量是专门用来存储颗粒粘性力,以供后处理用的,因此只需要仿照里面的代码添加就可以了。

 

下面安装顺序逐一添加代码。

上面代码是释放内存空间,对于可分配数组,使用完以后需要手动释放,需要使用的时候再为其分配空间。

 这里由于我要输出的是颗粒和壁面重合的值,这部分数据在calc_collision_wall_mod.f里计算得到,所以获取需要输出的数据这部分比较灵活,需要自己去找到对应的代码位置。

 并且这里需要注意一下,这里由于业务逻辑里,只有靠近壁面的颗粒才会计算重叠的值,其他颗粒在循环的时候直接跳过,所以最好在每次进入循环的开始先将内存区置零。

 

 

 这里先给颗粒信息分配内存,然后还得调用real_grow函数,因为颗粒数量有可能计算过程中增加。

 这里是交换颗粒信息,具体作用还没细看。

 在模块里定义可分配数组。当然这部分也可以在usr_mod.f里定义,只要记得在使用到的地方use一下就行了。

 将内存区置零。

 

 写出数据。

 写出数据。似乎对于DEM,定义了两个写出的函数,区别没仔细研究,都加上不会错。

 

最后重新cmake一下然后编译即可。有时候自己添加代码直接make会有些莫名奇妙的报错,重新cmake一下一般能解决。

 

最后的效果:

 

显示的是颗粒和壁面的重合的值。

 

对于网格数据,用类似的方法,搜一下VORTICITY这个关键字:

 

 

按照上面类似的方法操作即可。

posted @ 2019-04-04 20:24  JayYin  阅读(2027)  评论(11编辑  收藏  举报