Advertisement
Guest User

Untitled

a guest
Jul 21st, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.71 KB | None | 0 0
  1. (*Initial Parameters*)Needs["NDSolve`FEM`"];
  2. Mobi = 1.0; lame = 0.01; noise = 0.02; conu0 = 0.63;
  3. xmax = 1.0;
  4. ymax = 1.0;
  5. tmax = 1.0;
  6.  
  7. Ω = Rectangle[{0, 0}, {a, b}] /. {a -> 1, b -> 1};
  8. RegionPlot[Ω, AspectRatio -> Automatic]
  9. mesh = ToElementMesh[Ω, "MaxCellMeasure" -> 1/1000, "MeshElementType" -> QuadElement];
  10. mesh["Wireframe"]
  11. n = Length[mesh["Coordinates"]]
  12. u0 = ElementMeshInterpolation[{mesh}, conu0 + noise*(0.5 - RandomReal[{0, 1}, n])];
  13. Plot3D[u0[x, y], {x, y} ∈ mesh]
  14.  
  15. op1 = D[u[t, x, y], t] - Laplacian[v[t, x, y], {x, y}] Mobi
  16.  
  17. op2 = v[t, x, y] - 200 u[t, x, y] (1 - 3 u[t, x, y] + 2 u[t, x, y]^2) +
  18. lame Laplacian[u[t, x, y], {x, y}]
  19.  
  20. {unn, vnn} =
  21. NDSolve[{op1 == 0, op2 == 0, u[0, x, y] == u0[x, y],
  22. v[0, x, y] == 0}, {u, v}, {t, 0, tmax}, {x, y} ∈ mesh];
  23.  
  24. (*InitialParameters*)
  25. Needs["NDSolve`FEM`"];
  26. Mobi = 1.0; lame = 0.01; noise = 0.02; conu0 = 0.63;
  27. xmax = 1.0;
  28. ymax = 1.0;
  29. tmax = 1.0;
  30. a = 1.;
  31. b = 1.;
  32.  
  33. Ω = Rectangle[{0, 0}, {a, b}];
  34. mesh = ToElementMesh[Ω,
  35. "MaxCellMeasure" -> {1 -> 0.005},
  36. "MeshElementType" -> QuadElement,
  37. "MeshOrder" -> 1
  38. ];
  39.  
  40. ClearAll[x, y, u];
  41. vd = NDSolve`VariableData[{"DependentVariables", "Space"} -> {{u}, {x, y}}];
  42. sd = NDSolve`SolutionData[{"Space"} -> {mesh}];
  43. cdata = InitializePDECoefficients[vd, sd,
  44. "DiffusionCoefficients" -> {{-IdentityMatrix[2]}},
  45. "MassCoefficients" -> {{1}}
  46. ];
  47. bcdata = InitializeBoundaryConditions[vd, sd, {{DirichletCondition[u[x, y] == 0., True]}}];
  48. mdata = InitializePDEMethodData[vd, sd];
  49.  
  50. (*Discretization*)
  51. dpde = DiscretizePDE[cdata, mdata, sd];
  52. dbc = DiscretizeBoundaryConditions[bcdata, mdata, sd];
  53. {load, A, damping, M} = dpde["All"];
  54. (*DeployBoundaryConditions[{load,A},dbc];*)
  55. (*DeployBoundaryConditions[{load,M},dbc];*)
  56.  
  57. θ = 0.5;
  58. τ = 0.000000001;
  59. μ = Mobi;
  60. λ = lame;
  61. L = ArrayFlatten[{
  62. {M, τ μ θ A},
  63. {-λ A, M}
  64. }];
  65. rhs[u_, v_] := Join[
  66. M.u - τ μ (1. - θ) A.v,
  67. M.(200. u (1. - 3. u + 2 u^2))
  68. ];
  69. S = LinearSolve[L, Method -> "Pardiso"];
  70.  
  71. n = Length[mesh["Coordinates"]];
  72. m = 10000;
  73. f = x [Function] 100. ((1. - x^2)^2);
  74. Df = x [Function] Evaluate[f'[x]];
  75. rhs[u_, v_] := Join[M.u - (μ τ (1. - θ)) A.v, M.Df[u]];
  76. S = LinearSolve[L, Method -> "Pardiso"];
  77.  
  78. u0 = 2. RandomInteger[{0, 1}, n] - 1.;
  79. ulist = ConstantArray[0., {m, n}];
  80. ulist[[1]] = u = u0;
  81.  
  82. v0 = rhs[u0, 0. u0][[n + 1 ;; 2 n]];
  83. v = v0;
  84.  
  85. Do[
  86. sol = S[rhs[u, v]];
  87. ulist[[k]] = u = sol[[1 ;; n]];
  88. v = sol[[n + 1 ;; 2 n]];
  89. , {k, 2, m}];
  90.  
  91. frames = Table[
  92. Image[
  93. Map[
  94. ColorData["ThermometerColors"],
  95. Partition[0.5 (Clip[ulist[[k]], {-1., 1.}] + 1.), Sqrt[n]],
  96. {2}
  97. ]
  98. ],
  99. {k, 1, m, 25}
  100. ];
  101. Manipulate[
  102. frames[[k]],
  103. {k, 1, Length[frames], 1},
  104. TrackedSymbols :> {k}
  105. ]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement