统计轨迹中分子速度大小沿某一方向的分布

类别:    标签: awk gmx   阅读次数:   版权: (CC) BY-NC-SA

写过一个简单的awk脚本, 用来统计轨迹中水分子的质心速度大小沿坐标的变化情况, 目的是可以用来拟合计算粘度. 具体的计算方法可参考:

A Comparison Of The Value Of Viscosity For Several Water Models Using Poiseuille Flow In A Nano-channel

A. P. Markesteijn, Remco Hartkamp, S. Luding, J. Westerweel; J. Chem. Phys. 136(13):134104, 2012; 10.1063/1.3697977

脚本只能处理gro格式的轨迹, 效率不是很高, 但基本能用. 放在这里, 存个档, 也供需要的人参考吧.

zvx.bsh
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
awk ' BEGIN {
	mo=16; mh=1; M=mo+2*mh   # 定义原子质量
	Ntot=10                  # 定义要计算的帧数
	Zmin=3; Zmax=26; dZ=0.2  # 定义计算区间, 分格间距
	Nfrm=0; N=int((Zmax-Zmin)/dZ)
	for(i=0; i<=N; i++) { Z[i]=Zmin+i*dZ; Vx[i]=0; Nwat[i]=0 }
}

NF==1 { Nfrm++ }
NF>6 && $2~/OW/ {   # 根据 OW 原子统计
	         z  = mo*$(NF-3); vx  = mo*$(NF-2) # O 的z坐标, x方向速度
	getline; z += mh*$(NF-3); vx += mh*$(NF-2) # H1的
	getline; z += mh*$(NF-3); vx += mh*$(NF-2) # H2的

	z /= M; vx /= M    # 质心坐标和速度
	i=int((z-Zmin)/dZ)
	Nwat[i]++; Vx[i] += vx
	if(Nfrm>Ntot) exit
}
END {
	print "# Z: ["Zmin":"Zmax":"dZ"]    Frames: " Nfrm
	for(i=0; i<=N; i++) if(Nwat[i]>0) printf"%f %f\n", Z[i], Vx[i]/Nwat[i]
}
' File.gro >Z-Vx.xvg

评论

◆本文地址: , 转载请注明◆
◆评论问题: https://jerkwin.herokuapp.com/category/3/博客, 欢迎留言◆


前一篇: 【整理】APBS教程
后一篇: 糖及其GLYCAM力场中的命名约定

访问人次(2015年7月 9日起): | 最后更新: 2024-04-16 06:38:20 UTC | 版权所有 © 2008 - 2024 Jerkwin