HOOMD Blue 文档笔记

本文档笔记介绍了HOOMD Blue分子模拟软件的快速开始,包括创建系统、设置力场、积分器、运行模拟以及命令行参数。HOOMD Blue支持GPU计算,并提供了多种模拟选项,如Lennard-Jones力、不同积分模式和空间分解。通过MPI进行多GPU/CPU计算,还探讨了自动优化和脚本命令索引。
摘要由CSDN通过智能技术生成

HOOMD Blue文档笔记

基于hoomd 1.0.2 userdoc


3. 快速开始

例程:

from hoomd_script import *
# create 100 random particles of name A
init.create_random(N=100, phi_p=0.01, name=’A’)
# specify Lennard-Jones interactions between particle pairs
lj = pair.lj(r_cut=3.0)
lj.pair_coeff.set(’A’, ’A’, epsilon=1.0, sigma=1.0)
# integrate at constant temperature
all = group.all();
integrate.mode_standard(dt=0.005)
integrate.nvt(group=all, T=1.2, tau=0.5)
# run 10,000 time steps
run(10e3)

输出:


 (版权信息)

-----

(运行到的每一行代码)

starting run **

Time 00:00:00 | Step 10000 / 10000 | TPS 35417.9 | ETA 00:00:00 --每过10秒时间统计。已运行时间(时::秒),运行步长,平均每秒多少步,预计剩余时间。

Average TPS: 35405

---------

-- Neighborlist stats: --统计信息,此处只有neighbor list输出统计信息。不同脚本输出的统计信息不同。

370 normal updates / 100 forced updates / 0 dangerous updates

n_neigh_min: 0 / n_neigh_max: 10 / n_neigh_avg: 2.41

bins_min: 0 / bins_max: 6 / bins_avg: 1.5625

run complete **


每行代码的分析:

1.  每个hoomd脚本的第一行都需以

from hoomd_script import *

开头,导入hoomd库。例如init.creat_random()这样的过程都是在此库中定义的。


2. hoomd_script导入后,系统必须先初始化,此处为

init.create_random(N=100, phi_p=0.01, name=’A’)

表示创建了一个系统,包含100个名为’A’的粒子。phi_p表示填充率(Packing fraction)。

3. lj = pair.lj(r_cut=3.0) 表示创建一个截断半径为3.0LJ力,变量ljpair.lj的实例。

4. lj.pair_coeff.set(’A’’A’, epsilon=1.0, sigma=1.0)添加LJ力的参数:AA之间有ε=1.0,σ=3.0LJ力。

5.    all = group.all();

       integrate.mode_standard(dt=0.005)

       integrate.nvt(group=all, T=1.2, tau=0.5)

选择对力积分的模式,在一个步长下只能有一种积分模式。此处选择标准模式,步长设为0.005;为分组all指定使用恒温条件下的动力学方法(Nosé-Hoover thermostat),对所有粒子使用。温度T设为1.2,τ参数(Nosé-Hoover thermostat中的耦合常数)设为0.5

6. run(10e3) run命令启动模拟。在此示例中仅跑10000步,实际研究中的计算通常需消耗数天。一个脚本中不限制使用数个run命令,可在一个run完成后修改参数运行下一个run

Python中函数变量的传递通过键值对指定:name=value,实参的顺序是任意的。例如,源码中的表示:

init.create_random

( N,

phi_p,

name = "A",

min_dist = 1.0

)

N:创建的粒子数

phi_p:填充率(Packing fraction

name:为粒子类型指定名称

min_dist:初始化排布的粒子间最小距离

文档中国有=号的说明此参数有默认值,使用时可以省略;没有默认值的则不能省略。


4. 命令行参数


Ø  没有参数的情况下自动检测速度最快的GPU,没有GPU则以CPU运行。


Ø  -h , --help

显示所有命令行选项的帮助信息

Ø  -mode={gpu|cpu}GPUGPU模式运行。PS:注意,命令行参数可能需要加两个横线,比如以CPU运行test.hoomd的命令为 hoomd test.hoomd –mode=cpu

Ø  -gpu=# 指定以哪块GPU运行,此参数的存在意味着以GPU运行。

Ø  -ignore-display-gpu 不适用为屏幕显示工作的GPU做计算

Ø  -minimize-cpu-usage GPU上运行时减小CPU的占用率默认情况下CPU会占100%使用率,用此选项CPU占用率可显著减小至10%,但将有10%的效率下降。

Ø  -gpu_error_checking 打开每次调用GPU核的错误开关

Ø  -notice-level=# 指定通知等级

Ø  -msg-file=filename 将通知信息覆写至指定文件

Ø  -user 用户选项,在脚本中可通过option.get_user()获取用户选项。

Ø  MPI专用选项

-nx –ny –nz x,y,z方向上的分块

-linear 强制进行沿z方向的板坯(1D)分解

-nrank每个分块的行列数

-shared-msg-file=prefix 指定各部分输出消息的文件名的前缀

使用MPI选项运行程序,例如

mpirun -n 8 hoomd script.py # 2x2x2 domain

分解为2x2x2的小块

mpirun -n 4 hoomd script.py --linear# 1x1x4 domain

--linear选项作一维空间分解,在单个节点上运行时效率比三维空间分解高。

mpirun -n 12 hoomd script.py --nrank=3 #将体系分解为12块,在3GPU上运行


基本概念(Concepts)

6.1 单位量-units. 三个基本单位量:距离、能量、质量,其它物理量皆从此三个量导出。

“温度”T=kBT(实际),玻尔兹曼常数kB的具体数值取决于长度、能量与质量单位的量值。

6.2 周期性边界条件(Periodic boundary conditions) HOOMD模拟都在具周期性边界条件的三维盒子中进行。三斜的盒子有一些形状参数Lx,Ly,Lz,xy,yz,xz,参数可在xml文件中指定。也可以在脚本中指定,例如:

init.create_random_polymers(box=data.boxdim(L=18, xy=0.1, xz=0.2, yz=0.3),

polymeres=[polymer2],

separation=dict(A=0.35, B=0.35));

当然也可以使用二维盒子:

init.create_random(N=1000, box=data.boxdim(xy=1.0, volume=2000, dimensions=2), min_dist=1.0)

盒子大小在运行过程中也可以逐渐改变,使用update.box_resize方法。

integrate.nptintegrate.nph分别表示恒粒子数恒压恒温,及?


6.3 XML文件格式

体系的搭建通过xml文件指定。主要是 init.read_xml(初始化的输入文件 dump.xml(输出结果的文件。基本格式:

<?xml version="1.0" encoding="UTF-8"?>
<hoomd_xml version="1.5">
<!-- this is a comment, you can put as many of these in the file
wherever you wish to. -->
<configuration time_step="0" dimensions="3" vizsigma="1.5">
<!-- data nodes go here -->
</configuration>
</hoomd_xml>

诸如 time_step="0" configuration标记的一个属性。

time_step : 初始时的步长记数?

dimension : 指定维度,但并不会改变任何东西,例如速度和位置的信息仍然有三个元素。

vizsigma : VMD相关的一个参数。在init_read.xml中此项会被忽略。配置标记可包含如下属性,指定这些属性的顺序是任意的。


 box (盒子的形状参数)

       dump.xml写此信息;init_read.xml需要有此信息。

       Ex<box lx="5.1" ly="9.6" lz="15.8" xy="1" yz="0" lz="0">


 position (粒子的位置)

       dump.xml可选地写此信息;init_read.xml需要有此信息。

       Ex:指定每个粒子的xyz坐标。粒子的坐标必须在盒子之内。

       <position>
       -1.45 2.21 1.56
       8.76 1.02 5.60
       5.67 8.30 4.67
       </position>

       属性:(可选)num – 粒子的个数。


 image (Particle images)

       dump.xml可选地写此信息;init_read.xml非必须。

       周期性边界条件下的粒子坐标校正矢量。与position结合,格式与position相同。若有image属性,则粒子实际坐标按此换算:

       x0 = x + ix * Lx + xy * iy * Ly + xz * iz * Lz

       y0 = x + iy * Ly + yz * iz * Lz

       z0 = z + iz * Lz

x,y,zposition属性,ix,iy,izimage属性。


 velocity (Particle velocities)

       dump.xml可选地写此信息;init_read.xml非必须。

       粒子速度属性。格式与position同。


 acceleration (粒子加速度)

       dump.xml可选地写此信息;init_read.xml忽略此信息——因加速度是定量计算出来的。

       表示粒子的瞬时加速度。


 mass (粒子质量)

       dump.xml可选地写此信息;init_read.xml非必须(默认为1.0)。

       Ex

       <mass>
       1.0
       2.0
       1.0
       </mass>

•  diameter ( 粒子直径 )

       dump.xml可选地写此信息;init_read.xml非必须(默认为1.0

       格式同masses


 charge (粒子电荷)

       dump.xml可选地写此信息;init_read.xml非必须(默认为0.0

       格式同masses


 type (粒子类型)

       dump.xml可选地写此信息;init_read.xml需要有此信息

       指定每个粒子的类型,格式同massesEx

       <type>
       A
       long_type_name
       A
       </type>


 body (刚体)

       dump.xml可选地写此信息;init_read.xml非必须

       指定每个粒子所属的刚体(如果存在),格式同massesEx

       <body>

       -1

       0

       0

       </body>

       -1表示粒子不属于任何刚体。刚体编号从0到刚体数目减一。


 orientation (粒子方向)

       dump.xml可选地写此信息;init_read.xml非必须

       用四元数指定粒子的方向。Ex

       <orientation>

       1 0 0 0

       0.0333 -0.0667 0.1000 0.1333

       </orientation>


 moment_inertia (粒子的转动惯量)

       dump.xml可选地写此信息;init_read.xml非必须

       指定粒子的转动惯量,格式与position类似,对每个粒子由6个标量依次表示Ixx Ixy Ixz Iyy Iyz Izz. Ex

       <moment_inertia>

       1 0 0 2 0 3

       1 2 3 4 5 6

       </moment_inertia>


 bond (粒子间的键)

       dump.xml可选地写此信息;init_read.xml非必须

       Ex:以下标记表示在粒子01间连接类型为“polymer”的键;在12间连接类型为“backbone”的键。键的类型是任意非空字符串。

       <bond>

       polymer 0 1

       backbone 1 2

       </bond>

       单纯地指定键不会导致任何变化,需要在脚本中使用bond模块为各种类型的键指定键张力完成键的构建。


 angle (粒子间键角)

       dump.xml可选地写此信息;init_read.xml非必须

       Ex:以下标记表示在粒子0,1,2间添加类型为“A-B-A”的键角,在1,2,3间添加类型为B-A-A的键角。

       <angle>

       A-B-A 0 1 2

       B-A-A 1 2 3

       </angle>

       bond一样,单纯添加键角不会引入角张力,需要在脚本中使用angle模块为各种类型的键角指定角张力。


 dihedral (四个粒子之间的二面角)

       dump.xml可选地写此信息;init_read.xml非必须

       angle类似,需要另外使用dihedral模块添加扭转张力。Ex

       <dihedral>

       A-B-A-A 0 1 2 3

       B-A-A-C 1 2 3 4

       </dihedral>


 improper (Improper Dihedral Angles between four particles)

       dump.xml可选地写此信息;init_read.xml非必须

       dihedral类似,需要另外使用improper模块添加improper二面角张力。Ex

       <improper>

       A-B-A-A 0 1 2 3

       B-A-A-C 1 2 3 4

       </improper>


 wall (在盒子中添加壁板)

       dump.xml可选地写此信息;init_read.xml非必须

       同样地,在未使用wall.lj指定壁板的行为前,添加的wall不起任何作用。

       格式Ex

       <wall>

       <coord ox="1.0" oy="2.0" oz="3.0" nx="4.0" ny="5.0" nz="6.0"/>

       <coord ox="7.0" oy="8.0" oz="9.0" nx="10.0" ny="11.0" nz="-12.0"/>

       </wall>

       ox,oy,oz为平面上的一点的坐标;nx,ny,nz为平面的法向量。


6.4 基于MPI的空间分解

       HOOMD-BLUE支持多GPU/CPU计算,使用MPI实现。

       此章节有使用MPI时常见问题的解答。


6.5 Auto-runner

       HOOMD在运行时自动进行优化,前若干步明显慢于后续步长的原因在此。

       autorunner的可选参数:

              period:重新调整优化策略的周期。默认为100,000

              enabled:是否采用autorunner。如果在自适应阶段后关闭此开关,将不再重新调整优化策略,但此前的策略继续采用。默认为True


脚本命令索引

    Run

    Option

    Initialize

    Integrate

    Update

    Compute

    Analyze

    Dump

    Potentials

 Pair potentials

 Many-body potentials

 Bond potentials

 Angle potentials

 Dihedral potentials

 Improper potentials

 Electrostatic potentials

 Wall potentials

 Constraint forces

 External forces

 Other forces

    Helpers

 Group

 Variants

    Miscellaneous

 Tune

 Benchmark

 Communication helpers


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值