HO_homog issueshttps://gitlab.enpc.fr/baptiste.durand/HO_homog/-/issues2019-02-20T10:10:15Zhttps://gitlab.enpc.fr/baptiste.durand/HO_homog/-/issues/2Loss of data concerning physical domain between the gmsh model and the FEniCS...2019-02-20T10:10:15ZBaptiste DurandLoss of data concerning physical domain between the gmsh model and the FEniCS mesh object# What's wrong ?
La solution actuellement utilisée pour convertir le maillage généré par gmsh au format .xml, puis pour l'importer dans un script python sous forme d'un objet FEniCS Mesh ne fonctionne pas comme voulu.
Aucun fichier...# What's wrong ?
La solution actuellement utilisée pour convertir le maillage généré par gmsh au format .xml, puis pour l'importer dans un script python sous forme d'un objet FEniCS Mesh ne fonctionne pas comme voulu.
Aucun fichier `<mesh file name>_physical_region.xml` ou `<mesh file name>_physical_facet.xml` n'est créé lors de la conversation. Les informations sur d'éventuels sous domaines ne peuvent donc pas être importées dans le code FEniCS.
Ce problème a été rencontré lors de l'écriture de la fonction destinée à permettre le passage d'une instance de Gmsh2DRVE à une instance de FEniCS2DRVE.
Les commandes actuellement utilisées pour effectuer cette conversion et cet import sont :
```python
def gmsh_2_Fenics_2DRVE(gmsh_2D_RVE, material_dict):
os.system(f'dolfin-convert {gmsh_2D_RVE.mesh_abs_path} {gmsh_2D_RVE.name}.xml')
mesh = fe.Mesh(f'{gmsh_2D_RVE.name}.xml')
generating_vectors = gmsh_2D_RVE.gen_vect
subdomains = fe.MeshFunction(<A compléter>)
```
Lorsque le problème a été détecté, les paramètres primordiaux de gmsh étaient les suivants :
- export au format .msh version 2
- option Mesh.SaveAll = 1
- encodage ASCII du fichier .msh
## Pourquoi est-ce qu'il est important de récupérer les données relatives aux *physical entities* ?
- Pour les calculs d'homogénéisation, on envisage d'utiliser le système de *physical entity* de gmsh pour identifier dans le maillage du RVE les deux sous domaines, dans le cas où un matériau *mou* occupe l'espace complémentaire à la microstructure principale.
- Par ailleurs, l’identification par *physical entity* est aussi la solution que l'on a retenue pour exercer une densité surfacique d'efforts extérieurs sur seulement une partie du domaine matériel dans le cadre d'un calcul complet.
## D'où cela peut provenir ?
- Paramètres de gmsh :
- Mesh.SaveAll ;
- Mesh.MshFileVersion
- Outil de conversion utilisé
- dolfin-convert actuellement;
- meshio ? (à tester)
- Problème dans le maillage d'origine
______
## Pistes de résolution envisagées
______
- Utiliser meshio à la place de dolfin-convert
- Fermer *à la main* les balises manquantes dans le fichier `<mesh file name>.xml`
- Recherche d'un jeu de paramètres de gmsh convenable (option SaveAll, version du fichier `.msh`)
- Utilisation d'un format de stockage du maillage différent de `msh`, compatible à la fois avec gmsh et dolfin-convert
# Étude et résoution
Dans un premier temps, différentes valeurs de paramètres `Mesh.SaveAll`, `Mesh.Binary` et `Mesh.MshFileVersion` ont été testées.
Pour ce test, on choisit d'étudier un RVE composé d'une unique cellule de type *auxetic square*. Une fois le fichier `.msh` généré à partir de l'API de gmsh, on test d'effectuer les opérations suivantes, l'objectif étant de détecter le succés ou l'échec de chaque opération.
- Ouverture du fichier `.msh` : `run(f"gmsh {rve.name}.msh &", shell=True, check=True)`;
- Conversion au format DOLFIN xml : `run(f'dolfin-convert {rve.mesh_abs_path} {rve.name}.xml', shell=True, check=True)`;
- Détection d'un éventuel fichier `<mesh file name>_physical_region.xml` : `f = open(f"{rve.name}_physical_region.xml","r")`
On privilégie la commande `subprocess.run` à `os.system`. Cela permet de récupérer, dans python, la trace d'éventuelles erreurs d'éxécution de programmes lancés depuis python.
## Des fichiers .msh incorrects
Lors d'une discussion avec Jérémy Bleyer, un problème dans les maillages au format `.msh` a été détecté.
Certains éléments **1D** apparaissent en **double** lors de la visualisation du fichier `.msh` dans gmsh.
Par ailleurs, le type d'erreurs renvoyées par `dolfin-convert` et l'abscence de fichier `<mesh file name>_physical_facet.xml` dans les cas où un fichier `<mesh file name>_physical_region.xml` est généré laisse penser que le problème provient de la défition des éléments **1D** dans le `.msh`.
> ```python
> line 494, in gmsh2xml
> index = nodes_as_facets[tuple(nodes)]
>KeyError: (5, 66)
> ```
-- <cite> Erreur de la commande `dolfin-convert test_jeremy.msh test_jeremy.xml`</cite>
## Poursuite de la résolution
- [x] Essayer avec un maillage très simple (carré, peu d'éléments), créé sans opérations booléennes
- [x] Essayer avec un maillage sans physical entity contenant des entités 1D
- [ ] Le problème des entités 1D ayant une extrémité sur le bord qui apparaissent en double a déjà été rencontré. Regarder s'il a été résolu, et si oui comment.https://gitlab.enpc.fr/baptiste.durand/HO_homog/-/issues/3Réduire nombre de dépendances2019-02-12T13:38:52ZBaptiste DurandRéduire nombre de dépendancesPour réduire le nombre de dépendances, remplacer more-itertools par itertools ?Pour réduire le nombre de dépendances, remplacer more-itertools par itertools ?Baptiste DurandBaptiste Durandhttps://gitlab.enpc.fr/baptiste.durand/HO_homog/-/issues/4Installation des dépendances2019-10-30T17:20:56ZBaptiste DurandInstallation des dépendancesCréer le fichier nécessaire pour que toutes les dépendances puissent être installées aisément.Créer le fichier nécessaire pour que toutes les dépendances puissent être installées aisément.Baptiste DurandBaptiste Durandhttps://gitlab.enpc.fr/baptiste.durand/HO_homog/-/issues/6Essais d'utilisations2019-06-25T09:34:51ZBaptiste DurandEssais d'utilisations## Installation
* [ ] Installation de fenicstools nécessaire
* cppimport doit être installé mais n'est pas indiqué comme une dépendance de fenicstools
* [ ] Vérifier que tous les packages sont indiqués dans requirements
## Exécut...## Installation
* [ ] Installation de fenicstools nécessaire
* cppimport doit être installé mais n'est pas indiqué comme une dépendance de fenicstools
* [ ] Vérifier que tous les packages sont indiqués dans requirements
## Exécution des scripts de démo
* [ ] Renommer homog2d_demo
* [ ] Segmentation fault (core dump) lors de l'éxécution de scripts
* [ ] Erreur de logging, sur Ubuntu en français il n'y a pas de répertoire Desktop, il s'appelle "Bureau"https://gitlab.enpc.fr/baptiste.durand/HO_homog/-/issues/7Gestion des generating vectors 3×32019-06-25T11:16:24ZBaptiste DurandGestion des generating vectors 3×3IDEA : Demander le pseudo inverse pour gérer les cas où la troisième colonne est nulle ?IDEA : Demander le pseudo inverse pour gérer les cas où la troisième colonne est nulle ?https://gitlab.enpc.fr/baptiste.durand/HO_homog/-/issues/9Allow zero radius for junctions or for concave vertices2019-07-11T11:07:41ZArthur LEBEEAllow zero radius for junctions or for concave verticeslorsque le sommet est réentrant il peut être intéressant de ne pas mettre de jonction (cf pantographe avec elements dégénérés sur les diamants).
on peut vouloir "sauter" un sommet pour le "rounding corners", autoriser un rayon 0 et ne...lorsque le sommet est réentrant il peut être intéressant de ne pas mettre de jonction (cf pantographe avec elements dégénérés sur les diamants).
on peut vouloir "sauter" un sommet pour le "rounding corners", autoriser un rayon 0 et ne pas créer de cercle peut être souhaitable.Baptiste DurandBaptiste Durandhttps://gitlab.enpc.fr/baptiste.durand/HO_homog/-/issues/10Enlever sigma et epsilon de Fenics2DRVE2019-06-25T13:13:59ZBaptiste DurandEnlever sigma et epsilon de Fenics2DRVE```python
def epsilon(self, u):
return mat.epsilon(u)
def sigma(self, eps):
return mat.sigma(self.C_per, eps)
def StrainCrossEnergy(self, sig, eps):
return mat.strain_cross_energy(sig, eps, se...```python
def epsilon(self, u):
return mat.epsilon(u)
def sigma(self, eps):
return mat.sigma(self.C_per, eps)
def StrainCrossEnergy(self, sig, eps):
return mat.strain_cross_energy(sig, eps, self.mesh, self.rve_area)
```https://gitlab.enpc.fr/baptiste.durand/HO_homog/-/issues/11Appeler qu'une seule fois la fonction de résolution d'un problème auxialaire2019-06-25T14:25:19ZBaptiste DurandAppeler qu'une seule fois la fonction de résolution d'un problème auxialaireActuellement, la fonction est appelée 3 fois, alors qu'un seul appel suffirait.
Extrait du code `homog_2d.py` :
```python
DictOfLocalizationsU['E'] = self.LocalizationE()['U']
DictOfLocalizationsSigma['E'] = sel...Actuellement, la fonction est appelée 3 fois, alors qu'un seul appel suffirait.
Extrait du code `homog_2d.py` :
```python
DictOfLocalizationsU['E'] = self.LocalizationE()['U']
DictOfLocalizationsSigma['E'] = self.LocalizationE()['Sigma']
DictOfLocalizationsEpsilon['E'] = self.LocalizationE()['Epsilon']
```https://gitlab.enpc.fr/baptiste.durand/HO_homog/-/issues/12Installation des dépendances2019-10-30T17:45:34ZBaptiste DurandInstallation des dépendances## gmsh et matplotlib :
pour éviter les problèmes : matplotlib 3.0 et gmsh-sdk (4.2.2.post1)
## meshio :
Afin d'éviter des problèmes de compatibilité avec h5, h5py installé avec la commande : `HDF5_VERSION=1.10.0 pip install --n...## gmsh et matplotlib :
pour éviter les problèmes : matplotlib 3.0 et gmsh-sdk (4.2.2.post1)
## meshio :
Afin d'éviter des problèmes de compatibilité avec h5, h5py installé avec la commande : `HDF5_VERSION=1.10.0 pip install --no-binary=h5py h5py`.
Puis installation de meshio : `pip install meshio[all]`.
> Remember that pip installs wheels by default. To perform a custom installation with pip, you should use: `$ pip install --no-binary=h5py h5py`
> You can also configure h5py using environment variables. This is handy when installing via pip, as you don’t have direct access to setup.py:
```bash
$ HDF5_DIR=/path/to/hdf5 pip install --no-binary=h5py h5py
$ HDF5_VERSION=X.Y.Z pip install --no-binary=h5py h5py
$ CC="mpicc" HDF5_MPI="ON" HDF5_DIR=/path/to/parallel-hdf5 pip install --no-binary=h5py h5py
```
[h5py Docs](http://docs.h5py.org/en/latest/build.html#building-against-parallel-hdf5)
Pour déterminer la version de h5 installée : `dpkg -s libhdf5-dev`
Sinon, avec h5py (2.9.0) sans la version adapté à l'installation HDF5 :
```pycon
.../python3.6/site-packages/h5py/__init__.py:75: UserWarning: h5py is running against HDF5 1.10.0 when it was built against 1.10.4, this may cause problems
'{0}.{1}.{2}'.format(*version.hdf5_built_version_tuple)
[...]
File ".../python3.6/site-packages/meshio/xdmf_io/main.py", line 467, in write
XdmfWriter(*args, **kwargs)
File ".../python3.6/site-packages/meshio/xdmf_io/main.py", line 277, in __init__
self.h5_file = h5py.File(self.h5_filename, "w")
File ".../python3.6/site-packages/h5py/_hl/files.py", line 391, in __init__
fapl = make_fapl(driver, libver, rdcc_nslots, rdcc_nbytes, rdcc_w0, **kwds)
File ".../python3.6/site-packages/h5py/_hl/files.py", line 108, in make_fapl
plist.set_libver_bounds(low, high)
File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
File "h5py/h5p.pyx", line 1140, in h5py.h5p.PropFAID.set_libver_bounds
ValueError: Invalid high library version bound (invalid high library version bound)
```
https://gitlab.enpc.fr/baptiste.durand/HO_homog/-/issues/13An update of the demo scripts should be done2020-01-20T13:58:30ZBaptiste DurandAn update of the demo scripts should be doneBaptiste DurandBaptiste Durandhttps://gitlab.enpc.fr/baptiste.durand/HO_homog/-/issues/14Reconstruction of a field with localization of strains/displacement2020-01-31T15:26:38ZBaptiste DurandReconstruction of a field with localization of strains/displacement* Enable the combining of localization fields and macro field that are not periodic to form a function that is defined on a FunctionSpace with peridicity BC ?
* Use of Sum and Product FEniCS objects or
See the unit test test_reconstru...* Enable the combining of localization fields and macro field that are not periodic to form a function that is defined on a FunctionSpace with peridicity BC ?
* Use of Sum and Product FEniCS objects or
See the unit test test_reconstruction_with_constraint and the changes of the commit 6f964e19547f6e9e9048639b291183930e802059 (03/06/19)Baptiste DurandBaptiste Durandhttps://gitlab.enpc.fr/baptiste.durand/HO_homog/-/issues/18bug with model.getBoundary()2021-09-21T04:45:27ZBaptiste Durandbug with model.getBoundary()not deterministic bug when call to gmsh.model.getBoundary.
Error message: `ERROR: LoadError: gmshModelGetBoundary returned non-zero error code: 1``ERROR: LoadError: gmshModelGetBoundary returned non-zero error code: 1`
A similar bug has ...not deterministic bug when call to gmsh.model.getBoundary.
Error message: `ERROR: LoadError: gmshModelGetBoundary returned non-zero error code: 1``ERROR: LoadError: gmshModelGetBoundary returned non-zero error code: 1`
A similar bug has been reported for the Julia api of gmsh.
Solution explained on: https://gitlab.onelab.info/gmsh/gmsh/-/issues/629
Try it on Python.Baptiste DurandBaptiste Durandhttps://gitlab.enpc.fr/baptiste.durand/HO_homog/-/issues/35Name of parameters for rotating square and rotating triangles2022-02-07T10:41:13ZBaptiste DurandName of parameters for rotating square and rotating trianglesChanger le nom des paramètres dans les fonctions rotating square et rotating triangles.
a → Longueur côté carré / triangle
t → Taille de la celluleChanger le nom des paramètres dans les fonctions rotating square et rotating triangles.
a → Longueur côté carré / triangle
t → Taille de la celluleBaptiste DurandBaptiste Durandhttps://gitlab.enpc.fr/baptiste.durand/HO_homog/-/issues/36Junction thinness is a ratio not the radius of the circle2022-02-07T10:40:15ZBaptiste DurandJunction thinness is a ratio not the radius of the circleLe code de rotating_square n'est pas cohérent avec ce qui est fait pour les triangles et pour le pantographe.
Le paramètre rho doit correspondre à un rapport de longueurs, sans dimension.Le code de rotating_square n'est pas cohérent avec ce qui est fait pour les triangles et pour le pantographe.
Le paramètre rho doit correspondre à un rapport de longueurs, sans dimension.Baptiste DurandBaptiste Durand