“分子动力学模拟”第一课题设计

课题目的

本课题设计面向分子动力学(Molecular Dynamics, MD)模拟的**初学者、打算参与eMD代码开发的人员**,用于提升分子动力学模拟的代码实践水平。

课题目标

开发一款用于模拟三维Lennard Jones粒子体系的分子动力学模拟软件(软件名:abcMD),程序设计需要满足一定的规范,软件要实现一定的功能和性能指标,见下文“基本需求”和“可选需求”。通过该课题设计的锻炼,能满足从事eMD代码开发的基本要求。

评分准则

课题设计限时3个月,每完成1个需求计1分,“基本需求”和“可选需求”分开计分。

补充说明:从事eMD代码开发人员的“基本需求”标准应不低于9分,欢迎有志之士共同参与eMD开发。课题讨论QQ群:1055763748。

基本需求

  1. 输入体系为xyz文件,采用周期性边界,构建邻居列表,计算Lennard Jones势,进行MD步积分,更新邻居列表;
  2. 输出轨迹保存到xyz格式文件,使用VMD软件查看轨迹,调整绘制样式,绘制gif/mp4动画(优先采用Tcl脚本);
  3. 采用C++11编程设计语言, “C++编程二十问“正确率不低于90%,结合Eclipse或Virtual Studio Code等IDE;
  4. 使用MPI实现模拟体系的“区域划分“或”原子划分“并行计算;
  5. 使用CUDA加速邻居列表构建和Lennard Jones势计算;
  6. 使用Swig将C++代码包装为Python3模块(模块名abcMD),在Jupyter notebook中调用abcMD模块,计算晶体的RDF函数,实现曲线绘制;
  7. 采用CMake编译管理,支持MPI和CUDA的可选编译选项;
  8. 采用clang-format进行代码格式化,会在Eclipse或Virtual Studio Code中调用clang-format;
  9. 采用Git代码管理,可托管到github,实现基于Git的tar打包、rsync远程同步和ssh远程编译,常用开发命令集成在Makefile中;
  10. 采用Markdown格式编写软件文档,编写设计文档和使用文档。

可选需求

  1. 输入配置参数采用JSON格式
  2. 命令行接受配置参数的重置
  3. 支持gro或pdb文件的输入输出
  4. 同时支持非周期性边界
  5. 采用某种方法实现温度耦合
  6. 采用某种方法实现压强耦合
  7. 支持线动量和角动量清零
  8. 支持SD或CG算法的最小化
  9. 支持副本交换模拟方法
  10. 支持跨节点多GPU

学习参考资料

  • 分子动力学模拟理论与方法

系统性学习教程:入门推荐《Molecular dynamics simulation: elementary methods》J. M. Haile等,《Computer Simulation of Liquids》第二版 M. P. Allen等。中文教程推荐范世领等人的《分子模拟–理论与实验》;提高的教程还有Daan Frenkel结合Monte Carlo方法讲解的《Understanding Molecular Simulation From Algorithms to Applications》第2版。Mark E. Tuckerman从统计视角讲解的《Statistical Mechanics Theory and Molecular Simulation》。Tamar Schlick从生物分子角度的《Molecular Modeling and Simulation: An Interdisciplinary Guide》2010年第2版。

相关期刊列表:

  • TF - Molecular Simulation 关注molecular dynamics (MD, AIMD), Monte Carlo, ab initio methods related to simulation, multiscale and coarse graining methods.
  • ACS - The Journal of Chemical Theory and Computation 关注new theories, methodology, and/or important applications in quantum electronic structure, molecular dynamics, and statistical mechanics. 不包括DFT和MD的直接应用研究。
  • ACS - The Journal of Physical Chemistry B 关注Biophysics, Biomaterials, Liquids, and Soft Matter. 常见MD应用研究。
  • Wiley - The Journal of Computational Chemistry关注analytical, biological, inorganic, organic, physical, and materials. 有个MD专辑Special Issue: Advanced Sampling in Molecular Simulation
  • SD - Computer Physics Communications 发表计算物理程序代码或者研究论文。
  • SD - Journal of Computational Physics 关注物理问题的计算方向:高级数学与数值建模,交叉学科。 有个MD主题精选文章列表。
  • SD - Journal of Molecular Graphics and Modelling 关注 molecular shape and properties, molecular simulations, protein and polymer engineering, drug design, materials design, structure-activity and structure-property relationships, database mining, and compound library design.

  • 分子动力学模拟软件
    提高MD代码设计水平学习现有成熟软件是必须的。建议掌握两款以上的MD软件,推荐开源软件LAMMPSGROMACSNAMD。首先阅读软件的使用文档,多进行实例操作,推荐对照源代码消化理论方法。初学者建议从阅读小型MD程序代码开始,推荐学习Cameron Abrams的在线课程文档,它提供了理论方法简介的配套实例C代码;另外还有一些值得推荐原型程序或小软件:miniMD(LAMMPS简版), mindy(NAMD原型版), protomol等等。K. V. Lee最近发表了一篇使用Python模拟Kob-Andersen模型的气体的文章,提供MD详细的步骤和代码,适合初学者。

  • C++面向对象程序设计
    早期MD主要采用Fortran程序语言,现在大型科学计算软件采用C++是一种趋势选择,C++11(或更高标准)和模版元编程可以放飞软件设计思想。系统性学习可阅读《C++ Primer(中文版 第5版)》Stanley B. Lippman等,第5版主要基于C++11规范。在线查询文档: https://en.cppreference.com
  • MPI并行计算程序设计
    MPI是基于消息传输的分布式并行计算编程模式,是跨节点并行计算的主要编程模式。eMD基于自研的HUP库调用MPI实现分布式计算。系统性学习教程有张武生等人的《MPI并行程序设计实例教程》。在线文档查询不可少:https://www.mpich.org//static/docs/latest/www3/ 。高级的深入学习推荐分析OpenMPI的设计原理
  • Python程序设计
    Python具有脚本控制和科学计算功能特征(特指C语言实现版本CPython),很适合MD应用领域。如有HOOMD-blueOpenMMHTMD 等软件都是主打Python语言操作MD模拟过程,也有对GROMACS的Python包装Swig工具可以将C/C++代码转换为Python库,实现Python语言层调用C++程序。eMD使用Swig实现了C++类级别的包装,Swig相比Cython对大项目级代码包装更方便。 Python语言很容易入门,RUNOOB提供一个在线基础教程。了解CPython设计内幕有助于理解Python语言,推荐阅读陈儒的2008年一书《Python源码剖析》,但有些遗憾,这本书显得有些过时。讲CPython原理的还有:Exploring CPython’s InternalsDesign of CPython’s CompilerAdvanced Internals of CPython 3.6及其简版
  • CMake编译管理
    CMake可以跨平台编译,通过编写CMakeLists.txt实现不同的编译目标。eMD通过CMake实现了CUDA和MPI编译配置方案。CMake的在线Tutorial是最好的教程。
  • Git版本控制
    使用Git版本控制不仅可以对比代码修改前后,还可以方便地操纵源代码文件,如实现tar打包和rsync远程同步等功能。 系统性学习教程:《Pro Git book》第2版Scott Chacon等,有在线版本

最后修改: 2024年9月7日, Shun Xu