Diferencia entre revisiones de «Presa triangular. Grupo 12.»
(→Representación gráfica del desplazamiento del sólido) |
(→Divergencia ∇·\vec{u}) |
||
| Línea 256: | Línea 256: | ||
=Divergencia <math>∇·\vec{u}</math>= | =Divergencia <math>∇·\vec{u}</math>= | ||
| + | {{matlab|codigo= | ||
| + | h = 1/10; % Paso de muestreo | ||
| + | x1 = 0:h:2; % Eje x | ||
| + | f = @(x1) min(3, 3/2 * (2 - x1)); | ||
| + | y1 = 0:h:max(f(x1)); | ||
| + | % Crear el mallado | ||
| + | [Mx, My] = meshgrid(x1, y1); | ||
| + | My(My > f(Mx)) = NaN; % sive para que no se dibujen los puntos de fuera del triangulo ya que meshgrid lo pone al ser un mallado | ||
| + | |||
| + | % Cálculo de la divergencia | ||
| + | D=(-2.*My/50)-(1/50); | ||
| + | surf(Mx,My,D); | ||
| + | view(0,90); | ||
| + | axis equal | ||
| + | axis([-0.5, 2.5, -0.5, 3.5]); | ||
| + | colorbar | ||
| + | title('DIVERGENCIA') | ||
| + | % Obtención de máximos y mínimos | ||
| + | Dmax=max(max(D)); | ||
| + | Dmin=min(min(D));}} | ||
=Rotacional <math>\left | ∇ \times \vec{u} \right |</math>= | =Rotacional <math>\left | ∇ \times \vec{u} \right |</math>= | ||
Revisión del 11:56 2 dic 2024
| Trabajo realizado por estudiantes | |
|---|---|
| Título | Representación de campos de temperatura y deformaciones en una presa triangular (Grupo 12) |
| Asignatura | Teoría de Campos |
| Curso | 2024-25 |
| Autores |
|
| Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura | |
Visualización de campos escalares y vectoriales en elasticidad. Consideramos presa representada por una placa triangular plana (en dimensión 2) que ocupa la región [math](x, y) ∈ [-1, 1]×[0, f(x)][/math], donde [math]f(x)=min(3,3/2(2-x))[/math]
• Parametrizar la superficie
• La temperatura viene dada por la función:
• Los desplazamientos se corresponden con el campo:
• Tomar como densidad:
Contenido
- 1 Dibujo del mallado que representa los puntos interiores del sólido.
- 2 Curvas de nivel de la temperatura
- 3 Cálculo de energía calorífica con la Ley de Fourier
- 4 Campo de vectores en el sólido
- 5 Representación gráfica del desplazamiento del sólido
- 6 Divergencia [math]∇·\vec{u}[/math]
- 7 Rotacional [math]\left | ∇ \times \vec{u} \right |[/math]
- 8 Tensor de tensiones
- 9 Tensiones tangenciales al plano ortogonal a [math]\vec{i}[/math]
- 10 Tensión de Von Mises
- 11 Campo de fuerzas que actúa sobre la placa
- 12 Módulo del desplazamiento transversal
1 Dibujo del mallado que representa los puntos interiores del sólido.
Esta grafica muestra el mallado de la placa triangular y el código utilizado en MatLab para obtenerlo. Un breve resumen del funcionamiento del codigo seria:
- La primera línea del código utiliza algo basico en Matlab,que es el uso del clear y el clc para que se borren todas las variables anteriormente usadas y no causen confusión
- En las dos siguientes lineas de codigo discretizamos las variables x1 e y1.
- En la cuarta y en la quinta línea escribimos los comandos para crear el mallado.
- Finalmente las dos penúltimas lineas servirán para nombrar a los ejes x e y respectivamente, mientras que las últimos dos sirven para añadirle un título a nuestra gráfica y visualizar en planta nuestra placa.
clear;clc;h = 1/10; % Paso de muestreo
x1 = 0:h:2;
y1 = 0:h:3;
[x2, y2] = meshgrid(x1, y1); % Crea una malla 2D para las coordenadas x e y
f = @(x) min(3, (3/2) * (2 - x)); % Función límite
Region = (y2 <= f(x2)); % Condición para estar dentro de la región
z2 = zeros(size(x2)); % Altura (en este caso, z es plano en 0)
x2(~Region) = NaN; % Puntos fuera de la región se descartan
y2(~Region) = NaN;
mesh(x2, y2, z2); % Gráfico de la región plana
hold on;
x_borde = x1; % Bordes de la región
y_borde = arrayfun(f, x_borde); % Límite superior según f(x)
plot3(x_borde, y_borde, zeros(size(x_borde)), 'Color', [0.2, 0.4, 0.6], 'LineWidth', 2);
plot3([0 0], [0 f(0)], [0 0], 'Color', [0.2, 0.4, 0.6], 'LineWidth', 2);
plot3([2 2], [0 f(2)], [0 0], 'Color', [0.2, 0.4, 0.6], 'LineWidth', 2);
plot3([0 2], [0 0], [0 0], 'Color', [0.2, 0.4, 0.6], 'LineWidth', 2);
axis equal;
axis([-1, 3, -1, 4]); % Límite de los ejes
xlabel('Eje X');
ylabel('Eje Y');
title('Mallado de la Presa');
view(2); % Vista en 2D
grid on;
hold off;
2 Curvas de nivel de la temperatura
La siguiente grafica representa las curvas de nivel de la temperatura.
en este caso sería:
La temperatura máxima alcanzada es de 0.88 y se alcanza en los puntos (61,1) y (61,61)
2.1 Representación curvas de nivel de temperatura
%Definir la figura
h = 1/10; % Paso de muestreo
x1 = 0:h:2;
y1 = 0:h:3;
[x2, y2] = meshgrid(x1, y1); % Crea una malla 2D para las coordenadas x e y
f = @(x) min(3, (3/2) * (2 - x)); % Función límite
Region = (y2 <= f(x2)); % Condición para estar dentro de la región
z2 = zeros(size(x2)); % Altura (en este caso, z es plano en 0)
x2(~Region) = NaN; % Puntos fuera de la región se descartan
y2(~Region) = NaN;
%Campo temperatura
T = (y2 .* x2.^2) / 2; % Función de temperatura
T(~Region) = NaN; % Filtra puntos fuera de la región
%Definir curvas de nivel
contour3(x2, y2, T, 20, 'LineWidth', 2); % Gráfico de curvas de nivel en 3D
colorbar; % Muestra la barra de colores asociada a los valores de temperatura2.2 Representación de temperatura y punto máximo
%Definir la figura
h = 1/10; % Paso de muestreo
x1 = 0:h:2;
y1 = 0:h:3;
[x2, y2] = meshgrid(x1, y1); % Crea una malla 2D para las coordenadas x e y
f = @(x) min(3, (3/2) * (2 - x)); % Función límite
Region = (y2 <= f(x2)); % Condición para estar dentro de la región
z2 = zeros(size(x2)); % Altura (en este caso, z es plano en 0)
x2(~Region) = NaN; % Puntos fuera de la región se descartan
y2(~Region) = NaN;
%Campo temperatura
Temp = (y2 .* x2.^2) / 2; % Función de temperatura
Temp(~Region) = NaN; % Filtra puntos fuera de la región
surf(x2, y2, Temp, 'EdgeColor', 'none'); % Superficie en 3D
hold on;
%Calcular los puntos máximos
[maxTemp, idx] = max(Temp(:)); % Encuentra el valor máximo y su índice
[x_max, y_max] = ind2sub(size(Temp), idx); % Convierte índice lineal a coordenadas
x_coord = x2(x_max, y_max); % Coordenada X del máximo
y_coord = y2(x_max, y_max); % Coordenada Y del máximo
plot3(x_coord, y_coord, maxTemp, 'ro', 'MarkerSize', 8, 'LineWidth', 2); % Punto rojo para el máximo
text(x_coord, y_coord, maxTemp, sprintf(' Maximo: %.2f', maxTemp), 'Color', 'r', 'FontSize', 10); % Texto del valor máximo2.3 Gradiente de T
%Definir la figura
h = 1/10; % Paso de muestreo
x1 = 0:h:2;
y1 = 0:h:3;
[x2, y2] = meshgrid(x1, y1); % Crea una malla 2D para las coordenadas x e y
f = @(x) min(3, (3/2) * (2 - x)); % Función límite
Region = (y2 <= f(x2)); % Condición para estar dentro de la región
z2 = zeros(size(x2)); % Altura (en este caso, z es plano en 0)
x2(~Region) = NaN; % Puntos fuera de la región se descartan
y2(~Region) = NaN;
%Campo temperatura
T = (y2 .* x2.^2) / 2; % Función de temperatura
T(~Region) = NaN; % Filtra puntos fuera de la región
%Campo de Gradiente
[Tx, Ty] = gradient(T, h); % Calcula el gradiente de T(x, y)
Tx(~Region) = NaN; % Filtra los componentes del gradiente fuera de la región
Ty(~Region) = NaN;
%Dibujar el campo de Curvas de nivel y dibujar curvas de nivel
z_surface = T; % Superficie para representar las curvas de nivel
contour3(x2, y2, z_surface, 20, 'LineWidth', 2); % Curvas de nivel en 3D
hold on;
scale = 2;
%gradiente
quiver3(x2, y2, z_surface, scale*Tx, scale*Ty, zeros(size(Tx)), 'r', 'LineWidth', 1.5); % Vectores del gradiente
axis equal;
axis([0, 2, 0, 3, 0, 1]); % Límites de los ejes
xlabel('Eje X');
ylabel('Eje Y');
zlabel('Temperatura T(x, y)');
title('Curvas de Nivel y Gradiente de la Temperatura');
colorbar; % Barra de colores para la escala de temperatura
grid on;
hold off;
3 Cálculo de energía calorífica con la Ley de Fourier
De acuerdo a la Ley de Fourier la energía calorífica [math] \vec{Q} [/math] viaja de acuerdo a la fórmula [math] \vec{Q}=−κ∇T [/math], donde [math] κ [/math] es la constante de conductividad térmica de la placa que supondremos [math] κ=1 [/math]. Para poder calcular la energía calorífica, primero debemos de calcular el gradiente de la temperatura, que viene dada por:Una vez calculado, se procede a dibujarlo utilizando Matlab:
clear all
%Definir la figura
h = 1/10; % Paso de muestreo
x1 = 0:h:2;
y1 = 0:h:3;
[x2, y2] = meshgrid(x1, y1); % Crea una malla 2D para las coordenadas x e y
f = @(x) min(3, (3/2) * (2 - x)); % Función límite
Region = (y2 <= f(x2)); % Condición para estar dentro de la región
z2 = zeros(size(x2)); % Altura (en este caso, z es plano en 0)
x2(~Region) = NaN; % Puntos fuera de la región se descartan
y2(~Region) = NaN;
%Campo temperatura
T = (y2 .* x2.^2) / 2; % Función de temperatura
T(~Region) = NaN; % Filtra puntos fuera de la región
%Campo de Gradiente
[Tx, Ty] = gradient(T, h); % Calcula el gradiente de T(x, y)
Tx(~Region) = NaN; % Filtra los componentes del gradiente fuera de la región
Ty(~Region) = NaN;
%Campo de energía
[Tx, Ty] = gradient(T, h); % Gradiente de T(x, y)
Qx = -Tx; % Componente x del flujo de energía calorífica
Qy = -Ty; % Componente y del flujo de energía calorífica
Qx(~Region) = NaN; % Filtra los valores fuera de la región
Qy(~Region) = NaN;
%Dibuja curva de nivel
z_surface = T; % Superficie para representar las curvas de nivel
contour3(x2, y2, z_surface, 20, 'LineWidth', 2); % Curvas de nivel en 3D
hold on
%Vector de flujo de energía
scale = 1.5;
quiver3(x2, y2, z_surface, scale*Qx, scale*Qy, zeros(size(Qx)), 'r', 'LineWidth', 1.5);
%Dibujar la grfica de calor
axis equal;
axis([0, 2, 0, 3, 0, 1]); % Límites de los ejes
xlabel('Eje X');
ylabel('Eje Y');
zlabel('Temperatura T(x, y)');
title('Curvas de Nivel y Flujo de Energía Calorífica en 3D');
colorbar; % Muestra una barra de colores asociada a la temperatura
grid on;
hold off;
4 Campo de vectores en el sólido
Se tiene que:
A continuación se adjunta el resultado gráfico, así como el código utilizado en Matlab:
h = 1/10; % Paso de muestreo
x1 = 0:h:2; % Eje x
f = @(x1) min(3, 3/2 * (2 - x1));
y1 = 0:h:max(f(x1));
% Crear el mallado
[Mx, My] = meshgrid(x1, y1);
My(My > f(Mx)) = NaN; % sive para que no se dibujen los puntos de fuera del triangulo ya que meshgrid lo pone al ser un mallado
% Campo vectorial
uy= ((-My./ 25).*Mx);
ux = ((1/25.*(2-Mx)).* My);
hold on
axis([-0.5, 2.5, -0.5, 3.5]);
mesh(Mx, My, 0*Mx);
quiver(Mx, My, ux, uy, 1.5, 'b'); % Campo vectorial
hold off;
%El único pto fijo es (0,0) por que se anulan los despazamientos.
5 Representación gráfica del desplazamiento del sólido
A continuación se incluye la representación del sólido previa al movimiento y después del movimiento (en [math]t = 0[/math]), así como una figura que contiene la representación del sólido previa y tras el desplazamiento, para lo que se ha utilizado el comando subplot. Se han utilizado datos definidos en el apartado anterior, en concreto, [math] ux=\frac{1}{3}sin(\frac{π}{3}y) [/math] y [math] uy=0 [/math]. También se adjunta el programa de Matlab utilizado para la representación.
subplot(1,2,1)
h = 1/10; % Paso de muestreo
x1 = 0:h:2; % Eje x
f = @(x1) min(3, 3/2 * (2 - x1));
y1 = 0:h:max(f(x1));
% Crear el mallado
[Mx, My] = meshgrid(x1, y1);
My(My > f(Mx)) = NaN; % Sive para que no se dibujen los puntos de fuera del triángulo
figure(2)
subplot(1,2,1)
hold on
grid on
axis([-0.5, 2.5, -0.5, 3.5]);
mesh(Mx, My, 0*Mx);
view(2)
axis equal
title('Antes del desplazamiento')
xlabel('Eje x')
ylabel('Eje y')
% Cálculo del desplazamiento
uy= ((-My./ 25).*Mx);
ux = ((1/25.*(2-Mx)).* My);
Mx_desplazado = Mx + ux; % Nuevo mallado desplazado en x
My_desplazado = My + uy; % Nuevo mallado desplazado en y
subplot(1,2,2)
mesh(Mx_desplazado, My_desplazado,0.*Mx); % Mallado desplazado
axis([-0.5, 2.5, -0.5, 3.5]);
view(2)
axis equal
xlabel('Eje x')
ylabel('Eje y')
title('Después del desplazamiento')
6 Divergencia [math]∇·\vec{u}[/math]
h = 1/10; % Paso de muestreo
x1 = 0:h:2; % Eje x
f = @(x1) min(3, 3/2 * (2 - x1));
y1 = 0:h:max(f(x1));
% Crear el mallado
[Mx, My] = meshgrid(x1, y1);
My(My > f(Mx)) = NaN; % sive para que no se dibujen los puntos de fuera del triangulo ya que meshgrid lo pone al ser un mallado
% Cálculo de la divergencia
D=(-2.*My/50)-(1/50);
surf(Mx,My,D);
view(0,90);
axis equal
axis([-0.5, 2.5, -0.5, 3.5]);
colorbar
title('DIVERGENCIA')
% Obtención de máximos y mínimos
Dmax=max(max(D));
Dmin=min(min(D));
