PLUMED 学习( 1 )
来源:互联网 发布:win10打开软件 编辑:程序博客网 时间:2024/05/30 04:16
SimpleMD
这篇文章里,我们解析 simplemd 的源代码,以试图理解plumed如何工作的。作为练习加入leapfrog 迭代格式。文件位置为
plumed2/src/cltools/SimpleMD.cpp
整体的类的依赖关系可从下面代码片段看出,
namespace PLMD{namespace cltools{ class SimpleMD:public PLMD:CLTool{ ... };PLUMED_REGISTER_CLTOOL(SimpleMD,"simplemd")}}
CLTool 是一个抽象类,用来继承和基于命令行的tool,simplemd就是一个例子。上面的代码中, PLUMED_REGISTER_CLTOOL 是用来定义该类对应的Register类,以用来指定调用 SimpleMD 的命令。此宏定义在
plumed2/src/core/CLToolRegister.h
其定义如下
#define PLUMED_REGISTER_CLTOOL(classname,directive) \ static class classname##RegisterMe{ \ static PLMD::CLTool* create(const PLMD::CLToolOptions&ao){return new classname(ao);} \ public: \ classname##RegisterMe(){PLMD::cltoolRegister().add(directive,create,classname::registerKeywords);} \ ~classname##RegisterMe(){PLMD::cltoolRegister().remove(create);} \ } classname##RegisterMeObject;
其中##表示连接左右的字符。这个类包含的成员method列表如下
string description()const;public: static void registerKeywords(Keywords& keys); SimpleMD(const CLToolOptions& co); void input(); void read_natoms(const string&,int& natom); void read_positions(...); void randomize_velocities(...) void pbc(...) void check_list(...) void compute_list(...) void compute_forces(...) void compute_engkin(...) void thermostat(...) void write_position(...) void write_final_position(...) void write_statistics(...) virtual int main(FILE* in,FILE* out,PLMD:Communicator)
可见其中main函数是虚函数,所以如果我们自己加如新的算法的可以继承SimpleMD,重写 main即可。当然也可以直接修改SimpleMD.cpp的代码,但是前者更加简洁,同时不用修改原来的代码。 使用 integrator vv/leapfrog 去选择迭代格式
0 0
- PLUMED 学习( 1 )
- 学习1
- 学习1
- 学习1
- 学习1
- 学习1
- 学习1
- 学习1
- 学习1
- 学习1
- 学习1
- 学习1
- 机器学习-学习笔记1
- shell学习1--grep学习
- 学习笔记:git学习1
- Redis学习1--字符串学习
- 字符串学习学习(1)
- 【机器学习】监督学习 1
- 渣渣ACM日记——121-K尾相等数(NYOJ)
- Coco2dx制作一个3D旋转的效果
- 51单片机 学习之旅[4] 数码管 动态显示
- 解决国内android sdk无法更新
- LeetCode——Container With Most Water
- PLUMED 学习( 1 )
- StroyBaord传值
- 秋风烟雨
- java面试综合
- 51单片机 学习之旅[5] 键盘,单个按键
- 命令别名与历史命令 alias,history
- java当前日期增加天数
- SQL注入原理讲解,很不错!
- 进程的退出exit() --多进程编程