普拉姆的第一步

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

  • 创建一个 分子
  • specify the input for ADF through the 设置 object
  • 创建和运行 adf. Job
  • 读取福彩3d字迷’s 结果
# H2O_opti.py
# Geometry optimization of a water molecule using ADF through PLAMS.

# 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 = 设置()
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.get_energy()
opt_mol = job.results.get_main_molecule()
bond_angle = opt_mol[1].angle(opt_mol[2], opt_mol[3])

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

福彩3d字迷应仅需几秒钟,并且您应该获得以下结果:

[14:55:34]  pl  working folder: /Users/username/plams_tutorial/plams_workdir
[14:55:34] JOB water_GO STARTED
[14:55:34] JOB water_GO RUNNING
[14:55:38] JOB water_GO FINISHED
[14:55:38] JOB water_GO SUCCESSFUL
== Water optimization 结果 ==
Bonding energy: -299.288904 kcal/mol
Bond angle: 107.748851 degree
[14:55:38]  pl  run finished. Goodbye

Every time you run a PLAMS script, a new working directory is created (by default it is called plams_workdir). 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 设置 object is used to define the input for an adf. Job. The reader is strongly encouraged to consult the 设置部分 PLAMS文档有关设置类的详细说明。

Plams图书馆的一个重要方面是 Plams(几乎)了解各种福彩3d字迷引擎的输入选项. 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 设置 object. 虽然各种福彩3d字迷引擎(ADF,BAND和DFTB)的输入文件使用不同的关键字集,但它们共享类似的结构 - 它们包括 子块 这反过来又包含 钥匙 价值 .

To give an example, the 设置 object in H2O_opti.py

# Initialize the settings for the ADF calculation:
sett = 设置()
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输入文件的全面描述。

你可以得到福彩3d字迷引擎’通过作业输入文件’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文件。

plams船舶船舶几个即用的作业子类:adfjob,amsjob,...基类作业可以很容易地扩展到与其他福彩3d字迷引擎接口。

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.

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

  • 对于最常见的结果,如最终能量或优化的几何形状,上面的示例中存在专用的方法。

    energy = job.results.get_energy()
    opt_mol = job.results.get_main_molecule()
    
  • 对于所有其他数据,建议的方法是通过使用读取二进制结果文件(以KF格式为单位) readkf. . READKF方法将访问相应的二进制文件(TAPE21 对于ADF),并在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命令匹配的字符串列表。或者,您可以使用 get_output_chunk. 在两条线之间提取输出的连续部分。

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

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

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