更新:
之前提供的方法虽然没有什么问题,但是需要修改的代码太多,比较麻烦,后来又研究了一下,发现实际上数据自定义输出这一块是有现成接口的。
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这个关键字:
按照上面类似的方法操作即可。