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.
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
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.
Da die Anzahl der Knoten und die Anzahl der Elemente dieses Mal nicht ausgegeben werden, ist die Kontur die Element-ID.
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