This is an old revision of the document!
−Table of Contents
Mailleurs 1D
MeshedPoints
Mailleur simple
Les mailleurs automatiques créent des mailles à partir de la géométrie. Les mailleurs intégrés dans Metafor ne sont pas très évolués mais ils rendent bien service lors du maillage de géométries simples et évitent l'utilisation de programmes externes.
Mailles vs Elements finis: Ne pas confondre la création du maillage et la création des éléments finis! Le maillage est composé de cellules purement géométriques. Un élément fini est une entité physique qui repose sur une maille. Dans Metafor, on procède en deux temps: d'abord, la création des mailles, puis l'application des éléments finis sur les mailles créées (cette deuxième étape est exécutée lors du démarrage de l'intégration temporelle et programmée dans l'
InteractionSet
).
Le maillage de lignes s'effectue via la commande :
SimpleMesher1D(curveset(number)).execute(ne, d, cells)
number | numéro de la ligne à mailler |
ne | nombre de segments |
d | distribution (rapport entre le dernier et le premier segment) - [défaut=1.0] |
cells | génère des mailles 1D [défaut=False] |
De manière analogue, le maillage au deuxième ou troisième degré se fait via:
HighDegreeSimpleMesher1D(curveset(numero), degree).execute(ne, d, cells)
NB: Utilisation du paramètre d
permet de créer des segments d
fois plus petits au début de la courbe qu’à la fin. Donc, attention à l’orientation des courbes pendant la création de la géométrie.
Mailleur "densité" - DensityMesher1D
Le mailleur “densité” permet de mailler une ligne en spécifiant la longueur des mailles voulues en fonction de l'abscisse curviligne. On procède en deux étapes:
Création d'une fonction “longueur de maille” en fonction de l'abscisse curviligne réduite (s∈[0,1]).
def ellength(s): return 0.1+(s-0.5)*(s-0.5) ellength = PythonOneParameterFunction(ellength)
Création d'un mailleur “densité” sur la courbe 1.
mesher = DensityMesher1D(curveset(1), ellength) mesher.setDeltaI(0.001) # paramètre interne d'intégration mesher.execute(False)
Le paramètre False
passé à execute
permet de générer uniquement les noeuds (et aucune arête). Ceci est très important pour garder une cohérence de la frontière d'un domaine 2D pour le contact défo-défo.
Mailleur HybridDensityMesher1D
La méthodologie de construire une grille de n 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≤ξ≤n+1 dans l'espace paramétrique, qui correspond aux points de la courbe x(u)0≤u≤1 dans l'espace physique. La tâche finale est de déterminer u(ξ)0≤ξ≤n+1 tel que x(u(ξ))0≤ξ≤n+1 est une bonne paramétrisation de la courbe x(u).
La recherche de la fonction u(ξ) revient à trouver la fonction ξ(u). Avec la définition ρ(u)=dξdu,
ξ(u)=∫u0ρ(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, ρ(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'espace physique. Dans ce cas, la densité des points de la grille doit être proportionelle au taux de variation de la longueur d'arc, c'est à dire ρ(u)∝‖dxdu‖
- 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 ρ(u)∝κ(u)‖dxdu‖ où κ(u) est la courbure de la courbe x en u.
- Attraction de la grille vers un point d'attraction u∗ dans l'espace paramétrique (correspondant au point x∗=x(u∗) dans l'espace physique). Un cas typique est u∗=0 ou u∗=1, quand on désire capter une échelle de petite taille à une des extrémités de la courbe. Alternativement, 0<u∗<1 concentre le raffinement près d'un point à l'intérieur de la courbe.
Pour ces cas-là, un bon choix pour ρ(u) est :
ρu∗(u)∝1√(k(u−u∗))2+1 où k est un facteur d'attraction qui détermine l'intensité d'attraction vers u∗.
En pratique, il est plus que probable que l'utilisateur désire une fonction hybride de densité de points de la grille, qui est une combinaison linéaire de plusieurs fonctions de densité décrites ci-dessus. Dans ce cas, plusieurs fonctions de densité ρi(u) peuvent être combinées, chacune normalisée de manière à ce que ∫10ρi(u)du=ξ(1)−ξ(0)=m. Etant donné les constantes positives λi telles que ∑iλi=1, on construit ρ(u)=∑iλiρi(u) qui est une fonction de densité de points de la grille avec une normalisation adéquate. Cette fonction hybride de densité va migrer les points de la grille dans les régions où une des fonctions ρi(u) nécessite un raffinement. En utilisant ce concept, il est possible de répartir les points de la grille sur base des critères hybrides de longueur d'arc, de courbure et d'attraction vers un ensemble u∗i de points distincts.
Finalement, si on donne les poids λs, λκ, les points {u∗i|0≤u∗i≤1,1≤i≤p}, les poids {λi,1≤i≤p} et les facteurs d'attraction {ki,1≤i≤p} où λs+λκ+∑pi=1λi=1, on génère une distribution de n+1 points u0,u1,…,un+1 qui sont simultanément concentrés au voisinage des points d'attraction {u∗i}, positionnés dans les régions de forte courbure, et positionnés de manière à éviter de grands écarts sur la longueur d'arc.
Sous Metafor, le mailleur HybridDensityMesher1D est interfacée sous la forme suivante :
Mesher = HybridDensityMesher1D(curveset(number),p) Mesher.execute(n,lambdaS,lambdaK,cells)
number | numéro de la courbe à mailler |
p | nombre de points d'attraction - [défaut=0] |
n | nombre de segments/d'intervalles |
lambdaS | poids du critère de distribution uniforme de la longueur d'arc - [défaut=1.0] |
lambdaK | poids du critère de distribution uniforme de la longueur d'arc pondérée par la courbure - [défaut=0.0] |
cells | génère des mailles 1D [défaut=False] |
Si on désire concentrer les mailles autour d'un point d'attraction, nous pouvons utiliser les commandes suivantes avant l'opération .execute():
Mesher.pushAttractorPt(uJ) Mesher.pushWeight(lambdaJ) Mesher.pushStrength(kJ)
uJ | valeur du paramètre u de la courbe correspondant au point d'attraction |
lambdaJ | poids associé au point d'attraction |
kJ | facteur d'attraction |
Mailles 1D
Mailles 1D : création manuelle
Pour créer manuellement une maille 1D sur deux “points de maillage”:
mesh.define(no, CELL_LINE, grp, no1, no2)
no | numéro de la maille 1D |
grp | entité qui contiendra la maille (un Group par exemple) |
no1 | numéro du point maillage 1 |
no2 | numéro du point maillage 2 |
Mailles 1D : CellLineMesher
Pour générer des mailles 1D à partir de deux ensembles de points de maillage, il existe le CellLineMesher
.
Le CellLineMesher
est un mailleur qui, sur base de deux entités géométriques maillées (i.e. contenant des MeshedPoints
), génère des objets de type CELL_LINE
dans la topologie. Tout MeshPoint
de la première entité sera liée par un CELL_LINE
à tout MeshPoint
de la seconde.
L'Interaction
générée sur ces CELL_LINE
sera définie sur la première entité géométrique passée au CellLineMesher
.
Exemple:
Génération de CELL_LINE
sur deux groupes de “points de maillage” (provenant d'un import Bacon par exemple)
mesher = CellLineMesher(groupset(no1), groupset(no2)) mesher.execute() ... app = FieldApplicator(no) app.push(groupset(no1)) # Definition des elements sur la première entité du ''CellLineMesher''