Diferencia entre revisiones de «Presa triangular. Grupo 12.»
(→Tensor de tensiones) |
(→Rotacional \left | ∇ \times \vec{u} \right |) |
||
| Línea 286: | Línea 286: | ||
=Rotacional <math>\left | ∇ \times \vec{u} \right |</math>= | =Rotacional <math>\left | ∇ \times \vec{u} \right |</math>= | ||
| + | Para calcular el rotacional usaremos la siguiente formula: <math>∇ × \vec{u}= \begin{vmatrix}\vec{i} & \vec{j}& \vec{k}\\ \frac{\partial }{\partial x} & \frac{\partial }{\partial y}& \frac{\partial }{\partial z}\\ u_{1}& u_{2}& u_{3} \end{vmatrix}</math> Usada para calcular el rotacional en campos escalares. | ||
| + | |||
| + | Siendo en <math>t=0</math>: <math>\vec u = \frac{1}{3}\sin \left ( \frac{π}{3} y\right )\vec{i} + 0\vec{j} + 0\vec{k}; | ||
| + | |||
| + | </math> <math>∇ × \vec{u}</math> = <math>\begin{vmatrix} \vec{i} & \vec{j} & \vec{k}\\ \frac{\partial }{\partial x} & \frac{\partial }{\partial y} &\frac{\partial }{\partial z} \\ 0 & \frac{1}{3}\sin \left ( \frac{π}{3} y\right ) & 0\end{vmatrix} = \frac{π}{9}\cos \left ( \frac{π}{3} y\right )\vec{k}; </math> | ||
| + | |||
| + | Buscamos el modulo: | ||
| + | <math>|∇ × \vec{u}|= \frac{π}{9}\cos \left ( \frac{π}{3} y\right )</math> | ||
| + | |||
| + | En la grafica se puede apreciar que los puntos de mayor rotacional son los pertenecientes a las rectas <math> y=0; y=6; y=12 </math>, representadas en amarillo. | ||
=Tensor de tensiones= | =Tensor de tensiones= | ||
Revisión del 12:02 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, 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. 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]
Para calcular la divergencia usaremos la siguiente formula: [math]\ \nabla \cdot \vec u =\frac{\partial \vec u_1}{\partial x} + \frac{\partial \vec u_2}{\partial y} + \frac{\partial \vec u_3}{\partial z} [/math] usada para calcular la divergencia en campos escalares.
Siendo en [math]t=0[/math]: [math]\vec u = \frac{1}{3}\sin \left ( \frac{π}{3} y\right )\vec{i} + 0\vec{j} + 0\vec{k}[/math]
[math]\ \nabla \cdot \vec u = 0[/math]
La divergencia da 0, por lo tanto, como se puede observar en la grafica, no hay cambio de volumen debido al desplazamiento, al ser este nulo en todos sus puntos.
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));
7 Rotacional [math]\left | ∇ \times \vec{u} \right |[/math]
Para calcular el rotacional usaremos la siguiente formula: [math]∇ × \vec{u}= \begin{vmatrix}\vec{i} & \vec{j}& \vec{k}\\ \frac{\partial }{\partial x} & \frac{\partial }{\partial y}& \frac{\partial }{\partial z}\\ u_{1}& u_{2}& u_{3} \end{vmatrix}[/math] Usada para calcular el rotacional en campos escalares.
Siendo en [math]t=0[/math]: [math]\vec u = \frac{1}{3}\sin \left ( \frac{π}{3} y\right )\vec{i} + 0\vec{j} + 0\vec{k}; [/math] [math]∇ × \vec{u}[/math] = [math]\begin{vmatrix} \vec{i} & \vec{j} & \vec{k}\\ \frac{\partial }{\partial x} & \frac{\partial }{\partial y} &\frac{\partial }{\partial z} \\ 0 & \frac{1}{3}\sin \left ( \frac{π}{3} y\right ) & 0\end{vmatrix} = \frac{π}{9}\cos \left ( \frac{π}{3} y\right )\vec{k}; [/math]
Buscamos el modulo: [math]|∇ × \vec{u}|= \frac{π}{9}\cos \left ( \frac{π}{3} y\right )[/math]
En la grafica se puede apreciar que los puntos de mayor rotacional son los pertenecientes a las rectas [math] y=0; y=6; y=12 [/math], representadas en amarillo.
8 Tensor de tensiones
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)); %Mallado [Mx,My]=meshgrid(x1,y1); My(My > f(Mx)) = NaN; % Sive para que no se dibujen los puntos de fuera del triángulo T_normal_i=(-3.*My)./25-1/50;%tensión normal dirección i T_normal_j=-My./25-3/50;%tensión normal dirección j T_normal_k=-My./25-1/50;%tensión normal dirección k
%Representación en 2D
subplot(1,3,1) %Tensión normal en i surf(Mx,My,T_normal_i) shading interp axis equal xlabel('x') ylabel('y') zlabel('z') view(2) colorbar title('Tensión normal en i') subplot(1,3,2) %Tensión normal en j surf(Mx,My,T_normal_j) shading interp axis equal xlabel('x') ylabel('y') zlabel('z') view(2) colorbar title('Tensión normal en j') subplot(1,3,3) %Tensión normal en k surf(Mx,My,T_normal_k) shading interp axis equal xlabel('x') ylabel('y') zlabel('z') view(2) colorbar title('Tensión normal en k')}}
