Я новичок в Mathematica, поэтому, пожалуйста, потерпите меня!
Я пытаюсь решить нелинейный PDE в MMA, используя NDSolve. Процесс решения обрывается из-за особенностей, возникающих задолго до истечения времени моделирования. Я понимаю, что с жесткими системами, обладающими такими особенностями, можно бороться (по крайней мере, грубой силой) путем уменьшения размера шага.
Однако «MaxSteps» или «MaxStepSize», похоже, не оказывают ощутимого влияния на мой код.
Что дает? Любой другой метод, который я мог бы пропустить?
**
КОД:
**
Needs["VectorAnalysis`"]
Needs["DifferentialEquations`InterpolatingFunctionAnatomy`"];
Clear[Eq4, EvapThickFilm, h, S, G, E1, K1, D1, VR, M, R]
Eq4[h_, {S_, G_, E1_, K1_, D1_, VR_, M_, R_}] := \!\(
\*SubscriptBox[\(\[PartialD]\), \(t\)]h\) +
Div[-h^3 G Grad[h] +
h^3 S Grad[Laplacian[h]] + (VR E1^2 h^3)/(D1 (h + K1)^3)
Grad[h] + M (h/(1 + h))^2 Grad[h]] + E1/(
h + K1) + (R/6) D[D[(h^2/(1 + h)), x] h^3, x] == 0;
SetCoordinates[Cartesian[x, y, z]];
EvapThickFilm[S_, G_, E1_, K1_, D1_, VR_, M_, R_] :=
Eq4[h[x, y, t], {S, G, E1, K1, D1, VR, M, R}];
TraditionalForm[EvapThickFilm[S, G, E1, K1, D1, VR, M, R]];
L = 318; TMax = 7.0;
Off[NDSolve::mxsst];
Clear[Kvar];
Kvar[t_] := Piecewise[{{0.01, t <= 4}, {0.05, t > 4}}]
(*Ktemp = Array[0.001+0.001#^2&,13]*)
hSol = h /. NDSolve[{
(*S,G,E,K,D,VR,M*)
EvapThickFilm[1, 3, 0.1, Kvar[t], 0.01, 0.1, 0, 160],
h[0, y, t] == h[L, y, t],
h[x, 0, t] == h[x, L, t],
(*h[x,y,0] == 1.1+Cos[x] Sin[2y] *)
h[x, y, 0] ==
1 + (-0.25 Cos[2 \[Pi] x/L] - 0.25 Sin[2 \[Pi] x/L]) Cos[
2 \[Pi] y/L]
},
h,
{x, 0, L},
{y, 0, L},
{t, 0, TMax}
][[1]]
Сообщение об ошибке:
NDSolve :: ndsz: При t == 2.366570254802048` размер шага фактически равен нулю; заподозрена особенность или жесткая система. >>
NDSolve :: eerr: Предупреждение. Масштабная оценка локальной пространственной ошибки 571455.5042645375 at t = 2.366570254802048
в направлении независимой переменной x намного превышает предписанный допуск на ошибку. Шаг сетки с 19 точками может быть слишком большим для достижения желаемой точности или точности. Возможно, сформировалась особенность, или вы можете указать меньший интервал сетки, используя параметры метода MaxStepSize или MinPoints. >>