计算化学公社

标题: 如何将Material_Studio的xtd文件中原子的受力信息导出 [打印本页]

作者
Author:
zqliu    时间: 2018-9-18 21:07
标题: 如何将Material_Studio的xtd文件中原子的受力信息导出
请教下各位老师同学

      如何将Material Studio的xtd文件中原子的受力信息导出?(PS:分子动力学模拟过程中已勾选了 WriteForces => "Yes")。参考Sob老师的的博文 http://sobereva.com/143 可以将xtd的轨迹文件信息输出来,请问下如何修改perl脚本得到每个原子的受力信息呢?

查看MS手册,有几行命令告知可以输出力信息

my $force = $atom->Force;my $force = $atom->Force; if  ( $force ) {    # force is defined on this atom    print $force->X, " ", $force->Y, " ", $force->Z,"\n";}
但是依旧没有解决,期待大家的帮助,非常感谢!
祝好



作者
Author:
hxd_yi    时间: 2018-9-19 00:49
本帖最后由 hxd_yi 于 2018-9-19 01:28 编辑

http://sobereva.com/143中的脚本中$xmolFile->Append(sprintf "%s %f  %f  %f \n",$atom->ElementSymbol, $atom->X, $atom->Y,$atom->Z); 这一行改为
$xmolFile->Append(sprintf "%s %f  %f  %f \n",$atom->ElementSymbol, $atom->Force->X, $atom->Force->Y,$atom->Force->Z) if ($atom->Force);

具体代码如下:
#!perl

use strict;
use warnings;
use Getopt::Long;
use MaterialsScript qw(:all);

my $inf = "C6H12.xtd";
my $outf = "d:/C6H12.xyz";
my $doc = $Documents{$inf} or die "Can't open $inf";
open(my $fout, ">", $outf) or die "Can't write $outf";

for my $i ($doc->Trajectory->StartFrame .. $doc->Trajectory->EndFrame){
        $doc->Trajectory->CurrentFrame = $i;
        printf $fout "%d\n", scalar(@{$doc->Atoms});
        print $fout "Frame: $i\n";
        printf $fout "%-2s %15.6lf %15.6lf %15.6lf\n", $_->ElementSymbol, $_->Force->X, $_->Force->Y, $_->Force->Z for (grep $_->Force, @{$doc->Atoms});
}
close($fout);
$doc->Close;


在ms中用Windows端提交,那么需要用sobereva脚本中Append,自己在linux中用RunMatScript.sh计算的话,可以不用Append。记得把$inf和$outf改一下。

作者
Author:
zqliu    时间: 2018-9-19 02:24
hxd_yi, 根据您的建议, 问题已解决,非常感谢!

     另外请教下,在MS中,我想使用受限动力学求解某个原子的 PMF (potential of Mean Force), 因此选取了一定的路径,并将原子固定在该路径上,希望通过MD模拟,输出力信息,及积分得到PMF。
    然而我发现固定的原子的受力在同一个点不随时间变化,这是为什么? 该力不是应该随时间变化的吗?MD需要跑较长时间直到该力收敛,才可以求解PMF。请问下这该如何理解?
作者
Author:
YANGYONGLI    时间: 2019-11-20 10:03
您好,我想请教一下利用MS做PMF曲线的问题解决了吗

作者
Author:
hxd_yi    时间: 2020-5-25 23:30
YANGYONGLI 发表于 2019-11-20 10:03
您好,我想请教一下利用MS做PMF曲线的问题解决了吗

这里有MS的论坛https://www.3ds.com/products-services/biovia/communities/,可以注册查看。

PMF代码的我搬运了一下。
https://r1132100503382-eu1-3dswy ... 6L8-NQEum6GwzU512ew
(, 下载次数 Times of downloads: 37)





作者
Author:
葡萄成熟时    时间: 2025-7-10 01:07
hxd_yi 发表于 2018-9-19 00:49
把http://sobereva.com/143中的脚本中$xmolFile->Append(sprintf "%s %f  %f  %f \n",$atom->ElementSymbol ...

你好,为什么我用您所说的代码,输出的结果中,每一帧下面只有一个数,而且每一帧都是一样的数值,我有点不同是什么意思,可以帮我解读一下吗
作者
Author:
hxd_yi    时间: 2025-7-11 14:22
葡萄成熟时 发表于 2025-7-10 01:07
你好,为什么我用您所说的代码,输出的结果中,每一帧下面只有一个数,而且每一帧都是一样的数值,我有点 ...

printf $fout "%-2s %15.6lf %15.6lf %15.6lf\n", $_->ElementSymbol, $_->Force->X, $_->Force->Y, $_->Force->Z for (grep $_->Force, @{$doc->Atoms})
选取力这一项不为空的原子,输出它们的元素符号和所受到的力
你这里大概率不是MS算的轨迹,是另外导入的,所以力这一项是缺失的。
每帧下面的数字是xyz格式需要的原子数。
作者
Author:
葡萄成熟时    时间: 2025-7-30 23:01
hxd_yi 发表于 2025-7-11 14:22
printf $fout "%-2s %15.6lf %15.6lf %15.6lf\n", $_->ElementSymbol, $_->Force->X, $_->Force->Y, $_-> ...

我是通过其他脚本求出来的XTD文件,这样会导致数据缺失吗

作者
Author:
hxd_yi    时间: 2025-7-31 10:25
葡萄成熟时 发表于 2025-7-30 23:01
我是通过其他脚本求出来的XTD文件,这样会导致数据缺失吗

如果你导入到xtd的时候没有导入受力信息,自然从xtd中导出力信息的时候为空白




欢迎光临 计算化学公社 (http://ccc.keinsci.com/) Powered by Discuz! X3.3