{ "cells": [ { "cell_type": "markdown", "id": "564bcb6c", "metadata": { "lines_to_next_cell": 0 }, "source": [ ".. index:: Methods; Virtual Finite Elements\n", "\n", "The main concepts of our virtual element implementation is provided in\n", "\n", "where we focus on the fourth order problems but the second order problems\n", "are discussed there as well.\n", "\n", "# Elliptic Problems\n", "\n", "We first consider an elliptic problem with varying coefficients and Dirichlet boundary conditions\n", "\\begin{align*}\n", "-\\nabla D(x)\\nabla u + \\mu(x) u &= f, && \\text{in } \\Omega, \\\\\n", "u &= g, && \\text{on } \\partial\\Omega,\n", "\\end{align*}\n", "with $\\Omega=[-\\frac{1}{2},1]^2$ and choosing the forcing and the boundary conditions\n", "so that the exact solution is equal to\n", "\\begin{align*}\n", "u(x,y) &= xy\\cos(\\pi xy)\n", "\\end{align*}\n", "\n", "First some setup code:" ] }, { "cell_type": "code", "execution_count": 1, "id": "d8aba538", "metadata": { "execution": { "iopub.execute_input": "2024-02-29T12:33:10.784619Z", "iopub.status.busy": "2024-02-29T12:33:10.784287Z", "iopub.status.idle": "2024-02-29T12:33:12.189688Z", "shell.execute_reply": "2024-02-29T12:33:12.188810Z" } }, "outputs": [], "source": [ "try:\n", " import dune.vem\n", "except:\n", " print(\"This example needs 'dune.vem' - skipping\")\n", " import sys\n", " sys.exit(0)\n", "\n", "from matplotlib import pyplot\n", "import numpy\n", "from dune.grid import cartesianDomain, gridFunction\n", "from dune.fem.plotting import plotPointData as plot\n", "from dune.fem.function import discreteFunction\n", "from dune.fem import integrate\n", "import dune.fem\n", "\n", "from ufl import *\n", "import dune.ufl" ] }, { "cell_type": "markdown", "id": "53d5a9e6", "metadata": {}, "source": [ "We use a grid build up of voronoi cells around $50$ random points\n", "in the interval $[-\\frac{1}{2},1]\\times [-\\frac{1}{2},1]$ using 100\n", "iterations of Lloyd's algorithm to improve the quality of the grid." ] }, { "cell_type": "code", "execution_count": 2, "id": "5e025bca", "metadata": { "execution": { "iopub.execute_input": "2024-02-29T12:33:12.195011Z", "iopub.status.busy": "2024-02-29T12:33:12.194696Z", "iopub.status.idle": "2024-02-29T12:45:23.987751Z", "shell.execute_reply": "2024-02-29T12:45:23.986001Z" } }, "outputs": [], "source": [ "polyGrid = dune.vem.polyGrid( dune.vem.voronoiCells([[-0.5,-0.5],[1,1]], 50, lloyd=100) )" ] }, { "cell_type": "markdown", "id": "23740bc1", "metadata": {}, "source": [ "One can also use a standard simplex or cube grid, e.g.,\n", "polyGrid = dune.vem.polyGrid( cartesianDomain([-0.5,-0.5],[1,1],[10,10]), cubes=False)\n", "\n", "In general we can construct a `polygrid` by providing a dictionary with\n", "the `vertices` and the `polygons`. The `voronoiCells` function creates\n", "such a dictionary using random seeds to generate voronoi cells which are\n", "cut off using the provided `cartesianDomain`. The seeds can be\n", "provided as list of points as second argument:\n", "```\n", "voronoiCells(constructor, towers, fileName=None, load=False):\n", "```\n", "If a `fileName` is provided the seeds will be written to disc or if that\n", "file exists they will be loaded from that file if `load=True`,\n", "to make results reproducible.\n", "\n", "As an example an output of `voronoiCells(constructor,5)` is\n", "```\n", "{'polygons': [ [4, 5, 2, 3], [ 8, 10, 9, 7], [7, 9, 1, 3, 4],\n", " [11, 10, 8, 0], [8, 0, 6, 5, 4, 7] ],\n", " 'vertices': [ [ 0.438, 1. ], [ 1. , -0.5 ],\n", " [-0.5, -0.5 ], [ 0.923, -0.5 ],\n", " [ 0.248, 0.2214], [-0.5, 0.3027],\n", " [-0.5, 1. ], [ 0.407,0.4896],\n", " [ 0.414, 0.525], [ 1., 0.57228],\n", " [ 1., 0.88293], [ 1., 1. ] ] }\n", "```\n", "\n", "Let's take a look at the grid with the 50 polygons triangulated" ] }, { "cell_type": "code", "execution_count": 3, "id": "5da88028", "metadata": { "execution": { "iopub.execute_input": "2024-02-29T12:45:23.996794Z", "iopub.status.busy": "2024-02-29T12:45:23.994940Z", "iopub.status.idle": "2024-02-29T12:45:47.875325Z", "shell.execute_reply": "2024-02-29T12:45:47.874145Z" } }, "outputs": [ { "data": { "image/jpeg": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "indexSet = polyGrid.indexSet\n", "@gridFunction(polyGrid, name=\"cells\")\n", "def polygons(en,x):\n", " return polyGrid.hierarchicalGrid.agglomerate(indexSet.index(en))\n", "polygons.plot(colorbar=\"horizontal\")" ] }, { "cell_type": "markdown", "id": "23ae3c98", "metadata": {}, "source": [ "The vem space is now setup in exactly the same way as usual but the type\n", "of space constructed is defined by the final argument which defines the\n", "moments used on the subentities of a given codimension. So\n", "`testSpaces=[-1,order-1,order-2]` means: use no vertex values (-1),\n", "order-1 moments on the edges and order-2 moments in the inside. So this\n", "gives us a non-conforming space for second order problems - while using\n", "`testSpaces=[0,order-2,order-2]` defines a conforming space." ] }, { "cell_type": "code", "execution_count": 4, "id": "eb87395a", "metadata": { "execution": { "iopub.execute_input": "2024-02-29T12:45:47.881099Z", "iopub.status.busy": "2024-02-29T12:45:47.880442Z", "iopub.status.idle": "2024-02-29T12:47:13.846098Z", "shell.execute_reply": "2024-02-29T12:47:13.844851Z" } }, "outputs": [], "source": [ "order = 3\n", "space = dune.vem.vemSpace( polyGrid, order=order, storage=\"numpy\",\n", " testSpaces=[-1,order-1,order-2])" ] }, { "cell_type": "markdown", "id": "0caf795b", "metadata": {}, "source": [ "Now we define the model starting with the exact solution:" ] }, { "cell_type": "code", "execution_count": 5, "id": "37d2a0d4", "metadata": { "execution": { "iopub.execute_input": "2024-02-29T12:47:13.853944Z", "iopub.status.busy": "2024-02-29T12:47:13.853621Z", "iopub.status.idle": "2024-02-29T12:47:13.864453Z", "shell.execute_reply": "2024-02-29T12:47:13.863139Z" } }, "outputs": [], "source": [ "x = SpatialCoordinate(space)\n", "u = TrialFunction(space)\n", "v = TestFunction(space)\n", "\n", "exact = x[0]*x[1] * cos(pi*x[0]*x[1])\n", "\n", "massCoeff = 1+sin(dot(x,x)) # factor for mass term\n", "diffCoeff = 1-0.9*cos(dot(x,x)) # factor for diffusion term\n", "\n", "a = (diffCoeff*inner(grad(u),grad(v)) + massCoeff*dot(u,v) ) * dx\n", "\n", "# finally the right hand side and the boundary conditions\n", "b = (-div(diffCoeff*grad(exact)) + massCoeff*exact ) * v * dx\n", "dbc = [dune.ufl.DirichletBC(space, exact, i+1) for i in range(4)]" ] }, { "cell_type": "markdown", "id": "e05a2c10", "metadata": {}, "source": [ "Finally, we can construct the solver passing in the space the pde\n", "description and arguments for stabilization:" ] }, { "cell_type": "code", "execution_count": 6, "id": "bcd93770", "metadata": { "execution": { "iopub.execute_input": "2024-02-29T12:47:13.870075Z", "iopub.status.busy": "2024-02-29T12:47:13.869672Z", "iopub.status.idle": "2024-02-29T12:48:59.568735Z", "shell.execute_reply": "2024-02-29T12:48:59.567743Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "size of space: 603\n" ] }, { "data": { "image/jpeg": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "parameters = {\"newton.linear.tolerance\": 1e-12,\n", " \"newton.linear.preconditioning.method\": \"jacobi\",\n", " \"penalty\": 10*order*order, # for the dg schemes\n", " \"newton.linear.verbose\": False,\n", " \"newton.verbose\": False\n", " }\n", "df = space.interpolate(0,name=\"solution\")\n", "scheme = dune.vem.vemScheme( [a==b, *dbc], space, solver=\"cg\",\n", " gradStabilization=diffCoeff,\n", " massStabilization=massCoeff,\n", " parameters=parameters )\n", "info = scheme.solve(target=df)\n", "print(\"size of space:\",space.size,flush=True)\n", "df.plot()" ] }, { "cell_type": "markdown", "id": "2779d919", "metadata": {}, "source": [ "Repeating the same test with a H^1-conforming space" ] }, { "cell_type": "code", "execution_count": 7, "id": "e47bf209", "metadata": { "execution": { "iopub.execute_input": "2024-02-29T12:48:59.573996Z", "iopub.status.busy": "2024-02-29T12:48:59.573769Z", "iopub.status.idle": "2024-02-29T12:49:38.628348Z", "shell.execute_reply": "2024-02-29T12:49:38.627205Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "size of space: 554\n" ] }, { "data": { "image/jpeg": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "space = dune.vem.vemSpace( polyGrid, order=order, storage=\"numpy\",\n", " testSpaces=[0,order-2,order-2])\n", "df = space.interpolate(0,name=\"solution\")\n", "scheme = dune.vem.vemScheme( [a==b, *dbc], space, solver=\"cg\",\n", " gradStabilization=diffCoeff,\n", " massStabilization=massCoeff,\n", " parameters=parameters )\n", "info = scheme.solve(target=df)\n", "print(\"size of space:\",space.size,flush=True)\n", "df.plot()" ] }, { "cell_type": "markdown", "id": "cc7a58dc", "metadata": { "lines_to_next_cell": 0 }, "source": [ "The Vem spaces have an additional method :code:diameters which returns\n", "estimation of the polygon sizes. Note that for technical reasons this is at the\n", "time of writing not available on the grid itself.\n", "A estimate of the minimum and the maximum bounding box diameters are\n", "returned. Note that this is just an estimate of the actual polygon\n", "diameters." ] }, { "cell_type": "code", "execution_count": 8, "id": "2d7509b1", "metadata": { "execution": { "iopub.execute_input": "2024-02-29T12:49:38.633025Z", "iopub.status.busy": "2024-02-29T12:49:38.632317Z", "iopub.status.idle": "2024-02-29T12:49:38.638249Z", "shell.execute_reply": "2024-02-29T12:49:38.637236Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Polygon diameters: (0.20497517186795178, 0.26902334164593067)\n" ] } ], "source": [ "print(\"Polygon diameters:\",space.diameters())" ] }, { "cell_type": "markdown", "id": "1120174b", "metadata": {}, "source": [ "We can compare different method, e.g., a lagrange/dg scheme (on the the subtriangulation),\n", "a bounding box dg method and conforming/non conforming VEM:" ] }, { "cell_type": "code", "execution_count": 9, "id": "6816a819", "metadata": { "execution": { "iopub.execute_input": "2024-02-29T12:49:38.642657Z", "iopub.status.busy": "2024-02-29T12:49:38.641979Z", "iopub.status.idle": "2024-02-29T12:49:38.649408Z", "shell.execute_reply": "2024-02-29T12:49:38.648870Z" }, "lines_to_next_cell": 1 }, "outputs": [], "source": [ "methods = [ ### \"[legend,space,scheme,spaceKwargs,schemeKwargs]\"\n", " [\"lagrange\",\n", " dune.fem.space.lagrange,dune.fem.scheme.galerkin,{},{}],\n", " [\"dg\",\n", " dune.fem.space.dgonb, dune.fem.scheme.dg, {}, {\"penalty\":diffCoeff}],\n", " [\"vem-conforming\",\n", " dune.vem.vemSpace, dune.vem.vemScheme,\n", " {\"testSpaces\":[0,order-2,order-2]}, # conforming vem space\n", " {\"gradStabilization\":diffCoeff, \"massStabilization\":massCoeff}],\n", " [\"vem-nonconforming\",\n", " dune.vem.vemSpace, dune.vem.vemScheme,\n", " {\"testSpaces\":[-1,order-1,order-2]}, # non-conforming vem space\n", " {\"gradStabilization\":diffCoeff, \"massStabilization\":massCoeff}],\n", " [\"bb-dg\",\n", " dune.vem.bbdgSpace, dune.vem.bbdgScheme, {}, {\"penalty\":diffCoeff}],\n", " ]" ] }, { "cell_type": "markdown", "id": "77f38cc4", "metadata": {}, "source": [ "We now define a function to compute the solution and the $L^2,H^1$ error\n", "given a grid and a space" ] }, { "cell_type": "code", "execution_count": 10, "id": "8aa9a409", "metadata": { "execution": { "iopub.execute_input": "2024-02-29T12:49:38.652868Z", "iopub.status.busy": "2024-02-29T12:49:38.652506Z", "iopub.status.idle": "2024-02-29T12:49:38.656573Z", "shell.execute_reply": "2024-02-29T12:49:38.656039Z" }, "lines_to_next_cell": 1 }, "outputs": [], "source": [ "def compute(grid, space,spaceArgs, schemeName,schemeArgs):\n", " space = space( grid, order=order, **spaceArgs )\n", " df = space.interpolate(0,name=\"solution\")\n", " scheme = schemeName( [a==b, *dbc], space, solver=\"cg\", **schemeArgs,\n", " parameters=parameters )\n", " info = scheme.solve(target=df)\n", "\n", " # compute the error\n", " edf = exact-df\n", " err = [inner(edf,edf),\n", " inner(grad(edf),grad(edf))]\n", " errors = [ numpy.sqrt(e) for e in integrate(err) ]\n", "\n", " return df, errors, info" ] }, { "cell_type": "markdown", "id": "5f6c45f8", "metadata": {}, "source": [ "Finally we iterate over the requested methods and solve the problems" ] }, { "cell_type": "code", "execution_count": 11, "id": "c218b9be", "metadata": { "execution": { "iopub.execute_input": "2024-02-29T12:49:38.659990Z", "iopub.status.busy": "2024-02-29T12:49:38.659625Z", "iopub.status.idle": "2024-02-29T12:59:15.018282Z", "shell.execute_reply": "2024-02-29T12:59:15.016929Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "method ( lagrange ): dofs: 829 L^2: 0.00014798685281600801 H^1: 0.0068585822225753715 273\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "method ( dg ): dofs: 1750 L^2: 0.0001384939266553391 H^1: 0.00670817860418124 2892\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "method ( vem-conforming ): dofs: 554 L^2: 0.0006059720464613047 H^1: 0.013720699134208434 135\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "method ( vem-nonconforming ): dofs: 603 L^2: 0.0004375885012392981 H^1: 0.012997824243772046 127\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "method ( bb-dg ): dofs: 500 L^2: 0.0003879437501581428 H^1: 0.01364357273229881 381\n" ] }, { "data": { "image/jpeg": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = pyplot.figure(figsize=(5*len(methods),10))\n", "figPos = 111+10*len(methods)\n", "for i,m in enumerate(methods):\n", " dfs,errors,info = compute(polyGrid, m[1],m[3], m[2],m[4])\n", " print(\"method (\",m[0],\"):\",\n", " \"dofs: \",dfs.space.size,\n", " \"L^2: \", errors[0], \"H^1: \", errors[1],\n", " info[\"linear_iterations\"], flush=True)\n", " dfs.plot(figure=(fig,figPos+i), gridLines=None, colorbar=\"horizontal\")" ] }, { "cell_type": "markdown", "id": "a370e344", "metadata": {}, "source": [ "# Nonlinear Elliptic Problem\n", "We can easily set up a non linear problem" ] }, { "cell_type": "code", "execution_count": 12, "id": "efcc7041", "metadata": { "execution": { "iopub.execute_input": "2024-02-29T12:59:15.024160Z", "iopub.status.busy": "2024-02-29T12:59:15.023945Z", "iopub.status.idle": "2024-02-29T13:00:48.314048Z", "shell.execute_reply": "2024-02-29T13:00:48.312841Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "non linear problem: [0.008408963250176047, 0.1480707362296293]\n" ] }, { "data": { "image/jpeg": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "space = dune.vem.vemSpace( polyGrid, order=1, conforming=True )\n", "u = TrialFunction(space)\n", "v = TestFunction(space)\n", "x = SpatialCoordinate(space)\n", "exact = (x[0] - x[0]*x[0] ) * (x[1] - x[1]*x[1] )\n", "Dcoeff = lambda u: 1.0 + u**2\n", "a = (Dcoeff(u) * inner(grad(u), grad(v)) ) * dx\n", "b = -div( Dcoeff(exact) * grad(exact) ) * v * dx\n", "dbcs = [dune.ufl.DirichletBC(space, exact, i+1) for i in range(4)]\n", "scheme = dune.vem.vemScheme( [a==b, *dbcs], space, gradStabilization=Dcoeff(u),\n", " solver=\"cg\", parameters=parameters)\n", "solution = space.interpolate(0, name=\"solution\")\n", "info = scheme.solve(target=solution)\n", "edf = exact-solution\n", "errors = [ numpy.sqrt(e) for e in\n", " integrate([inner(edf,edf),inner(grad(edf),grad(edf))]) ]\n", "print(\"non linear problem:\", errors )\n", "solution.plot(gridLines=None)" ] }, { "cell_type": "markdown", "id": "79dc6742", "metadata": { "lines_to_next_cell": 0 }, "source": [ "# Linear Elasticity\n", "Next we solve a linear elasticity equation using a conforming VEM space:\n", "\n", "First we setup the domain" ] }, { "cell_type": "code", "execution_count": 13, "id": "c2b1d69d", "metadata": { "execution": { "iopub.execute_input": "2024-02-29T13:00:48.319522Z", "iopub.status.busy": "2024-02-29T13:00:48.319249Z", "iopub.status.idle": "2024-02-29T13:02:04.839263Z", "shell.execute_reply": "2024-02-29T13:02:04.837793Z" } }, "outputs": [ { "data": { "image/jpeg": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "L, W = 1, 0.2\n", "\n", "beamGrid = dune.vem.polyGrid( dune.vem.voronoiCells([[0,0],[L,W]], 120) )\n", "indexSet = beamGrid.indexSet\n", "@gridFunction(beamGrid, name=\"cells\")\n", "def polygons(en,x):\n", " return beamGrid.hierarchicalGrid.agglomerate(indexSet.index(en))\n", "polygons.plot(colorbar=\"horizontal\")\n", "\n", "# instead of providing the moments we can simply add a parameter 'conforming' to construct the H^1-conforming space\n", "space = dune.vem.vemSpace( beamGrid, order=2, dimRange=2, conforming=True)" ] }, { "cell_type": "markdown", "id": "191421e6", "metadata": {}, "source": [] }, { "cell_type": "code", "execution_count": 14, "id": "e23a013c", "metadata": { "execution": { "iopub.execute_input": "2024-02-29T13:02:04.845783Z", "iopub.status.busy": "2024-02-29T13:02:04.845434Z", "iopub.status.idle": "2024-02-29T13:03:40.222591Z", "shell.execute_reply": "2024-02-29T13:03:40.220953Z" } }, "outputs": [], "source": [ "# some model constants\n", "mu = 1\n", "rho = 1\n", "delta = W/L\n", "gamma = 0.4*delta**2\n", "beta = 1.25\n", "lambda_ = beta\n", "g = gamma\n", "\n", "# clamped boundary on the left\n", "x = SpatialCoordinate(space)\n", "dbc = dune.ufl.DirichletBC(space, as_vector([0,0]), x[0]<1e-10)\n", "\n", "# Define strain and stress\n", "def epsilon(u):\n", " return 0.5*(nabla_grad(u) + nabla_grad(u).T)\n", "def sigma(u):\n", " return lambda_*nabla_div(u)*Identity(2) + 2*mu*epsilon(u)\n", "\n", "# Define the variational problem\n", "u = TrialFunction(space)\n", "v = TestFunction(space)\n", "f = dune.ufl.Constant((0, -rho*g))\n", "a = inner(sigma(u), epsilon(v))*dx\n", "b = dot(as_vector([0,-rho*g]),v)*dx\n", "\n", "# Compute solution\n", "displacement = space.interpolate([0,0], name=\"displacement\")\n", "scheme = dune.vem.vemScheme( [a==b, dbc], space,\n", " gradStabilization = as_vector([lambda_+2*mu, lambda_+2*mu]),\n", " solver=\"cg\", parameters=parameters )\n", "info = scheme.solve(target=displacement)" ] }, { "cell_type": "markdown", "id": "45d6a2e9", "metadata": {}, "source": [ "Show the magnitude of the displacement field, stress and the deformed beam" ] }, { "cell_type": "code", "execution_count": 15, "id": "405afd55", "metadata": { "execution": { "iopub.execute_input": "2024-02-29T13:03:40.229132Z", "iopub.status.busy": "2024-02-29T13:03:40.228618Z", "iopub.status.idle": "2024-02-29T13:04:17.533667Z", "shell.execute_reply": "2024-02-29T13:04:17.532273Z" } }, "outputs": [ { "data": { "image/jpeg": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = pyplot.figure(figsize=(20,10))\n", "displacement.plot(gridLines=None, figure=(fig, 121), colorbar=\"horizontal\")\n", "s = sigma(displacement) - (1./3)*tr(sigma(displacement))*Identity(2)\n", "von_Mises = sqrt(3./2*inner(s, s))\n", "plot(von_Mises, gridView=beamGrid, gridLines=None, figure=(fig, 122), colorbar=\"horizontal\")" ] }, { "cell_type": "markdown", "id": "c9b175c7", "metadata": {}, "source": [ "Finally we plot the deformed beam" ] }, { "cell_type": "code", "execution_count": 16, "id": "010a9b32", "metadata": { "execution": { "iopub.execute_input": "2024-02-29T13:04:17.539042Z", "iopub.status.busy": "2024-02-29T13:04:17.538790Z", "iopub.status.idle": "2024-02-29T13:06:18.660873Z", "shell.execute_reply": "2024-02-29T13:06:18.659486Z" } }, "outputs": [ { "data": { "image/jpeg": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from dune.fem.view import geometryGridView\n", "position = space.interpolate( x+displacement, name=\"position\" )\n", "beam = geometryGridView( position )\n", "beam.plot()" ] }, { "cell_type": "markdown", "id": "144b997f", "metadata": {}, "source": [ "# Fourth order problem\n", "As final example we solve some fourth order PDEs using a non-conforming VEM\n", "space for $H^2$ functions. To construct the space we just need to define\n", "a suitable 'moments' vector to construct a suitable space for $H^2$ problems." ] }, { "cell_type": "code", "execution_count": 17, "id": "6f4fc6c6", "metadata": { "execution": { "iopub.execute_input": "2024-02-29T13:06:18.666626Z", "iopub.status.busy": "2024-02-29T13:06:18.666282Z", "iopub.status.idle": "2024-02-29T13:06:18.672494Z", "shell.execute_reply": "2024-02-29T13:06:18.671241Z" } }, "outputs": [], "source": [ "ncC1testSpaces = [ [0], [order-3,order-2], [order-4] ]" ] }, { "cell_type": "markdown", "id": "f6ecfe22", "metadata": {}, "source": [ "We test the method using a biharmonic problem.\n", "\\begin{align*}\n", "-\\Delta^2 u &= f, && \\text{in } \\Omega, \\\\\n", "u &= g, && \\text{on } \\partial\\Omega, \\\\\n", "\\nabla u.n &= 0, && \\text{on } \\partial\\Omega,\n", "\\end{align*}\n", "\n", "__Note__:\n", " For function with continuous derivatives we have\n", " laplace(u)*laplace(v)*dx = inner(u,v)*dx\n", " as can be seen by using integration by parts on the mixed terms on the right\n", " and using continuity of u,v.\n", " For the non-conforming spaces we don't have continuity of the\n", " derivatives so the equivalence does not hold and one should use the\n", " right hand side directly to obtain a coercive bilinear form w.r.t.\n", " the norm on $H^2$ (the left is not a norm in this case).\n", " For computing the forcing term 'b' both formula are fine since\n", " 'exact' is smooth enough." ] }, { "cell_type": "code", "execution_count": 18, "id": "50b0a02e", "metadata": { "execution": { "iopub.execute_input": "2024-02-29T13:06:18.677924Z", "iopub.status.busy": "2024-02-29T13:06:18.677553Z", "iopub.status.idle": "2024-02-29T13:07:57.860281Z", "shell.execute_reply": "2024-02-29T13:07:57.858793Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "bi-laplace errors: [0.089261909447782, 1.0111552233833234]\n" ] }, { "data": { "image/jpeg": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "polyGrid = dune.vem.polyGrid( dune.vem.voronoiCells([[0,0],[1,1]], 50, lloyd=100) )\n", "space = dune.vem.vemSpace( polyGrid, order=order, testSpaces=ncC1testSpaces)\n", "\n", "x = SpatialCoordinate(space)\n", "exact = sin(2*pi*x[0])**2*sin(2*pi*x[1])**2\n", "\n", "laplace = lambda w: div(grad(w))\n", "H = lambda w: grad(grad(w))\n", "u = TrialFunction(space)\n", "v = TestFunction(space)\n", "a = ( inner(H(u),H(v)) ) * dx\n", "\n", "# finally the right hand side and the boundary conditions\n", "b = laplace(laplace(exact)) * v * dx\n", "dbcs = [dune.ufl.DirichletBC(space, [0], i+1) for i in range(4)]\n", "\n", "scheme = dune.vem.vemScheme( [a==b, *dbcs], space, hessStabilization=1,\n", " solver=\"cg\", parameters=parameters )\n", "\n", "# solution = space.interpolate(0, name=\"solution\") # issue here for C^1 spaces\n", "solution = discreteFunction(space, name=\"solution\")\n", "info = scheme.solve(target=solution)\n", "edf = exact-solution\n", "errors = [ numpy.sqrt(e) for e in\n", " integrate([inner(edf,edf),inner(grad(edf),grad(edf))]) ]\n", "print(\"bi-laplace errors:\", errors )\n", "solution.plot(gridLines=None)" ] } ], "metadata": { "jupytext": { "cell_metadata_filter": "-all" }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.12" } }, "nbformat": 4, "nbformat_minor": 5 }