Construcción de mallados

Resumen: Se presentan algunos ejemplos de definición dominios y la construcción de sus mallados.

Mallados 2D

Círculo

Tomaremos como dominio Ω​​ el interior de un círculo de centro el origen y radio 2, siendo su frontera Ω definida por la curva

C={(x,y):x=2cos(t),y=2sin(t),0t2π}.

Las siguientes instrucciones definen la frontera del dominio, utilizando ecuaciones paramétricas. Obsérvese que hemos asignado la etiqueta 14 a dicha curva con la instrucción label = 14. Se recomienda siempre la asignación de etiquetas a las fronteras (más adelante se verá su uso).

Obsérvese que, para dibujar la curva C se han usado las variables reservadas x e y que representan, en FreeFEM, las dos coordenadas espaciales.

Para dibujar dicha curva usamos el comando plot ver aquí las explicaciones de su uso. Escribiendo C(30) indicamos que la curva C se aproxima mediante una poligonal formada por 30 segmentos de igual longitud.

Mallado del círculo

Se observa que, según la parametrización que se ha hecho, la frontera se recorre en el sentido directo (contrario a las agujas del reloj). Obsérvese la diferencia si se define el borde haciendo variar t desde 2*pi hasta 0 .

Mallado del círculo

 

Para construir el mallado, declaramos primero una variable de tipo mesh , y después construimos una triangulación del dominio encerrado por la curva C discretizada con 30 segmentos. Para que FreeFEM entienda bien el papel de la frontera, debemos respetar una regla: el dominio debe quedar siempre a la izquierda cuando se recorre la frontera.

Mallado del círculo

Se observa que no es posible construir una triangulación del dominio definido por el borde C1 que aparece más arriba, puesto que el dominio que queda a la izquierda cuando se recorre la frontera C1 es el exterior del círculo y no está acotado. En una situación como esta, para arreglar el problema, basta indicar un número negativo de segmentos sobre la frontera para construir el mallado:

Mallado del círculo

Círculo con frontera compuesta de dos partes

Tomaremos como dominio Ω​​ el interior de un círculo de centro (1,0) y radio 1, siendo su frontera Ω=Γ1Γ2, definida por las curvas

Γ1={(x,y):x=1+cos(t),y=sin(t),0tπ/2},Γ2={(x,y):x=1+cos(t),y=sin(t),π/2t2π}.

Las siguientes instrucciones definen las dos partes de la frontera del dominio, utilizando de nuevo ecuaciones paramétricas. Obsérvese que hemos asignado las etiquetas label = 1 y label = 10 a dichas curvas:

Mallado del círculo

Para construir el mallado, se procede como en el ejemplo anterior, teniendo en cuenta ahora que la frontera es compuesta. Por ejemplo, elegiremos para Γ1 una distretización con 10 segmentos y para Γ2 una con 30 segmentos. Podemos declarar y definir el mallado en la misma instrucción:

Mallado del círculo

 

Cuadrado

El comando square permite construir un mallado de un dominio rectangular. En su uso más básico, permite generar un mallado del cuadrado [0,1]×[0,1] :

donde el significado de los parámetros obligatorios n y m es el siguiente:

Por ejemplo, un mallado 4×5 del cuadrado [0,1]×[0,1] se crea con los comandos que siguen:

Mallado del cuadrado

Se observa que, por defecto, se asignan las etiquetas 1, 2, 3 y 4 a los 4 lados del cuadrado, en el orden que se indica en la figura.

Rectángulo

Para construir un mallado n×m del rectángulo [x0,x1]×[y0,y1], se utiliza el comando square en su forma más general:

Por ejemplo, un mallado 5×20 del rectángulo [1.2,2]×[0.5,1.5] se define como sigue:

Mallado del rectangulo

La forma mas completa del comando square es:

Donde los parámetros (opcionales) son :

Ejercicios

Ejercicio 1

Sea Ω el interior del anillo formado por un círculo de centro el origen y radio 2 y el círculo de centro el origen y radio 1. Tenemos Ω=Γ1Γ2​​ con

Γ1={(x,y):x=2cos(t),y=2sin(t),0t2π},Γ2={(x,y):x=cos(t),y=sin(t),0t2π}.

Construir un mallado de Ω, tomando una partición de Γ1 de 50 segmentos y 20 sobre Γ2.

Mallado del círculo

 

Ejercicio 2

Construir un mallado del dominio Ω​ siendo Ω el interior de una elipse cuya frontera Ω=Γ1Γ2​​​ viene definida por las curvas

Γ1={(x,y):x=2cos(t),y=sin(t),0tπ/3},Γ2={(x,y):x=2cos(t),y=sin(t),π/3t2π}.

Utilizar distinto número de segmentos para discretizar Γ1 y Γ2.

Mallado del círculo

Adaptación del mallado

La adaptación del mallado es una herramienta muy útil cuando la solución de un problema tiene importantes variaciones en una zona determinada del dominio. El comando adaptmesh permite adaptar el mallado a esta circunstancia, de modo que el mallado inicial se hace "más fino" en la parte en la que se producen grandes variaciones de la función.

El uso básico del comando adaptmesh es

mesh ThNew = adaptmesh(Th, f);

donde el significado de los argumentos es el que sigue:

El papel desempeñado por f es el de fijar una "métrica" en base a la cual:

(a) en la zona donde f experimenta grandes variaciones (es decir, su gradiente es "grande") se refina el mallado, y

(b) por el contrario, allá donde f es aproximadamente constante, se usan triángulos de gran tamaño (si es necesario, incluso se suprimen triángulos anteriormente construidos).

Ejemplo 1: Consideramos la siguiente función en un mallado 5×5 del cuadrado [0,1]2:

f(x,y)=3exp(((x0.65)2+(y0.35)2)/2σ),σ=0.001

Mallado original

En el código que sigue se realiza la adaptación del mallado dos veces:

Mallado adaptado 1

 

Mallado adaptado 1

El uso algo más completo del comando adaptmesh es el que sigue

mesh ThNew = adaptmesh(Th, f, err = Error );

donde el parámetro err toma un valor real Error que indica el nivel del error de interpolación P1 (el valor por defecto es 0.01).

Ejemplo 2: Consideramos la siguiente función en un mallado 5×5 del cuadrado [1,1]2:

f(x,y)=10x3+y3+arctanεsin5y2x,ε=0.0001.

Mallado inicial y la función Mallado inicial y la función

En el código que sigue se realiza la adaptación del mallado tres veces, haciendo disminuir el parámetro del error en cada iteración de la adaptación.

Mallado adaptado 1Mallado adaptado 2

 

Mallado adaptado 3Mallado adaptado 3

 

Mallados 3D

Cubo

Para construir mallados en tres dimensiones hay que escribir al comienzo del programa la orden

load "msh3"

El comando cube permite construir un mallado de un cubo. Su uso más básico permite generar un mallado del cubo [0,1]×[0,1]×[0,1] :

donde el significado de los parámetros obligatorios n , m y k es

Por ejemplo, un mallado 3×4×5 del cubo [0,1]3 se crea con los comandos que siguen.

Por defecto las etiquetas asignadas son:

Mallado del cubo

Paralelepípedo rectangular

Para construir un mallado n×m×k de un paralelepípedo rectangular [x0,x1]×[y0,y1]×[z0,z1], se utiliza el comando cube en su forma más general.

Por ejemplo, un mallado 5×4×6 del dominio [1,1]×[1,2]×[2,3] se define como sigue

Una forma mas completa del comando cube es:

donde el significado de los parámetros (opcionales) es similar al que se describe en el comando square. Por ejemplo, un mallado del cubo [0,1]3 con las etiquetas de las caras personalizadas, puede observase en

Cilindros

El comando buildlayer permite construir un mallado 3D extendiendo por capas un mallado bidimensional en la dirección del eje OZ. Por ejemplo, un mallado de un cilindro con base elíptica se consigue con los comandos

Los parámetros que se han usado en buildlayers son:

Ejercicio

Construir usando buildlayers , un mallado del dominio [0,1]×[0,2]×[1,1] con 4 capas, poniendo la etiqueta 90 a la superficie de arriba y abajo y la etiqueta 9 a las superficies laterales (usando el parámetro labelmid).

 

Visualización

 

Resumen: Se presentan algunos métodos de visualización de los resultados obtenidos con FreeFEM.

Función plot

Esta función permite representar mallados y resultados obtenidos con FreeFEM. Su uso general es

Algunos ejemplos de parámetros obligatorios son:

Es posible incluir más de uno de los parámetros obligatorios, por ejemplo, un mallado junto con la solución de un problema.

 

Algunos de los parámetros opcionales son:

 

Algunos atajos del teclado en la representación con plot son:

 

Anna Doubova - Rosa Echevarría - Dpto. EDAN - Universidad de Sevilla