Skip to content

Commit 201ac76

Browse files
committed
Try using VIs for bounds constraints
1 parent b92b347 commit 201ac76

File tree

1 file changed

+37
-6
lines changed

1 file changed

+37
-6
lines changed

notebooks/rainier-monolithic.ipynb

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,11 @@
247247
"\n",
248248
"ρ_I = Constant(ice_density)\n",
249249
"g = Constant(gravity)\n",
250-
"n = Constant(glen_flow_law)\n",
250+
"\n",
251+
"\n",
252+
"#n = Constant(glen_flow_law)\n",
253+
"n = Constant(1.0)\n",
254+
"\n",
251255
"\n",
252256
"P = ρ_I * g * h\n",
253257
"S_n = inner(grad(s), grad(s))**((n - 1) / 2)\n",
@@ -458,10 +462,13 @@
458462
"metadata": {},
459463
"outputs": [],
460464
"source": [
465+
"\"\"\"\n",
461466
"num_continuation_steps = 5\n",
462467
"for exponent in np.linspace(1.0, 3.0, num_continuation_steps):\n",
463468
" n.assign(exponent)\n",
464-
" momentum_solver.solve()"
469+
" momentum_solver.solve()\n",
470+
"\"\"\"\n",
471+
"momentum_solver.solve()"
465472
]
466473
},
467474
{
@@ -580,7 +587,30 @@
580587
"tableau = irksome.BackwardEuler()\n",
581588
"t = Constant(0.0)\n",
582589
"dt = Constant(1.0 / 12)\n",
583-
"solver = irksome.TimeStepper(F, tableau, t, dt, w, **sparams)"
590+
"\n",
591+
"lower = firedrake.Function(W)\n",
592+
"upper = firedrake.Function(W)\n",
593+
"lower.assign(-np.inf)\n",
594+
"upper.assign(+np.inf)\n",
595+
"lower.subfunctions[3].assign(0.0)\n",
596+
"bounds = (\"stage\", lower, upper)\n",
597+
"\n",
598+
"bparams = {\n",
599+
" \"solver_parameters\": {\n",
600+
" \"snes_vi_monitor\": None,\n",
601+
" \"snes_type\": \"vinewtonrsls\",\n",
602+
" \"snes_max_it\": 200,\n",
603+
" #\"snes_linesearch_type\": \"nleqerr\",\n",
604+
" \"ksp_type\": \"gmres\",\n",
605+
" \"pc_type\": \"lu\",\n",
606+
" \"pc_factor_mat_solver_type\": \"mumps\",\n",
607+
" },\n",
608+
" \"stage_type\": \"value\",\n",
609+
" \"basis_type\": \"Bernstein\",\n",
610+
" #\"bounds\": bounds,\n",
611+
"}\n",
612+
"\n",
613+
"solver = irksome.TimeStepper(F, tableau, t, dt, w, **bparams)"
584614
]
585615
},
586616
{
@@ -603,10 +633,11 @@
603633
"\n",
604634
"final_time = 500.0\n",
605635
"num_steps = int(final_time / float(dt))\n",
606-
"for step in trange(num_steps):\n",
607-
" solver.advance()\n",
636+
"progress_bar = trange(num_steps)\n",
637+
"for step in progress_bar:\n",
638+
" solver.advance(bounds=bounds)\n",
608639
" h = w.subfunctions[3]\n",
609-
" w.subfunctions[3].interpolate(max_value(0, h))\n",
640+
" progress_bar.set_description(str(h.dat.data_ro.min()))\n",
610641
" s.interpolate(b + h)\n",
611642
" a.interpolate(smb(s))\n",
612643
"\n",

0 commit comments

Comments
 (0)