随笔分类 - 分子动力学
使用MindSpore计算旋转矩阵
摘要:
本文介绍了两个不同的深度学习框架:Jax和MindSpore下的旋转矩阵的实现,对于不同的框架来说同一个功能会涉及到不同的实现方式。在Jax中,由于其函数式编程的特性,就允许我们更加简单的去构造和扩展一个旋转矩阵。MindSpore是一个面向对象编程的框架,其优势在于构建大型的模型应用。但构造一个可用的简单模型,相对而言就会走一些弯路。就比如我们需要使用Concat+Reshape的算子来拼接一个旋转矩阵,看起来会相对麻烦一些。而构建好旋转矩阵之后,则可以使用跟Jax一样的Vmap操作,或者是直接使用爱因斯坦求和来计算旋转矩阵对多个矢量输入的计算,从文章中的案例中可以看到两者所得到的计算结果是一致的。

在VMD上可视化hdf5格式的分子轨迹文件
摘要:
相比于明文存储和传统的一些数据存储方法,HDF5格式的文件非常适合用于存储分子动力学模拟过程中产生的庞大轨迹文件,不仅有良好的可读性,还有非常优秀的压缩率,使得存储下来的轨迹文件不至于太大。而相应的,我们也需要一些配套的可视化软件,用来展示HDF5文件中存储的内容。本文所介绍的改进版的VMD-h5mdplugin插件,可以在VMD中直接展示HDF5的分子运动轨迹,并给出了相应的案例。

从Hadder看蛋白质分子中的加氢算法
摘要:
本文主要介绍了开源加氢软件Hadder中用到的一些常规的补氢算法。在存储和优化蛋白质结构的过程中,人们更多的关注于蛋白质本身的骨架的变化,而单个原子的细微变化,对整体产生的性质是微乎其微的。但是我们在建立力场以及做能量最小化的过程中,需要用到氢原子。而氢原子的初始位置是至关重要的,如果加的位置太差,有可能导致体系能量过大,从而出现梯度爆炸的问题。

氨基酸分子结构和原子命名
摘要:
PDB格式的文件是最常用于存储蛋白质构象的一种,其中也是以各个氨基酸(残基)为基本单位,在氨基酸内部对原子进行唯一性的命名。本文先通过展示各种氨基酸在蛋白质链的不同位置的结构,介绍各类氨基酸的基础构象。再通过丙氨酸和色氨酸两个案例,详细介绍了在蛋白质链的中的各种氨基酸内部的原子命名法则。需要注意的是,atom_name和atom_type是不一样的,atom_name是一个唯一的标识符,atom_type则是用于导出力场参数的重要标记。

蛋白质基础组成结构
摘要:
本文通过对Xponge+VMD的工具对蛋白质进行建模,然后总结了20种氨基酸的具体信息,也就是蛋白质的基本组成单元。通过对这些氨基酸的组合,就可以得到一个具有生物活性的蛋白质。同时本文还介绍了常用的存储蛋白质结构的文件格式pdb的具体格式化定义,总体来说是一个总结性的文章。

从经典动力学理解勒让德变换
摘要:
为了通过一些实际问题来理解勒让德变换,我们假定了这样的一个场景:一个叫勒让德的人在足球场边上被不知来源的球砸中了脑袋,只能够判断足球砸到脑袋的一瞬间的速度方向。而通过勒让德变换的函数值,结合足球旋转的角速度,我们就可以得出足球的真实来源。同时,通过勒让德变换,我们还可以从拉格朗日力学推导到哈密顿力学。而且勒让德变换在热力学系统也有非常重要的应用场景。

分子动力学模拟算法框架
摘要:
分子动力学模拟是一个跨越众多学科领域的强大工具,从物理学的角度来看分子动力学模拟的话,其基于量子力学(量子化学)构建模型,通过牛顿力学进行演化迭代,最后能够在时间平均上等同于统计力学的系综平均,是一个堪比复变函数欧拉公式的优美过程。本文就当前分子动力学模拟的框架进行了整体介绍,其中并不展开讲解各项技术内容,但是也为感兴趣的研究人员提供一个简单的入口。

从刘维尔方程到Velocity-Verlet算法
摘要:
本文延续历史上分子动力学模拟演化算法的发展顺序,分别讲述了Verlet、LeapFrog和Velocity-Verlet三个算法的形式,并且结合刘维尔方程,推导了Velocity-Verlet算法中的三个演化步骤的内在含义。三种不同的演化算法,都有不同的初始依赖,而对于计算过程而言,越多的初始依赖,就会涉及到越多的参数存储问题。一个好的演化算法,只需要依赖于少量的参数,而具备较高的精度。

SETTLE约束算法的批量化处理
摘要:
在前一篇文章中介绍了SETTLE约束算法在分子动力学模拟中的应用,本文通过用Jax的Vmap功能对SETTLE函数进行了扩维,使得其可以批量的计算多分子体系的约束条件。这里采用的案例是一个含有16个水分子(48原子)的小体系,从结果中可以看到,在随机移动和批量SETTLE的作用下,所有的水分子都保留了原始的键长和键角,简单理解这个过程就是一个刚体三角形的平移和旋转的过程。

分子动力学模拟之SETTLE约束算法
摘要:
继上一篇文章介绍了分子动力学模拟中常用的LINCS约束算法之后,本文再介绍一种SETTLE约束算法,及其基于Jax的实现方案。LINCS约束算法相对来说比较通用,更适合于成键关系比较复杂的通用的体系,而SETTLE算法更加适用于三原子轴对称体系,比如水分子。SETTLE算法结合velocity-verlet算法,可以确保一个分子只进行整体的旋转运动,互相之间的距离又保持不变。比较关键的是,SETTLE算法所依赖的参数较少,也不需要微分,因此在性能上十分有优势。

分子动力学模拟之基于自动微分的LINCS约束
摘要:本文通过完整的案例及其算法实现的过程,介绍了LINCS(Linear Constraint Solver)这一分子动力学模拟过程常用的约束算法。得益于Jax这一框架的便用性及其对numpy的强大支持、对GPU计算的优化、还有自动微分与向量化运算等技术的实现,使得我们实现LINCS这一算法变的不再困难。
JAX-MD在近邻表的计算中,使用了什么奇技淫巧?(一)
摘要:本文是第一篇关于JAX-MD的源码学习的文章,主要关注点在于JAX-MD中对于近邻表的检索和优化。本文的主要内容是其中构建CellList的部分,通过打格点的方法可以大大降低近邻表搜索算法的复杂度,在GPU计算的过程中更是可以极大的降低显存的占用,从而允许我们去运行更大规模的体系。
VMD可视化hdf5格式的分子坐标文件
摘要:VMD是一个分子动力学模拟领域常用的可视化软件,hdf5是量子化学领域常用的一个二进制文件存储格式,本文通过介绍VMD-h5mdplugin这个插件的安装和使用方法,进一步演示了如何在VMD上直接展示hdf5格式文件的分子构象。
Python3实现打格点算法的GPU加速
摘要:在这篇文章中,我们主要介绍了打格点算法在分子动力学模拟中的重要价值,以及几种不同的实现方式。其中最普通的for循环的实现效率比较低下,从算法复杂度上来讲却已经是极致。而基于CPU上的向量化运算的技术,可以对计算过程进行非常深度的优化。当然,这个案例在不同的硬件上也能够发挥出明显不同的加速效果,在GPU的加持之下,可以获得100倍以上的加速效果。这也是一个在Python上实现GPU加速算法的一个典型案例。
Python的GPU编程实例——近邻表计算
摘要:对于Pythoner而言,苦其性能已久。如果能够用一种非常Pythonic的方法来实现GPU的加速效果,对于Pythoner而言无疑是巨大的好消息,Numba就为我们提供了这样的一个基础功能。本文通过一个近邻表计算的案例,给出了适用于GPU加速的计算场景。这种计算场景可并行化的程度较高,而且函数会被多次用到(在分子动力学模拟的过程中,每一个step都会调用到这个函数),因此这是一种最典型的、最适用于GPU加速场景的案例。
增强采样软件PLUMED的安装与使用
摘要:本文作为一个入门级的文章,主要介绍了分子动力学模拟中增强采样的基本概念与相应工具的安装和使用。PLUMED是业界比较出名的一款增强采样开源软件,能够对接多个分子动力学模拟软件,如GROMACS等,并利用这些软件生成的路径信息来进行采样。并且为了可以在python上也能看到路径信息等重要数据,可以考虑使用mdconvert将路径数据转化成python上常用的hdf5格式并用h5py进行读写。
分子动力学模拟之周期性边界处理
摘要:本文从分子动力学模拟中的周期性边界处理角度出发,介绍了无符号整数和带符号整数的一些应用的技巧,使用这些格式转换的技术有可能在程序的性能优化中带来一定的效果。同时为了更加直观的展示分子模拟的效果,我们用animation展示了一个简单的动态图绘制的案例,其中还包含了多个子图的绘图技术。
Open Babel的安装与使用
摘要:本文主要介绍了在化学领域中常用的文件格式转化工具Open Babel的两种安装方法,与基本的使用案例。其中如果选择手动编译安装可以使用最新的release版本,如果使用conda就只能使用老旧的稳定版本,但是可以很大程度上简化安装的步骤。在基本的案例中我们演示了使用obabel来将一个xyz坐标格式的文件转化成一个SMILES表达式。
pysmiles:一个用于读写SMILES表达式的python库
摘要:本文介绍了一款基于python语言的SMILES化学表达式的读写SDK,使用openSMILES表达式所定义的分子结构是非常精简的,但是其中的规则又非常的多,因此使用一款友好的SMILES表达式能够大大的缩减解析的成本。并且pysmiles结合了一款非常常用的python的拓扑网络结构表示SDK——networkx,使得对SMILES表达式的结果分析更加的人性化。
分子动力学模拟软件VMD的安装与使用
摘要:本文重点介绍了VMD分子动力学模拟可视化软件的安装与基本使用方法,VMD是一款非常小而精致的可视化工具,在业界也备受推崇。如果只是用于做分子模型的展示,功能是完全足够的,如果要执行更多的操作,需要掌握tcl语言,当然这也是一个坑点。