Mémorandum d'introduction du modèle de données EXODUS de la méthode des éléments finis (FEM)

introduction

EXODUS est un fichier de données pour stocker des données pour l'analyse par éléments finis. C'est un format qui peut être utilisé à la fois comme fichier de génération intermédiaire lors du détournement du résultat du calcul dans un autre code et comme format de stockage du résultat du calcul.

Jusqu'à présent, les résultats de calcul pour mon propre FEM étaient sortis au format vtk, mais EXODUS semble être plus réutilisable, donc je migre vers cela.

introduction

Apportez le code du référentiel ci-dessous. https://github.com/gsjaardema/seacas#exodus Je pense qu'il n'y a fondamentalement aucun problème avec l'introduction si vous suivez ceci.

Ici, il est supposé que vous extrayez et construisez avec ~ / local.

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

Vous devez préparer NetCDF et HDF5 en tant que bibliothèque tierce (TPL), téléchargez-les donc à partir de ce qui suit. 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

Comment utiliser

En gros, c'est OK si vous regardez le manuel suivant https://gsjaardema.github.io/seacas/exodusII-new.pdf

À titre d'exemple, le code de sortie d'un maillage d'un cantilever avec des dimensions de 1 x 1 x 10 divisé par 10 éléments hexaèdres à 8 nœuds au format EXODUS est illustré ci-dessous.

#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;
}

Par exemple, vous pouvez compiler comme suit.

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

En regardant la sortie test.exo avec Paraview, cela ressemble à ce qui suit. image.png

Étant donné que la quantité de nœuds et la quantité d'éléments ne sont pas générées cette fois, le contour sera l'ID d'élément.

À la fin

Cette fois, nous avons montré l'introduction et le contrôle de fonctionnement du format EXODUS qui peut stocker le résultat de la méthode des éléments finis. Je vous serais reconnaissant si vous pouviez me faire savoir si vous avez un meilleur type de fichier.

c'est tout.

Recommended Posts

Mémorandum d'introduction du modèle de données EXODUS de la méthode des éléments finis (FEM)
Création d'une méthode des éléments finis (FEM) avec python ~ vba → traduction python ~
Création d'une méthode des éléments finis (FEM) avec python ~ Damyarou's déconner ~
Un mémorandum de problème lors du formatage des données
Un mémorandum de méthode souvent utilisé lors de l'analyse de données avec des pandas (pour les débutants)
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Un mémorandum sur les avertissements dans les résultats de sortie de pylint
Une implémentation Python simple de la méthode k-voisinage (k-NN)
Un diagramme de réseau a été créé avec les données du COVID-19.
Méthode des éléments limités Début 2 (Préparation d'une matrice de rigidité globale unidimensionnelle)
L'histoire du champ de modèle Django disparaissant de la classe
J'ai fait une fonction pour vérifier le modèle de DCGAN
[Introduction à AWS] Mémorandum de création d'un serveur Web sur AWS
Analysez le modèle thématique pour devenir romancier avec GensimPy3
Remarque sur la compilation du noyau
Un petit mémorandum d'openpyxl
Un mémorandum d'utilisation de eigen3
Mémorandum de l'outil de gestion de paquets Python ez_setup
Une méthode de conversion du style d'une image tout en préservant la couleur
[Introduction à StyleGAN] J'ai joué avec "The Life of a Man" ♬
Une fonction qui mesure le temps de traitement d'une méthode en python
Évaluer les performances d'un modèle de régression simple à l'aide de la validation d'intersection LeaveOneOut
[Introduction au modèle SIR] Considérez le résultat de l'ajustement de Diamond Princess ♬
Un mémorandum concernant l'acquisition de l'examen de base de certification d'ingénieur Python3