You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将3×3数据点转换为指定矩阵格式并实现矩阵求和

VASP OUTCAR介电张量后处理

原始输出说明

执行终端命令:

grep ' MACROSCOPIC STATIC DIELECTRIC TENSOR' -A6 OUTCAR

会得到三个矩阵输出(标注matrix(i)为便于区分,实际无编号):

MACROSCOPIC STATIC DIELECTRIC TENSOR (including local field effects in DFT)
 ------------------------------------------------------
          21.231535    -0.000000    -0.000000              ---- matix. (1)
          -0.000000    21.231535    -0.000000
          -0.000000    -0.000000    21.231535
 ------------------------------------------------------

--
 MACROSCOPIC STATIC DIELECTRIC TENSOR (including local field effects in DFT)
 ------------------------------------------------------
          21.231535    -0.000000    -0.000000              ---- matix. (2)
          -0.000000    21.231535    -0.000000
          -0.000000    -0.000000    21.231535
 ------------------------------------------------------

--
 MACROSCOPIC STATIC DIELECTRIC TENSOR IONIC CONTRIBUTION
 ------------------------------------------------------
           4.671391    -0.000004     0.000000              ---- matix. (3)
          -0.000004     4.671584     0.000855
           0.000000     0.000855     4.670146
 ------------------------------------------------------

处理任务1:转换第二个矩阵为指定格式

直接执行以下终端命令,提取第二个矩阵并转换为要求的列表格式:

grep ' MACROSCOPIC STATIC DIELECTRIC TENSOR' -A6 OUTCAR | sed -n '12,14p' | awk '{printf "     - [%s,    %s,    %s]\n", $1, $2, $3}'

输出结果:

- [21.231535,    -0.000000,    -0.000000]
     - [-0.000000,    21.231535,    -0.000000]
     - [-0.000000,    -0.000000,    21.231535]

处理任务2:第二个矩阵与第三个矩阵对应元素相加

  1. 创建名为sum_dielectric.awk的脚本文件,内容如下:
BEGIN {
    # 跳过冗余行,读取第二个矩阵的3行数据
    for (skip=1; skip<=11; skip++) getline;
    for (i=1; i<=3; i++) {
        getline;
        mat2[i][1] = $1; mat2[i][2] = $2; mat2[i][3] = $3;
    }
    # 跳过冗余行,读取第三个矩阵的3行数据
    for (skip=1; skip<=6; skip++) getline;
    for (i=1; i<=3; i++) {
        getline;
        mat3[i][1] = $1; mat3[i][2] = $2; mat3[i][3] = $3;
    }
    # 计算元素和并按格式输出
    for (i=1; i<=3; i++) {
        printf "     - [%.6f,    %.6f,    %.6f]\n", mat2[i][1]+mat3[i][1], mat2[i][2]+mat3[i][2], mat2[i][3]+mat3[i][3];
    }
}
  1. 执行以下终端命令运行脚本:
grep ' MACROSCOPIC STATIC DIELECTRIC TENSOR' -A6 OUTCAR | awk -f sum_dielectric.awk

输出结果:

- [25.902926,    -0.000004,    -0.000000]
     - [-0.000004,    25.903119,    -0.000855]
     - [-0.000000,    -0.000855,    25.901681]

内容的提问来源于stack exchange,提问作者rekha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 22:40:49