Ca y est, on peut maintenant lancer une simulation et la laisser remailler automatiquement en fonction d'un critère de remaillage, jusqu'à ce que l'entièreté de la simulation soit complète (en 2D, le 3D extrudé est en cours…) ! Une page de doc sera réalisée sous peu (càd dans les 15 jours) pour expliquer comment utiliser ces routines (si vous êtes du genre à faire des cas-tests un peu corrects et pas à foutre des global partout, ça devrait être assez simple).
Jusqu'à présent, une simulation avec remaillage consistait en une suite de simulations que l'on redémarrait avec la commande setNextTime
. C'était donc assez fastidieux de préparer une simulation avec de nombreux remaillages, et il fallait savoir à quels instants on devait remailler avant même de lancer la simulation.
A présent, on peut utiliser des critères d'arrêts qui, lorsqu'ils sont vérifiés, vont fermer proprement l'intégration temporelle, écrire un fac (et rendre la main à la procédure automatique de remaillage si on souhaite remailler).
Un premier critère, TimeStopCriterion
, permet d'arrêter la simulation à des temps donnés, pour qu'on puisse toujours faire (un peu plus proprement) ce qui était déjà possible (voir apps.remeshing.fullAuto.forgeDynRemeshing
).
Un second critère, ValueExtractorStopCriterion
, est déjà plus polyvalent. On lui donne un ValueExtractor
quelconque et une valeur d'arrêt, et au terme de chaque pas de temps il va tester si le critère est vérifié et terminer l'intégration si besoin (voir apps.remeshing.fullAuto.dCupExtrusionRemeshing
). Cela permet d'arrêter la simulation sur base de critères géométriques, de qualité de maillage, de déplacement de part…
Des petites modifs ont été apportées aux routines qui extrudent la géométrie en 3D (requise si on souhaite remailler du 3D extrudé). Pour l'instant, des hash_set
étaient utilisés, donc on n'avait aucune cohérence entre les numéros de noeuds avant et après remaillage. Cela posait des problèmes pour, après remaillage, appliquer le déplacement des outils.
A présent, on utilise des objets set
ordonnés sur base du UserNo
, ce qui garanti d'avoir les mêmes objets dans le même ordre après chaque remaillage.
Les remailleurs ont été légèrement modifiés pour pouvoir tenir compte de trous dans la géométrie.
Le dossier remeshing2 a été divisé en 4 sous-dossiers :
A : oo_meta/MtFem/StopCriterion.cpp A : oo_meta/MtFem/StopCriterion.h A : oo_meta/MtFem/TimeStopCriterion.cpp A : oo_meta/MtFem/TimeStopCriterion.h A : oo_meta/MtFem/ValueExtractorStopCriterion.cpp A : oo_meta/MtFem/ValueExtractorStopCriterion.h R :
A : apps.qs.beamBendingRot A : apps.qs.beamBendingRotInit A : apps.remeshing2.fullAuto.dCupExtrusionRemeshing A : apps.remeshing2.fullAuto.forgeDynRemeshing A : apps.remeshing2.fullAuto.forgeQSRemeshing A : apps.remeshing2.manual.beamBendingDyn_1 A : apps.remeshing2.manual.beamBendingDyn_2 A : apps.remeshing2.manual.beamBendingDyn_3 A : apps.remeshing2.manual.beamBendingDyn_4 A : apps.remeshing2.manual.dCupExtrusion_1 A : apps.remeshing2.manual.dCupExtrusion_2 A : apps.remeshing2.manual.dCupExtrusion_3 A : apps.remeshing2.manual.dCupExtrusion_4 A : apps.remeshing2.manual.forgeDyn_1 A : apps.remeshing2.manual.forgeDyn_2 A : apps.remeshing2.manual.forgeDyn_3 A : apps.remeshing2.manual.forgeDyn_4 A : apps.remeshing2.manual.forgeQS_1 A : apps.remeshing2.manual.forgeQS_2 A : apps.remeshing2.manual.forgeQS_3 A : apps.remeshing2.manual.forgeQS_4 A : apps.remeshing2.nullRemesh.beamBendingDyn_1 A : apps.remeshing2.nullRemesh.beamBendingDyn_2 A : apps.remeshing2.nullRemesh.beamBendingDyn_3 A : apps.remeshing2.nullRemesh.beamBendingDyn_4 A : apps.remeshing2.nullRemesh.dCupExtrusion_1 A : apps.remeshing2.nullRemesh.dCupExtrusion_2 A : apps.remeshing2.nullRemesh.dCupExtrusion_3 A : apps.remeshing2.nullRemesh.dCupExtrusion_4 A : apps.remeshing2.nullRemesh.forgeDyn_1 A : apps.remeshing2.nullRemesh.forgeDyn_2 A : apps.remeshing2.nullRemesh.forgeDyn_3 A : apps.remeshing2.nullRemesh.forgeDyn_4 A : apps.remeshing2.nullRemesh.forgeQS_1 A : apps.remeshing2.nullRemesh.forgeQS_2 A : apps.remeshing2.nullRemesh.forgeQS_3 A : apps.remeshing2.nullRemesh.forgeQS_4 A : apps.remeshing2.semiAuto.beamBendingDynRot_1 A : apps.remeshing2.semiAuto.beamBendingDynRot_2 A : apps.remeshing2.semiAuto.beamBendingDynRotInit_1 A : apps.remeshing2.semiAuto.beamBendingDynRotInit_2 A : apps.remeshing2.semiAuto.beamBendingQS_1 A : apps.remeshing2.semiAuto.beamBendingQS_2 A : apps.remeshing2.semiAuto.forgeDyn_1 A : apps.remeshing2.semiAuto.forgeDyn_2 A : apps.remeshing2.semiAuto.forgeDynGF0_1 A : apps.remeshing2.semiAuto.forgeDynGF0_2 R : apps.remeshing2.beamBendingDyn_1 R : apps.remeshing2.beamBendingDyn_2 R : apps.remeshing2.beamBendingDyn_3 R : apps.remeshing2.beamBendingDyn_4 R : apps.remeshing2.beamBendingNullRemeshDyn_1 R : apps.remeshing2.beamBendingNullRemeshDyn_2 R : apps.remeshing2.beamBendingNullRemeshDyn_3 R : apps.remeshing2.beamBendingNullRemeshDyn_4 R : apps.remeshing2.beamBendingQS_1 R : apps.remeshing2.beamBendingQS_2 R : apps.remeshing2.beamBendingQS_3 R : apps.remeshing2.beamBendingQS_4 R : apps.remeshing2.dCupExtrusion_1 R : apps.remeshing2.dCupExtrusion_2 R : apps.remeshing2.dCupExtrusion_3 R : apps.remeshing2.dCupExtrusion_4 R : apps.remeshing2.forgeDyn_1 R : apps.remeshing2.forgeDyn_2 R : apps.remeshing2.forgeDyn_3 R : apps.remeshing2.forgeDyn_4 R : apps.remeshing2.forgeDynGF0_1 R : apps.remeshing2.forgeDynGF0_2 R : apps.remeshing2.forgeDynGF0_3 R : apps.remeshing2.forgeDynGF0_4 R : apps.remeshing2.forgeDynRemesh R : apps.remeshing2.forgeDynV2_1 R : apps.remeshing2.forgeDynV2_2 R : apps.remeshing2.forgeNullRemeshDyn_1 R : apps.remeshing2.forgeNullRemeshDyn_2 R : apps.remeshing2.forgeNullRemeshDyn_3 R : apps.remeshing2.forgeNullRemeshDyn_4 R : apps.remeshing2.forgeNullRemeshQS_1 R : apps.remeshing2.forgeNullRemeshQS_2 R : apps.remeshing2.forgeNullRemeshQS_3 R : apps.remeshing2.forgeNullRemeshQs_4 R : apps.remeshing2.forgeQS_1 R : apps.remeshing2.forgeQS_2 R : apps.remeshing2.forgeQS_3 R : apps.remeshing2.forgeQS_4
— Pierre Joris 2015/09/11