EJEMPLOS SIMPLES

 

Reglas básicas para escribir un programa FreeFEM

Todas las instrucciones deben terminar con ;

Se usa // para comentar una línea. Se usa /* texto */ para comentar un trozo cualquiera de texto

El tipo y las dimensiones de las variables deben ser declarados. Ver las secciones Tipos de datos y Vectores y matrices en la Introducción al lenguaje de FreeFEM. Ejemplos:

Los nombres de las variables se forman con letras y números, comenzando con una letra.

Operadores aritméticos básicos : + - * / ^ %
(n % m es el resto de la división entera n / m)

Operadores de comparación : == < > <= >= !=

Las funciones simples (definidas por una fórmula) pueden definirse declarándolas con func y utilizando los símbolos x, y, z. ATENCIÓN: x, y, z son nombres reservados, que no pueden ser usados como variables de usuario.

Etapas en la resolución

Las etapas en la resolución de un problema con FreeFEM son:

  1. Disponer de la formulación débil del problema, que debe estar escrito en la forma del Teorema de Lax-Milgram.
  2. Definir el dominio en el que se plantea el problema, describiendo su frontera: border Comando plot para visualizar el resultado
  3. Construir un mallado del dominio y su frontera (en realidad de una aproximación de ambos): buildmesh En el caso de dominios rectangulares, el comando square cubre las etapas 2 y 3 Comando plot para visualizar el resultado
  4. Definir el espacio de elementos finitos en el que se plantea el problema aproximado, asociado al mallado construido, indicando el elemento finito a utilizar: fespace
  5. Definir el problema aproximado: problem Hay que indicar cuáles son las formas bilineal y lineal, así como las condiciones de Dirichlet, si las hay.
  6. Resolver el problema aproximado
  7. Representar gráficamente la solución aproximada: plot

 

SimpleExample_1.edp

Mallado de un cuadrado

Los dominios de forma rectangular pueden ser definidos directamente (borde + malla) con la función square.

Copia y pega el código del ejemplo a un archivo .edp

Código

 

SimpleExample_2.edp

Espacios de elementos finitos y funciones

Asociando un tipo de elemento finito a un mallado se puede definir un espacio de interpolación,

Copia y pega el texto del ejemplo a un archivo de código.

Código

 

SimpleExample_3.edp

Problema de Poisson en un cuadrado, con cond. de Dirichlet

Consideramos el problema

{DΔu+cu=fenΩ=(0,5)×(2.5,2.5)u=1sobreΓ1Γ2u=0sobreΓ3Γ4

donde D=0.5, c=1, f(x,y)=10 si (x,y)[2.5,4.5]×[0.5,1.5] , f(x,y)=0 si no.

La formulación débil de este problema:

{Hallaruu~+H01(Ω)tal que ΩDuvdxdy+ΩcuvdxdyΩfvdxdy=0vH01(Ω)

donde u~ es una función de H1(Ω) que vale 1 sobre Γ1Γ2 y 0 sobre Γ3Γ4.

Código

 

SimpleExample_4.edp

Problema de Poisson en un cuadrado, con cond. de Neumann homogénea

Consideramos ahora el problema

{DΔu+cu=fenΩ=(0,5)×(2.5,2.5)Dun=0sobreΩ

donde D=0.5, c=1, f(x,y)=10 si (x,y)[2.5,4.5]×[0.5,1.5] , f(x,y)=0 si no.

La formulación débil de este problema es:

{HallaruH1(Ω)tal que ΩDuvdxdy+ΩcuvdxdyΩfvdxdy=0vH1(Ω)

Código

 

SimpleExample_5.edp

Problema de Poisson en un cuadrado con cond. mixtas Dirichlet-Neumann

Consideramos ahora el problema

{DΔu+cu=fenΩ=(0,5)×(2.5,2.5)u=0sobreΓ1Γ3Dun=0sobreΓ2Γ4

donde D=0.5, c=1, f(x,y)=10 si (x,y)[2.5,4.5]×[0.5,1.5] , f(x,y)=0 si no.

La formulación débil de este problema es:

{HallaruV={vH1(Ω):v=0sobreΓ1Γ3}tal que ΩDuvdxdy+ΩcuvdxdyΩfvdxdy=0vV

Código

 

SimpleExample_6.edp

Problema de Poisson en un cuadrado con cond. mixtas Dirichlet-Fourier

Consideramos ahora el problema

{DΔu+cu=fenΩ=(0,5)×(2.5,2.5)u=0sobreΓ1Γ3Dun+αu=0sobreΓ2Γ4

donde D=0.5, c=1, f(x,y)=10 si (x,y)[2.5,4.5]×[0.5,1.5] , f(x,y)=0 si no, α=1.

La formulación débil de este problema es:

{HallaruV={vH1(Ω):v=0sobreΓ1Γ3}tal que ΩDuvdxdy+Ωcuvdxdy+Γ2Γ4αuvdxdyΩfvdxdy=0vV

Código

 

 

Doors.edp

Ecuación de Laplace con una variedad de condiciones de Dirichlet

 

Consideramos aquí el problema de calcular la probabilidad de que una partícula, que permanentemente se mueve de forma aleatoria en una habitación, alcance la puerta de salida en algún momento.

La incógnita es la función p=p(x,y) que nos da la probabilidad que tiene una partícula que está en el punto (x,y) de encontrar la puerta. Esta función es solución de la ecuación de Laplace:

Δp=0

A esta ecuación hay que añadir condiciones de contorno: p=0 sobre las paredes de la habitación y p=1 en la puerta.

{Δp=0enΩ=(0,10)×(0,10)p=0sobreΩΓpp=1sobreΓp

donde Γp es la parte de la frontera de Ω que corresponde a la puerta.

La formulación débil de este problema es:

(1){Hallarpp~+H01(Ω)tal queΩpqdxdy=0qH01(Ω)

siendo p~ una función de H1(Ω) que verifique p~=1 sobre Γp y p~=0 sobre el resto de la frontera.

Además, queremos resolver este problema para varios casos, en los que la habitación tenga una o varias puertas. Para ello haremos uso de números de referencia (etiquetas) para los distintos trozos de la frontera, e iremos cambiando convenientemente, para cada problema, las condiciones de contorno.

Código

 

NonSymElliptic.edp

Ejercicio

Calcular la solución del problema siguiente:

(2){aΔu+bux+cu=fenΩ=BRu=u0sobreΩ

donde B es la bola abierta de centro (0,0) y radio 5, R es el rectángulo [1,2]×[3,3], f(x,y)=cx2+2bx+cy2, u0(x,y)=x2y2 , para los valores de las constantes a=0.1, b=5, c=10.

Observación: el interior del rectángulo no está incluido en el dominio. Para que FreeFEM malle adecuadamente este dominio hay que:

(Ver Mallado de un círculo)

Solución NoNSymElliptic

 

 

CoefElliptic.edp

Problema elíptico escrito en forma de divergencia con coeficientes variables.

Sea Ω=RBR2 , con R=(0,10)2 y B una bola abierta de centro (4,4) y radio 1. Sea Ω=Γ1Γ2, siendo Γ1=B y Γ2=R. Consideramos el problema de hallar u:ΩR tal que

(3){(A(x,y)u)+c(x,y)u=f(x,y)en Ω,u=u0sobre Γ1,(A(x,y)u)n+α(x,y)u=g(x,y)sobre Γ2,

donde f:ΩR, A:ΩR2×2, u0:Γ1R, α,g:Γ2R son funciones dadas.

Mallado

El espacio natural para buscar la solución del problema (3) es la variedad lineal u~0+V, donde u~0H1(Ω) tal que u~0|Γ1=u0 y V={vH1(Ω)/v=0 sobre Γ1} .

Multiplicamos en la ecuación ambos miembros por una función vV e integramos en Ω. Integrando por partes y teniendo en cuenta que v vale cero sobre Γ1 y que (A(x,y)u)n=α(x,y)ug(x,y) sobre Γ2, se obtiene la siguiente formulación variacional de (3):

{Hallar uu~0+V tal que Ω(Au)vdxdy+Ωcuvdxdy+Γ2αuvdσΩfvdxdyΓ2gvdσ=0vV.

Resolvemos el problema para:

u0=34(x2+5y2)​,

f(x,y)=30(x25y2)​,

α(x,y)=0.1(x2y2)​,

g(x,y)=3.4(x2+5y2)(y2x2)​ y

(4)A=A(x,y)=[1+x2xyxy1+y2].

Código

 

Solucion

 

 

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