Ovtio_统计Voronoi多面体随温度,应变等变化——lammps后处理

需要分析的文件,放进列表中。

file_list = ['A.dump','B.dump']

建立空列表,统计所有的voronoi多面体指数

total_index = []

导入文件,使用vorono 进行分析。

for file_id,file_ou in zip(file_list,file_out):
    # 加载dump文件
    pipeline = import_file('..//'+file_id)
    # 设置VoronoiAnalysisModifier分析参数
    voro = VoronoiAnalysisModifier(
        compute_indices = True,
        use_radii = False,
        edge_threshold = 0
    )
    #VoronoiAnalysisModifier分析添加到pipeline
    pipeline.modifiers.append(voro)
    #计算pipeline,Voronoi Index即为Voronoi多面体指数
    data = pipeline.compute()
    # 查看粒子属性
    # print(data.particles)
    voro_indices = data.particles['Voronoi Index']
    # 3 4 5 6 7 8面
    voro_indices = numpy.array([item[2:8] for item in voro_indices])
    for item in voro_indices:
        # 3 4 5 6 7 8面
        item = tuple(item)
        if(item not in total_index):
            total_index.append(item)

建立三个二维列表,用于存放数据。

matrix_total = [[0 for _ in range(len(file_list)+1)] for _ in range(len(total_index))]
matrix_total_1 = [[0 for _ in range(len(file_list)+1)] for _ in range(len(total_index))]
matrix_total_2 = [[0 for _ in range(len(file_list)+1)] for _ in range(len(total_index))]
for index,item in enumerate(total_index):
    matrix_total[index][0] = item

for index,item in enumerate(total_index):
    matrix_total_1[index][0] = item

for index,item in enumerate(total_index):
    matrix_total_2[index][0] = item

再次循环,统计分析,并且将分析结果写入文件。

rows_data = 0
for file_id,file_ou in zip(file_list,file_out):
    rows_data = rows_data + 1
    # 加载dump文件
    pipeline = import_file('..//'+file_id)
    # 设置VoronoiAnalysisModifier分析参数
    voro = VoronoiAnalysisModifier(
        compute_indices = True,
        use_radii = False,
        edge_threshold = 0
    )
    #VoronoiAnalysisModifier分析添加到pipeline
    pipeline.modifiers.append(voro)
    #计算pipeline,Voronoi Index即为Voronoi多面体指数
    data = pipeline.compute()
    # 查看粒子属性
    # print(data.particles)
    voro_indices = data.particles['Voronoi Index']
    # 3 4 5 6 7 8面
    voro_indices = numpy.array([item[2:8] for item in voro_indices])
    atom_type = data.particles['Particle Type']
    voro_indices_1 = [voro_indices[index] for index,item in enumerate(atom_type) if item==1]
    voro_indices_2 = [voro_indices[index] for index,item in enumerate(atom_type) if item==2]
    #定义Voronoi指数统计函数
    def row_histogram(a):
        ca = numpy.ascontiguousarray(a).view([('', a.dtype)] * a.shape[1])
        unique, indices, inverse = numpy.unique(ca, return_index=True, return_inverse=True)
        counts = numpy.bincount(inverse)
        sort_indices = numpy.argsort(counts)[::-1]
        return (a[indices[sort_indices]], counts[sort_indices])

    # 调用函数统计Voronoi指数
    unique_indices, counts = row_histogram(voro_indices)
    unique_indices_1, counts_1 = row_histogram(numpy.array(voro_indices_1))
    unique_indices_2, counts_2 = row_histogram(numpy.array(voro_indices_2))

    for item1, item2 in zip(unique_indices, counts):
        item1 = tuple(item1)
        for value in range(len(matrix_total)):
            if(item1==matrix_total[value][0]):
                matrix_total[value][rows_data] = item2
    for item1, item2 in zip(unique_indices_1, counts_1):
        item1 = tuple(item1)
        for value in range(len(matrix_total_1)):
            if(item1==matrix_total_1[value][0]):
                matrix_total_1[value][rows_data] = item2
    for item1, item2 in zip(unique_indices_2, counts_2):
        item1 = tuple(item1)
        for value in range(len(matrix_total_2)):
            if(item1==matrix_total_2[value][0]):
                matrix_total_2[value][rows_data] = item2
    print(file_id)


def write_matrix(filename,matrix_id):
    with open(filename, 'w') as file:
        # 遍历列表并写入文件
        file.write('voro_indices; ')
        for item in file_out:
            file.write(str(item)+'; ')
        file.write('\n')
        for row in matrix_id:
            # 将每行的元素转换为字符串,并用逗号分隔
            row_string = '; '.join(map(str, row))
            # 写入文件,并在每行后添加换行符
            file.write(row_string + '\n')   


write_matrix('.//voro index//'+'matrix_total',matrix_total)
write_matrix('.//voro index//'+'matrix_total_1',matrix_total_1)
write_matrix('.//voro index//'+'matrix_total_2',matrix_total_2)

因为本体系是双原子体系,所以共有三个文件:

分别对应总的,类型1,类型2。

文件中的数据格式,大概如下,不过我的文件多余两个。

列与导入文件的顺序一致,第一个文件对应第一列…….

数据经过排序后,导入origin中可作图。 

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值