运行使用

介绍HYMACS在不同平台上的编译和安装

运行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的脚本文件和命令行有以下几个规则:

  1. HYMACS的每个命令占一行,可以通过“&”符号来继行,HYMACS一次只读入条命令,只有当前命令正确地执行完了,它才读入下一条命令。
  2. HYMACS的注释符号是“#”,所有出现在“#”后的字符都将视为注释。
  3. HYMACS包含以下几个主命令:input, output, box, molecule, cluster, field, solver, tool, user, hymacs, exit,每个主命令包含有一些动作命令(Action)和可选参数(Options),一般情况下,不同动作命令的执行和可选参数的设置是有顺序的。
  4. 命令的名称是大小写敏感的。主命令可以采用缩写形式,可取主命令的前几个字母(不少于3个)来代替主命令,例如:out、outp、outpu、都被视为output命令,但动作命令和可选参数不能支持缩写形式。
  5. 每个命令行需要以HYMACS的主命令作为开始,包含“=”号的变量赋值行除外。每个命令的各个参数之间通过空格符分开,一个主命令后可以跟多个动作命令和可选参数。
  6. 每个主命令和动作命令的参数可以用变量名代替(关于变量见下文的说明)。

脚本文件的内容

对于一个典型的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

反馈留言 💬