|
247 | 247 | "\n", |
248 | 248 | "ρ_I = Constant(ice_density)\n", |
249 | 249 | "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", |
251 | 255 | "\n", |
252 | 256 | "P = ρ_I * g * h\n", |
253 | 257 | "S_n = inner(grad(s), grad(s))**((n - 1) / 2)\n", |
|
458 | 462 | "metadata": {}, |
459 | 463 | "outputs": [], |
460 | 464 | "source": [ |
| 465 | + "\"\"\"\n", |
461 | 466 | "num_continuation_steps = 5\n", |
462 | 467 | "for exponent in np.linspace(1.0, 3.0, num_continuation_steps):\n", |
463 | 468 | " n.assign(exponent)\n", |
464 | | - " momentum_solver.solve()" |
| 469 | + " momentum_solver.solve()\n", |
| 470 | + "\"\"\"\n", |
| 471 | + "momentum_solver.solve()" |
465 | 472 | ] |
466 | 473 | }, |
467 | 474 | { |
|
580 | 587 | "tableau = irksome.BackwardEuler()\n", |
581 | 588 | "t = Constant(0.0)\n", |
582 | 589 | "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)" |
584 | 614 | ] |
585 | 615 | }, |
586 | 616 | { |
|
603 | 633 | "\n", |
604 | 634 | "final_time = 500.0\n", |
605 | 635 | "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", |
608 | 639 | " 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", |
610 | 641 | " s.interpolate(b + h)\n", |
611 | 642 | " a.interpolate(smb(s))\n", |
612 | 643 | "\n", |
|
0 commit comments