commit:2013:06_14
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
commit:2013:06_14 [2013/06/14 19:23] – created wautelet | commit:2013:06_14 [2016/03/30 15:23] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Commit 2013-06-14 ====== | ||
+ | ===== Modifications ===== | ||
+ | |||
+ | ==== Méthode Area In Contact ==== | ||
+ | |||
+ | La méthode Area In Contact associe une aire à chaque noeud esclave (élément de contact). Ainsi, on peut tenir compte de la densité du maillage sur la frontière de contact (petite maille à côté de grosse maille). Dès lors, la force de contact agissant sur le noeud esclave, dans le cas d'un contact sans frottement (pour faire simple), est donnée par | ||
+ | |||
+ | →F(s)=−tnAs→n(m) | ||
+ | |||
+ | |||
+ | où | ||
+ | |||
+ | |||
+ | - (s) indique l' | ||
+ | - (m) indique le maître.\\ | ||
+ | - As est l'aire de contact nodale.\\ | ||
+ | - →n est la normale extérieure unitaire.\\ | ||
+ | - tn est la pression de contact.\\ | ||
+ | |||
+ | Dans le cadre de la méthode de la pénalité classique, la pression de contact est donnée par | ||
+ | |||
+ | tn=Cngn | ||
+ | |||
+ | où | ||
+ | |||
+ | - Cn est le coefficient de pénalité.\\ | ||
+ | - gn est la distance signée du noeud esclave par rapport à la surface maître.\\ | ||
+ | |||
+ | |||
+ | === Méthode de calcul de l'aire de contact nodale | ||
+ | |||
+ | J'ai raccourci le nom des paramètres disponibles pour la méthode AREAINCONTACTMETHOD : | ||
+ | |||
+ | * AIC_METHOD_GEOMETRIC devient AICM_GEOPHYS. | ||
+ | * AIC_METHOD_CONSISTENT devient AICM_CONS. | ||
+ | |||
+ | et j'ai ajouté une dernière méthode de calcul de l'aire de contact nodale dénommée AICM_GEOREF. | ||
+ | |||
+ | Dans le cas de quadrangles bilinéaires en 3D, l'aire de contact nodale d'un nœud esclave est égale à la somme des aires " | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | L'aire de contact nodale est un facteur de pondération, | ||
+ | |||
+ | * En état plan déformation, | ||
+ | |||
+ | * En modélisation axisymétrique, | ||
+ | |||
+ | * En 3D, les trois méthodes donnent la même valeur de l'aire de contact nodale dans le cas de triangle linéaire (Face de tétraèdre linéaire ou de pentaèdre " | ||
+ | |||
+ | * En 3D, les trois méthodes donnent en général des valeurs différentes de l'aire de contact nodale dans le cas de quadrangle bilinéaire (Face d' | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Correction de l' | ||
+ | |||
+ | Lors de la définition d'une interaction de contact rigide déformable pilotée en force, les éléments de contact possèdent deux nœuds au niveau élémentaire : | ||
+ | |||
+ | * Nœud 1 : Nœud esclave associé à un nœud de l' | ||
+ | * Nœud 2 : L' | ||
+ | |||
+ | Par le principe de l' | ||
+ | |||
+ | Dès lors, il est normal d' | ||
+ | < | ||
+ | valueExtractor = InteractionValueExtractor (interaction, | ||
+ | </ | ||
+ | |||
+ | avec '' | ||
+ | |||
+ | Désormais, il est possible de l' | ||
+ | |||
+ | ==== Divers ==== | ||
+ | |||
+ | Lors que l'on ouvre l' | ||
+ | |||
+ | On peut modifier le contenu des informations à l'aide le fonction suivante disponible dans la majorité des objets : | ||
+ | < | ||
+ | void write(std:: | ||
+ | </ | ||
+ | |||
+ | J'ai indiqué des informations sur des objets géométriques et sur les interactions (surtout celles de contact) : | ||
+ | |||
+ | - Interactions : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | - Surface NURBS : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | C'est vraiment très utile et ça permet de vérifier le valeur des paramètres réellement contenus dans les objets instanciés. | ||
+ | |||
+ | |||
+ | |||
+ | ==== BugFix ==== | ||
+ | |||
+ | === Maillage d'une side avec une surface === | ||
+ | |||
+ | La génération du maillage sur une side avec une surface avec le mailleur transfini 2D procède de la manière suivante : | ||
+ | |||
+ | * Détermination de la position du nœud sur une surface bilinéaire de Coons construite à partir du wire de la side, pour les paramètres (u,v) donnés | ||
+ | * Projection de ce nœud sur la surface | ||
+ | |||
+ | Cependant, l' | ||
+ | |||
+ | Sans cette correction, on observait des zig-zags dans la position des nœuds projetés sur la surface de la side ou le maillage était totalement distordu. | ||
+ | |||
+ | === Critères de convergence pour l' | ||
+ | |||
+ | J'ai constaté que les critères de convergence n' | ||
+ | |||
+ | Je me suis basé sur les recommandations aux pages 233 et 234 du bouquin de référence suivant The NURBS Book (second edition, 1997), Les Piegl and Wayne Tiller. | ||
+ | |||
+ | ===== Sélection dans un secteur sphérique ===== | ||
+ | |||
+ | Il est désormais possible de sélectionner des nœuds sur une partie d'une sphère au moyen d'une sélection dans un secteur sphérique. | ||
+ | |||
+ | |||
+ | Si on désire récupérer tous les nœuds dans le secteur sphérique de centre (Cx,Cy,Cz), de rayon minimum rMin et maximum rMax, d' | ||
+ | |||
+ | < | ||
+ | group.addMeshPoints(SectorSphericalSelector(Cx, | ||
+ | </ | ||
+ | |||
+ | |||
+ | Remarque : les angles sont calculés par rapport au système d'axes structuraux translatés au centre de la sphère. L' | ||
+ | ===== Mailleur ===== | ||
+ | |||
+ | === Mailleur HybridDensityMesher1D === | ||
+ | |||
+ | La méthodologie de construire une grille de nbel intervalles sur une courbe commence par la spécification de la distribution des points sur cette dernière. Ceci revient à spécifier la distribution du paramètre de la courbe u(ξ)0≤ξ≤nbel+1 dans l' | ||
+ | |||
+ | La recherche de la fonction u(\xi) revient à trouver la fonction \xi(u). Avec la définition \rho(u) = \frac{d\xi}{du}, | ||
+ | |||
+ | \xi(u) = \int_0^u \rho(w) dw. | ||
+ | |||
+ | Dans le cas hybride, un ensemble plus complexe de considérations physiques est pris en compte dans la construction d'une fonction de densité des points de la grille, \rho(u). Les approches possibles incluent les suivantes : | ||
+ | |||
+ | * Distribution uniforme de la longueur d'arc où les points de la grille sont séparés par des distances égales dans l' | ||
+ | * Distribution uniforme de la longueur d'arc pondérée par la courbure, où les points de la grille sont concentrés dans les régions de forte courbure. Pour ce cas-là, la fonction de densité des points de la grille prend la forme suivante | ||
+ | \rho(u) \propto \kappa(u) \left\| \frac{d\boldsymbol{x}}{du} \right\| | ||
+ | où \kappa(u) est la courbure de la courbe \boldsymbol{x} en u. | ||
+ | * Attraction de la grille vers un point d' | ||
+ | |||
+ | \rho_{u^{*}} (u) \propto \frac{1}{\sqrt{(k (u-u^{*}))^2 +1} } | ||
+ | |||
+ | où k est un facteur d' | ||
+ | |||
+ | En pratique, il est plus que probable que l' | ||
+ | \int_0^1 \rho_i(u) \, du = \xi(1)-\xi(0) = m. Etant donné les constantes positives \lambda_i telles que \sum_i \lambda_i=1, | ||
+ | |||
+ | Finalement, si on donne les poids \lambda_s, | ||
+ | |||
+ | Sous Metafor, le mailleur HybridDensityMesher1D est interfacée sous la forme suivante : | ||
+ | < | ||
+ | Mesher = HybridDensityMesher1D(curveset(numero), | ||
+ | Mesher.execute(nbel, | ||
+ | </ | ||
+ | |||
+ | |'' | ||
+ | |'' | ||
+ | |'' | ||
+ | |'' | ||
+ | |'' | ||
+ | |'' | ||
+ | |||
+ | |||
+ | Si on désire concentrer les mailles autour d'un point d' | ||
+ | < | ||
+ | Mesher.pushAttractorPt(uJ) | ||
+ | Mesher.pushWeight(lambdaJ) | ||
+ | Mesher.pushStrength(kJ) | ||
+ | </ | ||
+ | |||
+ | |'' | ||
+ | |'' | ||
+ | |'' | ||
+ | |||
+ | |||
+ | Finalement, il existe une commande interfacée pour pouvoir débugger le mailleur : | ||
+ | < | ||
+ | Mesher.setVerbose() | ||
+ | </ | ||
+ | |||
+ | Exemples | ||
+ | |||
+ | Soit le demi cercle de rayon unitaire décrit par une courbe NURBS. On décide de la discrétiser avec 10 mailles et de concentrer les mailles tout près de l' | ||
+ | |||
+ | |||
+ | SimpleMesher1D | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Rapport de 10 entre la dernière et la première maille | ||
+ | |||
+ | |||
+ | HybridDensityMesher1D | ||
+ | |||
+ | |||
+ | {{ : | ||
+ | |||
+ | Paramètres du point d' | ||
+ | |||
+ | Paramètres du mailleur : lambdaS = 0.0, lambdaK = 0.0 | ||
+ | |||
+ | HybridDensityMesher1D | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Paramètres du point d' | ||
+ | |||
+ | Paramètres du mailleur : lambdaS = 0.5, lambdaK = 0.0 | ||
+ | |||
+ | HybridDensityMesher1D | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Paramètres du point d' | ||
+ | |||
+ | Paramètres du mailleur : lambdaS = 1.0/3.0, lambdaK = 1.0/3.0 | ||
+ | |||
+ | |||
+ | Soit le demi cercle de rayon unitaire | ||
+ | |||
+ | |||
+ | HybridDensityMesher1D | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Paramètres du point d' | ||
+ | |||
+ | Paramètres du mailleur : lambdaS = 1.0/3.0, lambdaK = 1.0/3.0 | ||
+ | |||
+ | Soit la spline cubique suivante. On décide de la discrétiser avec 20 mailles et de concentrer les mailles tout près de l' | ||
+ | |||
+ | SimpleMesher1D | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Rapport de 10 entre la dernière et la première maille | ||
+ | |||
+ | HybridDensityMesher1D | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Paramètres du point d' | ||
+ | |||
+ | Paramètres du mailleur : lambdaS = 0.25, lambdaK = 0.25 | ||
+ | |||
+ | |||
+ | Ce mailleur est indépendant du paramétrage de la courbe contrairement au SimpleMesher1D. Voici le maillage d'un octant de sphère avec une répartition des mailles uniformes selon le SimpleMesher1D et l' | ||
+ | |||
+ | SimpleMesher1D avec deux divisions sur chaque côté : | ||
+ | {{ : | ||
+ | HybridDensityMesher1D avec deux divisions sur chaque côté : | ||
+ | {{ : | ||
+ | Remarque : les trois sous-domaines sont égaux. | ||
+ | |||
+ | Article de référence : Hybrid Curve Point Distribution Algorithms, Khamayseh A. & Kuprat A., 2002. | ||
+ | |||
+ | === TransfiniMesher 2D et 3D === | ||
+ | |||
+ | Jusqu' | ||
+ | |||
+ | |||
+ | Désormais, il suffit de procéder de la manière suivante pour mailler une side ou un volume, | ||
+ | < | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | lorsqu' | ||
+ | |||
+ | Remarque : Par défaut, le paramètre de la fonction setEnableDistribution est True. | ||
+ | |||
+ | Si on veut mailler la side suivante avec une distribution de maille, il est nécessaire d' | ||
+ | |||
+ | TFIMesher2D avec setEnableDistribution : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | TFIMesher2D sans setEnableDistribution : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Bouquin de référence : Handbook of Grid Generation, Thompson J.F. , Soni K.S., Weatherill N.P. , 1999 | ||
+ | |||
+ | |||
+ | |||
+ | ===== Boîte à outils ===== | ||
+ | |||
+ | Ajout des boîtes à outil pour générer un arc de cercle NURBS, une surface de révolution NURBS (oo_meta.toolbox.nurbsRevolutionSurface.py) et un patch sphérique NURBS (oo_meta.toolbox.nurbsSpheriquePatch.py). | ||
+ | |||
+ | |||
+ | Les fichiers python sont commentés pour chaque utilisation d'une fonction et/ou d'une classe, ainsi que des paramètres d' | ||
+ | |||
+ | Puisque les NURBS peuvent représenter de manière exacte les coniques (parabole, ellipse, cercle, ...) pour les courbes et les quadriques pour les surfaces (sphère, cylindre, ...), cette boîte à outils pourrait être utiliser pour vérifier/ | ||
+ | |||
+ | Bouquin de référence : The NURBS Book (second edition, 1997), Les Piegl and Wayne Tiller. | ||
+ | ===== Modifications de cas test monosMaterials2 ===== | ||
+ | |||
+ | Dans le fichier apps.toolbox.materialTesting, | ||
+ | |||
+ | Grâce à ce paramètre-là, | ||
+ | |||
+ | * GursonDamageNl8IH (dtimeFactor= 0.5) | ||
+ | * GursonDamageMoriTanakaLinearIH (dtimeFactor= 0.5) | ||
+ | |||
+ | |||
+ | Les matériaux qui posent encore des problèmes, sont les suivants : | ||
+ | * EvpIsoDamageLemaitre | ||
+ | * GursonViscoDamageMoriTanakaPowerIH | ||
+ | * GursonViscoDamagePowerIH | ||
+ | * NortonHoff2 | ||
+ | |||
+ | Remarque : | ||
+ | |||
+ | Lorsque l'on impose dtimeFactor = 0.01 pour le matériau EvpIsoDamageLemaitre, | ||
+ | |||
+ | Pour chacun des matériaux problématiques, | ||
+ | |||
+ | Exemple NortonHoff2 : | ||
+ | < | ||
+ | def main() : | ||
+ | |||
+ | testModule = pyutils.fileToModule(__file__, | ||
+ | if 1: | ||
+ | testMat.execAll(NortonHoff2, | ||
+ | else: | ||
+ | testMat.execOneAtChoice(NortonHoff2({' | ||
+ | print testModule, ' finished' | ||
+ | </ | ||
+ | |||
+ | ===== Perspectives ===== | ||
+ | |||
+ | Méthode du lagrangien augmenté : | ||
+ | |||
+ | * Débugger la méthode | ||
+ | * Nettoyage du code | ||
+ | * Ajout de nouveaux critères d' | ||
+ | * Implémentation des cas test de référence de l' | ||
+ | * Mettre à jour l'aire de contact nodale au cours des augmentations | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Fichiers ajoutés/ | ||
+ | |||
+ | < | ||
+ | [r]: | ||
+ | [a]: | ||
+ | [a]: | ||
+ | [a]: | ||
+ | [a]: | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Tests ajoutés/ | ||
+ | |||
+ | < | ||
+ | [r]: | ||
+ | [a]: | ||
+ | </ | ||
+ | |||
+ | |||
+ | --- // |