using Geometria, LinearAlgebra
# Solución de Navier (placa simplemente apoyada a×a, carga uniforme q, rigidez D): flecha central
navier(a, q, D; N = 199) = 16q / (π^6 * D) * sum(sin(m * π / 2) * sin(n * π / 2) / (m * n * (m^2 + n^2)^2 / a^4) for m in 1:2:N, n in 1:2:N)
function flecha_centro(n, t, modo; E = 1.0e4, ν = 0.3, L = 1.0)
r = placa_oblicua(π / 2)
nodos, conn = malla_rectangular((0, L), (0, L), n, n)
K, _, F = ensamblar(r, nodos, conn, E, ν, t; modo, f = θ -> [0, 0, -1.0])
fij = Int[]
for k in 1:size(nodos, 2)
x, y = nodos[:, k]
append!(fij, [gdl(k, 1), gdl(k, 2)])
(x ≈ 0 || x ≈ L || y ≈ 0 || y ≈ L) && push!(fij, gdl(k, 3))
(x ≈ 0 || x ≈ L) && push!(fij, gdl(k, 5))
(y ≈ 0 || y ≈ L) && push!(fij, gdl(k, 4))
end
u = resolver_estatica(K, F, unique(fij))
c = findfirst(k -> nodos[1, k] ≈ L / 2 && nodos[2, k] ≈ L / 2, 1:size(nodos, 2))
-u[gdl(c, 3)]
end
E, ν, t = 1.0e4, 0.3, 0.01; D = E * t^3 / (12 * (1 - ν^2))
wref = navier(1.0, 1.0, D)
tabla = [(n = n, desplazamientos = flecha_centro(n, t, :desplazamientos) / wref,
reducida = flecha_centro(n, t, :reducida_selectiva) / wref,
subdominios = flecha_centro(n, t, :subdominios) / wref) for n in (2, 4, 8)]