Prácticas de Finite Element Methods (GETI)
Segundo Cuatrimestre del Curso 2019-2020
-
Cada script y cada función contienen al principio una explicación
que se puede ver sin editar el fichero. Basta teclear en la ventana de comandos de
MATLAB la instrucción 'help nombre_script' o 'help nombre_funcion'.
-
Muchos de los programas que hay a continuación realizan llamadas a
algunas funciones para dibujar y/o cargan algunos ficheros con mallados.
Debéis descargar esas funciones (respectivamente, esos mallados)
del apartado Plot (respectivamente, Mesh) que hay en la esquina inferior
izquierda de las páginas de la asignatura en el blog Numerical Factory.
Para que las funciones y los scripts que hay a continuación funcionen
es necesario implementar la siguiente estructura de directorios (carpetas):
-
Escoger un nombre para la carpeta general donde guardaréis
todas las prácticas del curso;
-
Una vez descargado el fichero additionalFiles.zip (respectivamente,
meshFilesAll.rar), debéis desempaquetarlo y guardar todo
su contenido en una subcarpeta que se llame additionalFiles
(respectivamente, meshFilesAll) y que cuelgue de la anterior
carpeta general.
-
Antes de cada práctica, crear usa subcarpeta que cuelgue de
la carpeta general donde guardar los ficheros de esa práctica.
Yo, por ejemplo, llamo 2-1 a la carpeta específica de la
práctica 2.1.
-
De esta manera, no hace falta copiar antes de cada práctica las
funciones para dibujar y los mallados que necesitamos en la carpeta
de la práctica en cuestión.
Basta añadir la línea
addpath ../additionalFiles/ ../meshFilesAll/
al principio de cada script o escribirla en la ventana de comandos
antes de invocar a una función.
Esta línea le dice a MatLab que también busque
ficheros en esas carpetas. Es decir, añade esas carpetas
al cámino (path) de búsqueda.
-
Práctica 1.1:
La función p11_exercise.m calcula los
errores (en valor absoluto) promedio y máximo de unos ajustes polinomiales
de grados dados de una función dada definida en un intervalo dado, con un
sampling equidistribuido dado.
-
Práctica 1.2:
-
La página de Wikipedia
Barycentric
coordinate system.
-
Ficheros importantes:
-
El script baryCoord_draw.m calcula las
coordenadas baricéntricas de un punto dado en un triángulo dado
y hace un dibujo.
-
La función baryCoord.m calcula las
coordenadas baricéntricas de un punto dado en un triángulo dado.
-
El script Tk2TR.m calcula la correspondencia entre un
triángulo general y el triángulo de referencia y hace un dibujo.
-
El script severalTriangles.m comprueba en
qué triángulo de una malla con cinco nodos y cuatro
triángulos está un punto dado.
-
El script triangularMesh.m comprueba en
qué triángulo de la malla meshHole.m está un punto dado.
-
La función interpolateFunction.m
calcula la interpolación lineal del valor de una cierta función
en un punto dado a partir de los valores de la función en los nodos de
de un mallado triangular.
-
Ficheros opcionales (interacción con el ratón):
-
La función Tk2TR_mouse.m hace lo mismo
que la función Tk2TR.m, pero el punto se escoge con el ratón.
-
La función Tk2TR_continuousmouse.m
hace lo mismo que la función Tk2TR.m, pero el punto se escoge con el
ratón y el dibujo se mueve si movemos el ratón mientras mantenemos
apretado un botón.
-
La función interpolateFunction_mouse.m
hace lo mismo que la función interpolateFunction.m, pero el punto se escoge con el
ratón.
-
La función interpolateFunction_continuousmouse.m
hace lo mismo que la función interpolateFunction.m, pero el punto se
escoge con el ratón y el dibujo se mueve si movemos el ratón
mientras mantenemos apretado un botón.
-
Práctica 1.3:
-
Ficheros importantes:
-
El script baryCoordQuad_draw.m
calcula las coordenadas baricéntricas de un punto dado en un
cuadrilátero dado y hace un dibujo.
-
La función baryCoordQuad.m
calcula las coordenadas baricéntricas de un punto dado en un
cuadrilátero dado.
-
La función
interpolateFunctionQuad.m
calcula la interpolación lineal del valor de una cierta función
en un punto dado a partir de los valores de la función en los nodos de
de un mallado cuadrangular.
-
Ficheros opcionales (interacción con el ratón):
-
La función
interpolateFunctionQuad_mouse.m
hace lo mismo que la función interpolateFunctionQuad.m, pero el punto
se escoge con el ratón.
-
La función
interpolateFunctionQuad_continuousmouse.m
hace lo mismo que la función interpolateFunctionQuad.m, pero el punto
se escoge con el ratón y el dibujo se mueve si movemos el ratón
mientras mantenemos apretado un botón.
-
Práctica 1.4:
-
El script fillTriangle.m rellena un
triángulo por interpolación lineal de los tres colores-valores
asignados a sus vértices.
-
El script fillMesh.m rellena un mallado triangular
por interpolación lineal de los valores en sus nodos.
-
El script p14_exercise3_amano.m
resuelve el ejercicio 3 de la práctica 1-4 sobre detección y
dibujo de los nodos de la frontera de un mallado triangular.
-
El script p14_exercise3.m resuelve el
ejercicio 3 de la práctica 1-4 sobre detección y dibujo de
los nodos y elementos de la frontera de un mallado triangular mediante
el uso de la función boundaryNodes.m.
-
El script p14_exercise4.m resuelve
el ejercicio 4 de la práctica 1-4 sobre detección y dibujo de
los nodos y elementos de la frontera de un mallado cuadrangular mediante
el uso de la función boundaryNodes.m.
-
La función
plotBoundaryNodesElements.m
detecta y dibuja los nodos y elementos de la frontera de un mallado
triangular o cuadrangular dado mediante el uso de la función
boundaryNodes.m.
-
Práctica 2.1:
-
El script p21_example.m calcula los
desplazamientos en una columna homogénea bajo cargas constantes.
El término homogéneo significa que EA es constante,
donde E es el modulo de Young y A es el área de la sección.
-
El script p21_exercise1.m
resuelve el ejercicio 1 de la práctica 2-1, donde se modifica el
número de nodos del ejemplo anterior.
-
El script p21_exercise2.m resuelve el
ejercicio 2 de la práctica 2-1, donde se modifican los parámetros
E y A de un elemento de la columna.
-
Práctica 2.2:
-
El script p22_example.m resuelve una
ecuación modelo 1D con coeficientes constantes pero término no
homogéneo lineal en el intervalo [0,1] con condiciones de frontera
esenciales cuya solución exacta es conocida.
Aplicamos el FEM con un número creciente de elementos lineales,
para comprobar que el error disminuye cuando el número de
elementos crece.
-
El script p22_exercise1.m
resuelve el ejercicio 1 de la práctica 2-2, donde se modifica el
coeficiente a1 de la ecuación modelo 1D.
Concretamente, a1 deja de ser constante y pasa a ser lineal,
luego ya no conocemos la solución exacta.
Nos piden calcular el promedio de la solución en los nodos.
-
El script p22_exercise2.m resuelve el
ejercicio 2 de la práctica 2-2, donde se modifica el tipo de elementos
usados. Concretamente, usamos elementos cuadráticos.
-
Práctica 2.3:
-
La función
planeLinkStiffMatrix.m
calcula la matriz de rigidez local de un elemento concreto de una
estructura tipo truss en el plano (2D).
Esta función se invocará en varios scripts posteriores.
-
La función
spatialLinkStiffMatrix.m
calcula la matriz de rigidez local de un elemento concreto de una
estructura tipo truss en el espacio (3D).
Esta función se invocará en un script posterior.
-
El script p23_LoadedBridge.m
calcula los deformación bajo unas cargas dadas de una estructura
(truss) de barras 1D en el plano que tiene la forma de un puente.
-
El script p23_exercise1.m
resuelve el ejercicio 1 de la práctica 2-3, donde se dobla
el área seccional de tres elementos de la estructura anterior.
-
El script p23_HoweRoof.m
calcula los deformación bajo unas cargas dadas de una estructura
(truss) barras 1D en el plano que tiene la forma de un techo de Howe.
-
El script p23_3Dtruss.m
calcula los deformación bajo unas cargas dadas de una estructura
(truss) de barras 1D en el espacio con cuatro nodos, tres de ellos fijos.
-
Práctica 2.4:
-
El script p24_PoissonTriangle.m
resuelve la ecuación de Poisson en el cuadrado [0,1]2
con dos condiciones de frontera esenciales y dos condiciones de frontera
naturales usando cuatro elementos lineales triangulares después de
reducir el problema a un triángulo usando la simetría
del problema original.
-
La función linearTriangElement.m
calcula la matriz de rigidez local y el vector columna de fuerzas local
de un elemento concreto de un mallado triangular dado en el caso de
la ecuación modelo 2D con todos sus coeficientes constantes.
Nota: El código de esta función se ha compactificado
respecto al código publicado en Numerical Factory.
Gana en elegancia, aunque pierde un poco de claridad.
-
El script
p24_PoissonTriangleExtended.m
es una extensión del primer script.
Este nuevo script estudia mallas triangulares con 4, 9, 16 o 591
triángulos y dibuja una figura adicional con las curvas de nivel
de la solución.
Nota: Este script invoca a la función anterior para calcular
los objetos locales.
-
Práctica 2.5:
El script p25_HeatHoledSquare.m
resuelve la ecuación de Laplace en el cuadrado [-1,1]2
con un agujero central circular de radio 1/2 y las siguientes condiciones
de frontera:
- Esenciales en la frontera circular interior: u=50;
- Esenciales en los dos lados horizontales del cuadrado: u=10; y
- Naturales en los dos lados verticales del cuadrado: un = 0.
-
Práctica 2.6:
El script
p26_SquareChimneyConvection.m
resuelve la ecuación de Laplace en el cuadrado [-0.2,0.2]2
con un agujero central en el cuadrado [-0.1,0.1]2 y las siguientes
condiciones de frontera:
- Esenciales en la frontera interior: u=100; y
- Convección en la frontera exterior con beta=20 y
Tinf=30.
Usamos tres elementos lineales triangulares después de reducir el
dominio original a una octava parte usando las simetrías del problema.
-
Práctica 2.7:
-
El script
p27_HoledSquareConvection.m
resuelve la ecuación de Laplace en el cuadrado [-1,1]2
con un agujero central circular de radio 1/2 y las siguientes condiciones
de frontera:
- Esenciales en la frontera circular interior: u=15;
- Esenciales en el lado inferior del cuadrado: u=50;
- Convección en el lado superior del cuadrado con beta=2 y
Tinf=-5; y
- Naturales en los dos lados verticales del cuadrado: un = 0.
Este script también resuelve el ejercicio 1 propuesto al final
de la práctica.
-
La función
applyConstantNaturalBCTriang.m
modifica el vector columna de variables secundarias global aplicando una
condición de frontera natural constante.
Importante: Se recomienda practicar el uso de esta función.
Por ejemplo, resolviendo el segundo apartado del segundo problema
del segundo quiz.
-
Práctica 2.9:
-
La función bilinearQuadElement.m
calcula la matriz de rigidez local y el vector columna de fuerzas local
de un elemento concreto de un mallado cuadrangular dado en el caso de
la ecuación modelo 2D con todos sus coeficientes constantes.
Nota: El código de esta función se ha modificado ligeramente
respecto al código publicado en Numerical Factory para evitar
el uso de variables tipo cell.
-
El script
p29_FourSquares.m
resuelve la ecuación u - uxx - uyy = 1
en el cuadrado [0,1]2 con
dos condiciones de frontera esenciales homogéneas y
dos condiciones de frontera naturales homogéneas
usando un mallado uniforme de 4=2×2 subcuadrados iguales.
-
El script
p24_exercise2.m
resuelve el ejercicio 2 de la práctica 2-9,
que es una variación del problema anterior.
En este caso, estudiamos mallados uniformes cuadrangulares
con 16=4×4 y 64=8×8 subcuadrados iguales
del cuadrado inicial [0,1]2,
cambiamos los coeficientes de la ecuación y
también las condiciones de frontera esenciales
(que dejan de ser homogéneas).
Nota: Los dos scripts invocan a la función anterior para calcular
los objetos locales.
-
Práctica 2.10:
-
El script
p210_HoledRectangConvection.m
resuelve la ecuación de Laplace en
el rectángulo [0,5]×[0,2] con un agujero circular de radio 1/2
centrado en el punto (1,1) y las siguientes condiciones de frontera:
- Esenciales en la frontera circular interior: u=50;
- Esenciales en el lado inferior del cuadrado: u=10;
- Convección en el lado superior del cuadrado con beta=2 y
Tinf=-5; y
- Naturales en los dos lados verticales del cuadrado: un = 0.
Este script también resuelve el ejercicio 1 propuesto al final
de la práctica.
-
La función
applyConstantNaturalBCQuad.m
modifica el vector columna de variables secundarias global aplicando una
condición de frontera natural constante.
Importante: Se recomienda practicar el uso de esta función.
-
Práctica 2.13:
-
El script p213_firstmesh.m detecta y
dibuja ciertos nodos específicos de la frontera de un mallado triangular
descritos al principio de la práctica 2-13.
-
El script p213_exercises1and2.m
resuelve los ejercicios 1 y 2 de la práctica 2-13 sobre detección y
dibujo de ciertos nodos específicos de otro mallado triangular.
-
El script p213_exercise3.m resuelve el
ejercicio 3 de la práctica 2-13 sobre detección y dibujo de ciertos
nodos específicos de la frontera de un mallado cuadrangular.
-
Práctica 4.2:
-
La función
planeElastTriangStiffMatrix.m
calcula la matriz de rigidez local de un elemento concreto en problemas
de elasticidad plana con elementos triangulares lineales.
Esta función se invocará en un script posterior.
-
La función
applyLoadsTriang.m
modifica el vector global Q según unas condiciones de frontera naturales
provenientes de aplicar una tracción dada en algunos nodos de
la frontera.
Esta función se invocará en un script posterior y
solo funciona con mallados triangulares.
-
El script p42_HoledSquareStress.m
calcula los deformación bajo unas tracciones dadas de una
plancha delgada (luego es un problema de tensiones) con la forma del
cuadrado [-1,1]2 con un agujero central circular de radio 1/2.
Consideramos las siguientes condiciones de frontera:
- Esencial homogénea en el lado izquierdo del cuadrado: u=0;
- Natural constante en el lado derecho del cuadrado; y
- Naturales homogéneas en el resto de fronteras.
-
Práctica 4.3:
-
El script p42_HoledRectangleStress.m
calcula los deformación bajo unas tracciones dadas de una
plancha delgada (luego es un problema de tensiones) con la forma del
rectángulo [0,5]2×[0,2]2 con un agujero
circular de radio 1/2 centrado en el punto (1,1).
Consideramos las siguientes condiciones de frontera:
- Esencial homogénea en la frontera circular: u=0;
- Natural constante en el lado derecho del rectángulo; y
- Naturales homogéneas en el resto de fronteras.