hymacs 使用手册 - cas · (1)...

Post on 01-Oct-2020

39 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

HYMACS 使用手册

目录

HYMACS使用手册 ..................................................... 1

一、介绍........................................................ 2

1.1. 软件原理............................................... 2

1.2.关于软件................................................ 2

二、安装........................................................ 3

2.1.源代码构成.............................................. 3

2.2. Linux 下的编译 ......................................... 4

三、运行 HYMACS ................................................. 4

四、脚本文件.................................................... 5

4.1 脚本文件编写规则 ....................................... 5

4.2 脚本文件的内容 ......................................... 6

4.3 脚本文件示例 ........................................... 7

五、命令行参数.................................................. 9

六、测试....................................................... 10

6.1.可扩展性与正确性测试....................................... 10

6.2.CPU 性能测试 ............................................... 11

参考文献....................................................... 11

一、介绍

1.1. 软件原理

研究微纳材料力学行为,针对不同空间尺度,比较常用的数值计算方法有基于量子力

学的第一原理方法(First Principle,简称 FP)、分子动力学方法(Molecular Dynamics,简

称 MD)以及有限元方法(Finite Element Method,简称 FEM)。FP 方法考虑了电子、原子

核之间的相互作用,计算精度比较高,但它所能计算的体系只能达到几百个原子左右。MD

方法采用的是原子表象,通过经验势函数来刻画原子之间的相互作用。MD 方法通过差分

求解体系内所有原子的牛顿方程,能够模拟包括原子热运动在内的动力学过程。但 MD 方

法在空间和时间尺度上还不能完全满足微纳米尺度下相关力学问题的分析要求:从空间尺

度来讲,目前 MD 方法最大只能计算到一百纳米左右的体系;从时间尺度来看,MD 方法

模拟的时间尺度在皮秒或纳秒量级,这与通常的实验观测时间尺度相差甚远,这些局限性

使得 MD 方法的计算结果难以与实验结果直接相比。而 FEM 方法采用的是连续介质表象,

要求给出材料的本构关系,能计算微米或微米以上尺度的力学问题。但 FEM 方法不能刻

画材料内部微结构或原子构型的变化,也很难获得原子层次的物理信息。

针对传统计算方法的局限性,人们提出了多尺度计算方法。多尺度方法试图在同一模

拟中联合采用多种表象形式,例如联合采用连续介质和原子表象,甚至还可以联合基于量

子力学的原子核和电子相互作用。多尺度方法的出发点在于,使得在计算中对于变形比较

均匀的区域可以采用连续介质表象,而在需要考虑微结构变化的区域采用原子表象,这样

既可以节省计算量又可以获得原子层次的结构和物理信息,以此来有效地解决微纳米尺度

下的力学问题。

1.2.关于软件

HYMACS 代表 HYbrid Molecule And Cluster Simulation package 的缩写。HYMACS

是采用分子/集团耦合表象的一种微纳米力学多尺度计算程序,主要用于微纳米材料在有限

温度下的准静态力学行为计算。相比分子动力力学方法采用原子表象、有限元方法采用连

续介质表象,HYMACS 在同一个计算体系中,针对变形不均匀区域(例如:裂纹、位错等

区域) 采用原子表象,以获得对非均匀区微观结构信息;而对变形均匀区域采用集团表象

(准连续介质表象),以节约计算时间。HYMACS 通过采用耦合分子和集团表象的方式,

可以提高微纳米材料力学性能模拟的计算效率。理论上,HYMACS 以分子/集团统计热力

学多尺度计算框架( MST/CST)为基础。

HYMACS 是在中国科学院力学研究所非线性国家重点实验室( LNM) 的资助下开发

的。HYMACS 是一个开源软件,用户可以获得或直接修改 HYMACS 的源代码。LNM 和

HYMACS 的开发者不保证 HYMACS 程序包或其衍生程序是没有错误的,同时也不对

HYMACS 中错误引起的损失负责。

目前,HYMACS 的开发和维护者为:

Pan Xiao, xiaopan@lnm.imech.ac.cn

二、安装

2.1.源代码构成

HYMACS 采用 C++ 语言进行开发, 利用其面向对象语言的特点, 分别设计了不同的

程序模块, 以提高软件的通用性和扩展性。 在程序的设计中包含有以下几个重要模块 :

(1) 原子信息模块,主要负责对这原子数据信息进行存储及更新。

(2) 相邻原子模块,主要负责对原子的相邻链表的建立及更新。

(3) 自由能计算模块,主要负责组织调用各种势函数,遍历所有原子对,求解势函数的

各阶导数,完成 Helmholtz 自由能及其导数的计算。

(4) 极小化求解模块,主要负责完成自由能极小化的步骤,其中包括共轭梯度算法、一

维线搜索算法、 极小化过程的精度控制等。

(5) 控制模块。这一模块主要用于控制 HYMACS 的计算过程,如加载步的设置,以及

通过调整模拟体系的原子构型来施加位移载荷等等。

(6) 输入输出模块。 HYMACS 采用读入用户命令流的形式来控制计算过程。输入模块

则用于分析用户输入的命令并调用其它模块来执行,另外也用于读入体系的原子构型或恢

复文件。 而输出模块则用于输出 HYMACS 的运行信息、体系相关物理量的变化、 保存每

个加载步的体系平衡构型用于后处理, 以及生成续算文件等等。

(7)并行通信模块。在 HYMACS 并行程序中采用的是空间分解并行算法,其中涉及到

原子从一个计算单元迁移到另一个计算单元,这需要通过并行通信传递原子信息。另外,

在计算自由能及其导数时,每个计算单元除了完成自身内部原子之间相互作用的求解后,

还需要与邻近计算单元通信, 以补充相邻计算单元内原子与自身内部原子之间的相互作用。

在原子信息互换这一方面,MST 方法与 MD 方法是类似的,因此在 HYMACS 并行软件的

开发过程中,并行模块的设计中参考了 MD 计算软件 LAMMPS 的处理方法, 计算单元之

间的数据通信则采用的是 MPI 函数库。

在[hymacs]/src 目录下包含有 HYMACS 的源代码,其中 xlib 目录是为 HYMACS 开发

的通用函数库。hymacs 目录则包含实现 HYMACS 功能的源代码文件。

2.2. Linux 下的编译

1) 安装之前,确保系统已经安装有相应的 MPI 和 HDF5 库。

2) 转到目录 [hymacs]/build/linux。

3) 新建一个文件夹,命名为:Make_xxx( xxx 可以任意,表示当前编译的平台) 。

4) 任意选择当前目录下其它的以"Make_"开头的文件夹,将其中的 Makefile.*文件拷贝

到新建的 Make_xxx 文件夹。

5) 修改对应的 Makefile.hymacs 和 Makefile.xlib 文件,来设置当前编译环境的 MPI 和

HDF5 路径,推荐使用软件包里的 HDF5-1.8.18(经测试效果不错),也可使用系统

中其他版本的 HDF5(如系统已经安装 HDF5 可使用 “module load hdf5” 或相关命

令加载相应的库) 。

6) 转到目录 [hymacs]/build/linux,采用命令: make all dist=xxx 进行编译。

7) 若需要清理已生成的编译文件,可采用命令: make clean_all 。

8) Hymacs 的可执行文件将生成于[hymacs]/bin 目录之下。

三、运行 HYMACS

HYMACS 通过用户所给的命令来完成计算任务。有以下三种方法可以向 HYMACS 中输入

命令:

打开 HYMACS 之后,从屏幕中输入命令,这也是运行 HYMACS 后默认的方式

给定一个脚本文件让 HYMACS 去执行

用一个脚本文件做为 HYMACS 的启动参数,这通常用于提交并行任务

每一个命令对应于一个特定的设置或动作,对于一些比较重要的命令,HYMACS 会对执行

结果给出一些状态信息。若遇到错误,HYMACS 将给出相应的错误信息并且退出运行。

HYMACS 通常会将这些状态和错误信息输出到屏幕和日志文件。建议对每一个计算任务都

通过“input log”命令指定一个日志文件,这样便于跟踪 HYMACS 的运行状态和错误信息。

四、脚本文件

HYMACS 可以从屏幕或脚本文件中读入命令。但在批处理或并行计算环境中,一般采用脚

本文件来控制 HYMACS 的计算、输入输出过程。将脚本文件作为 HYMACS 的命令行参数

输入形式为:

hymacs filename.scp

hymacs -in filename.scp

或者可以在打开 HYMACS 之后,在窗口命令输入:

input filename.scp

4.1 脚本文件编写规则

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) 每个主命令和动作命令的参数可以用变量名代替。

4.2 脚本文件的内容

对于一个典型的 HYMACS 计算分析,在脚本文件中应该有以下几个命令段:

变量定义

定义脚本中需要用到的相关变量,可以包括数值型变量和字符型变量等。用于命令中需要

用到的参数或文件名设置。

输入输出设置

指定脚本文件,日志信息的输出形式等。

系统区域设置

设置计算盒子的空间形状和尺寸、盒子内包含的晶格类型和晶格常数、盒子内分子构型生

成区定义、盒子边界条件、并行计算 CPU 按盒子空间的分配等。

分子构型生成

设置分子类型、按晶格在给定区域内生成分子构型、设置原子类型、原子分组、原子质量

等信息。

网格生成

设置网格生成区域和大小,并指定网格的相关属性。

相互作用力设置

设置相互作用力的计算类型(势函数类型) 及相关参数、体系温度等。

求解器设置

HYMACS 的计算核心在于对势能/自由能的极小化,所以极小化的控制对计算结果的精度、

速度和收敛性都很重要。可以通过 solver 命令来设置极小化计算,包括对极小化方法的选

择、一维搜索方法的选择、搜索精度设定、极小化的原子和结点组的设定等。

运行控制

设置自由能极小化过程中,对体系原子的各种操作和计算。

4.3 脚本文件示例

下面是一个采用 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

五、命令行参数

当向并行机或远程计算机提交 HYMACS计算任务时,向 HYMACS传入命令行参数非常重要,

比如指定脚本文件。运行形式为:

hymacs [options]

HYMACS接收以下几个命令行参数:

filename : 如果只给定一个命令行参数,HYMACS将会把它视作一个脚本文件,启动

之后从中读取并执行命令。

-in filename : 向 HYMACS指定一个脚本文件。

-log filename : 向 HYMACS指定一个日志文件,用于输出状态和错误信息。

-title TitleString : 向 HYMACS指定运行任务名称,在脚本文件中可以采用

“${Title}”来得到对应的字符串,用于作相关输出文件的文件名等。

-var vName vValue : 向 HYMACS定义一个变量并赋值,这个变量可以在脚本文件中使

用。

六、测试

6.1.可扩展性与正确性测试

为了验证 HYMACS在不同计算规模下的正确性和计算性能,选取了“元”超级计算系统的二

期节点进行了验证:

“元”二期系统主要基于曙光 TC4600E刀片平台搭建,具体参数如下:

计算性能:双路刀片都采用 Intel Xeon E5-2680V3处理器(2.5GHz、12 核),单节

点 CPU计算能力 0.96Tflops;

内存配备:刀片节点配备 256GB内存;

互联网络:计算刀片、MIC计算节点、GPU计算节点、登陆节点、网络启动节点、远程

可视化节点、并行存储节点之间采用 100Gb EDR Infiniband高速交换网络互联。

在元二期上,分别测试了 Hymacs软件自带的各个算例,并对“hmcst3d_ten”算例做了不

同规模的对比测试。下表是对比测试的部分结果。

Processor

number

Solver

time(s)

Force

number

Solver time(s)/force Processor grid

24 761.679 29750 0.0256027 6 x 2 x 2

128 316.026 36670 0.00861811 8 x 4 x 4

1000 256.212 7228 0.0354472 25 x 5 x 8

1728 487.154 7006 0.0695338 27 x 8 x 8

4096 1226.73 6935 0.176889 32 x 8 x 16

8000 2005.09 5749 0.348772 50 x 10 x 16

从测试生成的 LOG 文件可以看出,在选取合适的进程三维网格结构后,HYMACS 单个作

业可以运行近万个 CPU 核心,并取得一致的计算结果。

6.2.CPU 性能测试

为了测试不同 CPU 族对 HYMACS 软件的性能影响,我们选取了目前有代表性的如下三种

CPU。测试环境采用了与正确性测试同样的系统,编译器均采用英特尔编译器。测试算例

选取软件自带的“mst3d_ten”算例。测试成绩如下:

处理器型号 微架构 主 频

(GHz)

最 大 睿 频

(GHz)

8 核运行时间

(s)

16 核运行时间

(s)

E5-2680 V2 Ivy Bridge 2.8 3.6 36.9877 22.7831

E5-2680 V3 Haswell 2.5 3.6 34.3528 20.7335

E5-2699 V4 Broadwell 2.2 3.6 22.1139 13.8941

从上表可以很明显的看到,Hymacs 软件性能 E5-2680 V3 下比在 E5-2680 V2 下运行

性能稍有提升,而使用更新架构 Broadwell 的 E5-2699 V4,性能有较大的提升。因此,目

前若大量运行 Hymacs 作业,建议采用 Broadwell 结构的 CPU 搭建计算系统。

参考文献

[1] 张泰华. 微/纳米力学测试技术及其应用. 北京: 机械工业出版社; 2004.

[2] Agrawal R, Peng B, Gdoutos EE, Espinosa HD.Elasticity Size Effects in ZnO Nanowires-A

CombinedExperimental-Computational Approach. Nano Lett.2008;8(11):3668-74.

[3] Chen CQ, Shi Y, Zhang YS, Zhu J, Yan YJ. SizeDependence of Young's Modulus in ZnO

Nanowires. Phys Rev Lett. 2006;96(7):075505.

[4] Chen H. Glassy metals. Reports on Progress in Physics. 1980;43:353.

[5] Dai L, Bai Y. Basic mechanical behaviors and mechanics of shear banding in BMGs. International

Journal of Impact Engineering. 2008;35(8):704-16.

[6] Liu LF, Dai LH, Bai YL, Wei BC, Eckert J. Behavior of multiple shear bands in Zr-based bulk

metallic glass.Materials Chemistry and Physics. 2005;93(1):174-7.

[7] Spaepen F. A microscopic mechanism for steady state inhomogeneous flow in metallic glasses.

Acta Metallurgica. 1977;25(4):407-15.

[8] Kohlhoff S, Gumbsch P, Fischmeister H. Crack propagation in b. c. c. crystals studied with a

combined finite-element and atomistic model. Philosophical Magazine Pt A Defects and Mechanical

Properties. 1991;64:851-78.

[9] Miller RE, Tadmor EB. The quasicontinuum method: Overview, applications and current directions.

Journal of Computer-Aided Materials Design. 2002;9(3):203-39.

[10] Tan H, Yang W. Atomistic/continuum simulation of interfacial fracture, Part I: Atomistic

simulation. Acta Mechanica Sinica. 1994;10(2):151.

[11] Tan H, Yang W. Atomistic/continuum simulation of interfacial fracture Part II:

Atomistic/dislocation/continuum simulation. Acta Mechanica Sinica.1994;10:237-49.

[12] Tang S, Hou TY, Liu WK. A mathematical framework of the bridging scale method. International

Journal for Numerical Methods in Engineering. 2006;65(10):1688-713.

[13]Wang HY, Hu M, Xia MF, Ke FJ, Bai YL.Molecular/cluster statistical thermodynamics methods to

simulate quasi-static deformations at finite temperature.International Journal of Solids and Structures.

2008;45(13):3918-33.

[14] Xiao P, Wang J, Ke F, Bai Y. Molecular statistical thermodynamics – a distinct and efficient

numerical approach to quasi-static analysis of nanomaterials at finite temperature. Composites Part B:

Engineering. 2011.

[15] 谭浩, 郑志军, 汪海英, 夏蒙棼, 柯孚久. 微纳米尺度下材料性能多尺度模拟方法进展. 力学进

展. 2011;2.

[16] 胡明. 纳-微米尺度力学的统计准连续方法和应用.北京: 中国科学院研究生院; 2006.

[17] Plimpton S. Fast Parallel Algorithms for ShortRange Molecular Dynamics. Journal of

ComputationalPhysics. 1995;117(1):1-19.

[18] Plimpton SJ, Hendrickson BA. Parallel molecular dynamics with the embedded atom method.

Citeseer;1993. p. 37-41.

[19] Plimpton S, Hendrickson B. A new parallel method for molecular dynamics simulation of

macromolecular systems. Journal of Computational Chemistry.1996;17(3):326-37.

[20] 袁亚湘, 孙文瑜. 最优化理论与方法. 北京: 科学出版社; 1997.

[21] http://lammps.sandia.gov/.

[22] Xiao P. Molecular Statistical Thermodynamics Simulator. Beijing, 2011.

[23] Tan H, Wang H, Xia M, Ke F, Bai Y. Self-adaptive molecule/cluster statistical thermodynamics

method for quasi-static deformation at finite temperature. Acta Mechanica Solida Sinica.

2011;24(1):92-100.

[24] Tan H, Wang HY, Xia MF, Ke FJ, Bai YL. Molecule Statistical Thermodynamics Simulation of

Nanoindentation of Single Crystal Copper with EAM Potential. Chinese Physics Letters.

2011;28:046201.

[25] Wang J, Xiao P, Zhou M, Wang Z, Ke F. Wurtziteto-tetragonal structure phase transformation and

size effect in ZnO nanorods. Journal of Applied Physics.2010;107(2):023512--7.

[26] Xiao P, Wang J, Ke F, Bai Y. Molecular statistical thermodynamics-a distinct and efficient

numerical approach to quasi-static analysis of nanomaterials at finite temperature. Composites Part B:

Engineering. 2011.

[27] Xiao P, Wang X, Wang J, Ke F, Zhou M, Bai Y. Surface transformation and inversion domain

boundaries in gallium nitride nanorods. Appl Phys Lett. 2009;95(21):211907-3.

top related