前言:
现在各位老铁们对“c语言录入学生信息函数怎么写”大体比较关注,姐妹们都需要知道一些“c语言录入学生信息函数怎么写”的相关内容。那么小编同时在网上网罗了一些对于“c语言录入学生信息函数怎么写””的相关文章,希望各位老铁们能喜欢,小伙伴们快快来学习一下吧!Octopus是密度泛函理论(density-functional theory,DFT)和含时密度泛函理论(time-dependent density functional theory ,TDDFT)的一个免费但很专业的软件包。
Octopus以命令行方式运行,并且使用单个输入文件读取用户指令,以了解计算内容和计算方法。本文介绍如何编写该文件以及一般的格式是什么。Octopus解析器(parser)位于源代码的liboct_parser目录中,是一个基于bison和C语言编写的库。
输入文件
输入参数应该在Octopus的运行目录下一个名为inp的文件中。这是一个纯ASCII文本文件,要创建或编辑它,可以使用任何文本编辑器,如emacs,vi,jed,pico,gedit等。
在程序开始时,解析器读取输入文件,解析并生成将被Octopus读取的变量列表。有两种类型的变量:标量(字符串或数字)和块(可以将其视为矩阵)。
标量变量
标量变量可以通过以下方式定义:
var = exp
var可以包含任何字母数字加“_”,值可以是引号括起来的字符串、数字(整数、实数或复数)、变量名称或数学表达式。复数定义为{real,imag}。实数可以使用带有e或E的科学记数法(不能使用d或D),例如6.02e23。变量名称不区分大小写,并且不得重新定义先前定义的符号 - 尤其是保留变量x、y、z、r、w、t(在空间或时间相关表达式中使用,其中w是4D中的第4个空间坐标)。
数学表达式
解析器可以解释输入文件中的表达式,将结果分配给变量,或定义函数,例如species块中的势或TDFunctions块中的时间相关函数。参数可以是数字或其他变量。
算术运算符
运算符
说明
a+b
加法
a-b
减法
-a
一元减号
a*b
乘法
a/b
除法
a^b
幂
逻辑运算符
逻辑运算返回0表示假或返回1表示真。可以利用这一点来定义分段表达式,例如“2*(x <= 0)-3 * (x > 0)”(尽管也可以使用step函数)。比较运算符(==除外)仅使用复数的实部。
运算符
说明
a < b
小于
a <= b
小于或等于(≤)
a > b
大于
a >= b
大于或等于(≥)
a == b
等于
a && b
逻辑和
a || b
逻辑或
!a
逻辑非
函数
sqrt(x):x的平方根exp(x):x的指数log(x)或ln(x):x的自然对数log10(x):x以10为底的对数logb(x, b):x以b为底的对数{x, y} 复数arg(z):复数z的幅角,-π<arg(z)<=πabs(z):复数z的模,|z|abs2(z):复数z的模方,|z|2logabs(z):复数z模的自然对数,log|z|conjg(z):复数z的复共轭,z*=x-iyinv(z):复数z的倒数sin(x), cos(x),tan(x),cot(x),sec(x),csc(x):正弦、余弦、正切、余切、正割和余割asin(x),acos(x),atan(x),acot(x),asec(x),acsc(x):反正弦、余弦、切线、余切、割线和余割atan2(x,y):=atan(y/x)sinh(x),cosh(x),tanh(x),coth(x),sech(x),csch(x):双曲正弦、余弦、切线、余切线、割线和余割asinh(x),acosh(x),atanh(x),acoth(x), asech(x), acsch(x):反双曲正弦、余弦、切线、余切、割线和余割min(x, y):x和y的最小值max(x, y) :x和y的最大值step(x):单位阶跃函数,可用于分段定义的函数erf(x):误差函数realpart(z):复数z的实部imagpart(z):复数z的虚部floor(x):小于实数x的最大整数ceiling(x):大于实数x的最小整数预定义变量
为方便起见,有一些预定义的常量:
名称
说明
pi
3.141592653589793
e
自然对数的底数
false
假
true
真
i
虚数单位
angstrom
1.8897261328856432
pm or picometer
0.018897261328856432
nm or nanometer
18.897261328856432
ry or rydberg
0.5
eV or electronvolt
0.03674932539796232
invcm
4.5563353e-06
kelvin
3.1668105e-06
kjoule_mol
0.00038087988
kcal_mol
0.0015936014
as or attosecond
0.0413413737896
fs or femtosecond
41.3413737896
ps or picosecond
41341.3737896
c
137.035999139
块(block)
块被定义为值的集合,以行和列格式组织。语法如下:
%varexp | exp | exp | ...exp | exp | exp | ......%
块中的行用换行符分隔,而列用字符“|”或tab分隔。块中可以有任意数量的行和任意数量的列。另请注意,每行可以具有不同数量的列。块中的值不必属于同一类型。
包括(include)
可以将外部文件包含在输入文件中。
比如,在输入文件inp中:
CalculationMode = gsUnitsOutput = eV_AngstromRadius = 3.5*angstromSpacing = 0.22*angstrominclude geometry.oct
几何在 geometry.oct中定义,
CH = 1.2*angstrom%Coordinates"C" | 0 | 0 | 0"H" | CH/sqrt(3) | CH/sqrt(3) | CH/sqrt(3)"H" | -CH/sqrt(3) |-CH/sqrt(3) | CH/sqrt(3)"H" | CH/sqrt(3) |-CH/sqrt(3) | -CH/sqrt(3)"H" | -CH/sqrt(3) | CH/sqrt(3) | -CH/sqrt(3)%默认值
如果Octopus尝试读取输入文件中未定义的变量,它会自动为其分配一个默认值(在某些情况下,如果Octopus找不到合理的默认值,它会报错停止)。所有读取的变量(输入文件中存在或不存在)都输出到文件exec/parser.log。未在输入文件中定义的变量将具有 -default注释。如果不确定该程序正在读取什么,请查看它。
建议将输入文件中的变量保持在最低限度:“不要编写将被分配默认值的变量”。在较新版本的Octopus中,默认值可能会更改,旧值可能会导致问题。除此之外,输入文件将变得难以阅读和理解。
文档
每个输入变量都有(或应该有)自己的文档,解释它的作用以及它可能采用的有效值。文档可以联机获取,也可以通过oct-help命令访问。
实验性功能
即使在Octopus的稳定版本中,也有许多功能正在开发中,不适合正式使用。为了防止用户无意中使用这些部件,它们被声明为“Experimental’”。
当你尝试使用其中一项实验功能时,Octopus将报错停止。如果要使用它,则需要将变量ExperimentalFeatures设置为yes。现在Octopus只会发出警告。被允许使用不完整或未经良好测试的代码部分,很可能会产生错误的结果。
良好做法
为确保与较新版本的Octopus兼容及避免出现问题,在编写输入文件时,谨记以下良好操作规则:
(1)尽管输入变量可以采用数字,但数字表示形式会使输入文件的可读性降低,并且将来可能会更改。所以“避免使用数字而不是值”。例如,应该用
UnitsOutput = ev_angstrom
代替
UnitsOutput = 3
(2)“不要包含输入文件中不需要的变量”,尤其是只取默认值的声明。这会使输入文件更长,可读性降低,并且由于默认值可能会更改,因此输入文件更有可能在较新版本的Octopus上出现问题。
(3)“避免在输入文件中重复信息”。为此使用自定义变量和数学表达式功能。例如,应该使用:
m = 0.1c = 137.036E = m*c^2
而不是
m = 0.1c = 137.036E = 1877.8865
标签: #c语言录入学生信息函数怎么写 #c语言输入到文件中