variable主命令
用户变量
HYMACS可以在脚本文件中定义用户变量,用于做一些初步的计算和设置。Variable命令主要用于在HYMACS脚本中定义、删除、更新用户变量。HYMACS的变量类型分为数值型和字符型两种。变量名只能是字母、数字或下划线的组合,每个变量名要以字母开头,变量名的长度没有限制,变量名是大小写敏感的。
数值型变量
-
数值型变量都是双精度型的,可以是标量、一维、二维数组。一维数组值采用[i]来取值,二维数组通过[i][j]来取值,其中i、j的取值从1到数组的大小。也可以采用通配取值符“:”来进行取值,例如,如果a是一个二维数组,则a[1][1]、a[1:5][2]、a[1][:]、a[2:5]都是正确的取值方式。
-
数值型变量可以进行数值运算,HYMACS支持的数值运算符有:+(加)、-(减)、*(乘)、/(除)、^(指数)、>(大于)、<(小于)、<=(小于等于)、>=(大于等于)、==(等于)。
-
HYMACS支持的数值运算函数有:sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh, log2, log10, log, ln, exp, sqrt, sign, rint, abs, min, max, sum, avg。
-
如果相互操作的是数组,要求数组的大小是相同的,但标量可以与任何大小的数组相互操作。
字符型变量
-
字符型变量采用双引号来定义,例如str = “Hello hymacs”。字符型变量也可以通过其它字符字符型变量或数值型变量进行定义。例如,如果定义str2 = “${str}, good variable”,则str2的值为:“Hello hymacs, good variable”;如果定义了数值变量b = 12.3,再定义字符变量:str3 = “b = ${b}”,则str3的值为:“b = 12.3”。
-
数值型变量也可以赋予字符型值,用于对变量的描述,例如:如果已定义c = 3.14,又定义:c = “This is Pi”,则c仍然为数值型的变量,但具有一个描述字符串,描述字符串可以通过“${&c}”获得。
HYMACS系统变量
为了便于计算和输出,HYMACS定义了一些系统变量,可在脚本文件中使用:
变量名 | 类型 | 维度 | 变量含义 |
---|---|---|---|
Pi | 数值 | 1 x 1 | 3.1415926 |
Unit | 数值 | 1024 x 1024 | 单位对称阵,用于生成不同大小的矩阵 |
Ones | 数值 | 1024 x 1024 | 由1组成的矩阵,用于生成不同大小的矩阵 |
Inf | 数值 | 1 x 1 | 无限大(实际上是一个很大的浮点数) |
Title | 字符 | 动态 | 项目名称(可更改) |
Script | 字符 | 动态 | 脚本文件名称 |
Time | 数值/字符 | 1 x 1 | 数值表示运行时间, 字符表示当前日期时间 |
Natom | 数值 | 1 x 1 | 体系原子总数 |
Ntype | 数值 | 1 x 1 | 体系类型总数 |
Tag | 数值 | N x 1 | 原子唯一标识号 |
Mask | 数值 | N x 1 | 原子分组掩码 |
X | 数值 | N x 3 | 原子位置 |
F | 数值 | N x 3 | 原子受力(势能导数) |
FD | 数值 | N x 3 | 原子受力(自由能导数) |
Type | 数值 | N x 1 | 原子类型 |
Q | 数值 | N x 1 | 原子荷电 |
Ep | 数值 | N x 1 | 原子的势能 |
Eh | 数值 | N x 1 | 原子的自由能 |
Mass | 数值 | Ntype x 1 | 不同类型的原子质量 |
Lx | 数值 | 1 x 1 | 体系x方向的长度 |
Ly | 数值 | 1 x 1 | 体系y方向的长度 |
Lz | 数值 | 1 x 1 | 体系z方向的长度 |
Lxy | 数值 | 1 x 1 | 体系的xy倾斜长度 |
Lxz | 数值 | 1 x 1 | 体系的xz倾斜长度 |
Lyz | 数值 | 1 x 1 | 体系的yz倾斜长度 |
BoxXmax | 数值 | 1 x 1 | 正六面体计算盒子在x方向的最大值 |
BoxXmin | 数值 | 1 x 1 | 正六面体计算盒子在x方向的最小值 |
BoxYmax | 数值 | 1 x 1 | 正六面体计算盒子在y方向的最大值 |
BoxYmin | 数值 | 1 x 1 | 正六面体计算盒子在y方向的最小值 |
BoxZmax | 数值 | 1 x 1 | 正六面体计算盒子在Z方向的最大值 |
BoxZmin | 数值 | 1 x 1 | 正六面体计算盒子在Z方向的最小值 |
TriXmin | 数值 | 1 x 1 | 斜六面体计算盒子在x方向的最小值,其它方向类似 |
TriXmax | 数值 | 1 x 1 | 斜六面体计算盒子在x方向的最大值,其它方向类似 |
Step | 数值 | 1 x 1 | 当前加载步 |
SubStep | 数值 | 1 x 1 | 当前加载子步 |
StopFlag | 数值 | 1 x 1 | 极小化终止标志 |
ForceEval | 数值 | 1 x 1 | 力的计算次数 |
Ecur | 数值 | 1 x 1 | 当前极小化能量值 |
Gcur | 数值 | 1 x 1 | 当前极小化梯度 |
Epot | 数值 | 1 x 1 | 当前体系势能 |
Ehelm | 数值 | 1 x 1 | 当前体系自由能 |
Pv | 数值 | 6 x 1 | 维里应力张量值 |
variable命令的使用
作用
设置和使用变量。
形式
variable a value
b @Reduce …
delete a b c
print a b c
s1 = “hello ${a}”
s2 = “hello ${&b}”
d = [1.1, 1.2; 2.1, 2.2]
h = { X[2][1] + Pi }
h = []
说明
-
variable a value
:定义一个变量a,其值为value,也可以通过“=”来定义,与a = value是相同的。 -
variable b @Reduce -mode [max|min|sum|aver] –group groupName –region regionName var1 var2 var3 …
:定义一个用户变量b,其值为var1, var2, var3的归约操作值。var1, var2, var3应当是原子信息数组,大小为N x 1。-mode选项决定了归约形式,即求最小值(max)、最大值(min)、求和(sum)或者求平均值(aver)。-group选项表示归约操作只对在groupName组的原子操作。-region选项表示归约操作只对在regionName区域的原子操作。 -
variable delete a b c
:删除a、b、c三个变量。 -
s1 = “hello ${a}”
: 设置字符串变量s1,并获得数值变量a的值变成字符串作为s1的一部分。 -
s2 = “hello ${&b}”
: 设置字符串变量s2,并获得数值变量b的描述字符串值作为s2的一部分。 -
d = [1.1, 1.2; 2.1, 2.2]
: 设置d为一2 x 2的矩阵,并赋值。 -
h = { X[2][1] + Pi }
: 设置h为表达式型变量,在后续的计算过程中,h的值会随着X[2][1]的变化而自动发生变化。如果去掉“{}”,则变量h一直保持为第一次赋值时的值不变。 -
h = []
: 删除变量h。
示例
var a1 sqrt(2)
a = 1.2 + a1
b = Ones[:3][:4]
b = "This is a test matrix"
c = a + b + sqrt(3)
d = [1.1, 1.2; 2.1, 2.2]
e = "Hello HYMACS"
f = "a = ${a}, c = [${c}]."
g = @Reduce –mode max X[:][1]
h = { X[2][1] + Pi }