我是编程和分子动力学模拟的新手。我正在使用LAMMPS来模拟物理气相沉积(PVD)过程,并确定不同时间步长中原子之间的相互作用。
在我执行分子动力学模拟后,LAMMPS为我提供了一个输出键文件,其中包含每个单个原子的记录(作为原子ID),它们的类型(向特定元素的编号),以及与这些特定原子键合的其他原子的信息。 典型的债券文件如下所示。
我的目标是根据原子的类型(如组1:氧-氢-氢)对原子进行三组分类,方法是考虑它们从键输出文件中的键合信息,并计算每个时间步长的组数。我使用熊猫,并为每个时间步长创建了一个数据帧。
df = pd.read_table(directory, comment="#", delim_whitespace= True, header=None, usecols=[0,1,2,3,4,5,6] )
headers= ["ID","Type","NofB","bondID_1","bondID_2","bondID_3","bondID_4"]
df.columns = headers
df.fillna(0,inplace=True)
df = df.astype(int)
timestep = int(input("Number of Timesteps: ")) #To display desired number of timesteps.
total_atom_number = 53924 #Total number of atoms in the simulation.
t= 0 #code starts from 0th timestep.
firstTime = []
while(t <= timestep):
open('file.txt', 'w').close() #In while loop = displays every timestep individually, Out of the while loop = displays results cumulatively.
i = 0
df_tablo =(df[total_atom_number*t:total_atom_number*(t+1)]) #Creates a new dataframe that inlucdes only t'th timestep.
df_tablo.reset_index(inplace=True)
print(df_tablo)
请参阅此示例,该示例说明了我对 3 个原子进行分组的算法。键合列显示与其行中的原子键合在一起的不同原子(按原子 ID)。例如,通过使用该算法,我们可以对[1,2,5]和[1,2,6]进行分组,但不能对[1,2,1]进行分组,因为原子不能与自身建立键。此外,我们可以在分组后将这些原子ID(第一列)转换为它们的原子类型(第二列),例如[1,3,7]到[1,1,3]。
通过遵循上面提到的键,1)我可以成功地将原子相对于它们的ID分组,2)将它们转换为它们的原子类型,3)分别计算每个时间步中存在的组数。第一个 while 循环(上图)计算每个时间步的组,而第二个 while 循环(下图)将每行中的原子(等于存在的每个原子 ID)与数据帧中不同行的相应绑定原子进行分组。
繁星coding
相关分类