标题: 简单聊聊如何用C语言给VMD的Tcl shell编写函数 [打印本页] 作者Author: ene 时间: 2021-5-7 22:19 标题: 简单聊聊如何用C语言给VMD的Tcl shell编写函数 本帖最后由 ene 于 2021-5-7 23:30 编辑
1. 前言
VMD提供了强大的动力学模拟结果分析功能,我们常常会利用它内置的Tcl shell编写各种Tcl语言分析脚本,以实现不同的目的。然而当有时我们需要较高的执行速度,或一些使用纯Tcl语言不方便实现的功能时,VMD内置的Tcl解释器的表现就不那样尽如人意了。因此这里我简单介绍一下怎么使用C语言给VMD编写它的Tcl解释器能够识别的函数(所谓Tcl C extensions)。本文的实现参考了这篇文章,如果需要更复杂的功能,可以参考Tcl extensions开发手册以及Tcl C API List,编写所需的代码。本文的结果全部基于Linux平台,Windows和Mac用户需要自行尝试。
在本文中,我们将尝试编写一个random函数,用来产生指定数量的随机数,并将结果作为一个list返回。VMD的Tcl解释器已经内置了一个rand函数,但这个PRNG的功能较为简陋,最主要的一点是用户没法指定随机数种子,当我们需要固定的随机数序列(用于debug等等),Tcl内置的rand函数就不太合用了。因此我们编写的函数应该能够自行指定随机数种子,并能够返回随机数种子的数值。我们将使用C语言的rand与srand功能实现这一需求,虽然当对于随机数质量有更高要求时,我们也可以使用dSFMT等PRNG作为backend。以下是正文:
5. 其他
本文中所讲述的方法不仅仅适用于VMD,同样也适用于NAMD的TclForce模块。但应当注意的是,NAMD的内置Tcl解释器版本与VMD的内置Tcl解释器版本不一定相同,在使用前同样应当做好测试。此外,本文并未提及如何从Tcl解释器中获取列表形式的参数用于后续分析,这对于乐意思考的读者来说应当不成问题。
最后附上本文中代码的文本文件: (, 下载次数 Times of downloads: 7)