24小时热门版块排行榜    

查看: 3392  |  回复: 13

nkleof

银虫 (正式写手)

[求助] 关于源代码 已有3人参与

想看看lammps源代码里面是如何计算原子间相互作用的,结果看来看去都没发现哪块是计算相互作用的,lammps的源代码写的很不容易看清楚啊。
从主程序main.cpp出发,里面除去MPI相关的函数,和创建一个lammps实例,剩下就一句话  lammps->input->file();   调用lammps下的input类的file函数,处理输入文件。
这个file函数里面除去很多判断最后就落到parse函数,对命令进行解析,然后进入execute_command函数调用相应的命令处理函数,但是这里面没有run命令的处理函数。
以pair_style命令为例,对应的pair_style函数会将输入的命令参数(力场名称)和类force下的pair_style字符串比较(然而这个字符串的赋值始终没找到),如果符合就进入相应的settings函数。然后,这个settings函数里面一般就一行判断参数个数的语句就没了。
求高手指点一下,lammps源代码的结构是怎么样的?哪个文件里面包含了原子间相互作用的计算?
回复此楼

» 收录本帖的淘帖专辑推荐

VASP

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

enrity

铁杆木虫 (正式写手)

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
nkleof: 金币+2, 有帮助 2016-05-24 10:23:49
比如,想看lj96势函数的,找pair_lj98_cut.cpp,打开这个CPP文件,就能看到计算作用力的代码
3楼2016-05-23 21:07:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

enrity

铁杆木虫 (正式写手)

【答案】应助回帖

引用回帖:
8楼: Originally posted by nkleof at 2016-05-24 20:38:05
嗯,今天又看了一些代码,发现了run函数,可能是具体的计算过程由update类下面的integrate类的run函数完成,但是这个run函数我目前看到的是虚函数,还没发现可以实例化的代码。然而关于主程序还是不太明白,run函数 ...

用的是C++的多态技术

发自小木虫IOS客户端
9楼2016-05-24 22:58:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

brucefan

专家顾问 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
这个问题有意思。我也正在开发程序,回头研究一下lammps的执行流程,看看是不是也有这样的疑惑。

[ 发自手机版 http://muchong.com/3g ]
2楼2016-05-23 18:41:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

nkleof

银虫 (正式写手)

引用回帖:
3楼: Originally posted by enrity at 2016-05-23 21:07:06
比如,想看lj96势函数的,找pair_lj98_cut.cpp,打开这个CPP文件,就能看到计算作用力的代码

嗯,这个应该是可以理解的,不过我想看的是lammps中怎么把计算的力结果返回到主程序的,分子动力学有个力->速度->位置->力的循环迭代,应该是在主程序中完成的吧,我想知道这个用不同势函数计算的力结果和主程序之间的接口。
4楼2016-05-24 10:23:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

nkleof

银虫 (正式写手)

引用回帖:
3楼: Originally posted by enrity at 2016-05-23 21:07:06
比如,想看lj96势函数的,找pair_lj98_cut.cpp,打开这个CPP文件,就能看到计算作用力的代码

简单来说,我想看的是,在主程序中什么地方调用了这些计算相互作用的函数。
5楼2016-05-24 10:32:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

brucefan

专家顾问 (著名写手)

【答案】应助回帖

★ ★
nkleof: 金币+2, 有帮助 2016-05-24 20:38:14
引用回帖:
5楼: Originally posted by nkleof at 2016-05-24 10:32:25
简单来说,我想看的是,在主程序中什么地方调用了这些计算相互作用的函数。...

也许是在积分的函数里面调用的。积分有两步,中间夹有求力。我自己写程序时就是将求力的函数交给积分的函数调用的。当然,你如果只看主函数可能看不明白,这种大型程序一般会包装好几层才会到具体的真正做计算的函数。我还没仔细查看lammps代码,以上只是我的猜测。

[ 发自手机版 http://muchong.com/3g ]
6楼2016-05-24 15:40:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

enrity

铁杆木虫 (正式写手)

【答案】应助回帖

★ ★
nkleof: 金币+2, 有帮助 2016-05-24 20:38:36
引用回帖:
5楼: Originally posted by nkleof at 2016-05-24 10:32:25
简单来说,我想看的是,在主程序中什么地方调用了这些计算相互作用的函数。...

昨天回你贴目的是领金币来的

楼主应该是看过一些源代码了吧,程序从main函数开始,然后是就转到类 input, 在这个类中,完成了文件的读取,并解析输入命令,然后这个类中的成员函数, excute_command()就是执行每个模拟指令的,计算力的过程也是在这里完成。input类继承了Pointers类,其中的类指钍Force *force可以调用不同的pair_style, bond_style类,当然对应的计算作用力的程序也就在这个过程中完成了

看懂源代码需要花一翻功夫的,我也只看粗略看了一下,希望对你有帮助
7楼2016-05-24 19:00:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

nkleof

银虫 (正式写手)

引用回帖:
6楼: Originally posted by brucefan at 2016-05-24 15:40:38
也许是在积分的函数里面调用的。积分有两步,中间夹有求力。我自己写程序时就是将求力的函数交给积分的函数调用的。当然,你如果只看主函数可能看不明白,这种大型程序一般会包装好几层才会到具体的真正做计算的函 ...

嗯,今天又看了一些代码,发现了run函数,可能是具体的计算过程由update类下面的integrate类的run函数完成,但是这个run函数我目前看到的是虚函数,还没发现可以实例化的代码。然而关于主程序还是不太明白,run函数是在实例化lammps类的过程中完成调用的,但是之后才有input类下的file函数关于输入文件的处理,但是,file函数之后就直接delete lammps,删除实例了!这样的话真正的运算在哪里?
8楼2016-05-24 20:38:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tingl

铁虫 (初入文坛)

楼主,我在编译lammps后,在bench及examples中测试都ok?但是一旦把我自己的in文件及data文件和势文件放在别的目录中,运行时就会首先出现cannot open log.lammps for writing 以及后面会跟着出现application called MPI_Abort(MPI_COMM_WORLD, 1) - process 0。
但是我把我的in文件及data和势文件放在examples/crack中运行,就没有一点错误,,, 这是什么原因造成的?
实在找不到人来求助了,楼主还请原谅!!
10楼2016-05-24 23:11:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 nkleof 的主题更新
信息提示
请填处理意见