[PYTHON] OpenFOAM-Zeitreihendaten lesen und Daten einstellen

Überblick

Ich habe eine Funktion zum Lesen von OpenFOAM-Zeitreihendaten und zum Festlegen von Daten (vom Beispielbefehl ausgegebene räumliche Verteilungsdaten) in Python erstellt und das Plotten mit matplotlib vereinfacht.

Grundsätzlich werden die Zeitreihendaten von OpenFOAM bei jedem Neustart in einem neuen Verzeichnis gespeichert. Es wird jedoch davon ausgegangen, dass sie mit dem Befehl cat verbunden sind, um eine einzelne Datei zu bilden.

Python-Code

Funktion zum Lesen von Zeitreihendaten

def readHistory(case, positions, variables):
    import numpy as np
    
    """
    case: case name (string data)
    positions: position name (list data)
    variables: physical quantities (list data)
    """
    
    data ={}

    for position in positions:
        for variable in variables:
            key = variable+"_"+position
            value = np.genfromtxt(case+"/"+position+"/"+variable, unpack=True)
            data[key] = value
        
    return data

Funktionen zum Lesen von Satzdaten

Argumentbeschreibung

def readSets(case, file, variables):
    import numpy as np
    import pandas as pd
    import glob
    import os
    
    """
    case: case name (string data)
    file: sets data file name (string data)
    variables: physical quantities (list data)
    """

    # list of timing
    list1 = glob.glob(case + "/sets/*")
    
    variable_names = file.split("_")
    # remove ".xy" 
    variable_names[-1] = variable_names[-1].split(".")[0]
    position, variable_names[0] = variable_names[0], "x"
    #print(variable_names)
        
    data = {}
    for variable in variables:
        key = variable+"_"+position
        data[key] = pd.DataFrame()
        
        for i in list1:
            path = i+"/" + file
            df = pd.read_table(path, header = None, names = variable_names)   
            data[key] = pd.concat([data[key], df[variable]], axis=1,)
    
        list_index=[]    
        for i in list1:
            list_index.append(str(float(os.path.basename(i))))
    
        data[key].columns = list_index
        data[key] = pd.concat([df[variable_names[0]], data[key].sort_index(axis=1)], axis=1)
    
    # return dictionary of dataframe
    return data

Grundstück mit Matplotlib

Zeichnen Sie die Daten mit matplotlib.

Angenommen, das Datenlayout ist wie folgt. test01 ist der Fallname.

test01/position-A/p test01/position-A/U test01/position-B/p test01/position-B/U test01/sets/0/center_p_k.xy test01/sets/10/center_p_k.xy

p und U sind Zeitreihendaten von Position A und B. center_p_k.xy sind die Verteilungsdaten zu den Zeitpunkten 0 und 10. ist.

Es gibt mehrere Fälle, und es wird davon ausgegangen, dass Sie problemlos ein Diagramm erstellen können, bei dem nur der Fallname geändert wird.

import matplotlib.pyplot as plt
%matplotlib inline

case = "test01"
history_position = ["position-A", "position-B"]
history_variables = ["p", "U"]
sets_variables = ["p", "k"]
sets_position = "center"
dataSet_test01= [readHistory(case, history_position, history_variables), 
                  readSets(case, "center_p_k.xy", sets_variables)]

#Darstellung eines Satzes von Zeitreihendaten
for i in history_position:
    for j in history_variables:
        fig = plt.figure(figsize=(8,8))
        ax = fig.add_subplot(111)

        ax.plot(dataSet_test01[0][j+"_"+i][0], dataSet_test01[0][j+"_"+i][1], label=j)
        ax.legend(bbox_to_anchor=(1.01, 1., 0., 0), loc='upper left', borderaxespad=0.,)

#Raumverteilungsdiagramm
for sets in sets_variables:
    for column in dataSet_test01[1][sets+"_"+sets_position]:
        fig = plt.figure(figsize=(8,8))
        ax = fig.add_subplot(111)
    
        ax.plot(dataSet_test01[1][sets+"_"+sets_position]["x"], 
            dataSet_test01[1][sets+"_"+sets_position][column], 
            label=sets+"_"+column)
        ax.legend(bbox_to_anchor=(1.01, 1., 0., 0), loc='upper left', borderaxespad=0.,)

Recommended Posts

OpenFOAM-Zeitreihendaten lesen und Daten einstellen
[Python] Zeichnen Sie Zeitreihendaten
Zeichnen Sie Zeitreihendaten in Python mit Pandas und Matplotlib
Python: Zeitreihenanalyse: Vorverarbeitung von Zeitreihendaten
Differenzierung von Zeitreihendaten (diskret)
Zeitreihenanalyse 3 Vorverarbeitung von Zeitreihendaten
Vergleich der Vorhersage von Zeitreihendaten zwischen dem SARIMA-Modell und dem Prophet-Modell
Beim Zeichnen von Zeitreihendaten und Abrufen von matplotlib OverflowError
Vorhersage von Zeitreihendaten durch Simplex-Projektion
Vorhersage von Zeitreihendaten mit einem neuronalen Netzwerk
Erkennung von Zeitreihendatenanomalien für Anfänger
Umgang mit Zeitreihendaten (Implementierung)
Zeitreihenanalyse Nr. 6 Gefälschte Rückkehr und republikanischer Teil
Formatieren und Anzeigen von Zeitreihendaten mit verschiedenen Maßstäben und Einheiten mit Python oder Matplotlib
[Kaggle] Vom Lesen der Daten bis zur Vorverarbeitung und Codierung
Zusammenfassung der Kaggle-Kernel-Methode [Tabelle Zeitreihendaten]
Zeitreihenzerlegung
Erfassung von Zeitreihendaten (täglich) von Aktienkursen
Zeigen Sie Details zu Zeitreihendaten mit Remotte an
Lesen von Zeitreihendaten in PyTorch
[Neueste Methode] Visualisierung von Zeitreihendaten und Extraktion häufiger Muster mithilfe des Pan-Matrix-Profils
Merkmalsmenge, die aus Zeitreihendaten extrahiert werden kann
Visualisieren Sie Daten und erfassen Sie gleichzeitig die Korrelation
Vorhersage von Zeitreihendaten durch AutoML (automatisches maschinelles Lernen)
Python: Zeitreihenanalyse
Daten mit TensorFlow lesen
"Zeitreihenanalyse von Wirtschafts- und Finanzdaten messen" Das Problem am Ende des Kapitels mit Python lösen
Python-Zeitreihenfrage
RNN_LSTM1 Zeitreihenanalyse
Zeitreihenanalyse 1 Grundlagen
TOPIX-Zeitreihen anzeigen
Zeitreihendiagramm / Matplotlib
[Python] [Ergänzung] Kapitel 04-08 Verschiedene Datenstrukturen (Erstellen und Bearbeiten von Mengen)
Eine Geschichte über das Clustering von Zeitreihendaten des Austauschs