这算是Kynetix能量读取部分的第三次比较大的更新了,之前有提到过,模型已经兼容相对能量的输入文件( 详情 )。 虽然读取的是相对能量,但是程序内部我还是使用矩阵进行了线性方程组的求解来将求出每个物种相对于参考态的能量来作为generalized formation energy。 可是这就遇到了一个问题,
有很多情况,程序根据用户自定义的参考态物种获取的参数矩阵很多情况是奇异矩阵,一旦矩阵奇异,就无法求出解,也就无法将模型的求解进行下去。
这个问题一直困扰我很久了,但是我一直没有花时间去解决。
现在想想其实我通过矩阵获取generalized formation energy的目的是什么?
其实作用也不过是在进行初始猜测的时候按照formation energy来进行Boltzmann分布而已。为了这个而无法将整个求解过程继续下去真的是得不偿失啊。
Read More
今天忽然发现博客的标签(tag)以及目录(category)涉及到分页的话会显示不全,我发现之所以显示不全是和hexo中的_config.yml
文件中的 参数有关,per_page
设成多少就只显示多少个post。
Read More
之前Kynetix代码几乎全部是使用Python写的,使用了KMCLib(Python + C++)之后,在进行主体KMC循环的时候效率得到了明显的提升,但是在刚刚完成on-the-fly分析部分代码以后开始跑程序,明显感觉程序异常的慢,因为kmc写到现在真心感受到kMC程序真心是个compute intense的活,其中没有用到矩阵运算,没有用到什么传统的优化算法,
所以尝试只用一种解释性语言如matlab和python去完成整个kMC程序的最终肯定会使程序慢得一塌糊涂!跑蒙特卡洛程序慢成狗,那这程序也几乎没啥用了感觉。
于是我也想学习KMCLib那样使用静态语言为我的python程序编写扩展模块,虽然我也知道针对Fortran有
f2py 这种工具存在,但是由于我个人的喜好,不是历史原因必须使用fortran的话,我还是选择C或者C++。
至于python的C扩展,我选择使用
SWIG 。
Read More
为了显示kMC模拟的表面动态演化过程,给Kynetix的plotters中新增了
kmc_plotter.py
, 其中的KMCPlotter是ModelShell的子类,实例化model对象的绘制工具。
grid_plot.py
, 提供绘制网格和圆圈的函数(适合小型网格,例如10x10、5x5)
scatter_plot.py
, 提供使用绘制散点图的方式绘制网格(适合大型的网格,例如200x200)
images2gif.py
, 负责将多个图片合并成动态gif的模块。
Read More
目前Kynetix 已经可以进行动力学蒙特卡洛(kMC)模拟,其中kMC核心计算部分我将KMCLib 整合到其中(若要使用Kynetix,请根据KMCLib的文档自行编译KMCLib),这次更新的内容比较多,主要在以下几个地方进行了更新:
kMC Parser
, 负责将输入文件中的能量以及化学方程式进行解析
kMC Solver
, 这里是kMC模拟的核心,主要负责调用KMCLib的接口进行动力学蒙特卡洛计算,并对模拟进行On-the-fly分析(覆盖度,TOF等)
kMC Plotter
, 绘制表面形态的演化过程(可生成多图以及GIF动图)
Read More
克服模拟的时间尺度的局限 由于许多动态的过程(dynamic evolution),例如表面的生长或者材料的老化,时间的跨度都在s以上,超出了分子动力学模拟的范围,动力学蒙特卡洛模拟便是针对这种长时间尺度的动态模拟的。
Kinetic Monte Carlo attempts to overcome this limitation by exploiting the fact that the long-time dynamics of this kind of system typically consists of diffusive jumps from state to state. Rather than following the trajectory through every vibrational period, these state-to-state transitions are treated directly
Read More