{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Lumped BDDC Example" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# dependencies\n", "using LFAToolkit\n", "using LinearAlgebra\n", "using Pkg\n", "Pkg.activate(\"./\")\n", "Pkg.instantiate()\n", "using Plots" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "code_folding": [] }, "outputs": [], "source": [ "# setup\n", "p = 3\n", "mesh = Mesh2D(1.0, 1.0)\n", "\n", "# diffusion operator\n", "diffusion = GalleryOperator(\"diffusion\", p + 1, p + 1, mesh)\n", "\n", "# bddc smoother\n", "bddc = LumpedBDDC(diffusion)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "code_folding": [ 14, 16, 27 ], "scrolled": true }, "outputs": [], "source": [ "# full operator symbols\n", "numbersteps = 250\n", "maxeigenvalue = 0\n", "θ_min = -π/2\n", "θ_max = 3π/2\n", "θ_step = 2π/(numbersteps-1)\n", "θ_range = θ_min:θ_step:θ_max\n", "\n", "# compute and plot smoothing factor\n", "# setup\n", "ω = [0.2]\n", "maxeigenvalues = zeros(numbersteps, numbersteps)\n", "\n", "# compute\n", "for i in 1:numbersteps, j in 1:numbersteps\n", " θ = [θ_range[i], θ_range[j]]\n", " if sqrt(abs(θ[1])^2 + abs(θ[2])^2) > π/128\n", " A = computesymbols(bddc, ω, θ)\n", " eigenvalues = [abs(val) for val in eigvals(A)]\n", " maxeigenvalues[i, j] = max(eigenvalues...)\n", " maxeigenvalue = max(maxeigenvalue, maxeigenvalues[i, j])\n", " end\n", "end\n", "\n", "# plot\n", "println(\"max eigenvalue: \", maxeigenvalue)\n", "xrange = θ_range/π\n", "heatmap(\n", " xrange,\n", " xlabel=\"θ/π\",\n", " xtickfont=font(12, \"Courier\"),\n", " xrange,\n", " ylabel=\"θ/π\",\n", " ytickfont=font(12, \"Courier\"),\n", " maxeigenvalues,\n", " title=\"Lumped BDDC Error Symbol\",\n", " transpose=true,\n", " aspect_ratio=:equal\n", ")\n", "xlims!(θ_min/π, θ_max/π)\n", "ylims!(θ_min/π, θ_max/π)" ] } ], "metadata": { "kernelspec": { "display_name": "Julia 1.5.2", "language": "julia", "name": "julia-1.5" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.5.2" } }, "nbformat": 4, "nbformat_minor": 4 }