【LAMMPS学习】八、基础知识(3.9)输出结构化数据

8. 基础知识

此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各种模拟。

8.1.通用基础知识

8.2. 设置入门

8.3. 分析入门

8.3.1. LAMMPS 的输出(thermo, dumps, computes, fixes, variables

8.3.2.使用chunks计算系统属性 

8.3.3.使用分布式网格 

8.3.4.计算温度

8.3.5.计算弹性常数

8.3.6.计算热导率

8.3.7.计算粘度

8.3.8.计算扩散系数

8.3.9.从 LAMMPS 输出结构化数据

LAMMPS可以使用print 和 fix print 命令输出结构化数据。这为您提供了灵活性,因为您可以构建包含系统属性、热数据和变量值的自定义数据格式。该输出可以定向到屏幕和/或文件以进行后处理。

写入当前系统状态、热数据、变量值 

使用print 命令输出当前系统状态,其中可以包括系统属性、热数据和变量值。

YAML

print """---
timestep: $(step)
pe: $(pe)
ke: $(ke)
...""" file current_state.yaml screen no

current_state.yaml

---
timestep: 250
pe: -4.7774327356321810711
ke: 2.4962152903997174569

JSON

print """{
  "timestep": $(step),
  "pe": $(pe),
  "ke": $(ke)
}""" file current_state.json screen no

current_state.json

{
  "timestep": 250,
  "pe": -4.7774327356321810711,
  "ke": 2.4962152903997174569
}

be54ac5ed1714d8f8698851fe769d890.png

YAML 格式 Thermo_style 或 dump_style 输出

从log文件中提取数据

2022 年 3 月 24 日版本中的新增内容。

LAMMPS 支持热样式“yaml”,对于“自定义”样式热力学输出,可以使用thermo_modify line yaml将格式更改为YAML。这将生成一个紧凑的 YAML 格式的输出块 - 每次运行一个“文档” - 具有以下样式:

---
keywords: ['Step', 'Temp', 'E_pair', 'E_mol', 'TotEng', 'Press', ]
data:
  - [100, 0.757453103239935, -5.7585054860159, 0, -4.62236133677021, 0.207261053624721, ]
  - [110, 0.759322359337036, -5.7614668389562, 0, -4.62251889318624, 0.194314975399602, ]
  - [120, 0.759372342462676, -5.76149365656489, 0, -4.62247073844943, 0.191600048851267, ]
  - [130, 0.756833027516501, -5.75777334823494, 0, -4.62255928350835, 0.208792327853067, ]
...

可以使用 python 从日志文件中提取和解析这些数据:

import re, yaml
try:
    from yaml import CSafeLoader as Loader
except ImportError:
    from yaml import SafeLoader as Loader

docs = ""
with open("log.lammps") as f:
    for line in f:
        m = re.search(r"^(keywords:.*$|data:$|---$|\.\.\.$|  - \[.*\]$)", line)
        if m: docs += m.group(0) + '\n'

thermo = list(yaml.load_all(docs, Loader=Loader))

print("Number of runs: ", len(thermo))
print(thermo[1]['keywords'][4], ' = ', thermo[1]['data'][2][4])

加载 YAML 数据后,thermo 是一个列表,其中包含每个“run”的字典,其中标签“keywords”映射到thermo标题字符串列表,标签“data”有一个列表列表,其中外部列表​​代表行输出和内部列表匹配该步骤的标题关键字的列的值。例如,第二个 print() 命令将打印第二次运行的第五个关键字的标头字符串以及该运行的第三个输出行的相应值:

Number of runs:  2
TotEng  =  -4.62140097780047

ac44e3b27f854817867e055c2af9ac5e.png

从dump文件中提取数据

2022 年 5 月 4 日版本中的新增功能。

YAML 格式输出已添加到 LAMMPS 中的多个命令中,例如 dump yaml 和 fix ave/time根据写入的数据类型,数据的组织或使用的特定语法可能会发生变化,但原理非常相似,并且都文件应该可以使用合适的 YAML 解析器读取。下面给出了一个简单的示例:

import yaml
try:
    from yaml import CSafeLoader as YamlLoader
except ImportError:
    from yaml import SafeLoader as YamlLoader

timesteps = []
with open("dump.yaml", "r") as f:
    data = yaml.load_all(f, Loader=YamlLoader)

    for d in data:
        print('Processing timestep %d' % d['timestep'])
        timesteps.append(d)

print('Read %d timesteps from yaml dump' % len(timesteps))
print('Second timestep: ', timesteps[1]['timestep'])
print('Box info: x: ' , timesteps[1]['box'][0], ' y:', timesteps[1]['box'][1], ' z:',timesteps[1]['box'][2])
print('First 5 per-atom columns: ', timesteps[1]['keywords'][0:5])
print('Corresponding 10th atom data: ', timesteps[1]['data'][9][0:5])

添加到“melt”示例的 YAML 转储命令的相应输出是:

Processing timestep 0
Processing timestep 50
Processing timestep 100
Processing timestep 150
Processing timestep 200
Processing timestep 250
Read 6 timesteps from yaml dump
Second timestep:  50
Box info: x:  [0, 16.795961913825074]  y: [0, 16.795961913825074]  z: [0, 16.795961913825074]
First 5 per-atom columns:  ['id', 'type', 'x', 'y', 'z']
Corresponding 10th atom data:  [10, 1, 4.43828, 0.968481, 0.108555]

使用 Python 处理标量数据 

d785f48eace045f0b4e31cc888b02250.png

读取和解析 YAML 格式数据后,可以轻松导入该数据,以便使用pandas 和 matplotlib Python 模块进行进一步处理和可视化。由于 YAML 格式热输出中的数据组织,需要告知它仅处理导入数据的“数据”部分来创建 pandas 数据框,并且需要从“关键字”设置列名称' 入口。以下 Python 脚本代码示例对此进行了演示,并在将 thermo style 更改为“yaml”后,创建了各种键合能贡献与运行“肽”示例输入的时间步的简单图右侧所示的图像。可以通过关键字方便地选择用于 x 和 y 值的属性。请注意,可以使用 thermo_modify colname命令将这些关键字更改为自定义字符串。

import re, yaml
import pandas as pd
import matplotlib.pyplot as plt

try:
    from yaml import CSafeLoader as Loader
except ImportError:
    from yaml import SafeLoader as Loader

docs = ""
with open("log.lammps") as f:
    for line in f:
        m = re.search(r"^(keywords:.*$|data:$|---$|\.\.\.$|  - \[.*\]$)", line)
        if m: docs += m.group(0) + '\n'

thermo = list(yaml.load_all(docs, Loader=Loader))

df = pd.DataFrame(data=thermo[0]['data'], columns=thermo[0]['keywords'])
fig = df.plot(x='Step', y=['E_bond', 'E_angle', 'E_dihed', 'E_impro'], ylabel='Energy in kcal/mol')
plt.savefig('thermo_bondeng.png')

使用 Python 处理矢量数据 

由 fix ave/time 生成的全局矢量数据使用略有不同的数据组织。您仍然拥有列标题和数据的字典键“keywords”和“data”。但数据是按时间步长索引的字典,每个步骤都有多行值,每行都有一个平均属性列表。这需要稍微不同的处理,因为整个数据不能直接导入到单个 pandas DataFrame 类实例中。以下 Python 脚本示例演示了如何读取此类数据。结果将把不同步骤的数据合并到一个大的“多索引”表中。然后可以使用 pandas IndexSlice 类从该组合数据框中选择数据。

import yaml
import pandas as pd

try:
    from yaml import CSafeLoader as Loader
except ImportError:
    from yaml import SafeLoader as Loader

with open("ave.yaml") as f:
    ave = yaml.load(f, Loader=Loader)

keys = ave['keywords']
df = {}
for k in ave['data'].keys():
    df[k] = pd.DataFrame(data=ave['data'][k], columns=keys)

# create multi-index data frame
df = pd.concat(df)

# output only the first 3 value for steps 200 to 300 of the column Pressure
idx = pd.IndexSlice
print(df['Pressure'].loc[idx[200:300, 0:2]])

d3626c823a29484fb8a5d1905184f0c5.png

使用 Perl 处理标量数据

The ease of processing YAML data is not limited to Python. Here is an example for extracting and processing a LAMMPS log file with Perl instead.
处理 YAML 数据的简便性并不限于 Python。下面是使用 Perl 提取和处理 LAMMPS 日志文件的示例。

use YAML::XS;

open(LOG, "log.lammps") or die("could not open log.lammps: $!");
my $file = "";
while(my $line = <LOG>) {
    if ($line =~ /^(keywords:.*$|data:$|---$|\.\.\.$|  - \[.*\]$)/) {
        $file .= $line;
    }
}
close(LOG);

# convert YAML to perl as nested hash and array references
my $thermo = Load $file;

# convert references to real arrays
my @keywords = @{$thermo->{'keywords'}};
my @data = @{$thermo->{'data'}};

# print first two columns
print("$keywords[0] $keywords[1]\n");
foreach (@data) {
    print("${$_}[0]  ${$_}[1]\n");
}

在模拟期间写入连续数据

fix print 命令允许您在模拟运行期间在定义的时间输出任意字符串。

YAML

fix extra all print 50 """
- timestep: $(step)
  pe: $(pe)
  ke: $(ke)""" file output.yaml screen no

output.yaml

# Fix print output for fix extra
- timestep: 0
  pe: -6.77336805325924729
  ke: 4.4988750000000026219

- timestep: 50
  pe: -4.8082494418323200591
  ke: 2.5257981827119797558

- timestep: 100
  pe: -4.7875608875581505686
  ke: 2.5062598821985102582

- timestep: 150
  pe: -4.7471033686005483787
  ke: 2.466095925545450207

- timestep: 200
  pe: -4.7509052858544134068
  ke: 2.4701136792591693592

- timestep: 250
  pe: -4.7774327356321810711
  ke: 2.4962152903997174569

YAML 文件的后处理可以使用 Python 和其他脚本语言轻松完成。对于 Python,yaml 包允许您加载数据文件并获取字典列表。

import yaml

with open("output.yaml") as f:
   data = yaml.load(f, Loader=yaml.FullLoader)

print(data)
[{'timestep': 0, 'pe': -6.773368053259247, 'ke': 4.498875000000003}, {'timestep': 50, 'pe': -4.80824944183232, 'ke': 2.5257981827119798}, {'timestep': 100, 'pe': -4.787560887558151, 'ke': 2.5062598821985103}, {'timestep': 150, 'pe': -4.747103368600548, 'ke': 2.46609592554545}, {'timestep': 200, 'pe': -4.750905285854413, 'ke': 2.4701136792591694}, {'timestep': 250, 'pe': -4.777432735632181, 'ke': 2.4962152903997175}]

行分隔 JSON (LD-JSON) 

JSON 格式本身对于分隔符非常严格。对于连续输出/流数据,使用行分隔的 JSON 格式是有益的。每一行代表一个 JSON 对象。

fix extra all print 50 """{"timestep": $(step), "pe": $(pe), "ke": $(ke)}""" title "" file output.json screen no

output.json

{"timestep": 0, "pe": -6.77336805325924729, "ke": 4.4988750000000026219}
{"timestep": 50, "pe": -4.8082494418323200591, "ke": 2.5257981827119797558}
{"timestep": 100, "pe": -4.7875608875581505686, "ke": 2.5062598821985102582}
{"timestep": 150, "pe": -4.7471033686005483787, "ke": 2.466095925545450207}
{"timestep": 200, "pe": -4.7509052858544134068, "ke": 2.4701136792591693592}
{"timestep": 250, "pe": -4.7774327356321810711, "ke": 2.4962152903997174569}

将此数据加载到 Python 脚本中的一种简单方法是使用 pandas 包。它可以直接将这些文件加载​​到数据框中:

import pandas as pd

data = pd.read_json('output.json', lines=True)
print(data)
   timestep        pe        ke
0         0 -6.773368  4.498875
1        50 -4.808249  2.525798
2       100 -4.787561  2.506260
3       150 -4.747103  2.466096
4       200 -4.750905  2.470114
5       250 -4.777433  2.496215

cbdd5f0002d24802a599a6e2e6a1aabc.png

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/563362.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

android开发 多进程的基本了解

目录 如何开启多进程?理解多进程模式的运行机制 如何开启多进程? 给四大组件在androidMenifest中指定android:precess <activityandroid:name".ThreeActivity"android:exported"false"android:process"com.my.process.three.remote" />…

冒泡排序c++

题目描述 编程输入n(1≤n≤20)个小于1000非负整数&#xff0c;然后自动按从大到小的顺序输出。&#xff08;冒泡排序&#xff09; 输入 第一行&#xff0c;数的个数n; 第二行&#xff0c;n个非负整数。 输出 由大到小的n个非负整数&#xff0c;每个数占一行。 样例输入 …

C++异步编程小论

目录 std::async与std::future 其他 std::package_task std::promise Reference 浅论&#xff1a;我看有人写的浅论异步编程的文章实际上在干的是介绍多线程&#xff0c;这里刚好最近对异步编程有所兴趣&#xff1a;我们来看看几个C11新加进来的一些异步编程关键字。 这里…

揭开ChatGPT面纱(3):使用OpenAI进行文本情感分析(embeddings接口)

文章目录 一、embeddings接口解析二、代码实现1.数据集dataset.csv2.代码3.运行结果 openai版本1.6.1 本系列博客源码仓库&#xff1a;gitlab&#xff0c;本博客对应文件夹03 在这一篇博客中我将使用OpenAI的embeddings接口判断21条服装评价是否是好评。 首先来看实现思路&am…

视频教程下载:用ChatGPT的 API 开发AI应用指南

通过这门关于 OpenAI API 和 ChatGPT API 的全面课程&#xff0c;在您的应用中释放人工智能的力量。随着人工智能技术的快速发展&#xff0c;比以往任何时候都更重要的是保持领先地位&#xff0c;并为您的项目利用这些尖端工具。在本课程中&#xff0c;您将深入了解人工智能驱动…

每日论文推荐:Prismatic VLMs VLM设计经验总结

&#x1f4cc; 元数据概览&#xff1a; 标题&#xff1a;“Prismatic VLMs: Investigating the Design Space of Visually-Conditioned Language Models”作者&#xff1a;Siddharth Karamcheti, Suraj Nair, Ashwin Balakrishna, Percy Liang, Thomas Kollar, Dorsa Sadigh&a…

LLM学习笔记-2

在未标记数据上进行预训练 本章概要 在上节的笔记中&#xff0c;因为训练出的效果&#xff0c;并不是特别理想&#xff0c;在本节中&#xff0c;会用数据进行训练&#xff0c;使得模型更加的好&#xff1b; 计算文本生成损失 inputs torch.tensor([[16833, 3626, 6100],…

SpringBoot 操作 Redis

导入对应版本的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>修改配置文件中的信息 spring:redis:host: 127.0.0.1port: 8888注意: 我这里 xsh…

springboot注解开发如何映射对象型数据

创作灵感 最近在帮学校写一款小程序时&#xff0c;有这样一个数据需要展示&#xff1a;一条申请记录&#xff0c;里面包含了申请时间、申请状态、申请所提供的六条活动记录等待&#xff0c;其中&#xff0c;申请所提供的六条活动记录为一个数组&#xff0c;数组中的每个元素又…

面板数据门槛归回分析,xthreg的安装,xthreg2安装包

我用的是Stata17,数据是不平衡的面板数据,需要用到xthreg2,虽然我找到了xthreg2.ado,但是还需要安装xthreg,因为运行xthreg2需要xthreg包顺带安装的lxthreg.mlib文件。但是!我后来发现还是不行,最后是去买了一个真正能用到xthreg2的lxthreg.mlib文件,才可以运行。 一、…

[图解]软件开发中的糊涂用语-04-为什么要追究糊涂用语

0 00:00:00,030 --> 00:00:05,620 今天呢&#xff0c;我们来说一个为什么要追究糊涂用语的问题 1 00:00:06,310 --> 00:00:06,548 2 00:00:06,548 --> 00:00:11,077 大家知道我们前些天都发了好几个视频 3 00:00:11,077 --> 00:00:13,461 追究这个糊涂用语 4 00…

2024免费专为Mac用户设计的清理和优化工具CleanMyMac X

CleanMyMac X是一款专为Mac用户设计的清理和优化工具。以下是对CleanMyMac X的详细介绍&#xff1a; 一、主要功能 系统清理&#xff1a;CleanMyMac X能够智能扫描Mac的磁盘空间&#xff0c;识别并清理各种垃圾文件&#xff0c;这些垃圾文件包括重复文件、无用的语言安装包、i…

五.音视频编辑-音频混合-应用

引言 音频混合技术是一项强大的工具&#xff0c;可以为应用程序增添丰富的功能和用户体验。在前一篇博客中&#xff0c;我们深入探讨了AVFoundation框架中的音频混合基础知识和实现方法。现在&#xff0c;让我们进一步探索&#xff0c;看看如何将这些技术应用到实际项目中。 …

Django项目无法安装python-ldap依赖解决方案

最近工作中安排了一个Python web项目&#xff0c;使用Pycharm从git拉取代码后&#xff0c;配置号Python的解释器和pip后&#xff0c;Pycharm自动下载安装项目所需的依赖&#xff0c;但是有一个依赖django-auth-ldap4.1.0安装始终失败&#xff0c;最初的异常信息提示是&#xff…

Java客户端如何直接调用es的API

Java客户端如何直接调用es的API 一. 问题二. withJson 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 一. 问题 今天做项目的时候&#xff0c;想要直接通过java客户端调用es的api…

解决Django中调页面时出现“Did you forget to register or load this tag”报错

解决Django中调页面时出现“Did you forget to register or load this tag?”报错 1.问题收录 2.分析问题 在HTML文件中&#xff0c;{{title}}&#xff0c;{{lanyy}}&#xff0c;django 默认规定的语法&#xff0c;用{{}}包起来的变量叫做模板变量。 django渲染模板时会将大…

2.1K Star微软开源的高质量 iot库

功能描述 该项目是一个开源的 .NET Core 实现&#xff0c;旨在帮助开发者构建适用于物联网(IoT)设备和场景的应用程序。它提供了与传感器、显示器和输入设备等相互作用所需的 GPIO 引脚、串口等硬件的接口。该仓库包含 System.Device.Gpio 库以及针对各种板卡&#xff08;如 Ra…

论文笔记:Time-LLM: Time Series Forecasting by Reprogramming Large Language Models

iclr 2024 reviewer 评分 3888 1 方法 提出了 Time-LLM&#xff0c; 是一个通用的大模型重编程&#xff08;LLM Reprogramming&#xff09;框架将 LLM 轻松用于一般时间序列预测&#xff0c;而无需对大语言模型本身做任何训练 为什么需要时序数据和文本数据对齐&#xff1a;时…

vi, vim,data,wc,系统常用命令-读书笔记(十)

vi 文本编辑器 基本上 vi 共分为三种模式&#xff0c;分别是“一般指令模式”、“编辑模式”与“命令行命令模式”。这三种模式的作用分别是&#xff1a; 一般指令模式&#xff08;command mode&#xff09;以 vi 打开一个文件就直接进入一般指令模式了&#xff08;这是默认的…

分类预测 | Matlab实现CNN-LSTM-SAM-Attention卷积长短期记忆神经网络融合空间注意力机制的数据分类预测

分类预测 | Matlab实现CNN-LSTM-SAM-Attention卷积长短期记忆神经网络融合空间注意力机制的数据分类预测 目录 分类预测 | Matlab实现CNN-LSTM-SAM-Attention卷积长短期记忆神经网络融合空间注意力机制的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Mat…