*ERROR in e_c3d: nonpositive jacobian determinant in element
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
Be nice to others! Read the FreeCAD code of conduct!
Re: *ERROR in e_c3d: nonpositive jacobian determinant in element
Donc, après pas mal de tâtonnements, voici un flux de travail pour exploiter un maillage de qualité insuffisante en vue du maillage avec gmsh par exemple.
A- Je détail d’abord quelques échecs, à titre informatif:
- import du maillage md_ad.stl dans Freecad
Il faut l'analyser pour voir ce qu'il en est:
- module mesh design
- d'abord un premier coup d’œil avec Mesh -> check solid mesh -> "The mesh md_ad is not a solid": ce n'est pas un solide, c'est pas bon
- puis on pousse l'analyse: Mesh -> Analyse -> Evaluate and repair mesh...
On constate 75 plis sur faces (des plis sur des faces triangulaires c'est un concept qui me dépasse )
A ce stade on peu être tenté d'effectuer certaines opérations avec Freecad, par exemple:
- repair -> élimine les 75 plis mais créé 19 non-manifolds (sommets non raccordés), si on réitère la réparation plusieurs fois on fini par éliminer tout message d’erreur.
- avec les outils Mesh, on peut tenter de supprimer manuellement les surfaces en rouge, boucher les trous (manuellement ou en auto), harmoniser les normales de face, ....
Toutes ces opérations, manuelles ou auto et dans un ordre ou un autre échoueront au finale à donner un maillage FEM valide
A ce stade, avec ou sans retouche du maillage, on peut tout de même essayer d'obtenir un solide, juste pour voir, au cas ou :
1- Sur maillage md_ad.stl d'origine sans retouche: 723 points, 1456 faces
- Atelier Part -> Create shape from mesh...
- Sur l'objet obtenu -> Check geometry: pas de message d’erreur, et dans Shape content: 3 shells et 0 solide répertoriées
- Application d'un filtre Compund filter (type Window-area)
- Check geom -> shape content -> 1shell et 0 solid : 715 points, 1448 faces
- Sur l'objet compound filter -> Part/Shape builder -> solid from shell (refine shape) -> selection d'une face : obtention de l'objet "Solid"
- Check geom sur l'objet "solid": 1 erreur forme non valide et Shape content -> 1 shell et 1 solid
On a 1 solide à 1 coque, malgré l'erreur "forme non valide" j’essaie de mailler avec gmsh (élément 3D sélectionné, taille défaut =0 auto):
- FEM mesh info: 5) Total number of volumes = 0
Conclusion: ça ne fonctionne pas
2- Sur maillage réparé (Mesh->analyze->Evalutate and repair mesh...) sans message d'erreur résiduel: 676 points, 1280 faces
- Atelier Part -> Create shape from mesh...
- Sur l'objet obtenu -> Check geometry: pas de message d’erreur, et dans Shape content: 1 shell et 0 solide répertoriées
- Check geom -> shape content -> 1shell et 0 solid : 676 points, 1280 faces
- Sur l'objet md_ad001 -> Part/Shape builder -> solid from shell (refine shape) -> selection d'une face : obtention de l'objet "Solid"
- Check geom sur l'objet "Solid": 1 erreur coque non connectée et Shape content -> 1 shell et 1 solid
On a 1 solide à 1 coque, malgré l'erreur "coque non connecté" j’essaie de mailler avec gmsh (élément 3D sélectionné, taille défaut =0 auto):
- FEM mesh info: 5) Total number of volumes = 0
Conclusion: ça ne fonctionne pas
Le flux qui fonctionne dans le poste suivant....
A- Je détail d’abord quelques échecs, à titre informatif:
- import du maillage md_ad.stl dans Freecad
Il faut l'analyser pour voir ce qu'il en est:
- module mesh design
- d'abord un premier coup d’œil avec Mesh -> check solid mesh -> "The mesh md_ad is not a solid": ce n'est pas un solide, c'est pas bon
- puis on pousse l'analyse: Mesh -> Analyse -> Evaluate and repair mesh...
On constate 75 plis sur faces (des plis sur des faces triangulaires c'est un concept qui me dépasse )
A ce stade on peu être tenté d'effectuer certaines opérations avec Freecad, par exemple:
- repair -> élimine les 75 plis mais créé 19 non-manifolds (sommets non raccordés), si on réitère la réparation plusieurs fois on fini par éliminer tout message d’erreur.
- avec les outils Mesh, on peut tenter de supprimer manuellement les surfaces en rouge, boucher les trous (manuellement ou en auto), harmoniser les normales de face, ....
Toutes ces opérations, manuelles ou auto et dans un ordre ou un autre échoueront au finale à donner un maillage FEM valide
A ce stade, avec ou sans retouche du maillage, on peut tout de même essayer d'obtenir un solide, juste pour voir, au cas ou :
1- Sur maillage md_ad.stl d'origine sans retouche: 723 points, 1456 faces
- Atelier Part -> Create shape from mesh...
- Sur l'objet obtenu -> Check geometry: pas de message d’erreur, et dans Shape content: 3 shells et 0 solide répertoriées
- Application d'un filtre Compund filter (type Window-area)
- Check geom -> shape content -> 1shell et 0 solid : 715 points, 1448 faces
- Sur l'objet compound filter -> Part/Shape builder -> solid from shell (refine shape) -> selection d'une face : obtention de l'objet "Solid"
- Check geom sur l'objet "solid": 1 erreur forme non valide et Shape content -> 1 shell et 1 solid
On a 1 solide à 1 coque, malgré l'erreur "forme non valide" j’essaie de mailler avec gmsh (élément 3D sélectionné, taille défaut =0 auto):
Code: Select all
Error : Self intersecting surface mesh, computing intersections (this could take a while)
Warning : Volume 1 consists of no elements
Conclusion: ça ne fonctionne pas
2- Sur maillage réparé (Mesh->analyze->Evalutate and repair mesh...) sans message d'erreur résiduel: 676 points, 1280 faces
- Atelier Part -> Create shape from mesh...
- Sur l'objet obtenu -> Check geometry: pas de message d’erreur, et dans Shape content: 1 shell et 0 solide répertoriées
- Check geom -> shape content -> 1shell et 0 solid : 676 points, 1280 faces
- Sur l'objet md_ad001 -> Part/Shape builder -> solid from shell (refine shape) -> selection d'une face : obtention de l'objet "Solid"
- Check geom sur l'objet "Solid": 1 erreur coque non connectée et Shape content -> 1 shell et 1 solid
On a 1 solide à 1 coque, malgré l'erreur "coque non connecté" j’essaie de mailler avec gmsh (élément 3D sélectionné, taille défaut =0 auto):
Code: Select all
Error : No tetrahedra in region 1 0
Warning : Volume 1 consists of no elements
Conclusion: ça ne fonctionne pas
Le flux qui fonctionne dans le poste suivant....
Re: *ERROR in e_c3d: nonpositive jacobian determinant in element
B- Le flux décrit ci-dessous fonctionne, il n'est pas exhaustif, il peut être à adapter en fonction de la qualité du maillage à traiter:
Ok, à ce stade il faut passer sous Blender pour la réparation du maillage:
Nous sommes sur le forum Freecad, mais je pense pouvoir faire référence à ce superbe logiciel ici sans souci
Blender V2.8:
- nouveau fichier
- suppression du cube présent par défaut
- fichier-> import-> md_ad.stl
L'objet est importé sans mise à l'échelle, sous Blender l'unité est le mètre, ici les dimensions en mm du mandibule passent en mètres, il est donc 1000x plus grand. Ça n'a pas vraiment d'importance, mais il faut en avoir conscience si on rentre des valeurs de seuil en distance dans certaines fonctions de retouche.
- selection de l'objet dans l'arbre
- clic droit sur la scène -> menu contextuel -> set origin -> Geometry to origin
- View -> Frame all
- TAB pourentrer en mode édition de l'objet
- par défaut toutes les faces sont sélectionnées, cliquer dans la scène désélectionne tout
- touche A sélectionne tout (tous les raccourcis clavier sont dans les menus, il faut explorer)
- edit -> Preferences -> add-ons -> charger l'addon Mesh 3D Print toolbox (taper "print" dans la barre de recherche) -> save n load
- entre en mode édition -> touche TAB
- presse la touche N pour faire apparaitre le panneau de l'addon 3D printing
- check all -> 6 arrêtes non raccordées et 2 faces en interférences
- clic sur la case "non manifold edges: 6 pour selectionner ces arrêtes non raccordées
- fait suppr. et clique "edges" pour les supprimer
-check all
- clic sur la case "non manifold edges: 10 pour visualiser les arrêtes non raccordées et repère les 2 arrêtes qui sont seules, qui ne sont au bord d'aucune face: supprime les
- Select all A
- Mesh -> clean up -> file holes -> seuil =5
- check all -> 0 arrêtes non raccordées mais non flat face =1
- clic distorded
- check all -> tout est ok
- TAB
- export stl md_ad_OK.stl
- Importe md_ad_OK dans Freecad
- Part -> Create shape from mesh
- check geometry -> 723 points et 1454 faces et 0 solid et 3 shell
Les 3 shell c'est à cause de petites porosités qui forment des coques isolées
Il doit être possible de nettoyer ça sous blender, mais on va les filtrer avec:
- Compound filter (filter type Window volume) -> solid 0 shell 1
- Part -> shape builder -> solid from shell (refine shape)
- selectionnes une face du modèle -> create
- check geom sur l'ojet "solid" obtenu -> 1 shell et 1 solid
Le "Solid" obtenu est valide pour le maillage FEM
La suite est aisée:
FEM -> Analysis
-sur "Solid" -> gmsh 3D element (12sec sur ma machine)
- Puis une analyse statique avec matériau PLA juste pour voir -> 3sec sur ma machine
Ok, à ce stade il faut passer sous Blender pour la réparation du maillage:
Nous sommes sur le forum Freecad, mais je pense pouvoir faire référence à ce superbe logiciel ici sans souci
Blender V2.8:
- nouveau fichier
- suppression du cube présent par défaut
- fichier-> import-> md_ad.stl
L'objet est importé sans mise à l'échelle, sous Blender l'unité est le mètre, ici les dimensions en mm du mandibule passent en mètres, il est donc 1000x plus grand. Ça n'a pas vraiment d'importance, mais il faut en avoir conscience si on rentre des valeurs de seuil en distance dans certaines fonctions de retouche.
- selection de l'objet dans l'arbre
- clic droit sur la scène -> menu contextuel -> set origin -> Geometry to origin
- View -> Frame all
- TAB pourentrer en mode édition de l'objet
- par défaut toutes les faces sont sélectionnées, cliquer dans la scène désélectionne tout
- touche A sélectionne tout (tous les raccourcis clavier sont dans les menus, il faut explorer)
- edit -> Preferences -> add-ons -> charger l'addon Mesh 3D Print toolbox (taper "print" dans la barre de recherche) -> save n load
- entre en mode édition -> touche TAB
- presse la touche N pour faire apparaitre le panneau de l'addon 3D printing
- check all -> 6 arrêtes non raccordées et 2 faces en interférences
- clic sur la case "non manifold edges: 6 pour selectionner ces arrêtes non raccordées
- fait suppr. et clique "edges" pour les supprimer
-check all
- clic sur la case "non manifold edges: 10 pour visualiser les arrêtes non raccordées et repère les 2 arrêtes qui sont seules, qui ne sont au bord d'aucune face: supprime les
- Select all A
- Mesh -> clean up -> file holes -> seuil =5
- check all -> 0 arrêtes non raccordées mais non flat face =1
- clic distorded
- check all -> tout est ok
- TAB
- export stl md_ad_OK.stl
- Importe md_ad_OK dans Freecad
- Part -> Create shape from mesh
- check geometry -> 723 points et 1454 faces et 0 solid et 3 shell
Les 3 shell c'est à cause de petites porosités qui forment des coques isolées
Il doit être possible de nettoyer ça sous blender, mais on va les filtrer avec:
- Compound filter (filter type Window volume) -> solid 0 shell 1
- Part -> shape builder -> solid from shell (refine shape)
- selectionnes une face du modèle -> create
- check geom sur l'ojet "solid" obtenu -> 1 shell et 1 solid
Le "Solid" obtenu est valide pour le maillage FEM
La suite est aisée:
FEM -> Analysis
-sur "Solid" -> gmsh 3D element (12sec sur ma machine)
- Puis une analyse statique avec matériau PLA juste pour voir -> 3sec sur ma machine
Last edited by -alex- on Thu Oct 31, 2019 11:54 pm, edited 1 time in total.
Re: *ERROR in e_c3d: nonpositive jacobian determinant in element
Une image de résultat:
Re: *ERROR in e_c3d: nonpositive jacobian determinant in element
Quelle persévérance Alex
Super boulot en tout cas
Super boulot en tout cas
Re: *ERROR in e_c3d: nonpositive jacobian determinant in element
Bonjour,
Toujours aussi impressionné par Alex.
Chapeau bas.
Toujours aussi impressionné par Alex.
Chapeau bas.
Re: *ERROR in e_c3d: nonpositive jacobian determinant in element
Super chouette Alex !
Il y a un truc que j'ai du rater quelque part : tu mets quoi comme conditions aux limites ?
(ou c'est un calcul harmonique ?)
Il y a un truc que j'ai du rater quelque part : tu mets quoi comme conditions aux limites ?
(ou c'est un calcul harmonique ?)
Re: *ERROR in e_c3d: nonpositive jacobian determinant in element
Merci Alex pour ce super travail!
Je tente de reproduire tes étapes sur mes autres modèles et vous tiens au courant pour connaître la reproductibilité.
En tout cas merci pour ton investissement!
Je tente de reproduire tes étapes sur mes autres modèles et vous tiens au courant pour connaître la reproductibilité.
En tout cas merci pour ton investissement!