|
126 | 126 | "bc_value = as_vector([0.25 * x**2 * (2-x)**2 *y**2, 0])\n", |
127 | 127 | "\n", |
128 | 128 | "bcs = [DirichletBC(W.sub(0), bc_value, 4),\n", |
129 | | - " DirichletBC(W.sub(0), zero(mesh.geometric_dimension), (1, 2, 3))]" |
| 129 | + " DirichletBC(W.sub(0), 0, (1, 2, 3))]" |
130 | 130 | ] |
131 | 131 | }, |
132 | 132 | { |
|
224 | 224 | "metadata": {}, |
225 | 225 | "outputs": [], |
226 | 226 | "source": [ |
227 | | - "w.assign(0)\n", |
| 227 | + "w.zero()\n", |
228 | 228 | "solver = create_solver(solver_parameters)\n", |
229 | 229 | "solver.solve()\n", |
230 | 230 | "convergence(solver)" |
|
284 | 284 | "metadata": {}, |
285 | 285 | "outputs": [], |
286 | 286 | "source": [ |
287 | | - "w.assign(0)\n", |
| 287 | + "w.zero()\n", |
288 | 288 | "solver = create_solver(solver_parameters)\n", |
289 | 289 | "solver.solve()\n", |
290 | 290 | "convergence(solver)" |
|
364 | 364 | "metadata": {}, |
365 | 365 | "outputs": [], |
366 | 366 | "source": [ |
367 | | - "w.assign(0)\n", |
| 367 | + "w.zero()\n", |
368 | 368 | "solver = create_solver(exact_inverse_parameters)\n", |
369 | 369 | "solver.solve()\n", |
370 | 370 | "convergence(solver)" |
|
401 | 401 | "metadata": {}, |
402 | 402 | "outputs": [], |
403 | 403 | "source": [ |
404 | | - "w_t = TrialFunction(W)\n", |
405 | | - "_, p_t = split(w_t)\n", |
| 404 | + "trial = TrialFunction(W)\n", |
| 405 | + "_, p_t = split(trial)\n", |
406 | 406 | "\n", |
407 | | - "pmat = lhs(derivative(F, w, w_t)) - 1/nu * p_t * q*dx" |
| 407 | + "amat = lhs(derivative(F, w, trial))\n", |
| 408 | + "pmat = amat - 1/nu * p_t * q*dx" |
408 | 409 | ] |
409 | 410 | }, |
410 | 411 | { |
|
445 | 446 | "metadata": {}, |
446 | 447 | "outputs": [], |
447 | 448 | "source": [ |
448 | | - "w.assign(0)\n", |
| 449 | + "w.zero()\n", |
449 | 450 | "solver = create_solver(pmat_parameters, pmat=pmat)\n", |
450 | 451 | "solver.solve()\n", |
451 | 452 | "convergence(solver)" |
|
474 | 475 | "class MassMatrix(AuxiliaryOperatorPC):\n", |
475 | 476 | " _prefix = \"mass_\"\n", |
476 | 477 | " def form(self, pc, test, trial):\n", |
| 478 | + " # Extract the original form and bcs\n", |
| 479 | + " a, bcs = super().form(pc, test, trial)\n", |
477 | 480 | " # Grab the definition of nu from the user application context (a dict)\n", |
478 | 481 | " nu = self.get_appctx(pc)[\"nu\"]\n", |
479 | | - " return (-1/nu * test*trial*dx, None)" |
| 482 | + " return (-1/nu * test*trial*dx, bcs)" |
480 | 483 | ] |
481 | 484 | }, |
482 | 485 | { |
|
517 | 520 | "outputs": [], |
518 | 521 | "source": [ |
519 | 522 | "appctx = {\"nu\": nu} # arbitrary user data that is available inside the user PC object\n", |
520 | | - "w.assign(0)\n", |
| 523 | + "w.zero()\n", |
521 | 524 | "solver = create_solver(mass_parameters, appctx=appctx)\n", |
522 | 525 | "solver.solve()\n", |
523 | 526 | "convergence(solver)" |
|
564 | 567 | " \"ksp_type\": \"chebyshev\",\n", |
565 | 568 | " \"ksp_max_it\": 2,\n", |
566 | 569 | " \"pc_type\": \"python\",\n", |
567 | | - " \"pc_python_type\": \"__main__.MassMatrix\",\n", |
| 570 | + " \"pc_python_type\": f\"{__name__}.MassMatrix\",\n", |
568 | 571 | " \"mass_pc_type\": \"sor\",\n", |
569 | 572 | " }\n", |
570 | 573 | "}" |
|
584 | 587 | "outputs": [], |
585 | 588 | "source": [ |
586 | 589 | "appctx = {\"nu\": nu} # arbitrary user data that is available inside the user PC object\n", |
587 | | - "w.assign(0)\n", |
| 590 | + "w.zero()\n", |
588 | 591 | "solver = create_solver(fieldsplit_mg_parameters, appctx=appctx)\n", |
589 | 592 | "solver.solve()\n", |
590 | 593 | "convergence(solver)" |
|
632 | 635 | " }\n", |
633 | 636 | " },\n", |
634 | 637 | " \"mg_coarse\": {\n", |
| 638 | + " \"mat_type\": \"aij\",\n", |
635 | 639 | " \"ksp_type\": \"preonly\",\n", |
636 | | - " \"pc_type\": \"python\",\n", |
637 | | - " \"pc_python_type\": \"firedrake.AssembledPC\",\n", |
638 | | - " \"assembled\": {\n", |
639 | | - " \"pc_type\": \"lu\",\n", |
640 | | - " \"pc_factor_mat_solver_type\": \"mumps\",\n", |
641 | | - " }\n", |
| 640 | + " \"pc_type\": \"lu\",\n", |
| 641 | + " \"pc_factor_mat_solver_type\": \"mumps\",\n", |
642 | 642 | " }\n", |
643 | 643 | "}" |
644 | 644 | ] |
|
656 | 656 | "metadata": {}, |
657 | 657 | "outputs": [], |
658 | 658 | "source": [ |
659 | | - "#w.assign(0)\n", |
| 659 | + "#w.zero()\n", |
660 | 660 | "#solver = create_solver(vanka_parameters)\n", |
661 | 661 | "#solver.solve()\n", |
662 | 662 | "#convergence(solver)" |
|
686 | 686 | "name": "python", |
687 | 687 | "nbconvert_exporter": "python", |
688 | 688 | "pygments_lexer": "ipython3", |
689 | | - "version": "3.12.10" |
| 689 | + "version": "3.12.3" |
690 | 690 | } |
691 | 691 | }, |
692 | 692 | "nbformat": 4, |
|
0 commit comments