当前位置: 首页 > 分子模拟 >【讨论】开始进行lammps手册的学习啦,跟着Manual一边翻译一边模拟吧!

【讨论】开始进行lammps手册的学习啦,跟着Manual一边翻译一边模拟吧!

作者 御剑江湖
来源: 小木虫 950 19 举报帖子
+关注

一、各种文件的介绍:

1 in file:建立该文件以便程序的写入

2 log file:写入状态信息(if the switch is used?)

3 screen file  决定结果的是否进行屏幕输出

4 var name file 定义一个变量,name指变量名,可为字母也可为字符串,形式$x / $ {abc}



二、屏幕输出:

结果显示在屏幕上,同时在log file 中。开始前LAMMPS计算出所需的存储空间,运行中每隔几个时步显示一次热力学状态,直至输出最终状态。

Loop time of 49.002 on 2 procs for 2004 atoms     该部分显示了几个大类的计算时间

Pair time (%) = 35.0495 (71.5267)

Bond time (%) = 0.092046 (0.187841)

Kspce time (%) = 6.42073 (13.103)

Neigh time (%) = 2.73485 (5.5811)

Comm time (%) = 1.50291 (3.06703)

Outpt time (%) = 0.013799 (0.0281601)

Other time (%) = 2.13669 (4.36041)



Nlocal: 1002 ave, 1015 max, 989 min         每个处理器中特定原子的数目  

Histogram: 1 0 0 0 0 0 0 0 0 1              

Nghost: 8720 ave, 8724 max, 8716 min

Histogram: 1 0 0 0 0 0 0 0 0 1

Neighs: 354141 ave, 361422 max, 346860 min

Histogram: 1 0 0 0 0 0 0 0 0 1



Total # of neighbors = 708282   

Ave neighs/atom = 353.434

Ave special neighs/atom = 2.34032

Number of reneighborings = 42

Dangerous reneighborings = 2



当运用了能量最小化命令进行能量最小化时,还将出现如下所示语句:

Minimization stats:

E initial, next−to−last, final = −0.895962 −2.94193 −2.94342  (显示初终能量以及next-to-last 循环的能量)

Gradient 2−norm init/final= 1920.78 20.9992  (给出能量梯度,即所有原子的受力)

Gradient inf−norm init/final= 304.283 9.61216   2-form是力向量的长度,inf-form是最大构成?

Iterations = 36              循环次数                        

Force evaluations = 177    对力进行评定的次数



当程序中有kspace_style long−range Coulombics solve,将会显示以下语句:

FFT time (% of Kspce) = 0.200313 (8.34477)  完成3d FFT计算的时间及在总时间中占的百分比

FFT Gflps 3d 1d−only = 2.31074 9.19989     

每秒执行的浮点指令次数(flops)为5N*log(2N),N为3维晶体中的节点数

The 3d rate is with communication; the 1d rate iswithout (just the 1d FFTs).





在GPU(图形处理单元)上的运行





三、指令系统介绍(*)

一般来说指令的顺序并不重要,胆在以下几种情况中必须注意:

1         LAMMPS并不是全部读完所有指令才执行,而是读一行执行一次,因此下面的两组语句是不同的:

    timestep 0.5   以下的两个模拟其步长均为0.5 fmsec

    run 100

    run 100



    run 100         第一个模拟采用缺省值步长为1 fmsec

    timestep 0.5

    run 100         第二个采用步长为0.5 fmsec

2         某些指令只在其他指令之后才生效,如要得到系统温度必须先进行各种定义

3         若A指令在B之前,B可以引用A定义的变量



四、语法规则

  在LAMMPS中要区分大小写,一般指令名称用小写字母,文件及用户定义ID

Strings 用大写。



  LAMMPS对每行语句的语法要求如下:

1         当语句太长一行放不下时,在语句一行结束的时候输入字符 “” 表示下一行的语句接着上一行继续。

2         在#之后输入的字符认为是评论语句,是无用的,但有例外

3         紧跟在$后定义变量(之前讲过)

4         单词间用空格隔开

5         第一个词为指令名,接下来的字母全都为自变量(arguments)

6         If you want text with spaces to be treated as a single argument, it can be enclosed in double quotes



五、输入的语句结构



    一个普通的LAMMPS程序通常由以下四部分组成:

1 初始化

2 原子定义

3 设定

4 进行模拟



初始化阶段:设定所需参数,相关各项命令,引入所需的力场参数

相关命令介绍:

1  units command

语句形式:

units style

· style = lj or real or metal or si or cgs or electron

Examples:

units metal

units lj



该语句定义了单元类型,除了LJ类型,其他物理常量来自于某网,定义实际单元的热能=4.184J。

而在LJ类型中,所有变量都是无单位的(参考陈义龙的论文) 实际量换算成简化单位量有系列公式。

以下列出了换算关系及其它各种类型中所使用的标准单位。

This command cannot be used after the simulation box is defined by a read_data or create_box command.

缺省状态默认为LJ类型



2         语句形式:

    dimension N

· N = 2 or 3   例如:dimension 2

一般缺省为3d模拟,2d模拟的话要在建立simulation box之前进行设定(其余省略)



COMMANDS LISTED BY CATEGORY

以下列出的LAMMPS命令以按类分好,其分类情况如下:

初始化指令:atom_modify, atom_style, boundary, dimension, newton, processors, units

原子定义指令:create_atoms, create_box, lattice, read_data, read_restart, region, replicate

力场指令:angle_coeff, angle_style, bond_coeff, bond_style, dielectric, dihedral_coeff, dihedral_style, improper_coeff, improper_style, kspace_modify, kspace_style, pair_coeff, pair_modify, pair_style, pair_write, special_bonds

设定指令:communicate, dipole, group, mass, min_modify, min_style, neigh_modify, neighbor, reset_timestep, run_style, set, shape, timestep, velocity

FIXES  fix, fix_modify, unfix

Computes: compute, compute_modify, uncompute

Output:

dump, dump_modify, restart, thermo, thermo_modify, thermo_style, undump, write_restart

Actions:

delete_atoms, delete_bonds, displace_atoms, displace_box, minimize, prd, run, temper

Miscellaneous:

clear, echo, if, include, jump, label, log, next, print, shell, variable



六 how to discussions()

重启一个模拟。有3种方法继续长的LAMMPS程序。在同一个程序中可多次使用运行命令。每次运行都会接着上一条运行指令(run command)进行。Binary file  使用restart command将binary files存入硬盘中,之后用read-restart命令可将binary file读出。或者可转为text data files,经read-data命令读出。restart2data

    涉及到的命令:

1         run command

syntax

    run N keyword values……(N= # of timesteps; zero or more keyword/value pairs may be appended; keyword= upto or start or stop or pre or post or every)

Examples:

run 10000  # 运行10000步;N=0意味着直接把现系统的热力学值输出

run 1000000 upto  # 从当前开始一直运行至upto所指定的数值(该语句意为运行至10000000步止)

run 100 start 0 stop 1000

run 1000 pre no post yes

run 100000 start 0 stop 1000000 every 1000 "print Protein Rg = $r"

run 100000 every 1000 NULL



(补充说明 fix 指令:

Syntax:

fix ID group−ID style args

· ID = user−assigned name for the fix  ID是用户自己定义的名字,便于通过fix定义

· group−ID = ID of the group of atoms to apply the fix to

· style = one of a long list of possible style names (see below)

· args = arguments used by a particular style

Examples:

fix 1 all nve

fix 3 all nvt temp 300.0 300.0 0.01

fix mine top setforce 0.0 NULL 0.0

fix指令的用途是对一组原子进行定义,可以用于更新原子的位置、速度、控制温度、加常力、施加边界条件等。当两个或更多fix在同一过程中作用时,根据程序中的先后顺序执行fix指令。Fix指令可通过unfix指令来消除,形式为unfix fix-ID)



对于run 100 start 0 stop 1000 这个语句来说,主要与fix语句配合使用。

fix 1 all nvt 200.0 300.0 1.0     这两个指令的功能是在接下来的1000步运行中,每

run 1000                              步的温度都要从200度升到300度



fix 1 all nvt 200.0 300.0 1.0      对于左侧的一组指令,温度随着从0到10000步的执行

run 1000 start 0 stop 10000         逐渐升至300.0度,是一个发生在整个过程的渐变行为

run 1000 start 0 stop 10000

...

run 1000 start 0 stop 10000(共10个)



至于pre and post大概是这样的,pre no 的意思是跳过初始设定阶段,如果以下的计算是承接之前运行命令的话(意思是采用之前的参数)  但是如果该run指令是第一个指令是,该设定会被忽略。

注意:当两次运行指令之间使用了修改设定值的命令时(比如fix等),pre no是不允许的,必须重新设定,否则报错



若是post no,则跳过full timing summary, 输出one-line summary timing



Every 的作用是将一个run分成一系列较短的runs

variable q equal x[100]                  

run 6000 every 2000 "print Coord = $q"

每运行2000步输出一次某原子的x坐标值

Default:

The option defaults are start = the current timestep, stop = current timestep + N, pre = yes, and post = yes.   在run语句中的缺省值



2 restart command (将binary files存入硬盘)  restart文件是lammps的一种输出文件形式

Syntax:

restart 0          N = write a restart file every this many timesteps

restart N root    root = filename to which timestep # is appended

restart N file1 file file1,file2 = two full filenames, toggle between them when writing file



Examples:

restart 0

restart 1000 poly.restart

restart 1000 restart.*.equil

restart 10000 poly.%.1 poly.%.2



restart 0 意味着不输出restart files。与dump文件一样,restart不能包含两个wild card characters(即通配符)。若filename中含有*号,则它会被目前的值所代替(该情况只在仅有一个filename的情况下成立)


1         之后这些binary files可通过指令read-restart来读出



在此我们给出2条程序,用于读出binary restart file 或者是converted data file,之后发出一条新的运行指令,这条指令从上次运行结束的地方开始执行。这些阐释了在新程序中必须进行哪些设定。细节请参照之后对read-start和read-data命令的讲解。

   当程序中附有如下这行语句时:

restart 50 tmp.restart

    它在运行过程中会产生两个binary files,即tmp.restart.50和tmp.restart.100

该程序可以被用于读出第一个restart file以及重新运行最后50个步长。

read_restart tmp.restart.50

neighbor 0.4 bin

neigh_modify every 1 delay 1

fix 1 all nve

fix 2 all langevin 1.0 1.0 10.0 904297

timestep 0.012

run 50

    在此需指出以下这些指令不需再重复使用,因为在restart-file中已经进行了必要的设定,这样的指令包括:units, atom_style, special_bonds, pair_style, bond_style,但是必须使用如下的指令,因        为这些指令的参数并未在restart file中进行设定,这样的指令有 neighbor,fix,timestep.

如果你真的用该程序运行restarted run,你会注意到在第50步时与热力学数据相符(如果你在原程序中写入了thermo 50命令),但是在第100步时两者并不相符。这是因为fix langevin命令使用随机数的原因。

    除了上面提到的这个方法,还可用以下工具将restart file转换为data file:

restart2data tmp.restart.50 tmp.restart.data

    之后该程序可用于重新运行最后50步:

units lj

atom_style bond

pair_style lj/cut 1.12

pair_modify shift yes

bond_style fene

special_bonds 0.0 1.0 1.0

read_data tmp.restart.data

neighbor 0.4 bin

neigh_modify every 1 delay 1

fix 1 all nve

fix 2 all langevin 1.0 1.0 10.0 904297

timestep 0.012

reset_timestep 50

run 50

    需要注意的是几乎所有在最初的in.chain程序中进行的设定必须在被重新设定,除了pair-coeff与bond-coeff,因为新的data file列出了力场系数。另外,reset-timestep命令用于告知LAMMPS当前的工步,该值被储存在restart files中,不在data files中。

4.2 2d 模拟

运用dimmension命令定义一个2d模拟过程。

运用boundary 命令建立一个Z方向的周期性的长方体,这是缺省值。

如果使用create box来定义一个模拟的长方体,将z方向的尺寸设定为有限值,这样create-atoms命令可以可将长方体内的原子在z平面上平铺显示(即将三维原子显示在二维平面上)。

Create box 1 -10 10 -10 10 -0.25 0.25

如果使用read command命令来读出文件中的原子坐标,将“zlo zhi”的值设为finite but narrow,与create-box命令的设定类似。对于file中的每个原子,都为其确定一个z坐标值,这样一来便可确保其落在所设定的z方向的边界内。(该处如何为每个原子的z坐标赋值?)

在最终进行fix定义得时候使用fix enforce2d命令,以此来保证在每步执行完毕后能将速度、力等z方向的值清零。(用法:fix 5 all enforce2d,将速度、力等z方向的值清零的目的是保证在2d模拟中原子保持在其最初设定的z坐标值出不变)  将该fix作为最后一个fix命令的原因是将其它fix命令引起的力的变化均清零。

LAMMPS中给出的许多程序实例都是针对二维模拟的。

需要注意的是:LAMMPS中的一些模型将粒子看做延展的球体,而不是单纯得一个点。在二维模拟中,粒子仍被看做球体而不是盘状物,这意味着它们的惯性的处理与三维模型是相同的。

4.3 CHARMM and AMBER力场

AMBER力场主要适用于较小的蛋白质,核酸,多糖等生化分子,此力场的标准形式





CHARM力场,此力场可应用于研究许多分子系统,通常皆可得到与实验值相近的结构。该立场的的作用形式为:



有许多分子动力学的方法可以计算CHARMM与AMBER力场,其中只有部分能够用于LAMMPS。一个力场由两部分组成:一个是用于定义该力场的公式,另一个是用于特殊系统的参数(特殊系统值得是什么?)

这里我们只讨论应用于LAMMPS的公式。利用read-data指令或者在输入程序中利用pair-coeff或者bond-coeff在输入数据文件中进行系数的设定。后文对该类工具进行了详述,这些工具可用于CHARMM或是AMBER力场中用于力场系数的值以及将它们的输出值转换为LAMMPS的输入值。

    4.4 通过一个程序运行多个模拟

    这点可通过多种方式来实现,具体请看对于各个命令的程序说明书。

    如果说“多次模拟“意味着继续运行之前的某个模拟,那么你只需要多次使用run这个命令,例如以下的程序片段:

Units  lj

Atom-style atomic

Read-data data.lj

Run 10000

Run 10000

Run 10000

Run 10000

Run 10000

                     

    以上这段程序将会对同一个系统进行连续的50000步模拟。

    如果你想要一个接一个的运行完全不同的模拟,可在这些模拟之间使用clear命令以此来重新初始化LAMMPS,例如下面的一个程序段:

units lj

atom-style atomic

read-data data.lj

run 10000

clear

units lj

atom-style atomic

read-data data.lj.new

run 10000

以上这个程序段将顺序地运行两个完全独立的模拟。

对于多个独立的模拟而言,可以使用variables以及next 和jump命令多次循环运行同一个程序段,在运行过程中改变程序的设定值。例如以下这个程序段,以in.polymer命名

Variable d index run1 run2 run3 run4 run5 run6 run7 run8

Shell cd $d

Read-data data.polymer

Run 10000

Shell cd..

Clear

Next d

Jump in.polymer

以上这段程序将运行不同目录下的8个模拟,在每个目录中都运用了一个data.polymer文档。运用相同的概念可以对位于8个不同温度值条件下的系统进行模拟,只需运用一个温度变量并且将输出的结果储存在不同的log及dump文档中,例如:

Variable a loop 8

Variable t index 0.8 0.85 0.9 0.95 1.0 1.05 1.1 1.15

Log log.$a

Read-dat.polymer

Velocity all create $t 352839

Fix 1 all nvt $t $t 100.0

Dump 1 all atom 1000 dump.$a

Run 100000

Next t

Next a

Jump in.polymer

不论是在单个还是多个处理器中运行以上这些例子都是有效的,但是假定你在一个单一处理器的单一分区中运行LAMMPS软件,LAMMPS可以通过“-partition”命令在多个分区上运行。

    在最后两个例子中,如果LAMMPS在三个分区上运行,同样的程序仍然可以使用,只需把其中的index以及loop变量替换为universe-style变量,详情请参照variable命令的讲解。同时程序中的“next t” “next a”命令需要替换为”next a t”命令。有了这些限定,8个模拟便可一个接一个地在3个分区中运行直至全部运行结束。起初3个模拟在3个分区中同时开始运行,当一个分区中的运行结束时,第四个模拟便会接着运行,以此类推直至8个模拟全部完成。

    4.5 Parallel tempering(???)

    Temper 命令可以用于进行Parallel tempering或者是replica-exchange模拟,使用场合为同一个模拟在不同温度下运行于不同处理器且在不同对间使用蒙特卡洛温度转换法的场合下。

    具体的temper命令的用法:temper N M temp fix-ID seed1 seed2 index(在该语句中N表示总共要运行的步数,M指每经过M步就试着进行一次tempering(what’s this tempering?)

Temp指的是最初的温度值,fix-ID指的是在运行过程中控制温度的fix的ID,seed1是随机的(随机值?如何确定?)用于确定参与模拟的相邻的温度,seed2也是随机值,在Metropolis交换中用于充当波尔兹曼因数,index表示正在进行的模拟对应的温度值?)

示例:temper 100000 100 $t tempfix 0 58728

      Temper 40000 100 $t tempfix 0 32285 $w

    使用-procs及-in command-line switches在多个分区上进行LAMMPS的运行(在多分区上运行具体是什么意思?相当于并行处理否?)

    在输入的程序中进行一系列温度的设定,每个处理器都对应一个温度值,通过variable command来实现:

    Variable t world 300.0 310.0 320.0 330.0(在该语句中,t表示变量名,world表示为处理器的每个分区分配一次字符串,该指令具体执行什么操作)

    定义一个nvt或者langevin类型的fix,用以控制模拟的温度。

    Fix myfix all nvt $t $t 100.0(该语句为什么用到两个变量$t)

    在需要对温度值进行改变时,用temper命令代替本该使用run命令的地方,示例:

    Temper 100000 100 $t myfix 3847 58382 (该语句具体如何控制模拟中温度的改变?)

    4.6 颗粒状模型(granular models)

    组成颗粒状模型的是有一定直径的球状粒子而不是点状颗粒。这就意味着它们自身具有角速度,当给其施加一个力偶时会引起粒子的转动。

    进行粒状模型的模拟时,你会用到如下的命令:

    Atom-style granular

    Fix nve/sphere

    Fix gravity

    Compute erotate/sphere

计算所得的转动动能可以热力学数据的形式输出(以哪些参数为参考值?)

用以下三对势能可以计算出相互作用粒子间的力与力矩:

· pair_style gran/history

· pair_style gran/no_history

· pair_style gran/hertzian

以下列出的fix命令都是专门用于颗粒系统中的:

Fix freeze;fix pour;fix viscous;fix wall/gran

其中的fix freeze指令能够将被冻结原子的力与力矩都清零,代替在其他模型中所使用的fix setforce指令。为了提高计算效率,可以通过neigh-modify exclude指令忽略冻结原子两两间的计算。

    4.7 tip3p water model  (应该如何选取模拟所涉及的模型,具体应用?)

  在CHARMN中使用的TIP3P water 模型定义了一个3-site的刚性水分子以及水分子的三个原子各自所带的电量与LJ势能参数。在LAMMPS中fix shake命令可用来保持两个O-H键及H-O-H的键角,在此过程中还应使用harmonic类型的键及harmonic与charmm类型的键角。

    fix shake命令主要是用于在模拟中对特定的键及键角进行约束,每运行一个步长都将运用SHAKE算法将特定的化学键重新设定为平衡状态的长度,同时将特定键角设定为平衡值。具体实施过程为施加一个附加的力,由此原子便可保持为我们想要的状态。Fix shake 命令的使用方法如下:

     fix 1 sub shake 0.0001 20 10 b 4 19 a 3 5 2 (1是ID,sub为group ID,shake:fix command的类型名,tol:SHAKE解的精确度,iter:每个SHAKE解中的最大值?,N:每隔N个步长就输出一次SHAKE数据,可以附加多个key word,包括b,a,t,m)

    用cutoff 对刚性TIP3P-CHARMM模型进行模拟时还需对O及H原子进行以下参数的设定。如果需要柔性的TIP3P模型(不使用fix shake)则可以使用K值。如果HH与OH的LJ的ε及σ值被设定为0.0,则它与最初1983的TIP3P命令相一致。  

    以下省略对TIP3P长程库伦求解仪的参数设定。

4.8 TIP4P water model

  四点的TIP4P刚性水分子的模型通过增加一个位置对传统的三点的TIP3P模型进行的扩展,新增的该点无质量,在该点处放置一个与氧原子相关的电荷。这个记作M的点位于HOH键角角平分线上某点上,该点与氧原子的距离为一设定值。键及键角类型同TIP3P。

  目前通过LAMMPS pair style lj/cut/coul/long/tip4p仅能够建立长程库伦力的四点模型。未来可能会增加cutoff版本。对于两个模型,键长及键角都应用fix shake指令进行设定。

  以下仍省略设定时所需的附加参数,需要注意的是OM的距离在pair-style命令中进行了特别的设定,这与其他一些参数有所不同。

  4.9 SPC water model

  SPC模型定义了一个3点的刚性水分子模型,且对三个原子的电荷与LJ参数都进行了分配。在LAMMPS中fix shake命令可用于保持两个O-H键及H-O-H角的刚度。对其键型及键角类型的设定与之前相同。

  同样省略对SPC模型中O、H参数的具体描述。

  4.10 将LAMMPS与其它代码联系起来

  LAMMPS设计的目的就在于与其它代码配合使用。例如一段量子力学的代码可能将一小团原子的作用力计算出来后将其传达给LAMMPS。或者一个连续有限元模拟可能在FE节点处利用原子位置作为边界条件,并以此来计算一个有限元方程的解,并将插补力返还给MD原子。

  LAMMPS至少能够通过3种方法与其它代码配合。

(1)         定义一个新的fix命令用以调用其它代码。 在该方案中,LAMMPS是驱动代码。在运行过程中,fix 指令被调用,该指令可通过程序库调用其它代码,这些代码与LAMMPS相互联系形成程序

这便是POEMS package 在与LAMMPS相关的一组原子上施加受迫的刚体运动的方法。

   下面是fix poems命令的用法:

      fix ID group-ID poems keyword values

  其中keyword为group/molecule/file。将一个或更多组的原子看做相互关联的刚体,这意味着每执行一步便计算一次作用在刚体上的总的力与力矩,并对其坐标与速度进行更新。当模拟较大的生物分子时,可将其看做一组彼此关联、表面粗糙的刚体。由于该fix运用连续能量时间积分法对刚性原子的位置与速度进行了更新,因此不应再使用其它的fix指令对同样的原子进行更新,包括nve, nvt,   npt ,temp/rescale, langevin等。  对于group value,每个列出的group都被看做一个刚体,对于Molecule value,每组具有不同分子ID的原子被看做是刚体,对于file,原子组从指定的file中读出,每一组原子都被看作一个刚体来处理。



(2)         定义一个新的LAMMPS命令用来调用其它代码。该法在理念上与(1)类似,但在该法中LAMMPS与其它代码的地位更为平等。注意到此时不在LAMMPS运行的时步间调用代码,而是在run之间调用。LAMMPS输入程序能通过调用其它程序改变LAMMPS的运行,通过新的命令实现。Run命令通过其every选项来提供该项功能,这样便于运行几步程序就能调用命令。

    在该种情况下,另一个程序可被称作程序库,如同(1),或者它可作为一个独立的程序,通过命令进行系统调用。在后一种情况下课通过命令写出或读入的文件与LAMMPS进行交流。

(3)         将LAMMPS程序看作一个可被其它程序调用的程序库,在这种情况下其它程序为驱动程序,随时根据需要调用LAMMPS程序。或者一段包装函式程序可以联系与调用LAMMPS程序与其它程序,将其均作为程序库。在“this section”中讲述了如何将LAMMPS程序做成一个数据库。一旦完成了这步,你可以将C++,C或fortran语言与LAMMPS联系起来。例如通过C++你可以建立一个LAMMPS的“实例”,通过调用正确的类的方法令其运行一段程序,或执行独立的命令。利用C或者Fortran语言你可以通过函数调用实现相同的功能。Library.cpp/library.h便包含了具有这样的函数的C语言的实例:

       void lammps_open(int, char **, MPI_Comm, void **);

void lammps_close(void *);

void lammps_file(void *, char *);

char *lammps_command(void *, char *);

这些函数包含的C++程序可以在C++软件中编写,并可直接被LAMMPS调用。注意LAMMPS的类都在LAMMPS命名集中定义(LAMMPS-NS)

Library.cpp中有两条规则需要特别注意,lammps-open()函数对LAMMPS进行初始化并将MPI通信机作为一个自变量。  它向LAMMPS的“对象菜单”返回一个指针,与C++中相同,lammps-open()函数可以被多次调用,一次来建立LAMMPS的多个实例。

LAMMPS在通信及的一组处理器上运行,这意味着调用程序能够在全部或者一组处理机上运行LAMMPS。例如,一个包装函式可能需要在LAMMPS与另一种程序之间转换,以保证它们都能在全部处理机上运行。或者它能够将半数的处理器分配给LAMMPS而将另一半分配给其它的程序,之后同时运行这两个程序,并定时地进行同步化处理。(为什么要保证两程序同步运行?两程序又不相同)

  Library.cpp包含了一个lammps-command()函数,程序的调用者将单一的LAMMPS命令(一串字符串)传递给该函数。这样一来调用的程序便可以读出或产生一系列的LAMMPS命令,每次产生一行并通过程序库接口传递后建立一个Problem后运行该程序。

Library.cpp中海包含其它几个样本函数,但关键的思想是你可以随意写函数并定义一个接口,并通过该接口实现你所编写的程序与LAMMPS的对话,且将这些函数加入library.cpp与library.h中。你所增加的规则能够到达任何一个LAMMPS的数据。在examples/couple中列出了C++与C程序的例子,这些例子展示出了如何将一段独立的程序与LAMMPS联系起来形成一个程序库,在一组处理器上运行LAMMPS,从LAMMPS中获取数据,改变数据以及将改过的数据再送回LAMMPS中。 返回小木虫查看更多

今日热帖
  • 精华评论
  • thinkllh


    楼主好强啊,赶紧收下,学习了。

  • botar

    谢谢!

  • ly958

    正在学习lammps,楼主强大。

  • werkstoff

    兄弟,我看你别翻译了,真的浪费时间,我开始也想那么干过,发现全部看完博士都毕业了
    LAMMPS的手册就是个垃圾,好几个人写的,一个概念前后用字都不一样。
    我用了N年了,手册就是查查,找个高手问问才是真的, 看看例子结合自己想想,

  • rivercloudb

    赞一个,对初学者肯定很好,至少也是鼓励。

猜你喜欢
下载小木虫APP
与700万科研达人随时交流
  • 二维码
  • IOS
  • 安卓