/ concept-collection / turing-surface
Sign in
concept-collection / turing-surface
46 lines · 1.2 KBBlameHistoryRaw
1% Allen-Cahn on a closed surface: interfaces form, then coarsen.
2%
3% du/dt = eps2*lap_g(u) + u - u^3
4%
5% Same scheme as models/schnakenberg.m.
7function [U, u] = init(noise)
8 U = analys(noise);
9 u = synth(U);
10end
12function [Un, u] = step(U, lam, filt, gx, gy, gz, Vtx, Vty, Vtz, Vpx, Vpy, Vpz, eps2, dt, niter)
13 u = synth(U);
15 Bu = U + dt * analys(u - u.^3);
16 Un = Bu ./ (1 + (dt * eps2) * lam);
18 for k = 1:niter
19 % dlap = lap_g - lap_s, evaluated at the current iterate (see
20 % models/schnakenberg.m and docs/richardson-iteration.md for the
21 % derivation).
22 Fu = Un .* filt;
23 Ftu = dtheta(Fu);
24 Fpu = dphi(Fu);
25 dux = Ftu .* Vtx + Fpu .* Vpx;
26 duy = Ftu .* Vty + Fpu .* Vpy;
27 duz = Ftu .* Vtz + Fpu .* Vpz;
28 cux = analys(dux) .* filt;
29 cuy = analys(duy) .* filt;
30 cuz = analys(duz) .* filt;
31 Ftcux = dtheta(cux);
32 Fpcux = dphi(cux);
33 Ftcuy = dtheta(cuy);
34 Fpcuy = dphi(cuy);
35 Ftcuz = dtheta(cuz);
36 Fpcuz = dphi(cuz);
37 lapu = Ftcux .* Vtx + Fpcux .* Vpx;
38 lapu = lapu + Ftcuy .* Vty;
39 lapu = lapu + Fpcuy .* Vpy;
40 lapu = lapu + Ftcuz .* Vtz;
41 lapu = lapu + Fpcuz .* Vpz;
42 dLu = analys(lapu) + lam .* Un;
44 Un = (Bu + (dt * eps2) * dLu) ./ (1 + (dt * eps2) * lam);
45 end
46end
moveopenescclose