普拉姆的第一步

我们将从使用水分子几何优化的简单示例开始 adf. 作为计算发动机。 在此脚本中,我们将展示如何:

  • 创建一个 分子
  • specify the input for ADF through the Settings object
  • 创建和运行 adf. Job
  • 读取计算’s 结果
# H2O_opti.py
# Geometry optimization of a water molecule using ADF

# Create the molecule:
mol =  分子 ()
mol.add_atom(Atom(symbol='O', coords=(0,0,0)))
mol.add_atom(Atom(symbol='H', coords=(1,0,0)))
mol.add_atom(Atom(symbol='H', coords=(0,1,0)))

# Initialize the settings for the ADF calculation:
sett = Settings()
sett.input.basis.type = 'DZ'
sett.input.basis.core = 'None'
sett.input.NumericalQuality = 'Basic'
sett.input.XC.GGA = 'PBE'
sett.input.geometry

# Create and run the job:
job =  adf. Job(molecule=mol, settings=sett, name='water_GO')
job.run()

# Fetch and print some results:
energy = job.results. readkf. ('Energy', 'Bond Energy')
opt_mol = job.results.get_moleecule.('Geometry', 'xyz')
bond_angle = opt_mol.atoms[0].angle(opt_mol.atoms[1], opt_mol.atoms[2])

print ('== Water optimization Results ==')
print ('Bonding energy: %f kcal/mol' %  单位 .convert(energy, 'au', 'kcal/mol'))
print ('Bond angle: %f degree' %  单位 .convert(bond_angle, 'rad', 'degree'))

运行脚本

Create a working directory plams_tutorial, move into it, and save the script H2O_opti.py。要在终端中执行脚本类型:

$ADFBIN/plams H2O_opti.py

计算应仅需几秒钟,并且您应该获得以下结果:

[15:23:50]  pl  working folder: /Users/username/plams_tutorial/plams.98957
[15:23:50] Job water_GO started
[15:23:53] Job water_GO finished with status 'successful'
== Water optimization  结果  ==
Bonding energy: -299.288756164 kcal/mol
Bond angle: 107.746310525 degree

Every time you run a PLAMS script, a uniquely named working directory is created (plams.*****). This folder will contain one subdirectory per job (in our case, one folder named water_GO). Each job folder contains the job’S输入和结果文件。

分子

一个例子 分子 课程可以由任何一个创建

  • 初始化空分子并手动添加原子

    # Create the molecule:
    mol =  分子 ()
    mol.add_atom(Atom(symbol='O', coords=(0,0,0)))
    mol.add_atom(Atom(symbol='H', coords=(1,0,0)))
    mol.add_atom(Atom(symbol='H', coords=(0,1,0)))
    
  • importing the atomic coordinates from an external file (supported formats: xyz, mol, mol2, and pdb):

    mol =  分子 ('molecules/H2O.xyz')
    

分子类为基本分子操纵提供了几种方法,例如 旋转 , 翻译. 此外,列表 原子 包含在相应的分子对象中可以直接访问和操纵。 See the 分子部分 Plams文档的完整方法列表。

设置类

设置类常规扩展 Python字典 通过许多有用的功能。 In the following we show how the Settings object is used to define the input for an adf. Job. The reader is strongly encouraged to consult the 设置部分 PLAMS文档有关设置类的详细说明。

Plams图书馆的一个重要方面是 Plams(几乎)了解各种计算引擎的输入选项. In other words, you need to know the structure of the ASCII input file of the computational engine in order to set up the corresponding Settings object. 虽然各种计算引擎(ADF,BAND和DFTB)的输入文件使用不同的关键字集,但它们共享类似的结构 - 它们包括 子块 这反过来又包含 钥匙 价值 .

To give an example, the Settings object in H2O_opti.py

# Initialize the settings for the ADF calculation:
sett = Settings()
sett.input.basis.type = 'DZ'
sett.input.basis.core = 'None'
sett.input.NumericalQuality = 'Basic'
sett.input.XC.GGA = 'PBE'
sett.input.geometry

will translate into the following ADF input file when supplied to an adf. Job class:

Basis
  Core None
  Type DZ
End

Geometry
End

Numericalquality Basic

Xc
  Gga PBE
End

除了原子坐标之外(这些将从分子对象拾取;见上文),必须在“设置”对象中指定所有所需的输入选项。

看看 adf. 套件部分 PLAMS文档有关如何将设置对象转换为ASCII输入文件的全面描述。

你可以得到计算引擎’通过作业输入文件’s get_input() method. For example:

job =  adf. Job(molecule=mol, settings=sett, name='water_GO')
print(job.get_input())

创建和运行作业

Job class is the most important object in PLAMS as it takes care of the preparing, executing and collecting the results of a Job. 有关作业类的详细描述,请参阅 乔布斯部分 plams文件。

pl 船舶填写了三个即用的作业子类,ADFJOB,BANDJOB和DFTBJOB。可以随时扩展基类作业以与其他计算引擎进行接口。

Creating and running the adf. Job of our example is straightforward:

# Create and run the job:
job =  adf. Job(molecule=mol, settings=sett, name='water_GO')
job.run()

每个作业在工作文件夹中有其自己的子目录(具有与作业相同的名称)。

结果

After the successful completion of a job, the results can be accessed via the 结果 object associated with the job.

有两种方法可以从作业结果中检索数据:

  • 推荐的方法是通过使用读取二进制结果文件(以KF格式为单位) readkf. . READKF方法将访问相应的二进制文件(TAPE21 对于ADF, runkf. 对于乐队,和 rkf. 对于DFTB),并在Python内置类型(int,float,bool,...)中返回所请求的数据。 如果请求的数据是数组,则返回Python列表。

    # Fetch and print some results:
    energy = job.results. readkf. ('Energy', 'Bond Energy')
    

    这两个论点是相应的“Section” and “Variable”在二进制KF结果文件中的名称。

    小费

    您可以查看二进制KF文件的内容 kfbrowser. tool

    二进制KF文件中的大多数结果以原子单位提供。 The 单位 实用程序可用于将结果转换为所需的单位:

    energy_in_kcal_mol =  单位 .convert(energy_in_au, 'au', 'kcal/mol')
    
  • 您还可以从中提取数据 标准输出 使用 grep_output.awk_output. methods. 这将返回包含Grep或AWK命令匹配的字符串列表。

由于ADF,BAND或DFTB的内部机械,KF结果文件中的原子坐标的顺序可能与初始定义的订单不同。 因此,建议通过通过二元kf结果文件提取分子几何形状 get_moleecule. method:

opt_mol = job.results.get_moleecule.('Geometry', 'xyz')

两个争论再次是“Section” and “Variable” in the KF file.