博客主机
A-A+

LIGGGHTS tips

2016年10月25日 离散元法 评论 7 条 阅读 396 次

QQ截图20170228141129

本篇介绍几个 LIGGGHTS 技巧,read_data,freeze,move,modify_timing,neigh_modify。

LIGGGHTS 中可以用 STL 格式的几何面来模拟复杂边界的问题。如果想用冻结粒子当作壁面,可以采用如下方法。

read_data test.dat
group Par_wall id <> 1 1000
fix fr Par_wall freeze

上述代码中,第一行是从外部文件中读取颗粒的信息;第二行是将ID在 1 到 1000 的粒子放到一个 group 里;第三行是将 Par_wall 这个 group 里的粒子冻结起来,具体的操作其实是将这些粒子的力归零,这样粒子将保持最初始的速度。如果将壁面粒子预先生成好,并将其初始速度设置为 0,便可以实现冻结粒子壁面了。

test.data 文件的数据格式如下,每一列数据的含义见注释:

 

LAMMPS data file via write_data, version Version LIGGGHTS-PUBLIC 3.2.0, git commit 
6de550fbf3b8451f51246aa3c76374012e935340 based on LAMMPS 23 Nov 2013, timestep = 0
## 第一行随便是什么

5 atoms  ## 颗粒数
1 atom types ## 颗粒的 type 数

## 模拟区域的大小
-5.0009999999999999e-01 5.0009999999999999e-01 xlo xhi
-2.0004000000000002e-01 2.0004000000000002e-01 ylo yhi
-2.0005500000000001e-01 3.4999999999999998e-01 zlo zhi

Atoms
#id type diameter density x y z i j k
1 1 2.9999999999999999e-02 2.5000000000000005e+03 -2.9626205235821884e-01 
-1.7191257603378007e-01 -5.2585560979625336e-02 0 0 0
2 1 2.9999999999999999e-02 2.5000000000000005e+03 -3.1357080694177836e-01 
-8.1292507237863978e-02 -3.0941241635135643e-02 0 0 0
3 1 2.9999999999999999e-02 2.5000000000000005e+03 -3.4986005571676082e-01 
-4.6564797686740017e-02 -5.0161637377833301e-02 0 0 0
4 1 2.9999999999999999e-02 2.5000000000000005e+03 -3.2901105748658366e-01 
1.1629149478965480e-01 -2.8537062345934828e-02 0 0 0
5 1 5.0000000000000003e-02 2.5000000000000000e+03 -3.9692279707164302e-01 
1.5000972515153915e-01 -3.5647118241865984e-02 0 0 0


Velocities ## 如果粒子的初始速度为零,这一段可以删去。
#id vx vy vz omegax omegay omegaz
1 -1.5290519507823870e+00 1.0245516532619933e-01 -1.1594445288149451e+00 
6.3791250045904881e+00 2.0674456758001139e+02 1.0276923966595568e+02
2 -2.1385398568904033e+00 -1.8858415304542153e-01 -9.4897293591801291e-01 
1.2732686070189061e+01 1.9114652955524940e+02 -4.8862922016708987e+00
3 -2.1931823490540205e+00 1.2314081721772643e-01 -1.1305039942880526e+00 
-7.7211996358126047e+00 1.8655504536271400e+02 -3.5674698533544941e+01
4 -2.3661710510727509e+00 6.5301832663338024e-03 -9.2367025774174294e-01 
-5.7926985652143115e-01 1.7594397127744105e+02 6.1151183183219171e+00
5 -2.6032940321288258e+00 1.7791968545582579e-01 -1.0893683893889663e+00 
-1.6450273309025711e+01 6.8599979334439681e+01 3.4617478295022179e+00

 

上述能实现静止的壁面,如果希望用粒子来实现运动壁面(比如旋转),则可以用 move 命令:

 

group rotateWall id <> 1001 2000 # 将 1001 <= id <= 2000 的粒子放到 group rotateWall 里
fix mov rotateWall move rotate -19.8 0 0 1 0 0 8

 

move 命令有不同的模式,这里用的是 rotate,用这个命令以后,rotateWall 这个 group 里的粒子,将按照指定的参数来进行旋转运动,而不再是根据其受力来更新速度和位置。参数的含义分别为:起始点坐标(x,y,z);旋转轴的指向(x,y,z);周期(转一圈的时间)。

最后再介绍几个小 tips:

  1. 有时候想知道程序中哪一部分耗时最多,并据此来优化程序,这时可以在输入脚本的最开头,添加一句 modify_timing on ,之后在程序运行结束后会统计出每一条 fix 命令的耗时信息。
  2. 上述提到的冻结粒子壁面,在使用中会有一个问题:壁面粒子之间的距离通常是很小的,在建立粒子碰撞对的时候,壁面粒子之间通常会形成碰撞对,但壁面粒子之间没必要建立碰撞对,如果壁面粒子很多,这个建立过程是很耗时的。这种情况下,可以通过修改 neigh_modify 命令的参数来防止壁面粒子之间建立碰撞对:

 

neigh_modify delay 0 exclude group  Par_wall Par_wall

 

这条命令将防止在 Par_wall 这个 group 里的粒子彼此之间建立碰撞对。

 

注:本文转载自:http://xiaopingqiu.github.io/2016/05/03/liggghts-howto/

标签:

7 条留言  访客:7 条  博主:0 条

  1. 一生一世套图

    三天不来手痒痒!

  2. 华夏九州套图

    我只是来随便看看!

  3. 广告任务网

    很不错的样子⊙0⊙

  4. 一生一世套图

    没玩过博客,来看看了!

  5. 增达网

    你的博客就像冬天里的一把火!

  6. 增达网

    今天办公室里几个男女在讨论用避孕套的好处和坏处,男方坚决抵制避孕套,女方大力支持使用避孕套,双方各持一词不分伯仲,这时我们办公室一个大姐问我平日用套套吗?我说:我……我…我都是包皮打个结。当时讨论就结束了。

    • 望天

      哈哈哈,你这方法高级!

给我留言

博客简介 | 广告合作 | 版权说明 | 网站地图
Copyright © 望天博客 保留所有权利.  Theme by Ality 蜀ICP备15004325号-2

用户登录

分享到: