运行使用
运行HYMACS
HYMACS通过用户所给的命令来完成计算任务。有以下三种方法可以向HYMACS中输入命令:
- 打开HYMACS之后,从屏幕中输入命令,这也是运行HYMACS后默认的方式
- 给定一个脚本文件让HYMACS去执行
- 用一个脚本文件做为HYMACS的启动参数,这通常用于提交并行任务
每一个命令对应于一个特定的设置或动作,对于一些比较重要的命令,HYMACS会对执行结果给出一些状态信息。若遇到错误,HYMACS将给出相应的错误信息并且退出运行。HYMACS通常会将这些状态和错误信息输出到屏幕和日志文件。建议对每一个计算任务都通过“input log”命令指定一个日志文件,这样便于跟踪HYMACS的运行状态和错误信息。
命令行参数
当向并行机或远程计算机提交HYMACS计算任务时,向HYMACS传入命令行参数非常重要,比如指定脚本文件。运行形式为:
hymacs [options]
HYMACS接收以下几个命令行参数:
filename
: 如果只给定一个命令行参数,HYMACS将会把它视作一个脚本文件,启动之后从中读取并执行命令。-in filename
: 向HYMACS指定一个脚本文件。-log filename
: 向HYMACS指定一个日志文件,用于输出状态和错误信息。-title TitleString
: 向HYMACS指定运行任务名称,在脚本文件中可以采用“${Title}”来得到对应的字符串,用于作相关输出文件的文件名等。-var vName vValue
: 向HYMACS定义一个变量并赋值,这个变量可以在脚本文件中使用,关于变量的定义规则,可见variable命令说明。
单位系统
在HYMACS程序和命令中默认采用以下的单位系统:
基本单位
物理量 | 单位值 |
---|---|
Length | L = 1.0e-10 m (Angstrom) |
Mass | M = 1.660538783e-27 kg (g/mol) |
Energy | E = 1.602176487e-19 J (eV) |
Time | T = 1.018050531e-14 s |
Charge | Q = 1.602176487e-19 c (e) |
Temperature | K = 1.0 Degree K |
Voltage | U = 1.0 Volt |
导出单位
物理量 | 单位值 |
---|---|
Velocity | V = L/T = 9.822695138e+03 m/s |
Force | F = E/L = 1.602176487e-09 N |
Pressure | P = $ F/L^2 $ = 1.602176487e+11 Pa |
E-field | X = U/L = 1.0e+10 Volt/m |
Frequency | Z = 1/T = 9.822695138e+13 Hz |
计算步概念
在HYMACS中有两个层次的计算步:加载步(step)以及极小化步或子步(substep)。加载步对应于一个物理的加载动作,如让体系整体拉长一点,或压缩体系到一定的应变大小。对于每一个加载步,还有多个用于自由能极小化的子步。有的命令需要通过给定这两个步的步数来决定什么时候在HYMACS程序中产生一定的“动作”。通常加载步是由用户设定的,视所计算问题的情况而定。而子步的步数是不确定的,它与当前的构型和极小化方法的设置都有关。
脚本文件
HYMACS可以从屏幕或脚本文件中读入命令。但在批处理或并行计算环境中,一般采用脚本文件来控制HYMACS的计算、输入输出过程。将脚本文件作为HYMACS的命令行参数输入形式为:
hymacs filename.scp
hymacs -in filename.scp
或者可以在打开HYMACS之后,在窗口命令输入:input filename.scp
脚本文件编写规则
HYMACS的脚本文件和命令行有以下几个规则:
- HYMACS的每个命令占一行,可以通过“&”符号来继行,HYMACS一次只读入条命令,只有当前命令正确地执行完了,它才读入下一条命令。
- HYMACS的注释符号是“#”,所有出现在“#”后的字符都将视为注释。
- HYMACS包含以下几个主命令:input, output, box, molecule, cluster, field, solver, tool, user, hymacs, exit,每个主命令包含有一些动作命令(Action)和可选参数(Options),一般情况下,不同动作命令的执行和可选参数的设置是有顺序的。
- 命令的名称是大小写敏感的。主命令可以采用缩写形式,可取主命令的前几个字母(不少于3个)来代替主命令,例如:out、outp、outpu、都被视为output命令,但动作命令和可选参数不能支持缩写形式。
- 每个命令行需要以HYMACS的主命令作为开始,包含“=”号的变量赋值行除外。每个命令的各个参数之间通过空格符分开,一个主命令后可以跟多个动作命令和可选参数。
- 每个主命令和动作命令的参数可以用变量名代替(关于变量见下文的说明)。
脚本文件的内容
对于一个典型的HYMACS计算分析,在脚本文件中应该有以下几个命令段:
- 变量定义
定义脚本中需要用到的相关变量,可以包括数值型变量和字符型变量等。用于命令中需要用到的参数或文件名设置,详见主命令:variable部分。
- 输入输出设置
指定脚本文件,日志信息的输出形式等,详见主命令:input, output部分。
- 系统区域设置
设置计算盒子的空间形状和尺寸、盒子内包含的晶格类型和晶格常数、盒子内分子构型生成区定义、盒子边界条件、并行计算CPU按盒子空间的分配等,详见主命令:box部分。
- 分子构型生成
设置分子类型、按晶格在给定区域内生成分子构型、设置原子类型、原子分组、原子质量等信息,详见主命令:molecule部分。
- 网格生成
设置网格生成区域和大小,并指定网格的相关属性。详见主命令:cluster部分。
- 相互作用力设置
设置相互作用力的计算类型(势函数类型)及相关参数、体系温度等,详见主命令:fields部分。
- 求解器设置
HYMACS的计算核心在于对势能/自由能的极小化,所以极小化的控制对计算结果的精度、速度和收敛性都很重要。可以通过solver命令来设置极小化计算,包括对极小化方法的选择、一维搜索方法的选择、搜索精度设定、极小化的原子和结点组的设定等,具体设置见主命令:solver部分。
- 运行控制
设置自由能极小化过程中,对体系原子的各种操作和计算,详见主命令:tool、hymacs部分。
脚本文件示例
下面是一个采用hmcst方法计算三维纳米压入过程的脚本。
# type of simulation
hymacs style hmcst
# output settings Definition
title = "${Script}"
input -echo both
output log ${title}.log -debug yes
# Modeling variables
cuUnit = 3.615
cUnit = 3.567
# substrate box
nx_subBox = 54
ny_subBox = 54
nz_subBox = 58
nz_depth = 10
# system box
nc_fix = 2
nx0_sysBox = -nx_subBox
nx1_sysBox = nx_subBox
ny0_sysBox = -ny_subBox
ny1_sysBox = ny_subBox
nz0_sysBox = -(nz_subBox + nc_fix)
nz1_sysBox = nz_depth + 1
# active atom box
nx0_actBox = nx0_sysBox + nc_fix
nx1_actBox = nx1_sysBox - nc_fix
ny0_actBox = ny0_sysBox + nc_fix
ny1_actBox = ny1_sysBox - nc_fix
nz0_actBox = nz0_sysBox + nc_fix
nz1_actBox = nz1_sysBox + 0.01
# tip box
coneAngle = 140.6 # 140.6 indenter bottom, in degree
coneHight = nz_depth + nc_fix
coreRadius = coneHight * tan(Pi*coneAngle/360)
# node box
nx0_nodeBox = nx0_sysBox - 0.01
nx1_nodeBox = nx1_sysBox + 0.01
ny0_nodeBox = ny0_sysBox - 0.01
ny1_nodeBox = ny1_sysBox + 0.01
nz0_nodeBox = nz0_sysBox - 0.01
nz1_nodeBox = -nc_fix - 0.01
# adaptive elements box
nc_elemFix = 8
nx0_adptBox = nx0_sysBox + nc_elemFix
nx1_adptBox = nx1_sysBox - nc_elemFix
ny0_adptBox = ny0_sysBox + nc_elemFix
ny1_adptBox = ny1_sysBox - nc_elemFix
nz0_adptBox = nz0_sysBox + nc_elemFix
nz1_adptBox = nz1_nodeBox + 0.01
# indentaion step
totalStep = 200
loadStep = 200
dzStep = nz_depth * cuUnit / totalStep
# Box settings
box -boundary s s s &
-dimension 3 &
lattice Cu fcc cuUnit &
lattice C diamond cUnit &
region sysBox block nx0_sysBox nx1_sysBox ny0_sysBox ny1_sysBox nz0_sysBox nz1_sysBox -lunit Cu &
region subBin block nx0_sysBox nx1_sysBox ny0_sysBox ny1_sysBox nz0_sysBox 0 -lunit Cu &
region actBin block nx0_actBox nx1_actBox ny0_actBox ny1_actBox nz0_actBox nz1_actBox -lunit Cu &
region tipBox cone 0 0 1 z coneHight 0 coreRadius -lunit Cu &
region slice1 block nx0_sysBox nx1_sysBox ny0_sysBox ny1_sysBox 0 nz1_sysBox -lunit Cu &
region tipBin intersect tipBox slice1 &
region meshBin block nx0_nodeBox nx1_nodeBox ny0_nodeBox ny1_nodeBox nz0_nodeBox nz1_nodeBox -lunit Cu &
region adptBin block nx0_adptBox nx1_adptBox ny0_adptBox ny1_adptBox nz0_adptBox nz1_adptBox -lunit Cu &
create 2 sysBox
# Molecule settings
mole -style basic &
create 1 subBin Cu &
set type 1 Mass 63.546 &
group subAtoms region subBin &
group actAtoms region actBin &
group fixAtoms subtract subAtoms actAtoms &
create 2 tipBin C &
set type 2 Mass 12.0107 &
group tipAtoms region tipBin
# Cluster settings
clust mesh region -x40 meshBin &
group node actNodes region actBin &
group node fixNodes subtract all actNodes &
group elem actElems region actBin &
write nodes ${title}_init.node &
write elements ${title}_init.ele
# Field and force parameters
field use morse &
use eam Cu.Mishin.mst.eam 1 Cu &
coeff eam 1 1 &
coeff morse 1 2 6.5 0.087 5.140 2.05 &
coeff morse 2 2 6.5 0.0 2.5550 2.5220
# Solver setting
solv -atoms actAtoms -nodes actNodes &
-style cg -lstyle quadratic &
-stopstyle fimax -ftol 1.0e-1
# Define complex variables
var dp @Reduce -mode min X[:][3] -group tipAtoms
var fz @Reduce -mode sum F[:][3] -group tipAtoms
# Tool setting
tool add recScreen Record 1 1 -var Ecur Gcur StopFlag LineAlpha dp fz ForceEval Time
tool add recFile Record 1 0 -var Ecur Gcur StopFlag LineAlpha dp fz ForceEval Time -flush yes -file ${title}.txt
tool add adaptive Adaptive 1 actElems element factor 4.0e-3 skin 6.0
tool add msx_hist Dump 1 0 -style msx ElemID Mask Ep -nodef yes -active yes -compress 6 -file ${title}
tool add indent MoveAtom 1 tipAtoms move 0.0 0.0 -dzStep
# Now run
hymacs run loadStep