[LINUX] Memorandum zur Einführung des EXODUS-Datenmodells der Finite-Elemente-Methode (FEM)

Einführung

EXODUS ist eine Datendatei zum Speichern von Daten für die Finite-Elemente-Analyse. Dieses Format kann sowohl als Zwischengenerierungsdatei beim Umleiten des Berechnungsergebnisses in anderen Code als auch als Format zum Speichern des Berechnungsergebnisses verwendet werden.

Bisher wurden die Berechnungsergebnisse für meine eigene FEM im vtk-Format ausgegeben, aber EXODUS scheint wiederverwendbarer zu sein, daher migriere ich zu diesem.

Einführung

Bringen Sie den Code aus dem unten stehenden Repository. https://github.com/gsjaardema/seacas#exodus Ich denke, dass es im Grunde kein Problem mit der Einführung gibt, wenn Sie dies befolgen.

Hier wird davon ausgegangen, dass Sie mit ~ / local auschecken und erstellen.

cd ~
mkdir local
cd local
git clone https://github.com/gsjaardema/seacas.git
cd seacas && export ACCESS=`pwd`

Sie müssen NetCDF und HDF5 als Third-Party Library (TPL) vorbereiten. Laden Sie sie daher von den folgenden herunter. https://www.unidata.ucar.edu/downloads/netcdf/ https://portal.hdfgroup.org/display/support/HDF5%201.12.0

cd TPL/hdf5
wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.12/hdf5-1.12.0/src/hdf5-1.12.0.tar.gz
tar -zxvf ./hdf5-1.12.0.tar.gz
cd hdf5-1.12.0
../runconfigure.sh
cd ../../netcdf
wget https://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-c-4.7.4.tar.gz
tar -zxvf ./netcdf-c-4.7.4.tar.gz
cd netcdf-c-4.7.4/
mkdir build
cd build
sh ../../runcmake.sh
make && make install
cd ../../../../
mkdir build
../cmake-exodus
make && make install

Wie benutzt man

Grundsätzlich ist es in Ordnung, wenn Sie sich das folgende Handbuch ansehen https://gsjaardema.github.io/seacas/exodusII-new.pdf

Als Beispiel wird der Code zum Ausgeben eines Netzes eines Auslegers mit den Abmessungen 1 x 1 x 10 geteilt durch 10 Hexaederelemente mit 8 Knoten im EXODUS-Format unten gezeigt.

#include <exodusII.h>
#include <iostream>
#include <vector>

int main(){
  int N;
  N = 10; // the length of cantilever
  
  int CPU_word_size, IO_word_size, exoid;
  CPU_word_size = sizeof(double);
  IO_word_size = 8;

  exoid = ex_create("test.exo",                //file Name
		    EX_CLOBBER,                //create mode
		    &CPU_word_size,            //CPU float word size in bytes
		    &IO_word_size);            //I/O float word size in bytes

  
  int dim = 3;           // dimension
  int NoN = 4 + 4 * N;   // num of nodes
  int NoE = N;       // num of elements
  int NoEB = 1;          // num of element blocks
  int NoNS = 0;          // num of node sets
  int NoSS = 0;          // num of side sets
  
  ex_put_init(exoid, "Test", dim, NoN, NoE, NoEB, NoNS, NoSS);
  std::vector<double> x(NoN), y(NoN), z(NoN), i2nn(NoN);
  char* coord_names[3];
  coord_names[0] = "xcoor";
  coord_names[1] = "ycoor";
  coord_names[2] = "zcoor";
  
  for(int i=0;i<=N;i++){
    x[i*4] = 0;   y[i*4] = 0;   z[i*4]=i;   i2nn[i*4] = i*4 + 1;
    x[i*4+1] = 1; y[i*4+1] = 0; z[i*4+1]=i; i2nn[i*4+1] = i*4 + 2;
    x[i*4+2] = 1; y[i*4+2] = 1; z[i*4+2]=i; i2nn[i*4+2] = i*4 + 3;
    x[i*4+3] = 0; y[i*4+3] = 1; z[i*4+3]=i; i2nn[i*4+3] = i*4 + 4;
  }
  ex_put_coord(exoid, x.data(), y.data(), z.data());
  ex_put_coord_names(exoid, coord_names);
  ex_put_node_num_map(exoid, i2nn.data());
  
  
  //for(int i=0;i<NoE;i++)i2nn[i] = i+1;
  
  int NoN_for_EB = NoE; // number of nodes for element block
  int NoN_per_Elem = 8; // number of nodes of each element
  int ebid = 1;         // element block id
  ex_put_elem_block(exoid, ebid, "hex", NoN_for_EB, NoN_per_Elem, 0);
  
  std::vector<int> connectivity(NoE * NoN_per_Elem);
  std::vector<int> i2en(NoE); // index to element number
  
  for(int i=0; i<NoE; i++){
    for(int j=0;j<8;j++){
      connectivity[i*8 + j] = i*4 + j +1;
    }
    i2en[i] = i+1;
  }
  ex_put_elem_conn(exoid, ebid, connectivity.data());
  ex_put_elem_num_map(exoid, i2en.data());
  ex_close(exoid);
  
  return 0;
}

Sie können beispielsweise wie folgt kompilieren.

g++ main.cpp -I ~/local/seacas/include -L ~/local/seacas/lib -lexodus

Wenn Sie sich die Ausgabe test.exo mit Paraview ansehen, sieht es wie folgt aus. image.png

Da die Anzahl der Knoten und die Anzahl der Elemente dieses Mal nicht ausgegeben werden, ist die Kontur die Element-ID.

Am Ende

Dieses Mal haben wir die Einführung und Funktionsprüfung des EXODUS-Formats gezeigt, in dem das Ergebnis der Finite-Elemente-Methode gespeichert werden kann. Ich würde mich freuen, wenn Sie mich wissen lassen könnten, ob Sie einen besseren Dateityp haben.

das ist alles.

Recommended Posts

Memorandum zur Einführung des EXODUS-Datenmodells der Finite-Elemente-Methode (FEM)
Erstellen einer Finite-Elemente-Methode (FEM) mit Python ~ vba → Python-Übersetzung ~
Erstellen einer Finite-Elemente-Methode (FEM) mit Python ~ damyarou spielt ~ herum
Ein Memorandum über Probleme beim Formatieren von Daten
Ein Memorandum of Method, das häufig bei der Analyse von Daten mit Pandas verwendet wird (für Anfänger)
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
Ein Memorandum über Warnungen in Pylint-Ausgabeergebnissen
Eine einfache Python-Implementierung der k-Neighborhood-Methode (k-NN)
Mit den Daten von COVID-19 wurde ein Netzwerkdiagramm erstellt.
Begrenzte Elementmethode Anfang 2 (Erstellung einer eindimensionalen Gesamtsteifigkeitsmatrix)
Die Geschichte des Django-Modellfeldes verschwindet aus der Klasse
Ich habe eine Funktion erstellt, um das Modell von DCGAN zu überprüfen
[Einführung in AWS] Memorandum zum Erstellen eines Webservers auf AWS
Analysieren Sie das Themenmodell, mit GensimPy3 Romanautor zu werden
Hinweis zur Kernel-Kompilierung
Ein kleines Memorandum von openpyxl
Ein Memorandum zur Verwendung von eigen3
Memorandum des Python-Paketverwaltungstools ez_setup
Eine Methode zum Konvertieren des Bildstils unter Beibehaltung der Farbe
[Einführung in StyleGAN] Ich habe mit "The Life of a Man" ♬ gespielt
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
Bewerten Sie die Leistung eines einfachen Regressionsmodells mithilfe der LeaveOneOut-Schnittstellenvalidierung
[Einführung in das SIR-Modell] Betrachten Sie das passende Ergebnis von Diamond Princess ♬
Ein Memorandum zum Erwerb der Grundprüfung für die Python3-Ingenieurzertifizierung