I am still playing with the wave bi-harmonic equation. My question is very similar to another question I posted few weeks ago on this site (Solving rectangular plates vibrations wave equation). I want to visualize the free vibrations of a steel square plate measuring [-a,a;-b,b] and thickness = h (origin = center of the plate).
The issue I met today is the following one : the bi-harmonic equation I am using to NDSolve my problem is working only with some initial conditions parameters sets. With other sets, the computation is never ending (or maybe too long, I don't know) and I get error messages like "DSolve::mxsst: Using maximum number of grid points 100 allowed by the MaxPoints or MinStepSize options for independent variable x." Idem for y and z.
Of course, I searched and found some explanations on this site and some others, but the given solutions never work for me. I think my problem is a method tuning matter in NDSolve. Too hard for me. Help. Thanks in advance.
Below is my code with some helping comments :
(* Free vibrations of square plate *)
Remove["Global`*"]; // Quiet
Needs["DifferentialEquations`NDSolveProblems`"];
Needs["DifferentialEquations`NDSolveUtilities`"];
Needs["NDSolve`FEM`"];
Ey = SetPrecision[2.078*10^11, Infinity];(*N/m^2*)
\[Nu] = Rationalize[0.317756];(*unitless*)
\[CurlyRho]d = 8166;(*kg/m^3*)
h = 1/1000;
Df = (Ey h^3)/(12 (1 - \[Nu]^2)); a = 1; b = 1;
eqn = {D[u[x, y, t], {x, 4}] + 2 D[u[x, y, t], {x, 2}, {y, 2}] +
D[u[x, y, t], {y, 4}] + (\[CurlyRho]d h)/
Df D[u[x, y, t], {t, 2}] ==
0}; (* for plates, governing equation = bi-harmonic equation *)
m = 1; n = 2;
ic = {u[x, y, 0] ==
Cos[m \[Pi] x/a] Cos[n \[Pi] y/b] +
Cos[n \[Pi] x/a] Cos[m \[Pi] y/b],
Derivative[0, 0, 1][u][x, y, 0] == 0}; (* initial impulse *)
bc1fe = {Derivative[2, 0, 0][u][-a, y, t] == 0,
Derivative[3, 0, 0][u][-a, y, t] == 0,
Derivative[2, 0, 0][u][a, y, t] == 0,
Derivative[3, 0, 0][u][a, y, t] ==
0}; (* free edges/ simplified *)
bc2fe = {Derivative[0, 2, 0][u][x, -b, t] == 0,
Derivative[0, 3, 0][u][x, -b, t] == 0,
Derivative[0, 2, 0][u][x, b, t] == 0,
Derivative[0, 3, 0][u][x, b, t] ==
0}; (* free edges/ simplified *)
numsol = NDSolve[{eqn, ic, bc1fe, bc2fe},
u, {x, -a, a}, {y, -b, b}, {t, 0, 1},
Method -> {"StiffnessSwitching"},
MaxSteps -> 10^6] (* must show the plate behavior in time *)
(* Results visualization *)
uu[x_, y_, t_] := u[x, y, t] /. numsol;
ListAnimate[
Table[ContourPlot[Evaluate[uu[x, y, t] == 0], {x, -a, a}, {y, -b, b},
PlotLabel -> Style[t, 30, Bold]], {t, 0, 1, .05}]]
(* some helping comments:
)
( I also tried the following possibilities without any success : )
( numsol=NDSolve[{eqn,ic,bc1fe,bc2fe},u,{x,-a,a},{y,-b,b},{t,0,1},
Method[Rule]{"MethodOfLines","SpatialDiscretization"[Rule]{
"TensorProductGrid","MaxPoints"[Rule]101}}]*)
(* numsol=NDSolve[{eqn,ic,bc1fe,bc2fe},u,{x,-a,a},{y,-b,b},{t,0,1},
Method[Rule]{"MethodOfLines","TemporalVariable"[Rule]t,
"SpatialDiscretization"[Rule]"FiniteElement"}] *)
(* one important thing : if I replace " Cos[m [Pi] x/a] Cos[n [Pi]
y/b]+Cos[n [Pi] x/a] Cosm [Pi/b]" by " Cos[1 x] Cos[3
y]+Cos[3x] Cos[1y] " the resolution is working well and relatively fast. )
( No error messages hapening *)
Hereafter is the computation result for Cos[1 x] Cos[3y]+Cos[3x] Cos[1y]. It is also working well for Cos[1 x] Cos[2y]+Cos[2x] Cos[1y]:



Remove["Global\*"]; // Quiet; Needs["DifferentialEquations`NDSolveProblems`"]; Needs["DifferentialEquations`NDSolveUtilities`"]; Needs["NDSolve`FEM`"];are redundant. Also, theFiniteElement` method isn't called in this case, because it cannot handle this type of problem directly at the moment: https://mathematica.stackexchange.com/a/199369/1871 – xzczd May 20 '21 at 06:37