Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


doc:user:geometry:mesh:1d

This is an old revision of the document!




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\in[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(\xi) \; 0 \leq \xi \leq n+1}$ dans l'espace paramétrique, qui correspond aux points de la courbe ${\boldsymbol{x}(u) \; 0 \leq u \leq 1}$ dans l'espace physique. La tâche finale est de déterminer ${u(\xi) \; 0 \leq \xi \leq n+1}$ tel que ${\boldsymbol{x}(u(\xi)) \; 0 \leq \xi \leq n+1}$ est une bonne paramétrisation de la courbe $\boldsymbol{x}(u)$.

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'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 $$\rho(u) \propto \left\| \frac{d\boldsymbol{x}}{du} \right\| $$
  • 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'attraction $u^{*}$ dans l'espace paramétrique (correspondant au point $\boldsymbol{x}^{*} = \boldsymbol{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 $\rho(u)$ est :
    $$ \rho_{u^{*}} (u) \propto \frac{1}{\sqrt{(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é $\rho_i(u)$ peuvent être combinées, chacune normalisée de manière à ce que $\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$, on construit $\rho(u) = \sum_i \lambda_i \rho_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 $\rho_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 $\lambda_s$, $\lambda_{\kappa}$, les points $\{u_i^* \; | \; 0 \leq u_i^* \leq 1, \; 1 \leq i \leq p\}$, les poids $\{\lambda_i, \; 1 \leq i \leq p\}$ et les facteurs d'attraction $\{k_i, \; 1 \leq i \leq p\}$ où $\lambda_s+\lambda_{\kappa}+\sum_{i=1}^p \lambda_i =1$, on génère une distribution de $n+1$ points $u_0, u_1, \ldots, u_{n+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''
doc/user/geometry/mesh/1d.1373633908.txt.gz · Last modified: 2016/03/30 15:22 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki