本内容采用直接修改源码而非使用给定接口usr.f的方式进行,基于mfxi-20.3.1
省略了许多的调用关系,展示直接修改的部分
这里示例的输出数据为颗粒流化过程中受到的碰撞力、曳力、压力梯度力等,(如果想添加标量数据,可以参照des_radius)
首先了解颗粒变量相关文件:
颗粒很多全局变量的定义声明文件:discretelement_mod.f
颗粒相关数组分配内存: des_allocate_mod.f
颗粒数据初始化文件:des_init_arrays.f
包含DEM各种功能函数的文件:des_functions.f
流体和颗粒两相的相关数据分配和销毁内存:allocate_arrays.f
颗粒数据输出文件:vtp_mod.f
DEM模型的主要时间驱动程序为des_time_march.f,这里关注其子程序DES_TIME_STEP,单个时间步长内的颗粒数据计算
1.在discretelement_mod.f中定义保存颗粒数据的全局变量,可以仿照颗粒总受力FC的形式(如果想添加标量数据,可以参照des_radius)
2.在des_allocate_mod.f中为其分配和调整内存,同样是仿照颗粒总受力FC的形式(如果想添加标量数据,可以参照des_radius)
增大分配的内存
这里需要注意real_grow对应一维数组增长为new_size长度,real_grow2_reverse为二维数组的第一维度增长为new_size长度,real_grow2为二维数组的第二维度增长为new_size长度
3.des_init_arrays.f初始化为零
4.考虑之后的销毁,allocate_arrays.f,同样是仿照颗粒总受力FC的形式
5.由DES_TIME_STEP,计算颗粒受力FC,颗粒受力中先计算碰撞力,调用程序为calc_force_dem.f中的CALC_FORCE_DEM
紧跟cohesive force的初始化为0,添加碰撞力初始为0
将计算的碰撞力保存到数组中
这里需要将颗粒LL及其neighbor颗粒I的碰撞力都保存,否则会漏掉输出,因为一对neighbor不会重复计算,也就是两个颗粒的碰撞只计算一次,参考https://www.cnblogs.com/Jay-CFD/p/11934451.html
6. 计算颗粒间的碰撞力后是颗粒受到的曳力,DES_TIME_STEP调用calc_drag_des.f 文件子程序 CALC_DRAG_DES,该子程序可以计算气固曳力和固固曳力
气固曳力默认情况调用drag_gs_des1.f,该文件调用drag_gp_des.f 文件的des_drag_gp子程序,该子程序调用drag_gs.f中的子程序,求得设定曳力模型的该颗粒曳力系数F_GP。再计算曳力D_FORCE,同时也求得压力梯度力,将曳力和压力梯度力加入FC,得到新的FC;而在非默认的插值情况下(非默认只有DES_INTERP_GARG插值方式),也是调用des_gs_des0.f文件,求得曳力系数F_GP。
这里调用drag_gs_des1.f中的DRAG_GS_DES1进行曳力计算,且des_explicitly_coupled = False
在程序开头初始化
这里保存计算的颗粒曳力,同时保存A类模型下的压力梯度力
7. 将颗粒的受力输出 vtp_mod.f,输出为vtk格式文件,可有paraview打开
先在开头添加
使添加的数据可被找到
而后将这些数据绑定到Orientation进行输出,这样在用户输入文件中指定颗粒的Orientation输出,就会一起输出当然也可以不与Orientation绑定在一起
这样就可以输出一些比较基础的颗粒数据
原文:https://www.cnblogs.com/clwang/p/14603835.html