|
70 | 70 | "h = h_0.copy(deepcopy=True)" |
71 | 71 | ] |
72 | 72 | }, |
| 73 | + { |
| 74 | + "cell_type": "code", |
| 75 | + "execution_count": null, |
| 76 | + "id": "8587d44a-f4bd-4203-b233-c298f3171a8e", |
| 77 | + "metadata": {}, |
| 78 | + "outputs": [], |
| 79 | + "source": [ |
| 80 | + "a = Constant(0.0)\n", |
| 81 | + "m_0 = Constant(-1.0)\n", |
| 82 | + "δm_δx = Constant(4.0)\n", |
| 83 | + "m = max_value(0, δm_δx * x[0] + m_0)" |
| 84 | + ] |
| 85 | + }, |
73 | 86 | { |
74 | 87 | "cell_type": "code", |
75 | 88 | "execution_count": null, |
|
78 | 91 | "outputs": [], |
79 | 92 | "source": [ |
80 | 93 | "ϕ = firedrake.TestFunction(Q)\n", |
81 | | - "F_cells = (Dt(h) * ϕ - inner(h * u, grad(ϕ))) * dx\n", |
| 94 | + "F_cells = (Dt(h) * ϕ - inner(h * u, grad(ϕ)) - (a - m) * ϕ) * dx\n", |
82 | 95 | "\n", |
83 | 96 | "ν = firedrake.FacetNormal(mesh)\n", |
84 | 97 | "f = max_value(0, h * inner(u, ν))\n", |
|
101 | 114 | "t = Constant(0.0)\n", |
102 | 115 | "dt = Constant(0.5 * δ / u_max)\n", |
103 | 116 | "\n", |
| 117 | + "lower = firedrake.Function(Q)\n", |
| 118 | + "upper = firedrake.Function(Q)\n", |
| 119 | + "upper.assign(np.inf)\n", |
| 120 | + "bounds = (\"stage\", lower, upper)\n", |
| 121 | + "\n", |
104 | 122 | "params = {\n", |
105 | 123 | " \"solver_parameters\": {\n", |
106 | | - " \"snes_type\": \"newtonls\",\n", |
| 124 | + " \"snes_type\": \"vinewtonrsls\",\n", |
107 | 125 | " \"ksp_type\": \"gmres\",\n", |
108 | 126 | " \"pc_type\": \"lu\",\n", |
109 | 127 | " \"pc_factor_mat_solver_type\": \"mumps\",\n", |
110 | 128 | " },\n", |
| 129 | + " \"stage_type\": \"value\",\n", |
| 130 | + " \"basis_type\": \"Bernstein\",\n", |
| 131 | + " \"bounds\": bounds,\n", |
111 | 132 | "}\n", |
112 | 133 | "\n", |
113 | 134 | "solver = irksome.TimeStepper(F, method, t, dt, h, **params)" |
|
0 commit comments