【PySCF学习1】-分子结构之定义分子
分子结构
- 定义一个分子
- 法一(使用Mole.build())
- 法二(先定义分子坐标信息及基组,再调用Mole.build())
- 法三(使用pyscf.M() 或者Mole.M())
- 分子几何结构位置信息
- 坐标单位(使用unit)
- 分子原子数量(使用natm)
- 使用内坐标(Z-矩阵)定义分子几何结构位置信息
- 元素表达方式
- 使用label标记某个原子
- 坐标信息输入方式
- 从文件中输入分子几何结构位置信息
一天,导师分享了一篇知乎的文章在群里,我点进去一看,感觉这文章应该就是分享给我看的。然后浏览了优秀答主的近期动态,刚好发现了基于python语言而开发的量化程序,这简直就是救命稻草。因为本人目前只有python语言用得上手一点,在学习量化计算的过程中,时常因为上手常用的量化程序非常慢而感到苦恼。因此看到pyscf后,我想如果我能从熟悉的语言出发,学习量化计算也许压力会小一点。因此基于官方教程,我复现一些我会用到的功能,并加上自己的理解,增强自己的学习记忆。所以接下来分享的内容大多数仅是单纯地重复官方教程,感兴趣的同学可以前往官网找适合自己的教程。
定义一个分子
以定义一个水分子为例
法一(使用Mole.build())
直接导入gto包,并引用gto中的Mole()函数,直接在使用mole.build()时定义分子坐标信息及基组信息
from pyscf import gto
mol = gto.Mole()
mol.build(atom = '''O 0 0 0; H 0 1 0; H 0 0 1''',basis = 'sto-3g')
这里的:O 0 0 0; H 0 1 0; H 0 0 1就是分子元素及笛卡尔坐标信息;sto-3g为所选用的基组
基组对元素定义了各自计算时要用的壳层类型及数目、收缩系数和高斯函数指数。
法二(先定义分子坐标信息及基组,再调用Mole.build())
from pyscf import gto
mol = gto.Mole()
mol.atom = '''O 0 0 0; H 0 1 0; H 0 0 1'''
mol.basis = 'sto-3g'
mol.build()
法三(使用pyscf.M() 或者Mole.M())
可以使用更为简短的函数pyscf.M() or Mole.M()对分子进行定义
使用pyscf.M()
import pyscf
mol = pyscf.M(atom = '''O 0 0 0; H 0 1 0; H 0 0 1''',basis = 'sto-3g')
使用Mole.M()
from pyscf import gto
mol = gto.M(atom = '''O 0 0 0; H 0 1 0; H 0 0 1''',basis = 'sto-3g')
分子几何结构位置信息
在前面定义分子的代码中可以发现分子元素及坐标信息是调用了关键字atom,上面都是使用了元素+笛卡尔坐标信息形式。下面详细介绍其他信息。
坐标单位(使用unit)
单位一般可选Angstrom (缩写AU)或者Bohr(缩写B)
from pyscf import gto
mol = gto.Mole()
mol.atom = '''O 0. 0. 0.H 0. 1. 0.H 0. 0. 1.
'''
mol.unit = 'B'#这里定义了单位为Bohr,如果单位选为Angstrom,可以改成AU
分子原子数量(使用natm)
检查所建立的分子中的原子数量
from pyscf import gto
mol = gto.Mole()
x=mol.build(atom = '''O 0 0 0; H 0 1 0; H 0 0 1''',basis = 'sto-3g')
print(x.natm)#输出结果是3
使用内坐标(Z-矩阵)定义分子几何结构位置信息
上面的例子在定义分子几何结构位置信息时均是使用了笛卡尔坐标,还有另一种方式是使用内坐标。
笛卡尔坐标中原子的位置是绝对的,相对于笛卡尔坐标轴;
内坐标是通过键长、键角及二面角信息来定义原子之间的相对位置。
Z-矩阵格式
元素符号 原子1 键长 原子2 键角 原子3 二面角
(二面角可以使用右手法则来确定方向)
from pyscf import gto
mol = gto.Mole()
mol.atom = '''OH 1 1.2H 1 1.2 2 105
'''
元素表达方式
可以使用核电荷数、元素符号(大小写均支持)来表示某种元素
from pyscf import gto
mol = gto.Mole()
mol.atom = '''8 0. 0. 0.; h 0. 1. 0; H 0. 0. 1.'''
使用label标记某个原子
在研究中可能出现不同位置的原子需要采用不同基组来处理的情况,因此在定义分子几何结构位置信息时,可以标记某个原子,方便再后续为标记的原子指定规定的基组。
【标记方法】在原子符号前面或者后面加上数字1234567890 或者一些特殊符号,比如 ~!@#$%^&*()_+.?:<>[]{}| (不能用 ,与 ; )
from pyscf import gto
mol = gto.Mole()
mol.atom = '''8 0 0 0; h:1 0 1 0; H@2 0 0 1'''
mol.unit = 'B'#单位
mol.basis = {'O': 'sto-3g', 'H': 'cc-pvdz', 'H@2': '6-31G'}#对标记的原子分别指定使用不同的基组
mol.build()
print(mol._atom)
输出结果为:
[('O', [0.0, 0.0, 0.0]), ('H:1', [0.0, 1.0, 0.0]), ('H@2', [0.0, 0.0, 1.0])]
坐标信息输入方式
在定义分子几何结构位置信息时,我们可以灵活地结合循环、numpy等功能,利用信息存在的规律性,更省事地输入分子位置信息,这对于定义一些大分子时,对于节省工作量非常有效。
【原子位置信息输入格式】
atom = [[atom1, (x, y, z)],[atom2, (x, y, z)],...[atomN, (x, y, z)]]
例如:
mol.atom = [['O',(0, 0, 0)], ['H',(0, 1, 0)], ['H',(0, 0, 1)]]
可以换一种方式表示:
mol.atom = (('O',numpy.zeros(3)), ['H', 0, 1, 0], ['H',[0, 0, 1]])
从文件中输入分子几何结构位置信息
从文件中导入atom的信息,利用:
mol.atom = "my_molecule.xyz"
例如:
from pyscf import gto
mol = gto.Mole()
mol.atom = "atom.xyz"
mol.unit = 'B'#注意要定义单位
x=mol.build(basis = 'sto-3g')
print(x.natm)
print(mol._atom)
【输出信息为】
3
[('O', [0.0, 0.0, 0.0]), ('H', [0.0, 1.0, 0.0]), ('H', [0.0, 0.0, 1.0])]
其中文件atom.xyz内的信息为:
3O 0. 0. 0.
H 0. 1. 0.
H 0. 0. 1.
注意.xyz文件中的原子位置信息基本格式是:
原子数
空行
元素 坐标
【PySCF学习1】-分子结构之定义分子相关推荐
- Vue学习(组件的定义及调用、路由)-学习笔记
文章目录 Vue学习(组件的定义及调用.路由)-学习笔记 Vue学习(组件的定义及调用.路由)-学习笔记 可见代码参考学习:https://gitee.com/monkeyhlj/vue-learni ...
- mysql分页概念_MySQL学习笔记之数据定义表约束,分页方法总结
本文实例讲述了MySQL学习笔记之数据定义表约束,分页方法.分享给大家供大家参考,具体如下: 1. primary key 主键 特点:主键是用于唯一标识一条记录的约束,一张表最多只能有一个主键,不能 ...
- 【PHP学习】—数组的定义和遍历(三)
[PHP学习]-数组的定义和遍历(三) 一.常见的数组定义方式 二.遍历数组 三.二维数组 四.数组传递给页面 数组转json格式(一维数组) 五.数组传递给页面 数组转json格式(二维数组)
- 存储过程中定义sql语句_学习SQL:用户定义的存储过程
存储过程中定义sql语句 Stored procedures (SPs) are one more powerful database object we have at our disposal. ...
- jeremy的路径规划学习-1.三维地图定义,散点拟合插值与粒子群算法(matlab实现)
jeremy的路径规划学习-1.三维地图定义,散点拟合插值与粒子群算法(matlab实现) 本文基于小黎的ally学习资料实现,感谢该博主的无私奉献 三维地图与二维地图的差别 1.二维无高度信息,多用 ...
- Reac学习笔记#01#组件定义以及props、state的管理
React学习#01 组件的定义和 state 以及props的使用 官方文档 1. 特点 数据单项绑定,自上而下流动 支持组件封装和组件间的引用组合 JSX/TSX语法的使用 使用虚拟DOM操作(d ...
- 【PySCF学习3】-分子结构之对称性、电荷及自旋多重度
对称性.电荷及自旋多重度 点群对称性 使用程序检测出的点群与子群 使用对称性较低的点群 自定义对称性 电荷 自旋多重度 继上两篇文章,介绍了分子结构中几何位置信息及基组信息的输入形式,本文章主要记录分 ...
- 【python教程入门学习】Python函数定义及传参方式详解(4种)
这篇文章主要介绍了Python函数定义及传参方式详解(4种),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一.函数初识 1.定 ...
- int arr 13 java,java学习13 - 数组的定义、操作、异常、二维数组
续java学习12: 1.数组,引用类型变量,保存数据实际是保存的数组的首地址 2.定义数组容器三要素,数据类型,大小(长度),数组名 3.数组的定义公式一:数据类型[] 数组名 = new 数据类型 ...
最新文章
- Tomexam在线考试系统 2.1
- 【docker】docker基础原理,核心技术简介
- 群晖 设置 php 服务器,群晖NAS服务器iSCSI管理器配置连接及使用说明
- JVM监控工具有哪些
- boost::endian模块实现算术缓冲区的测试程序
- c++语言 自己构造函数 成员对象构造函数 调用顺序,C++类成员构造函数和析构函数顺序示例详细讲解...
- Spark从HDFS上读取JSON数据
- 华为手机怎么隐藏按键图标_mac桌面图标怎么快速隐藏?
- 盐城有哪些中专计算机学校,盐城有什么中专学校
- bat自动登录服务器取文件,批处理(.bat)一键备份资料,自动登录局域网进行备份,加~批处理.bat加密软件...
- 软件设计精要与模式(第2版)
- 51nod1649齐头并进-Dijkstra
- linux 搜索文件后缀名,Linux -find、文件后缀名
- 一瞬间、一刹那、一弹指具体是多少时间呢?
- jdk8新特性-Lambda表达式,方法引用
- 小工具更新:车辆违章查询 v1.0.0.2
- java快递驿站管理系统免费_基于jsp的快递物流管理系统-JavaEE实现快递物流管理系统 - java项目源码...
- scrapy学习(完全版)
- python对mp3格式文件标题专辑封面等信息修改
- Centos下安装Dockers