{ "cells": [ { "cell_type": "markdown", "id": "dfb7574e", "metadata": {}, "source": [ "\n", "# More General Boundary Conditions\n", "So far we have used Dirichlet and trivial Neumann boundary conditions. Here we discuss how to\n", "impose other conditions like general Neumann, Robin and more general\n", "Dirichlet conditions. We will show how to add these to the model and how to\n", "prescribe different conditions for different components of the solution\n", "in the case of vector valued PDEs.\n", "\n", "## Dirichlet boundary conditions\n", ".. index::\n", " pair: Boundary; Dirichlet\n", "\n", "To fix Dirichlet boundary conditions $u=g$ on part of the boundary\n", "$\\Gamma\\subset\\partial\\Omega$ the central class is\n", "`dune.ufl.DirichletBC` which takes three arguments:\n", "the discrete function space for $u$, the function $g$ given by a UFL\n", "expression, and a description of $\\Gamma$. There are different ways to\n", "do this. If the final argument is omitted or `None` the condition is applied to the whole\n", "domain, a integer $s>0$ can be provided which can be set to describe a\n", "part of the boundary during grid construction as described at the end of\n", "this section. Finally a UFL condition can be used, i.e., `x[0]<0`.\n", "\n", "For vector valued functions $u$ the value function $g$ can be a UFL\n", "vector or a list. In the later case a component of `None` can be used to\n", "describe components which are not to be constrained by the boundary\n", "condition." ] }, { "cell_type": "code", "execution_count": 1, "id": "4e4da83b", "metadata": { "execution": { "iopub.execute_input": "2024-03-10T12:54:58.049629Z", "iopub.status.busy": "2024-03-10T12:54:58.049257Z", "iopub.status.idle": "2024-03-10T12:55:00.343981Z", "shell.execute_reply": "2024-03-10T12:55:00.342532Z" } }, "outputs": [ { "data": { "image/jpeg": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from matplotlib import ticker\n", "from dune.fem.plotting import plotComponents\n", "\n", "import numpy, io\n", "from dune.grid import structuredGrid as leafGridView\n", "from dune.fem.space import lagrange as solutionSpace\n", "from dune.fem.scheme import galerkin as solutionScheme\n", "from dune.fem.function import gridFunction\n", "from dune.ufl import DirichletBC, Constant\n", "from ufl import TestFunction, TrialFunction, SpatialCoordinate,\\\n", " dx, ds, grad, inner, sin, pi\n", "\n", "gridView = leafGridView([0, 0], [1, 1], [4, 4])\n", "vecSpace = solutionSpace(gridView, dimRange=2, order=2)\n", "x = SpatialCoordinate(vecSpace)\n", "vec = vecSpace.interpolate([0,0], name='u_h')\n", "uVec,vVec = TrialFunction(vecSpace), TestFunction(vecSpace)\n", "a = inner(grad(uVec), grad(vVec)) * dx\n", "a += ( ( 10*(1-2*uVec[1])+uVec[0] ) * vVec[0] +\\\n", " ( 10*sin(2*pi*x[1]) + (1-2*uVec[0])**2*uVec[1] ) * vVec[1]\n", " ) * dx\n", "\n", "# Define Dirichlet boundary conditions for first component on all boundaries\n", "bc = DirichletBC(vecSpace,[sin(2*pi*(x[0]+x[1])),None])\n", "vecScheme = solutionScheme( [a == 0, bc],\n", " parameters={\"newton.linear.tolerance\": 1e-9} )\n", "\n", "vecScheme.solve(target=vec)\n", "\n", "plotComponents(vec, gridLines=None, level=2,\n", " colorbar={\"orientation\":\"horizontal\", \"ticks\":ticker.MaxNLocator(nbins=4)})" ] }, { "cell_type": "markdown", "id": "e9c17e99", "metadata": {}, "source": [ "To prescribe $u_2=1$ at the bottom boundary is easily achieve by\n", "providing multiple instances of the `dune.ufl.DiricheltBC` class:" ] }, { "cell_type": "code", "execution_count": 2, "id": "0c36c328", "metadata": { "execution": { "iopub.execute_input": "2024-03-10T12:55:00.349448Z", "iopub.status.busy": "2024-03-10T12:55:00.349166Z", "iopub.status.idle": "2024-03-10T12:55:00.747138Z", "shell.execute_reply": "2024-03-10T12:55:00.745840Z" } }, "outputs": [ { "data": { "image/jpeg": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "bcBottom = DirichletBC(vecSpace,[sin(2*pi*(x[0]+x[1])),1],x[1]<1e-10)\n", "vecScheme = solutionScheme( [a == 0, bc, bcBottom],\n", " parameters={\"newton.linear.tolerance\": 1e-9} )\n", "vecScheme.solve(target=vec)\n", "plotComponents(vec, gridLines=None, level=2,\n", " colorbar={\"orientation\":\"horizontal\", \"ticks\":ticker.MaxNLocator(nbins=4)})" ] }, { "cell_type": "markdown", "id": "82c81a02", "metadata": {}, "source": [ "We can also use general grid functions (including discrete functions)\n", "for the boundary conditions in the same way we could use grid functions\n", "anywhere within the UFL forms.\n", "We could for example fix the boundary values of the first component using the discrete solution\n", "from the previous computation by writing\n", "`bc = DirichletBC(vecSpace,[vec[0],None])`\n", "Since this would just be an approximation to the actual boundary\n", "condition the overall results would not be identical to the previous\n", "version. We therefore do not use the discrete solution to describe the\n", "boundary conditions but instead use other forms of grid functions.\n", "The following two code snippets lead to the same results as above:" ] }, { "cell_type": "code", "execution_count": 3, "id": "ddf5c394", "metadata": { "execution": { "iopub.execute_input": "2024-03-10T12:55:00.754440Z", "iopub.status.busy": "2024-03-10T12:55:00.754236Z", "iopub.status.idle": "2024-03-10T12:55:01.287181Z", "shell.execute_reply": "2024-03-10T12:55:01.285908Z" }, "lines_to_next_cell": 2 }, "outputs": [ { "data": { "image/jpeg": "/9j/4AAQSkZJRgABAQEAMgAyAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAClATsDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3yV2jhd1ieVlGRGhGW9hkgfmRWTL4ltItOs73ybh47m2N3hVXMcIClnbLdt65AyeeAa1pY1mieNiwVwVJRip/AjkfUVmJ4a0pLOC0EMxggXZGr3MrYTABTJbJQhVyp+U45FAFq91bTdOZFvtQtbVn+4J5lQt9Mnmq58TaABk63poH/X3H/jWZ40lEUWjsTjN/j/yBNVeB1ni2PyDXmZpja2CpqrGHMvW36HIsZTWK+rT00ua58W+G1+94h0kfW9j/AMaYfGfhYdfEujj630X/AMVXBa/poEhwvFefarZDzCNtefhc/VdX5LfP/gH2eD4fpYmN1Vt8v+Ce+f8ACa+FP+hm0b/wPi/+KpR408Knp4l0Y/8Ab/F/8VXy/LDslxjpU9sQkq9hXoPMHa6idq4Si3Z1fw/4J9ODxd4abp4i0k/S9j/+KqRfE+gN93XNMP0u4/8AGvBbC62uvYV3OjaqFdMnivNxGfVKSuqd/n/wDgxfDroK8Z3+X/BPQT4m0Addc00f9vcf+NMbxZ4cT73iDSl+t5GP61lER3UW9DnPasm+0uOdSroDXflWc4bGu1R8j+//ACPhMyxmKwUreyuvX/gHTN418KL97xNow+t/F/8AFUn/AAnHhH/oadE/8GEX/wAVXlWqeDI5txRQa46/8DFWJCEfSvucNlGDxCvGv+H/AATho8R0Z6TXKz6F/wCE58I/9DTon/gwi/8AiqP+E58I/wDQ06J/4MIv/iq+YJfCMqSd8U6LwwVfLqSPSu1cMUN/b/h/wTu/teha6Z9Pjxt4Ubp4n0U/S/i/+KqRfF3hp/u+IdJb6XsZ/wDZq+crLSVglDMuAPauo0q4S3uAzHCiuavw/CCvCo38v+CcGI4g9mrwhf5/8A9xs9Z0vUZjFZalZ3MgXcUgnVyB0zgHpyPzq7XAeD7+O+8Sfu/4LOXP4vH/AIV39fOVaUqU3Ce6PYwGK+t4eNdq176ejaKjX6rq0enNDKHkgeZJfl2EKyhh1zn517Y561Bput22ppI6JLCqxJODNtAeJ87ZBgnAO1uuDxyBUs+k2lzqUOoSef8AaYUKIyXEiKFLBiNoYKclVzkc4weKWx0uz03f9liKb8A5dmwBnCjJOFGThRgDJwKzOwz38aeFUdkfxNoyspIZTfxAgjsfmpv/AAm/hP8A6GjRf/BhF/8AFV8weLf+R18Qf9hS6/8ARzVjGuV4hp2se7TyaMoKXPur7f8ABPrj/hN/Cf8A0NGi/wDgwi/+Ko/4Tfwn/wBDRov/AIMIv/iq+RaTNH1l9iv7Fj/P+H/BPrv/AITfwn/0NGi/+DCL/wCKo/4Tfwn/ANDRov8A4MIv/iq+RM0oNH1l9g/sWP8AP+H/AAT67/4Tbwn/ANDRov8A4Hxf/FUf8Jt4T/6GfRf/AAPi/wDiq+SFNSKal4p9jSORRf8Ay8/D/gn1n/wmvhT/AKGfRf8AwPi/+Kpf+E08Kn/mZtG/8D4v/iq+U42q1E+KzljWvsnZS4YhP/l7+H/BPqP/AITLwuf+Zk0f/wADov8A4ql/4TDwyf8AmY9I/wDA2P8A+Kr5vtpsgVpwS4xXNPNZR+x+JtPhKKV1V/D/AIJ79/wl3hr/AKGHSf8AwNj/APiqX/hLfDf/AEMOk/8AgbH/AI14jFL0q3HJmuaWeSX2Px/4Byy4aUf+Xn4f8E9j/wCEs8N/9DBpX/gbH/jR/wAJZ4b/AOhg0r/wMj/xryRXqQNms3xBL/n3+P8AwDJ8Ppf8vPw/4J7ZFLHPCk0MiyRSKGR0OQwPIII6in1m+Hv+Ra0r/rzh/wDQBWlX0x8yFFRXNzDZ20lxO+yKMZY4J/IDkn2HWqMviDTIbaG4edxHKXCnyXJXYcOWG3KhTwS2Md6AOW+Ktz9k0fR5c4/4mij/AMgzVBpN351vG+eoqn8c5TB4S0mQdtWj/wDRM1Z/hG787Tk5yRivRxOBjiMmcmtpP9D5PO70cZTrr0Oo1WAT24f25rznWLbEp4r1DHm2jD2rgtchxK3Ffj2GvSryp9mfq3DeKc6UWef3kI83PpVHIWQegrZv0Ac1hythzX1FF80T7vm91M07e8AdecV0NhqO1154riBLhgav21/tdc9Kzr4ZTRlUjCsrM9d0rWgCvzcV0kc8F0uQcE15DY6pgrzxXUWGs4K/NXztfCTpS56ejPlMzySFVao7OW0z2qjNYq33lBp1nrKyABuRWmpinGVP4V3YLiHFYV2mz86zPhaGrUTmZtGgds7AKpyaHFnIAx9K62S39qqyQ4r7bA8UzqWXMfG4rJqlG/K2cTdaasTZK4ArCvJFikyeFFd/fQK0TZ7V534hYIWzwBX6BleJ+tJM8/Cczq+zkdf8Jr1bvxVfKp4jsz+rr/hXsVeCfAqbzvF2sEdBZgD/AL7Fe914GewUMwqRXl/6Sj9HwNNUsPGC/rUKKptqlmmpLp5lP2lui7GxnBbG7G3OFJxnOBmksNWstT8z7JKz+XgndGyZBzhhuAypwcEZBxXkHWfKXixc+M9f/wCwndf+jnrGK10PimPPjDXj/wBRO6/9HPWOYq8mc/eZ+hYeg3Qg/JfkUytJtq0Y6b5dLmB0GV9tKFqcR0ojp8wKgyILUiipBHUix1DkdEKLGoKspTFSp40rGTPRo02i1bNWpA3SqFvHgCtCFcVxVWjrlsXoWq9GapQrV6Ja8+oefVsWUqdRUca1ZRK5JM4ZtHrPh7/kWtK/684f/QBWlWb4e/5FrSv+vOH/ANAFaVfo5+ble+s47+zktpWZVcD5kPzKQcgjPcEA/hWNceELO7t4oZ7u7kEU0kyswjJDOdzEfJ8p3ZIYYZdxwQOK6GigDyX9oCNR4P0yfL711NFxvO3HlSn7ucZ464zWJ4Dm3WQHsK3/AI/Dd4J0weurR/8AoqWsPwLFssxx2r6jDW/sSd/5n+SPleJbckO90ei23zQke1cbr6fvWrsrbiI/SuN18/vGr8Krf7/Ox+gcKX9lG5wWpcM1c3M3zE10Oqnlq5qc819LhV7p+kVHakiIyc05ZuRVZ25pofmu/k0PM+sOMjbtbwoRzxXQWWodOa4yOXkVo2t0UYc8VxV8OpI9KnUjWjaR6LY6jyOa6jT9R6c15nZXnTmumsL3kc189i8Iux5WOwSa2PSIZlnT3pkycGsfTb3pzW6cSR7hXm4WrLD1UnsfAZvl6SbSMW7TKMPavLfFvyrJ2Ar1q6Tg15t4wtPkk4r904QxUZpI/L3D2OPV+ofs/HPirWf+vQf+hivoOvn74Aps8Wa0PS0H/oYr6BqeIf8AkZVb+X5I/QqP8NGZPokM2qpqC3NxE6SLL5abdjOFKZOVJ5Rip56ehwaZo/h600VLlbeSZhcYL7iqnIzzlQMsc8ucscDJOBWtRXjGp8va9p4XxFrAQsQNRuQCzFj/AK5+pPJ+prJezYdq7rU7Hzda1V8ddRuv/Rz1QfTP9mvk6uLSqyXm/wAz9VwVem8NTT/lX5HHG2I7Uwwe1de2mf7NRnS/9mmsZE6b0WcoIPanC3PpXUjS/wDZp40vj7tDxkRXoo5ZbVj2qVbNvSuoGl/7NSLpn+zWbxiH7akjmUsvWrMdqB2roV0z/ZqRdN/2ayli0xPFwWxiRwY7Vbih9q1007/ZqwmnY7VzzxKMJ4uJmwxVfii6VdisParsVj7Vx1MQjgq4qJRjiq3HD7VfjsunFW47L2rjnXR59TEo7Pw9/wAi1pX/AF5w/wDoArSrN8Pf8i1pX/XnD/6AK0q/VD4gKKpavZyX+lXFrEVDyLgBzhW5yVb2PQ+xrm7jwtqFxY2sH+iR/ZpZ3ijWZvLiLuHjcDZyY+VCEAEdxnAAMX42w+f4X0lMZ/4myf8Aomas/wALWvk2CcYzXQ/Eyya7tNFHmPs/tEDysDaT5MvPTOfxx7VFp9uI40UDgDFd2Jx6oZS4Pq3+h8jnadbHU6C6K/5mmvyWzH2rhtdfMjc12t9J5Vpjua8+1mXLNzX4/QftcRKfmfqfDmHcKcTjdVb71c5OeTW9qbcmsCfrX1uFVon2+I0ppFNzzUe7mnv1qLvXoLY8CbdydG5q3E/NUVqzGeRUTR14ebTNuyuMMAa6WxuORXHW7YYGuispeVrysVTTR7E17Snc7rTrrlea6/T5/MTafSvPNPmwRXX6Xc4Zea+XxlK2qPkszwylFo1bmPg1x/iWy861YgV3Eqh0yO9Yt/aiWJ0I6ivueD81VOSTZ+M8QYOVOp7SK2OR+C9qbbxnrAxjdaD/ANDFe415f8P9P+w+Mrw4xvs2/R0/xr1CvsM5qqrjZzXW3/pKPpMrre2wkKnf/MKKwLnRrtvE8OpxLbOiyKxd3KyBNjI0Ywp+XLb+vLDGO4Tw3oVzo0VzHNKn70Ll0cu0kgzulYsOC2V+XkDb1OTXlnecadN865v5Mfev7o/+R3pjaR/s10OmKI7e4R3aVlvLkF3Ay379+TgAfkKuERH+EV+XYyVdYmpZfaf5ns0s5jCKjfY446R/s03+yP8AZrstkJ/hFHlw/wB2uf21fsbrPI9zjRo/+zTxo/8As11+yEfwijEQ/hFHtcQ+gnnse5yY0f8A2akGkf7NdTmP+6KN0f8AdFHNiH0M3nse5zI0j/Zp40n/AGa6PenoKPMX0FFsS+hm89j3MBdJ/wBmpl0rH8NbPnL6Ck84UexxL6GUs8j3M6PS8fw1ZTT1HXFTmf3ppn96awWIluclTO13HLaxrTxHGvaoDN700ze9axyqo9ziqZz5m94e/wCRa0r/AK84f/QBWlWb4e/5FrSv+vOH/wBAFaVfqZsFFFFAHN+L08xNIX/p/wD/AGhLVeGIRrubgCrnil1j/shn6C9P/oiWud1DVhsKqRXxnEuLq+1WGhta/wB9ysLlP1nEe3a8iHWb3O4Bq4XU5slua1L+9Lbuea5m8mznmvMwOH5T9Hy3C+zSMPUHy2KyJa0bs5c1nyCvpaKsj1MUrqxTdeaZt5qwVpNldSkePKldkarViNeaRUqwiVEpHTQou5NCPmFbtp/DWVbRZYE9K2bdcEV5+IketblhY3LKTBFdNp9xhlJrlbY4IratJsEV4WJhc8PGU+Y7u0uBKm00TwZBrBtL7awOa24dRjcYevOw9erhKnNDY+JzXKFXT0F0GEReKEOOWs5f/Q4q7GuX0to28SwGM5/0ObP/AH3FXUV+l5di3i8NCu+v6O36Hi4XCfVKSodr/i7/AKhRRRXadB5/bz7XvBnpfXX/AKPep/tPvXKzayLfUdSiyPl1C6H/AJGek/t8eorZcMqqvaW31+8/PMVmOIjXnFLZv8zq/tPvR9p965P+319RSf2+PUU/9VF2MP7TxXY637T70n2n3rkj4gH94U0+IP8AaFUuFF2D+0cU+h132n3o+0+9cefEH+0Kb/wkP+3Wi4VXYn6/i30Ox+0+9H2n3rjv+Eg/26b/AMJB/t1S4Wj2F9dxfY7P7T70n2n3rjT4gP8Af/WmnxAf7/61a4Xj2F9bxb6HZm496abj3ri28Qf7f60w6/8A7f61rHhmK6Euvi2dsbj3pPtA9a4c69/t/rTTrv8At1suHIonmxbPavD3/ItaV/15w/8AoArSrN8Pf8i1pX/XnD/6AK0q8I/Uilq8d1LpVxHZlhOV+UI21iM8hW4wSMgHIwT1Fc/Pa+JJNLs4raOSNob7zJFmvNsjwiZWRd67tyiMkMCckr/ED83W0UAcR8SLma2stKdUTyvtvL7zuDeTLxjHT3z+FeeT6kWBG7mu2+Mc3keGdMf/AKiSj/yDLXkK3m4da+azbD8+IU/JfqfdcN4ZVMI5/wB5/oak9yWB5rLuJMg0hmyDzVeVsqa5KdPlPqqdJQKE2Sxqswqw45NM213xdiKkeZlfZSiOpxHmp47ZmPSm52Mo4e5WSLParsFqT1FW4LMDtWlBae1ctTEJG3uU0VILfGMCtGGH2qzDae1XorT2rz6lc5quJRDDHjFaMXFLHbe1TiLA6VwzqJnm1KqkOWfaak/tLYckmqkrbQTWVdXWzJqY0VNkQoKo9jvfBd8bzxM2T9yzk/V4/wDCvQ68h+Fdz9o8VXoP8Nmf/Q0/wr16vusqp+zwkI+v5s+PzmkqWNnBdLfkjAuYdUXxPDcRx3Mlp5iglJwIxEUZSChYZYOVbOM7RgHsXeH4Natzqjat5byS3AkhK3BdMGNAVUFRsUMDgY9Tz1O7RXoHlny7rmrPD4k1mOUKkg1G53KrbgD5z5AOBn8hVH+2v9r9ayPGMzL458RAHpql1/6OasXz2/vGv1jBYek8NTbf2V+SPAq5fCU3LuzsP7b/ANqkOtf7Vch5zf3jSec39410/V6Pcj+zqZ1x1r/bpp1r/arkvOP940eafU0/YUe5X9n0zrDrX+1+tJ/bX+1XKeafU0eYfU0exodx/wBn0zqv7a/2qP7a/wBquU8z3o8z3o9lQ7h9QpnVf2z/ALVN/tn/AGq5fzPf9aPMo9nQ7j+oUzpzrP8AtU06x/tVzPmUeZT5KHcf1GmdIdZ/2qT+2P8AarnPMo30ctAf1Kn2PtPw9/yLWlf9ecP/AKAK0qzfD3/ItaV/15w/+gCtKvxw9wKKpaveSWGlXF1EFLxrkFxlV5wWb2HU9OBWC3ilvsFk6X+m/aprx7byyOJgr43Kd/yAph8ndwy4zkZAOd+OJ2+ENNP/AFE0/wDRMteIxyMOle2/G4u/hrTIRC5U6ireZkbQfKl465z+GOOteNRWx7ivIx7Sqa9j9B4WT+pt/wB5/kh0bkinHJBqZYcDpSmPivN5lc+oM9kOacsJJq0YvmqaOGqdSyFYhitunHNX4bbpxUsMGT0rUtrXOOK46taxz1ayiiC3s/ata3sfardpZZxxW7aadkdK8mvirHi4nG26mTDYf7NXY7D2rfh03A5FW1s4164rzZ4tt6HiVsyit2c6tlgdKbJa4HSun+zxYxio5LNHU4rP28lujnhmMJPc4i7iwp4rmdSbaGOK9Dv7D5T8tcdq9lhW+WvVwVeMmfQ5fiIyaLfwakMnizUyf+fT/wBnWvba8X+EMPleLtS4xmz/APZ1r2iv0DBNOhGx8pxB/wAjGp8v/SUFFYFzr0lv4nh0+R7aOB5Fj2PkSHcjMJAc427gseMfePXoKl0HWG1WK9kW5tbyKGYpFJajbvwOeC7d8gEkZ64xgnqPGPkrxo2PHniP/sK3X/o1qw99a/jFmfxz4hdo2jZtTuSUbGV/etwcEjP0JrEr7/DV5qhBeS/I5WtSTfSb6ZRW31iYrIfvo3Uyil7eYWH7qN9Mope3mFh++jfTKKXt5hZD99JvplFL6xMLD91G6mUUvbzHYfvo30yil7eYWPt7w9/yLWlf9ecP/oArSrN8Pf8AItaV/wBecP8A6AK0q+AOoKKKKAOC+LEPn6BpaY/5iIP/AJBlryl7PaenFe0+ObcXVppUZGf9Oz/5Alrz+/0/Y5+XAHtXymcYhQxah5L9T7Ph7Fqnh3T83+hx7xYPSoHGK17uLa3Sse4baa56UuY+voz5iEn5qswjOKzHm/eCr9s4bHNbzi0jWWqNi1jzit+xtc44rHsVyRXX6VbbivHNeLi6nKjwcdW5EzR0/T8gcVtpHHAuABmmxILeEDv3qtPcYPWuLBYGpjZ+R+d5xnKpXVyy8+O9Qtc+9ZVxqEcX3nArKuPEMMZwCPxNfdYHhGc4p8p8HX4gnOTUNTqPtPPWnpcc9a4n/hKIt+Mr+dXbbxBBKQCwH4131+DZcmiMYZ3Xg7yizsNyTLtYZrC1jSQ0ZYLkVLb3yyYKuD+NacUyyrsfBBr4jMcjxGBlzxR9hknEsZSSbOd+Htr9l8XXXGN1m3/oaV6hXIaLZrbeLA69JLOX9Hi/xrr6+tyWp7TA05+v5s9vMq6r4mVRdbfkgooor1DhPi/xqP8AivfEf/YVuv8A0a1YWK6HxmufHfiL/sKXX/o1qxNntX6XhMG3h6b8l+RxylqyHFGKm2e1Gz2rf6lIXMQ4oxU2z2o2e1H1KQcxDijFTbPajZR9SkHMQ4oxU2yjZUvBSDmIMUYqbZRs9qn6jIOYhxRiptntRs9qPqMg5iHFGKm2UbKf1GQcx9reHv8AkWtK/wCvOH/0AVpVm+Hv+Ra0r/rzh/8AQBWlX5gdpU1K9/s/T5boR+YyYCpu2gsSAMnsMkZPasifxPJDZLN9hUuq3Mk6edwqW77JNp2/MSSMAhc9yK35Yo54niljWSN1KujjIYHqCO4qqNH0xY0jGnWgRJBKqiBcK4AAYDHBwAM+1AGR4ruhDPo8YiuJHN4WxFbvJx5Mo/hB/KsPUYhc4ZLK/Jx0+wzD/wBlqzP44htIJ31G90q2kDxLB57hPKd5GjdWBb5mjUBmxt4PYc1d03x/4auLIPd+JdDjnV5I2Avo1DbXKhgCxIDABhyeD1NeVjcko46qq0+ZNaaW/wAmbUMROhPmgzzzUNE1OZyYtK1Bh/16SD+lczqXhrX1jeY6NfrEilmZoGAUDkk8V7r/AMJx4S/6GnRP/BhF/wDFVjw/EDR7nUri2k17QltHSYRs1wh2lCijcd+GD7mIAxwvU84ulklOltzf18j26XE+KpKyjH7n/meKN4L8Uls/2BqH/fg1btfCXiaJhv0LUAP+uDf4V7bo/jjRLqwEt74g0ZZC7bdtyke5M/KShclSR2Jz64PA0R4t8Nnp4h0k/wDb7H/jW8stg1Z3/r5FLizFRd7R/H/5I8jsND1iEjzNJ1Bf+3Vz/Sut0UlYY5ja3xR1DKy2UpBB5BGFra1Hxtp8OoQx2mq6VJbgxeaTOrFg8oQ7SGwu1SWOQePTk03TPHek3Wu6hZNqFhb2VuiC3Zn2byGdX+YnaRwpAHY5zzgebX4ew1X4pSXzX+Rw4nPq2IVpcvy/4chnunf7lnqB/wC3Gb/4msbUH1Iri30vUXP/AF6SD+a13P8Awk+gf9BzTP8AwLj/AMaydd8Z2VnCp03UtMmcRyytmYSbti5CAKwwzHgHnp0Nenl2GoZfb2avbv8A8Cx8pjMpoYyV6k38mv8AI8ov7bxTe5e10TUJUDMuVhPUEgj8CCK5668OeO5nyvh3UQP+uZr3aPxlaDxC9t9t0tNMD+UJROpZnMfmF85wEzlc8/Nx342D4m0Addc00f8Ab3H/AI19PS4mq0laMYfj/wDJFUMmw1JWij5kPhDx6Wz/AMI/qP8A36qxa6B45iuDF/YF+ZEUMyiPkA5AP44P5V9D6n4x0W10+WW11rS5JxgIpukYZJAyQGyQM5IHpWDe/EK3t7WCSDUNHkuS8y3BEi4KRyFVYDzAQGHzAAu3Pyq/ONf9a8S94wfyf+Z1Sy2lJWcTz7TLPxhbsPN0HUl/7Yk12WnzaoFH2nStRQ+v2SQ/yFdmfGPhcdfEmjj/ALfov/iqafGvhXBx4n0UH3v4v/iq83GZl9ci41IR+V/8zz58N4dz5480X5f8MZ2hzvJ4kgV4LmIiznI86B48/PD03AZrrq4y18aWl9p8T2+r6LJeC5lgmnRw0cEQaQLIyh8hX2IBlsZccngV1Wn3El5ptrcyxGGSaFJHiPVCQCR+HSvKo0YUYKENv83c9enT9nFQu3bvuUn1pk11NPFsDE0ghMvmYYOY2k+7jldqdc9T070mj64dUR2ktvJH2eK6j2uZC0Um7bkYGG+Q5UZ7cmr0unWU9ytzNZ28lwmAsrxKWGDkYJGeDz9axdevV8N23madbWVuZjLK5aLAmkVchBtI+dzwDz0PBrUs+fNe8E+IdX8Ta1qFlo1/LbXGo3LxuIGGQZn7EZH41Q/4Vx4q/wCgDqH/AH5NfQH/AAsLQ4dda2Ou6GlmtwYGH2pAwPleYZC2/G3d8mMfe79q1/8AhOPCP/Q06J/4MIv/AIqvp6PE+Pp0404wjZJLZ9Pmc7w8W73Z80f8K48Vf9AHUP8AvyaYPh54nMzRDQ74yKoZl8o5AOQD+OD+VfSGpePvDdvp8stp4j0WWcYCL9ujYZJAyQGyQM5IHpWcfH2mmzt5o9e0H7Y1y0EiGVcSIsjKGz5n7tdoLZO7qMZJGdf9asx/kj9z/wAyfq8P5n+B4H/wrjxV/wBAHUP+/Jo/4Vx4q/6AOof9+TX04PF/hk9PEWkH/t9j/wDiqZceMPD8VrNLFremTOiMyxreR5cgZAHPel/rZmH8kfuf+YvY0/5vxR8xn4eeJxMsR0O+EjKWVfKOSBgE/hkfnT/+FceKv+gDqH/fk17tefEGCz0G8uTe6ZcalE3l25iyVbMSyZKBi2AcrweWUDI7dRF4q8PyRI41zTgGUHDXKA/iCcip/wBbscvsx+5//JB7Gn/N+R8w/wDCuPFX/QB1D/vyaZJ8PPE8KhpNDvkUsqgtERySAB+JIFfUf/CTaB/0HNN/8C4/8a5v/hOUeyuma50qSbbC9shkChS8rLh/mO7YFVyRjg9Bwal8Y4xdIfc//kh/V4fzP8DwL/hW/ir/AKAOof8Afk0f8K38Vf8AQB1D/vya+l9M8WaVcafHJeatpsVyCySKLhVXcrFSVBbO04yD3BBqyfFHh8ddd0wf9vcf+NL/AFyxfaH4/wDyRX1Vd3/XyPl2X4eeJ4IXll0S+SNFLMzQkBQOSTT/APhW/ir/AKAOof8Afk19DTeN9MOtrbHVtIOns4hctOpJBidy+7djbkBMY6nr0FRaB4/029+0f2pq+k22ArxZuEj3K2fV2z077W9UXjL/ANcMZ2h9z/8Akh/U/X+vkfP3/Ct/FX/QA1D/AL8mj/hXHir/AKAOof8Afk19Mnxn4WHXxLow/wC3+L/4qqGqePNAt4YJLPxLoTn7REkqNdxuTGzqrEYcYwCWycjjpT/1vxv8sfuf/wAkP6l6/wBfI2PDpDeGNJYZwbOE8jH8ArTrnrfXTNrsVlbPaPZuQsSR8u0Rh8wTqQcGPPyDAxnv2roa+XNgooooA4D4veE9V8Y+FLTT9IjjkuIr5J2EkgQbRHIp5Puwrxpfgf43H/Lna/8AgUtfUlFehhMzxGEjy0rfcRKClufMKfBTxqpBNlbf+BKVp23wl8Xw43WEJ+lyn+NfRdFehLibHyVm19xjPCU5qzPDLX4d+KIcbtOU/SeP/wCKrYtvCHiGHG7S3P0mi/8Aiq9borknnOKnu19xw1MjwlT4k/vPO7fRdaiXDaRP+EsP/wAXVpdN1deuj3P/AH9h/wDi67qivOrVJVvjMqfD2Cpu8U/vOLWz1Veuj3X/AH9h/wDjlTLBqa9dGu/+/kP/AMcrrqK8utlmHq/En956FLA0qXwnLhdSAx/Yt5/38g/+OVTuLPVZc7dHuh9ZYf8A45XaUVwf6tYC/NZ/eelSrzpfCea3Gga5NnbpMw+s0X/xdY194S19U3nTHALqg/exnlmCjo3qRXr100y2kzW6h5wjGNW6FscA/jXMRXmrz6BqCxzaiL1GQWsr2Yjd9yKBuDR7dokL54yFAJ4wT0QyTCQ2T+876ec4qn8LX3Hmtz8OPFMwO3TlH1uI/wD4qsW5+Ffi0PEhsI8yvsX9+h52lueeOFNe2RyanDrl7DNqF7PZfZSwZbDabd1EY+VthErMS7YAOMYx0qo2q61NoWmTQrfJdm0JmBsWVnugiFUdWT5UYl8sAAMY3CuuGBow2OiXEeOlHlbX3HLfCrwNr3hTXb651W2jjhmtvLRklV/m3A4wD6V6xWFolzqc2oXyXvn+UpO0SQ7FRvMkACHA3jYEOcnr15wN2uqMVFWR49atKtUdSe7CiiiqMj5t8SfBvxhqXizWdQtrW2a3ur6eeIm4UEq8jMMjtwRVBfgj42H/AC52v/gStfUNI33TyRx1Fexh89xeHiowa08jN0ovc+ZV+EPjCyQPLZQkF1T5bhTyzBR39SK27b4X+LIcbtPjP0uI/wDGvVYdT1GXR4wZNTV0vJUnuDp7CYQbpfLZUMeGJ2xg4U4DZIHWpdFvNcm1ZU1FJkBhzLF5IESHZEQVfHJ3GQEbj07Y53nxJjp7tfcc9TA0anxHntt4E8Sw43aZn6Tx/wDxVa9t4Z16HG7SpT9Jov8A4uvUaK46mbYmp8TX3HBU4fwVT4k/vPPZLDVbW2knk0i52RIXbbJETgDJwA/NWlsNWXro9z/39h/+OVprqtxHFrkczau5gnJtni08+YybI/lTMe1vnZgCc8ZOcDNMsLjWf7V0zzry4nhltwtzAbExrG21z5hkKDJyFXZ8vXOAMivLqr2vxFUsiwdL4U/vKy2uqD/mDXX/AH9h/wDjlTLHqa9dGu/+/kH/AMcrq6K8utk2Fq/En956NLDU6XwnKyJqTrgaNd/9/IP/AI5WQbHVb63jnh0i5CSoHXfJEDgjIyN/FdG99dLreqWfnXyxG2ja3k+ws6RSYk3bWCYbACHBJ5OO+Ky7e+8Qj7Ekkl5KBNt842Wz7QPNQEupXMQCFsdM4zk8CuWPDWAi7pP7z0qWMq0vhOcuPC2vzZ26VIPrNF/8XWVceA/Esudum4+s8f8A8VXtVFdUMnwsNk/vO+nnuMp/C19x8+3Pwt8WTNldPjH1uI/8ayx8JfF92jPHYw4DsnzTqOVYqe/qDXv1zez2/ii1gzeNaS2z71S1Z4kk3xhDvVOCQXzlsADPHWsfUH1+GyvLi31G/wB6Xh+zQmxWRpkRCCh2p8gaTOHIPCqehrrjg6UdiqvEGNqq0mvuOj0e3ltNDsLaZdssVtHG65zhgoBHFXaKK6jxAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9k=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "test = vec.copy()\n", "test.clear()\n", "@gridFunction(gridView ,name=\"bnd\",order=2)\n", "def bnd(x):\n", " return [numpy.sin(2*numpy.pi*(x[0]+x[1])),1]\n", "bcBottom = DirichletBC(vecSpace,bnd,x[1]<1e-10)\n", "vecScheme = solutionScheme( [a == 0, bc, bcBottom],\n", " parameters={\"newton.linear.tolerance\": 1e-9} )\n", "vecScheme.solve(target=test)\n", "plotComponents(test, gridLines=None, level=2,\n", " colorbar={\"orientation\":\"horizontal\", \"ticks\":ticker.MaxNLocator(nbins=4)})\n", "assert sum([ abs(td-vd) for td,vd in zip(test.dofVector, vec.dofVector)] ) /\\\n", " len(vec.dofVector) < 1e-8" ] }, { "cell_type": "markdown", "id": "fb1f762b", "metadata": {}, "source": [ "As with other grid functions we can also use\n", "[C++ code snippets](cppfunctions_nb.ipynb).\n", "to define the Dirichlet conditions." ] }, { "cell_type": "markdown", "id": "1f45be85", "metadata": {}, "source": [ ".. index::\n", " triple: Boundary; Dirichlet; Degrees of Freedom\n", "\n", "## Accessing the Dirichlet degrees of freedom\n", "\n", "We provide a few methods to apply or otherwise access information about\n", "the Dirichlet constraints from an existing scheme.\n", "\n", "The following shows how to set all degrees of freedom on the Dirichlet\n", "boundary to zero. For a more realistic example see the second approach in\n", "the section on\n", "[solving Dirichlet Eigenvalue problems](evalues_laplace_nb.ipynb#Dirichlet-Eigenvalue-problem)." ] }, { "cell_type": "code", "execution_count": 4, "id": "5f904148", "metadata": { "execution": { "iopub.execute_input": "2024-03-10T12:55:01.292890Z", "iopub.status.busy": "2024-03-10T12:55:01.292610Z", "iopub.status.idle": "2024-03-10T12:55:01.298238Z", "shell.execute_reply": "2024-03-10T12:55:01.297196Z" } }, "outputs": [], "source": [ "for i in vecScheme.dirichletIndices():\n", " vec.dofVector[i] = 0" ] }, { "cell_type": "markdown", "id": "f00b042e", "metadata": {}, "source": [ ".. tip:: the `dirichletIndices` method takes as optional argument an `id`\n", " which then returns the list of indices of degrees of freedom on the\n", " boundary with that id. See further down for a discussion on boundary ids." ] }, { "cell_type": "markdown", "id": "2e7a54b5", "metadata": {}, "source": [ "We have set all degrees of freedom on the boundary to zero. In this\n", "example the Dirichlet boundary was specified by the two `DirichletBC`\n", "instances `bc` and `bcBottom`. The first specified that for the\n", "first component the whole boundary was Dirichlet while specifying nothing\n", "for the second component. The second then set Dirichlet conditions for\n", "the second component along the lower boundary. Consequently, the solution\n", "should now be zero along the whole boundary in the first component, and\n", "zero along the lower boundary for the second:" ] }, { "cell_type": "code", "execution_count": 5, "id": "10a7c430", "metadata": { "execution": { "iopub.execute_input": "2024-03-10T12:55:01.303213Z", "iopub.status.busy": "2024-03-10T12:55:01.303000Z", "iopub.status.idle": "2024-03-10T12:55:01.758940Z", "shell.execute_reply": "2024-03-10T12:55:01.757533Z" } }, "outputs": [ { "data": { "image/jpeg": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plotComponents(vec, gridLines=None, level=2,\n", " colorbar={\"orientation\":\"horizontal\", \"ticks\":ticker.MaxNLocator(nbins=4)})" ] }, { "cell_type": "markdown", "id": "ac4ba8d8", "metadata": {}, "source": [ ".. index::\n", " triple: Boundary; Dirichlet; Setting Constraints\n", "\n", "It is sometimes necessary to set all degrees of freedom on the boundary\n", "to zero, to be equal to some other function, or to as an interpolation of\n", "the boundary data provided to the scheme.\n", "To this end the operators/schemes\n", "provide methods `setConstraints`. To cover the cases detailed above,\n", "there are three versions of this method:\n", "\n", "1. the first takes a discrete function and sets the Dirichlet dofs\n", " to the boundary data provided in the `DirichletBC` structure.\n", "2. The second version takes a range vector and a discrete function;\n", " this version can used for example to set the values at the boundary to\n", " zero, e.g., `op.setConstraints(0, uh)` or for a vector\n", " function `op.setConstraints([0,]*space.dimension, vec_h)`.\n", "3. Finally there is a version taking a grid function and a\n", " discrete function `op.setConstraints(g, uh)` which sets\n", " the dofs at the boundary so that `uh=g` at the Dirichlet boundary.\n", "\n", "We use the first version to set the data at the boundary first having\n", "cleared the discrete function. As second\n", "example we interpolate the `bnd` grid function and then set all\n", "boundary dofs to 0. Recall that the second component has no Dirichlet\n", "boundary conditions set at the lower boundary." ] }, { "cell_type": "code", "execution_count": 6, "id": "efe27792", "metadata": { "execution": { "iopub.execute_input": "2024-03-10T12:55:01.768163Z", "iopub.status.busy": "2024-03-10T12:55:01.767959Z", "iopub.status.idle": "2024-03-10T12:55:02.471119Z", "shell.execute_reply": "2024-03-10T12:55:02.469872Z" } }, "outputs": [ { "data": { "image/jpeg": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/jpeg": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "vec.clear()\n", "vecScheme.setConstraints(vec)\n", "plotComponents(vec, gridLines=None, level=2,\n", " colorbar={\"orientation\":\"horizontal\", \"ticks\":ticker.MaxNLocator(nbins=4)})\n", "vec.interpolate(bnd)\n", "vecScheme.setConstraints([0,]*len(vec), vec)\n", "plotComponents(vec, gridLines=None, level=2,\n", " colorbar={\"orientation\":\"horizontal\", \"ticks\":ticker.MaxNLocator(nbins=4)})" ] }, { "cell_type": "markdown", "id": "0229baa6", "metadata": {}, "source": [ ".. index::\n", " pair: Boundary; Neumann\n", "\n", "## Neumann and Robin boundary conditions\n", "\n", "Neumann boundary flux are added to the ufl form by using the measure `ufl.ds`.\n", "By default they will be added to all boundaries for which no Dirichlet\n", "conditions have been prescribed. In the above example we prescribed no\n", "Dirichlet conditions to the second component at both vertical\n", "and the top boundary using the `dune.ufl.DirichletBC` instance `bc`.\n", "This leads to zero fluxes (natural boundary conditions) being used there.\n", "To add some (here nonlinear) Neumann boundary conditions for the second\n", "component at these three sides we can simply add an additional term to\n", "`a`:" ] }, { "cell_type": "code", "execution_count": 7, "id": "45f6e48e", "metadata": { "execution": { "iopub.execute_input": "2024-03-10T12:55:02.476459Z", "iopub.status.busy": "2024-03-10T12:55:02.475947Z", "iopub.status.idle": "2024-03-10T12:55:02.881187Z", "shell.execute_reply": "2024-03-10T12:55:02.880027Z" } }, "outputs": [ { "data": { "image/jpeg": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "a = a + uVec[0]*uVec[0] * vVec[1] * ds\n", "vecScheme = solutionScheme( [a == 0, bc],\n", " parameters={\"newton.linear.tolerance\": 1e-9} )\n", "\n", "vecScheme.solve(target=vec)\n", "\n", "plotComponents(vec, gridLines=None, level=2,\n", " colorbar={\"orientation\":\"horizontal\", \"ticks\":ticker.MaxNLocator(nbins=4)})" ] }, { "cell_type": "markdown", "id": "21c6f4d2", "metadata": {}, "source": [ "Robin boundary conditions can be handled in the same way using\n", "the `ufl.ds` measure." ] }, { "cell_type": "markdown", "id": "1b6af2b9", "metadata": {}, "source": [ ".. index:\n", " triple: Boundary; Dirichlet; Boundary Identifiers (ids)\n", "\n", "## Using boundary ids (and some more complex examples)\n", "\n", "Up until now we have used UFL boolean expressions to\n", "define the subset of the boundary where a Dirichlet condition should be\n", "applied. In many cases different parts of the boundary are already marked\n", "with ids (integers) during grid construction. These ids can also be used\n", "to define where boundary conditions are to be applied.\n", "At the moment to use boundary ids the grid has to be constructed using\n", "the Dune Grid Format (dgf) reader. Please consult the [documentation of the\n", "DGF file format](https://dune-project.org/doxygen/master/group__DuneGridFormatParser.html#details) for details\n", "and [other examples given for grid construction](othergrids_nb.ipynb)." ] }, { "cell_type": "markdown", "id": "af798553", "metadata": {}, "source": [ ".. index::\n", " triple: Boundary; Dirichlet; Cartesian Boundary Ids\n", "\n", "### Cartesian boundary ids\n", "\n", "For Cartesian grids the boundary ids are rather fixed and pre-described due to\n", "implementation specifics. The numbering of the boundary edges follows the numbering of\n", "faces of the [DUNE reference elements](https://dune-project.org/doxygen/master/group__GeometryReferenceElements.html#details)\n", "but starts from 1. For example, in 2d the boundary ids are\n", "`left=1`, `right=2`, `bottom=3`, `top=4` and in 3d `bottom=5`, `top=6`.\n", "For grids implementing a true\n", "Cartesian grids, like YaspGrid, this is fixed. Altering this numbering\n", "can only be done by using an unstructured grid, e.g. ALUGrid.\n", "See the [grid construction section](othergrids_nb.ipynb#Attaching-boundary-ids-to-a-grid-constructed-with-gmsh-using-DGF) to see how this is done.\n", "\n", ".. note:: **Boundary ids and refinement**: Boundary ids only allow to tell apart intersections with the domain boundary\n", "on the macro level of a grid. Descendants of macro intersections on the domain\n", "boundary inherit the boundary id of their parent.\n" ] }, { "cell_type": "markdown", "id": "bb8513c9", "metadata": {}, "source": [ ".. index::\n", " pair: Boundary; Robin\n", "\n", "### Mixing different types of boundary conditions\n", "\n", "These ids can be used as third argument in the `DirichletBC` constructor\n", "and also in the boundary measure `ufl.ds` as shown in the following\n", "examples solving a Laplace problem with a combination of **Neumann**, **Robin**, and\n", "**Dirichlet** boundary conditions.\n", "\n", "In this example the boundary conditions are\n", "\n", "- left and right boundary (id=1 and id=2):\n", " Robin boundary conditions $\\nabla u\\cdot n + u = -10$ for $y\\in[0.4,0.6]$ and\n", " natural boundary conditions ($\\nabla u\\cdot n=0$) otherwise.\n", "- bottom boundary (id=3):\n", " Neumann conditions $\\nabla u\\cdot n=2$\n", "- top boundary (id=4):\n", " Dirichlet conditions $u=1$ for $x\\in [0.3,0.6]$ and\n", " natural boundary conditions ($\\nabla u\\cdot n=0$) otherwise." ] }, { "cell_type": "code", "execution_count": 8, "id": "dc552ea8", "metadata": { "execution": { "iopub.execute_input": "2024-03-10T12:55:02.886634Z", "iopub.status.busy": "2024-03-10T12:55:02.886431Z", "iopub.status.idle": "2024-03-10T12:55:04.167116Z", "shell.execute_reply": "2024-03-10T12:55:04.165622Z" } }, "outputs": [ { "data": { "image/jpeg": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from dune.ufl import BoundaryId\n", "from ufl import ds, grad, dot, inner, conditional, eq, And, FacetNormal, Not\n", "\n", "gridView.hierarchicalGrid.globalRefine(3)\n", "space = solutionSpace(gridView, order=2)\n", "x,n = SpatialCoordinate(space), FacetNormal(space)\n", "u,v = TrialFunction(space), TestFunction(space)\n", "a = inner(grad(u), grad(v)) * dx\n", "\n", "fbnd = (u-10 * v * # middle of left and right boundary\n", " conditional(abs(x[1]-0.5)<0.1,1,0) ) * ds( (1,2) )\n", "fbnd += 2 * v * ds(3) # bottom boundary\n", "dbc = DirichletBC(space, 1, # middle of top boundary\n", " And( eq(BoundaryId(space),4), abs(x[0]-0.5)<0.2 ))\n", "\n", "scheme = solutionScheme( [a == fbnd, dbc] )\n", "solution = space.interpolate(0, name='u_h')\n", "scheme.solve(target=solution)\n", "solution.plot()" ] }, { "cell_type": "markdown", "id": "092441e0", "metadata": {}, "source": [ "The final example has a slightly more complex setup at the boundary:\n", "\n", "- left and right (id=1 and id=2):\n", " for $y\\in[0.4,0.6]$ we set Neumann conditions $\\nabla u\\cdot n=-50$\n", "- left and right (id=1 and id=2):\n", " for $y\\in[0.2,0.8]\\setminus [0.4,0.6]$ we set Dirichlet conditions $u=1$\n", "- rest of boundary: 3" ] }, { "cell_type": "code", "execution_count": 9, "id": "af2327d0", "metadata": { "execution": { "iopub.execute_input": "2024-03-10T12:55:04.172355Z", "iopub.status.busy": "2024-03-10T12:55:04.172152Z", "iopub.status.idle": "2024-03-10T12:55:04.719006Z", "shell.execute_reply": "2024-03-10T12:55:04.718068Z" } }, "outputs": [ { "data": { "image/jpeg": "/9j/4AAQSkZJRgABAQEAMgAyAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCADrASIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3yV2jhd1ieVlGRGhGW9hkgfmRWTL4ltItOs73ybh47m2N3hVXMcIClnbLdt65AyeeAa1pY1mieNiwVwVJRip/AjkfUVmJ4a0pLOC0EMxggXZGr3MrYTABTJbJQhVyp+U45FAE+o63pOjhDqeqWViH+59puEi3fTcRmqH/AAm/hL/oaNE/8GEX/wAVXEfH048Ead/2FE/9EzV885+foenpWNSryO1j0sJgFiKfO5W1tsfXv/Cb+Ev+ho0T/wAGEX/xVH/CceEv+ho0T/wYRf8AxVfIa9+D19KAPk+635Vn9Y8jrWTL+f8AA+vP+E48Jf8AQ0aJ/wCDCL/4qj/hN/CX/Q0aJ/4MIv8A4qvkTHC/Keo7UpHzL8p/Kj6z5D/sVfz/AIH11/wm/hL/AKGjRP8AwYRf/FUf8Jv4S/6GjRP/AAYRf/FV8igfM3yn8qFHX5T19KPrPkH9ir+f8D66/wCE48Jf9DRon/gwi/8AiqP+E38Jf9DRon/gwi/+Kr5Ex+7+6fypWHT5T19KPrPkH9ir+f8AA+uv+E38Jf8AQ0aJ/wCDCL/4qj/hN/CX/Q0aJ/4MIv8A4qvkXHz/AHT09KAPmPB/Kj6z5B/Yq/n/AAPrr/hOPCX/AENGif8Agwi/+Ko/4Tjwl/0NGif+DCL/AOKr5Exw3B79qCPk6H8qPrPkL+xl/P8AgfXf/Cb+Ev8AoaNE/wDBhF/8VR/wm/hL/oaNE/8ABhF/8VXyIw6fKevpS4+foenpR9Z8h/2Kv5/w/wCCfXX/AAm/hL/oaNE/8GEX/wAVR/wnHhL/AKGjRP8AwYRf/FV8igfMeD+VIB8n3T+VH1nyD+xV/P8AgfXf/CceEv8AoaNE/wDBhF/8VR/wm/hL/oaNE/8ABhF/8VXyIR+7+6fypSPmX5T+VH1nyD+xV/P+B9df8Jv4S/6GjRP/AAYRf/FUf8Jv4S/6GjRP/BhF/wDFV8i4+f7p6elCjr8p6+lH1nyD+xV/P+B9df8ACceEv+ho0T/wYRf/ABVH/CceEv8AoaNE/wDBhF/8VXyIB+7+6fyoI4X5T27UfWfIP7GX8/4H13/wm/hL/oaNE/8ABhF/8VR/wm/hL/oaNE/8GEX/AMVXyIR8y/K35Un8fQ9PSj6x5C/sZfz/AIH15/wm/hL/AKGjRP8AwYRf/FVsWl5a6hax3Vlcw3NvIMpLC4dGHTgjg18VA9eD19K+rvhh/wAk20P/AK4H/wBDatadTnexxYzBLDxTUr3N7Utb0nRvK/tTVLKx83Pl/arhIt+MZxuIzjI/MVRXxr4Udgq+JtGZicAC/iJJ/wC+q8w/aAXdP4b/AN26/nDXkOnx41K1P/TZP5ionX5Z8tjfDZX7fD+25rb9Ox9b6jrlrp2mpqGDcWzEAPBJGRz0xuYbvYLknsDUN74ktLC4njmhuCsJKNKqqVMgj83yxznds56Y7ZzV+/0621OAwXQkaIghkWV0DAjBDbSNw9jxVaTw/pkzM0sDyFo/LbfM7Bvk2bjk8vt43/ex3roPIK8fia1knWE210jB1jm3BP3DNIY0DYbncykDbu9TgVt1mR6BpsckUiwPuibcCZnO47i4L5PzkMSRuzgnIxWnQAUUUUAFFFFAHlfx9/5EjTsD/mKJ/wCiZq+elzv+729a+hfj5/yJOnYP/MUT/wBEzV8/Roxf73b0rixD94+myaLdH5ioG5+Xv605Vby/u9vWpIo25+bv6VIkTeV97se1cjkfQQoNr/hiDa21fk7jvTirb1+X9an8ptqfN3HanGJt6/N69qnnNlh359OxWCtvb5fTvQqtz8vf1qyIn3t83p2pFib5vm7+lHONYd+fXsVdreV939aVlbj5O/rU/lN5P3v0pzxt8vzd/SnzE+wdvkuxW2t5n3O3rQFbc3yfrVjy28z73b0pBE29vm9O1LmD2Dv/AMMVwrbW+Xue9BVvL+729anEbbX+bue1DRt5X3uw7U+Yn2Lt8vIgZW4+Xv60bW3/AHO3rVho2+X5u/pR5beZ97t6UcxXsHf/AIYgCtub5P1pAreX9zt61ZETb2+b07Uixt5X3ux7UcwKg/z7Fcq3l/d7etKVbevy+verBjbyvvdh2pTE29fm9e1LmH7B/l2K+1vM+729aFVufl7+tWfKbzPvdvShIn+b5u/pRzjWHd+v4FUK3l/d7etIVbavydx3qyIm8r73Y9qDE21Pm7jtT5yXh3brt5FVlbcvy+vemENv+729atvE29fm9e1RNG3mfe7elNSRlUotf0ip83Py9/Wvq34Yf8k20P8A64H/ANDavlVkb5vm7+lfVXww/wCSbaH/ANcD/wChtXbht2fM5ymoRv3OF+PK7rjw5/uXX84a8oso8X1ucf8ALVf516/8b4/Mu/Dw9I7r+cNeXW9vsuYmJwFcEk/WuTEztXt6HvZNRUsq5v8AF+p9YUVn3usQWdil6kb3VsxGZLdkYAE4B5YbueAFySeAKbPrMcOrf2b9mme4aBp4wjR/OBjgAvkcnGSAM969Y+BNKisdPEVtINIYQThNURXgJMeRld2Cu7cSB12ggetbFABRRRQAUUyWWOCJ5ZpFjjRSzu5wFA6kk9BVd9V06OGCZ7+1WKc7YXMyhZD6Kc8/hQB5t8fBnwTp3/YUT/0TNXgkMOX6t09a97+PeP8AhCtNz/0FE/8ARM1eKafZxytlumPevOxk+V3Pr+HaanSd+/8AkRw25OeW6+tTR2jGHOW6HvWlb2duA3HRj609LeD7N+B9a8uVc+rj7OK6depmmzOyP5m6jvTmsz5ifM3fvWg0EAji47j1oeGASx/j61PtmVzQ8unUzhaHzH+Zu3empan5vmb7x71pCGDzX/D1piRQfP8A7x9aftWUnDTbr1Mz7OfIzlvz96JLcjby33h3q8YoPs3/AOv1olhg+X/eHrVe0JShbpsupQMB837zfd9aQQ/O/Ldu9XjDB52P9n39aaIYPNf8PWq9oVyRv037lEQ/K/zN1Pehof3P3m6DvVsQw7JPqfWkeGHyPwHrT5yOSNum3crPD935m6+tL5P737zdPWrTww/J/vD1pfJh87/gPvS5ynCN+n3lRYfnblu3ehYCYfvN0PeriQweY/4etKkMH2fp2PrQ6gKMfLr1Khtz5PVug7082x8xAWbv3q0YoPs/4D1qQxQeZH6c+tT7QLQXbp1KQtT52Nzfd9adHZk7vmb7x71eEUHn4/2ff1p0UUGH/wB4+tQ6rGnC/T7zOWzPkZ3N0PekazOyM7m6jvWkkMH2b8D60pgg8uLjuPWj2zuRzQt027mTJaMHXlu/eoJIP3n3m6etbsltB5icevrUEtlA0uAMfL7+tXGuKUacu2/c5ySLAb5j1PevqX4Yf8k20P8A64H/ANDavmW8t4og/wBT619M/DD/AJJrof8A1wP/AKG1etg5c12fGcQ0+RQRzPxgTff6CP8ApldfzhrzpICHU+hFem/FRPM1LQxjpDdfzhrhGgwpOOgrycfUtjLeh6uT1eXK+X/F+p73f6Xa6k1u1yspNvJ5kflzvHhsYz8pGeCevrTDo9m0yyt9oaRIzGjNdSnaCu0kZbhsfxD5uvPNX6K+kPgzNg0DT7eKzhjSfyrIKII3uZHVdv3cgsQxHYnOMD0FaVFFABRRRQBU1Ky/tDT5bXzPLL4KvtyAwIIyO4yBkd6wbrwlcXdpHC+pIpSWeQskDKD5rb2GBJzht3DZUggMrYzXU0UAcL8TtMXUrDSI5XkaIX/MKqpBIhlOemc/jj2rzqXT44bzalvIFCcAL716v41DtBpITbu+3H73T/UTVxdxbXBvT/qv9X7+tfHZ5XcMZy305V+bPpcnxM6dHlT0ucpHCB5n7mT75/hqBU/0Q/upOh/hroktrj97xF/rD61UW3uPsR4i+6fX3rz1XTPfhim+piuv7qH91J1X+GmyL++j/dSd/wCH2rWkt5/Kg4j+8vrUc0E/nxcR9/X0rVVV+ZtGu/yMoD99J+7k7fw1HGPv/u5Pvn+GtQQz+fLxH29fSoY4pv3nEf3z61qqiN4Vnp8zKP8Ax6f6t/8Avn3pZv4P3b/eHarhim+x9I/19aJ4pvk/1f3x61qpq5cart8kUD/r/wDVv93096av+tk/dv27VdMc32jpH9z39aascvnScJ29arnRsqrv8yiP9XL+7fqe1D/8e3+rfoP4atCOXy5fudT60PHL9m/g6D1qudXD2jt8itJ/B+7f7w/hpQf3/wDq3+76e9WpY5vk+598etKI5ftH8H3ff1pc6sN1XcrJ/rZP3b9u1Ef/AB7f6t+h7Vajjl86ThO3rSxxzfZf+WfQ+tJzRDqv8ys3/Ht/q36DtUp/10f7t+/8NWGim+yj/V9B61MYpvOi4j7+tQ5r8yJVX+RVA/0j/Vyfd/u+9SQD7/7uT75/hq2sM32npH9z39alt4Zz5nEf3z61lKorGTrO5QjX/Rf9XJ0P8NP2fu4f3UnVf4avwwT/AGPpH90+tTfZ5/Kg4j+8vrUOqrmDxDsUGjzNF+6k7/w08W2+5x5Un3P7vvWqba4+0Q8Rd/X0q3Fa3H2zpF/q/f1rCVeyMZ4trqc4PDR1OVh5Um0Of4a9o8B24tPBlhbgECLzEwfaRhXH6XDcoZcCHPmH1ruPCWf+Ech3Yz50+cf9dnr2cgxM6tacG9EkfOZ1i51owjLZHL/EhN+q6KP+mFz/AOhQ1xtxCEtpWPACE5P0rvPHib9Y0cf9O9z/AOhQ1y15BiynPpG38q5s0qWzG3+H9Dqy6ry4Hl9T1G+1QW9nbXdqsN1BNcQxF1mwAskioGXAIbBYccfWqc3iGRNZnsEs1EcRMYuZptiNN5fm7OFJA2c7unB/HVvLCz1CNY720guURg6rNGHAYdCAe/vUT6NpcqlZNNs3Bh8ghoFP7rGNnT7uO3Svsj5UzLfxBeyT6eZtJEVndkp9qFxkK+XCgLtDEMFUgkDhhXQVTi0nTYJYZYtPtI5IAVidIVBjBzkKccfePT1PrVygAooooAKKKKAOZ8ZKzR6QFbaft55xn/lhNXMSW05vf9f/AMs/7g9a6jxiFMejhnKD7eeQcf8ALCasAQRG+/4+3/1X/PQetfBcSStjf+3V+bPWwUuWn8zNis5j537/AP5aH+AVTWzm+wE+d/C38A963ILWI+d/pb/61v8AloKqraxf2ef9Kf7rf8tB7140a36dD0YVzFltJvJt/wB9/Ev8AqKe1l+0Rfvv738A9K1ZrWLyLb/SW+8v/LQelQXFvELmH/SW/i/5aD0rphV/XodcKxki1l8+b976fwD0qCO3l/efvf4z/CK0/Ij+0Tf6S38P8ftVaOCP97/pDf6w/wAddCqfp0OynV/q5lNby/Yv9b/46PWi4gkHl/vf4x/CKstFH9g/4+G/7796S4ij/d/v2++P466FPU3jU0+7qUzBJ9p/1v8AB/d96YsEnnS/vfT+EVaaKP7V/r2+5/f96jWJPPl/ft2/j9qtSN1P+rlUQyeXN+97t/DSPBJ9lH73sP4RU4jTypv37feb+OkeNPsg/ft0H8dXzaj59Pl3I5YJPk/e/wAY/hFKIJPtP+t/g/u+9Syxp8n79vvj+OlEafaf9e33P7/vS5tCnPX/AIJHHBJ50n730/hFOigk+y/63sf4RUscSefL+/bt/H7U6KKP7If37fdP8dS5foZuf69RjQSfZB+97D+EVObeXz4v3vr/AAj0pWij+xj9+33R/HVkwx+fD/pDd/4/asnP9ehjKp+nUYltL9q/1v8AB/dHrU9raynzP338Z/gFPSCP7X/x8N9z+/71ZtII/wB5/pLf6w/xisJ1NP8AgHNKrr/wSCC0l+xH99/Cf4B71YFpN5Nv++/iX+AVNb20X2A/6S33W/5aD3q0LWLybb/SX+8v/LQelc86uvz7HJOvoRGzm+0wfv8A+9/APSrUdnOL7/X/APLP+4PWrBtIvtUH+lP/ABf8tB6VOtrF9u/4+3/1X/PQetcsq2ny7HJOuR2NvOPNxcf8tD/AK63wkCPDsIJyRNPk+v7565i2hiHnf6W/+tb/AJaCun8JY/4RyHByPOn5z1/fPX0nC7vXq+iPKx0rxRleME363pQx0trn/wBChrn9Qgxpl0cdIX/ka6nxInma9pg/6dbn/wBChrI1aHbo183PFvIen+ya485qWzW3+H9DowtXlw/L6nfUVi6vr/8AZ1nHcQ2rTBopJ2WUtCRHGu5uCud3TAIH1FFzrlxb60NO/s9sSZWCZmYLIwjL9kIC/KR1LZH3cYNfoB4xtUVy1v4wea5soW0/aZn2SnzH/dHzWjGcoMZK5AfYTnABYEV1NABRRRQAUVS1eS6i0q4ezDeeF+Uou5gM8lV5yQMkDByR0Nc3calr/wBhtTbi73JLOJGayPmTbXHkoRtwgdDy+AFI5wcigC74wMaro5lxt+3nqM/8sJqy0ksVvRkJ/qv7nv8AStLxa9wtxouyKNovtpJYyYYHyJeMYxj3z+FZT3sx1HiAcRf89B618Rn2FniMfaK05V+bKqYyFCjZvW5Jay2H775U/wBa38H/ANaoUNgdMPCZ2t/B9fanWl1P++/0f/lq3/LQU63uLj+zT/o38Lf8tB714VbBSp/8OTQx/M9GUbgWXkW2An3k/g9vpVW6Fn9qh4T+L+D2+lbUsk7W1r/o38Sfxj0qvd+f9qg/0b+9/GPSuaMnF2fn1PboYjmRgf6J9pn4T+H+D2+lVIza/veF/wBYf4K2j5/2q4/0f+7/ABj0qkhm/ff6P/y0P8YrrjP9Op6dKoYrm1/s/ov/AHz70y5Nt+74X74/hq65m/s//Uf+Pj1pl0Zv3f7j/loP4xXZGWv39TshPT/gFBjbfaui/c/u+9Rqbfz5eF7fw+1XWMv2v/Ufwf3h61Epl8+X9z6fxD0rRPT/AIJ0Rn/VikDb+VPwv3m/hpsht/sY4XoP4atBpfKn/c/xN/EKbIZfsY/c/wAI/iFaX1/4JfNp/wAAimNt+74X74/hpwNv9q6L9z+771NMZf3f7n+MfxCnBpftX+p/g/vD1pX0/wCCNy1/4BFEbbz5eF7fw+1OhNt9jPC/dP8ADU0Rl8+X9z6fxD0p8Jl+xH9x/Cf4h71Epfp1MnP9ehGxtvsY4X7o/h+lWybX7RDwv8X8HtQTL9hH7j+Ff4h7VbzN9oh/cf3v4x6VjKX69TnnP9Og2M2v2zov+r/ue9W7L7J+9yE/1h/g/wDrU6Iz/bf+Pf8A5Z/3x61esfP/AHv+jf8ALQ/xiuSpPT/gnFUqENqLM6eeE+638H19quqLLyLXhPvJ/B7fSpbTz/7NP+jfwt/GPerDyzrbWn+jfxJ/y0HpXK25Ssu/c8qvieVCSNYLdW/Cfxfwe30pfOsPt/3Ux5X9z3+lE9xP9rt/9G/vf8tB6VEbqcX/APx7/wDLL++PWuqlgJTXy7njVcw5Xqx8MlhsnOE/1rfwf/Wre8JFT4chK/d86fH0856wrG5nbzx9n/5aN/y0Fb3hPP8Awj0W4YPnT5Gen756+i4boyo4mrF9karEKtSTRBrYB8Qabn/n1uf/AEOGs/WQv9h6h/17Sf8AoJq/rpx4g03/AK9bn/0OGs3WG/4kl/8A9e0n/oJrhzmjzZrzf4f0Eq/KuU665s7W8RFuraGdUYOolQMFb1GehqEaTpwJI0+1yYvIz5K/6vps6fd4HHSrlFffklJNI0yNoGTTrRWt8+SRAoMeTn5eOOSTxV2iigAooooAKKKKAOC+K+pSaToek3MTKrf2kqZPvDNXM6Vq815KjbosmPvnnmrn7QDFPA+mspwRqsfP/bKavOvCt3O7Rfv/AOD+6PWvo8Dl1LEZe5ta8zX4I+V4hw7clXi9Uj1Syluj5v8Aqf8AWH1qe2e7/s0/6n7revvWbponeNz9o6uf4BV21jn/ALNP+k/wt/APevz7OMFGm2c+WYty3Zd3Xf2e0/1P3k9fSpLpbs3Vv/qP4vX0qDy7j7Pa/wCk/wASf8sx6VZmhuDc2/8ApP8Ae/5Zj0r4XFQUZdOp9rgqr0MxkuvtVx/qf4fX0qgi3P77/U/6w+tarQz/AGu4/wBJ/u/wD0rPSKf99/pH/LRv4BUwkrdOh9DRkZMi3H9nf8sv19ajuluP3f8Aqv8AWD1qeSKb+zf9f/44PWo7uKb93+//AOWg/gFdsXr82d9N6FVluPtf/LL/AFfv61Eon+0Tf6vt6+lWGjm+1/6//ln/AHB61Escv2ib99/d/gHpWyeh1RbK4E/lT/6v7zetNkE/2Mf6v7o9akEcvlT/AL7+Jv4RSSRS/Yx++/hH8I9q1vqXd2CYT/u/9X98etOCz/av+WX3Pf1pZo5f3f77+MfwilEcv2r/AF38H90etTfQbbuLELj7RL/qu3r6VJALj7Ef9V90+vvSQxy/aJv3393+EelPgjl+xH9//Cf4B71En+hlJv8AMlK3H2Ef6r7q+vtVzbcfaYP9V/F6+lVjFN9hH7/+Ff4B7Vd8qb7TB+//AL38A9K55teXU5ajZZiW5+2/8sf9X7+taGnpdfvceT/rD61Uhhm+3D/SP+Wf9wetaOnwz/vsXP8Ay1P8Arhqy06HnVpMktxdrpZ/1H3G9femTNd/Z7X/AFP3k9fSnxxXH9ln/Sf4G/5Zj3qCaO4+z2v+k/xJ/APSurB01KXTc+cxlViXL3f2qD/U/wAXr6VUlmuhfZ/c/wCq9/WpbpLj7VB/pP8Ae/gHpWPqj3EUrEXHJj/uD1r7/JcvjVaVj4jM8ZJaJlG+8VXGlRz7VhY+Yxzk16N4AuWvfBGnXTY3TCSQ46ZMjH+tfNvii9n/AHi+cTlznivoj4W8/DLQf+vc/wDoTV9lmmWUMHhqc6cbSk3d9z2sjoShBzm7tlrxAca/pn/Xrc/+hQ1l6u+NEvz/ANO8nT/dNaXiQ417TP8Ar1uf/QoayNVb/iT3v/XvJ/6Ca/Ocwoc2O5vQ7MRW5a/L6G94g16bTbGG5tRGokSRx9qiZd5VcrEFJUh2PAz6Hg1Be+IpP7SuLXTtT0h9tmZ189iqxEgGMs4f5lOScADAwc8jPT0V9QemcjY+KL25u7GF/sZ80KGWNTmcmSVGaI7vuKIw+cHKsDxkV11FFABRRRQAUUUUAeT/ALQQz4F07P8A0FY//RM1eY+FLWHdHuI+53b3r1740WZv/DOkwBS2dVQ4Az0hmrktB0q2tJk86MAiPOCnvX1OXYqnQy1qTV+Z/kj5jiDEqK9kt2jd0uC0ETAlPvn+P/69XrWGz/s48p91v4/r71HYtZjzflT/AFh/g/8ArVYtnshpp4T7rfwfX2r8+znFKcnY4Mrw81vcm8my8i15T7yfx+31qzNDZfabflP4v4/b61D5ll9nteE+8n8Ht9KluJ7EXNvwn8X8Ht9K+Cxc25aX6n2+Dg9Co0Vl9ruOU/h/j9vrWekVn++5T/WN/H/9errT2f2q44T+H+D2+lZ6T2n77hP9Yf4P/rVlBSt16H0VFFCSO0/s7qmf9/3+tR3Udr+75T/WD+Olkmtf7O6Jn/c9/pTLqW1/d8J/rB/BXdFSv13Z300rETR2v2vqv+r/AL/vUKx232iblf4f4vapGltftfRf9X/d96iWW2+0TcL2/h9q2V7dTqil5EYjtvKn5X7zfxUkkdt9jHK/dH8X0pBLbeVPwudzfw0kktt9jH3fuj+H6VrrfqXZW6Es0dt+75X74/ipRHbfauq/c/ve9Mmltv3eAv3x/DThLbfaui/c/u+9TrbqDSv0JYY7X7RNyv8AD/F7U+CO1+xHlfun+L61FDLbfaJeF7fw+1PgltfsR4X7p/h+tRK/n0MpJeXUtGO1+wjlPur/AB/SrojtPtMHKfxfx+31rPMtr9hHC/dX+D6Vd860+0wcJ/F/B7fSueal59TlqJGhDFZ/bhyn+r/v+/1rR0+KyxNkp/rT/H/9esuGez+3dE/1f9z3+laOn3FkPNyE/wBYf4P/AK1cNVSt1PPrInjhsv7MPKfcb+P6+9V5obL7Pa8p95P4/b61YhmsjpZ4TOxv4Pr7VDNJZfZ7XhPvJ/B7fSu3BTalrfc+axkGVbqGz+1Qcp/F/H7fWsPWLe1ZztK/6v8Av+/1roLl7M3UHCfxfwe30qhdLZy3LLhMGP8Aue/0r9FyLFxhKLZ8LmdGafMr6HiPia3RXYqRw5719KfCz/kmWg/9e5/9CNeNeI9Fhmil2KPvt0WvafhpGYfh1o0Z6pEy/k7V9nnlaFbCUXG2jZ9JkmJjVpW6oXxOca7pf/Xtc/8AoUNY2qN/xKb3/rg//oJrW8VnGuaX/wBe1z/6FDWHqbf8Sm84J/cPx/wE18PWoc1XmOHMK3LjuX0PSaKpz3txFaxzJpd3M7n5oY2iDp9dzhfyJrJ03xDNc6tJb3Qht0w+YWwJbdg6IiyEMVJk35XGOnG7rXefUnRUVxT+ML3+zNSuvLhtpba7EcVvc27o7oYkcKQzKS/zHO0MemFbjPQ2F3ez61qUEslu9pbFEQxxMrCQgsVJLEHCmM5AH3j6UAalFFFAFTUr3+z9PluhH5jJgKm7aCxIAyewyRk9qxrzxfDYWNnLcRRJPcXhtTG04VV2zeU7hiBkAkEDGTkdOSOhlijnieKWNZI3Uq6OMhgeoI7ioYtOsoIDDDZ28cRdXKJEoXcMYOAOo2rg+w9KAMLxdIpn0WDynkdr0sBtO3Agl/ixgH2zmsR0mGpcWv8Ayy/vj1rf8VmQHRjHt3fbz97p/qJqzSt0b/P7jPle/rXx+c4+eGx3Knpyr82YYnAQrwU2tSpZ+ePO/wBG/wCWrfxin27XH9mH/Rv4W/jHvVi1S7/ff6j/AFretMiN0umH/Ufcb1968LE49zuTh8ByvRA0s621pm2/iT/loPSo7u5n+1Qf6N/e/jHpTJ5rr7Pa/wCo+8nr6VVupro3UHMP8Xr6V5qXPK7t1Pfw+H5RhuJ/tVx/o/8Ad/jHpVFJ5v3v7j/lof4xTzLc/aZ/9T/D6+lU45Lj97/qv9YfWuuEFbp0PWpQIHmm/s7/AFH/AI+PWmXU037v9z/y0H8YqJ3uP7P/AOWX6+tNuXuP3f8Aqv8AWD1rrjHX5s7IR0Bppftf+p/g/vj1qJZZfPm/c+n8Q9KRnn+1/wDLP7nv61Grz+fL/q+3r6Vqo6HTGLASy+VP+5/ib+IU2SWX7GP3P8I/iFRhp/Kn/wBX95vWkkaf7GP9X90etaqOpfK7FiaWX93+5/jH8Qpwll+1f6n+D+8PWoJmn/d/6v749acHn+1f8s/ue/rU8ug3F3LEUsvny/ufT+IelPgml+xH9z/Cf4x71Xiafz5f9X29fSnQvP8AYz/q/un196iUf0MpRf5l0zTfYR+5/hX+Me1XPPm+0wfuP738Y9KzGe4+xD/VfdHr7Vc33H2iH/VfxevpWMo/qc04s04rib7aP3H/ACz/AL49av2FzOPN/wBH/wCWh/jFY8clz9s/5Zf6v39auWUtyPN/1P8ArD61x1YabI4qtM2LW5nOlkfZv4G/5aD3p0r3Bt7X/Rv4k/5aD0qhaTXX9nH/AFP3W9ferolujbWgzB95PX0rnTdOd1bc8fE4bmQXDXBu4P8ARv738Y9KruJzff8AHt/yy/vj1q/MLo3dv/qP4vX0pvl3f9of8sP9V7+terhszdNJpnz+Iy5TdmihbWbSiZpLUMqyngsK6nwkMeHIRt2/vp+PT989YkRukSYfuP8AWt61t+E8/wDCOw7sZ86fOP8Ars9fRZHmVfGV6kakrxSVkdGHy2jhKfPCNpPdmX4uONb0r/r2uf8A0KGsHUW/4ll3/wBcX/8AQTW140cJrWkk/wDPvc/+hQ1zl/MDp1yPWJ/5GvsaeH54cx8PnNVxzXl/w/oerUUUVyn3wUUUUAFFFFABRRRQBzni5N40cbmX/Tzypwf9RNWQIsX/APx8T/6r+/71q+MRG0ekCXG37eepx/ywmrm3FkL7qmPL/v8Av9a+B4lV8b/26vzZ6eEhzU/mX7dQPO/0if8A1rfx1UUf8S4/v5vut/H9apxGz/fcp/rD/H/9eqitaf2eeU+638f1968ONLX7uh3ww67FycfuLb9/N95f4/aq9yv+kw/vpv4v4vaqUzWvk2/K/eX+P/69Qzm1+0Q8r/F/H7fWumFP9eh2U6JY2/6RP++l/h/i9qrRp/rf3sv+sP8AFUANt9om5Xt/F7VXjNt+85X75/irpjD9Dsp0hXT/AED/AFsn/fXvSXKf6v8AeyffH8VVG+z/AGHqv/fXvSXH2f8Ad8r98fxV0qOp0wp6EzJ/pX+tk+5/e96jVP38v72Tt/F7VA32f7T1X7n973pi/Z/Ol5Xt/F7VajobxgTBP3U37yT7zfxUkif6IP3knQfxVWHkeXNyvVv4qR/I+yjleg/irTl1HyaFyVP9X+9k++P4qcE/0n/Wyfc/ve9U5fs/ycr98fxU4fZ/tPVfuf3vep5dCnDUuxJ+/l/eydv4valhT/Qz+9k+6f4qpx/Z/Ok5Xt/FSxfZ/sh5Xof4qlx/QydP9TRZP9CH72T7o/i+lWin+kQ/vZe/8XtWS32f7IOVzgfxVYJtvPi5Xv8Axe1ZSh+pjOn+hrRp/pn+ul/1f973q1Zr/rP30v8ArD/FWMhtvtfVfuf3verFqbX95yv3z/HXPOGhzTpamzbL/wAS8/v5vut/H9auKP3Fr+/m+8n8ftWBbta/YTyv3T/H9ferAa08m25X7y/x/wD16550tfn2OKpQ0OkYf6Vb/wCkTfxfx+1Shc33/HxP/qv7/vWEWtPtMHKfxfx+31qwhtDe9U/1f9/3+tcjpfl2OSeHV9jShh3ed+/m/wBa38ddF4TG3w7CMk4mnGT/ANdnrkbRLM+byn+sP8f/ANeuu8IgDw5CF+75s+Pp5z19PwsrV6nojz8bHlikc78QZPL1bRz6wXP/AKFDXI3VxmznABP7tuPwrpPidJ5ep6Ic9Ybr/wBChriZLjdE4z1Uiv1nAU74O/qfmecUubNOb/D+h7jPPqBtY5LOyiMzH54rq48vYPqiuCf85qhYX92NZvobwXPliOAoot2aNHYkOqSCNd4Hy8npyTgA426K+bPuzkJdT1IadKiTat9qF88UMn9nEjZ1VnHlcoB3UAngZ5zWppV1q83iDU4761mhs1SM224Js+9IDhlJJJCoxB6ZxjuduigAooooAKKiubmGztpLid9kUYyxwT+QHJPsOtU21ywS1iuTJL5MrlA4t5CFYNtIf5fkw3B3Y6H0oAyfGZVYtILRlx9vPAGf+WE1cjPcRC+P+iv/AKv/AJ5j1rrvGjMkGksibj9uPGcf8sJq4K9vpV1BgYcHy/749a+Iz+Dljv8At1fmz3Mrp88PmKl1F+9/0Zv9Yf8AlmKpC5j+wn/R2+638A96rrfSfvP3X/LQ/wAYqqt5L9jI8r+E/wAQrgjRf9M9+nh/6sW5bmPyYP8AR2+8v8FRTXEfnxfuG7/we1U5LuXyof3X8S/xCmy3UnnRfuvX+IVvGl+p0xofp0LAuI/Pl/cN2/g9qhjnT95+4b75/gqAXMnnS/u/T+Koo7iT5/3X8Z/irVUzohS/qw5pk+x/6lv++PeieZPk/ct98fwVVNxJ9k/1f/j3vRNPJ8n7v+IfxVsoamsaenyXQnMyfaP9S33P7vvTFlTzpP3Ldv4agM8n2j/V/wAP973pqzyebJ+79P4qpQNVT1+fYlEqeXN+5bqf4aR5U+zD90eg/hqATP5cv7vuf4qHmf7MP3fYfxVXJqHs9Pl2LMsqfJ+6P3x/DThKn2j/AFLfc/u+9VZZ3+T93/EP4qUTyfaP9X/D/e96XJoU6ev/AAC3HKnnSfuW7fw0scyfZT+5bof4KqpPJ5sn7v0/iojnk+zf6vsf4qTh+hDp/r0LrTJ9lH7lug/gqczJ50X7hu/8HtWe08n2X/V9h/FUpuJPOj/d+v8AFUOH6mUqX6dDRWeP7T/qG+5/c96mtriP95+4b75/grNW5k+0/wCq/g/ve9SQXMnz/uv4j/FWMqehk6Ov/ANKG4j+xEeQ33T/AAfWpxcx+Vb/AOjt95f4KyYrqT7If3XY/wAQqX7XL5UH7r+Jf4hWcqWv/BOaVDT/AIBufaovtEP+jt/F/APSrUdzF9t/49m/1f8AzzHrWEb2Xz4f3Xr/ABD0q1FfS/bP9V/B/fHrXNOi7f8ABOeph/6sdFYTRHzf9Ff/AFh/5Ziu28I4PhuDAwPNn4x0/fPXnml3sheQeTn94f4xXofhEk+HISRgmWfI9P3z17HDkXHEVPRHzuaQ5VE4r4tyeXqGhH1iuv5w158LjcQPXiu3+NEnl3vh8+sd1/OGvM4rgmZAOSWGM1+x5VTvl1/8X6n59mFLmx3N6H1NRVOeXU1tY2t7S0kuCf3kcl0yIo9mEZJ/IVQsL+7Gs30N4LnyxHAUUW7NGjsSHVJBGu8D5eT05JwAcfGH1Jt0Vw9nquvjTTPeHURKt7bAKliWLRsw81SBECAF3E4zjjEjVv6XdXU+tamjyXhtYiEjW5tvLG7LbjG2xdydACSxOCemCwBs0UUUAV76zjv7OS2lZlVwPmQ/MpByCM9wQD+FZn/COJ5UEX9p33lw3LXWw+ViR2bcdw2cjcSwHYnjouNuigDhPifdx6Xpul6g0jqyXuwfOdvMMv8ADnBPvjNeTvrb3l0ZRNwVwPl969A+PX/Il6byR/xNE6f9cZq8Mt5CrjEj9PWvEzDCQqVvaPe1j7PhyNN0HzLW+9/Q7CK6kO8+d1c/wimLPJ9mP77sf4awYLkgNl3+8e9Sxzj7PjzH6HvXmvD2Pp1QjbTz6mu0snlxfvu4/hFJJJJ50f731/hrLMoMcf7x+o70ryDzE/eP370KkNUf06mgJJPNk/e+n8NMR5Pn/e/xH+GqCyjzH/eP270xJR84Lv8AePeq9kXGktPn1LZeT7L/AK39Pelld/k/e/xD+Gs4yf6Pje/5+9EkhO353+8O9aKnqCiktui6l4u/n/63+H096QO/myfvfT+GqBc+b99/u+tNDHzH+d+3en7MrS+3XuXg77JP3vc9qR3f7OP3vYfwiqAJ2SfO3U96GJ8n77dB3qvZiurfLuaMjv8AJ+9/iHYUu9/P/wBb/D6e9Zzk/L87feHejcfN++33fWl7PQbav/wTSR381/3np2pUd/s/+s7H+Gs5WPmP879u9COfI++/Q96TphZdu/XzNNnf7P8A63sP4alLyebH+99f4ayTJ+4Hzv0HepDL+8T53796l0xOCfTt1NUPJ5/+t/h/u+9Phkk+f97/ABH+GsoSgz/6x/u+vvT4pBlv3j/ePeodLQXsrv8A4JpxySfZT+97H+GnmWTy4f33cfwislJB9n/1j9D3oaUCOL94/Ud6l0tTP2Gny7m008gmj/fev8NPW7kW5z5/8H90etYMk4EifvH796rS3LGXiRx8vrQsNcUqEevfudxo+qCF5ZJbkKqueSor2LwTMLjwlZzKciRpXB9cyua+U7iaQhgJXxuP8VfT/wAMf+SbaJk5/cn/ANDavUyzCKjUlUT3R8dxDGmlHlWtziPjrJ5dz4dOeqXX84a8qtLjdewDPWRR+tel/tBSeXN4bPqt1/7RryDTp86naD1mT+Yr9byWnfKb+Uv1PgcTS5q/N6H2bRRRX56esFFFFABRRRQAUUUUAeV/HzH/AAhOnZ6f2on/AKJmrwCNo9/4V7/8fDjwTp3/AGFE/wDRM1fPqSYfoenpXFiVeR9RksuWj8y3FJHz9akSSPyvwPrVWOXrwevpTlm/ddG6HtXG4n0dOurdPuLPmR7U+o9ac0kW9fx9ared8qcN1HalM/zrw3ftU8hssQrdOnQnDx72/D1oR4vm+vvUAn+duG7dqFm+9w3X0o5QVdeXXoSb4/J//X60rvF8v196g87910b8qV5vu/K3X0p8pHtlbpsuhNvj8z8PekDx72/CovO/edG6elIJvnbhu3ajlD2yv037EoePa/1NDNH5X4CoRL8r8Hqe1Bl/ddD0HajlJ9srdNuxO7R/L9aN8fmde1QtL93g9fSjzv3nRunpRyj9sr9PuJlePe34etCvH5X4H1qETfO3Ddu1Czfuvut09KOUFWXl16ExeLyvwHrTi8e9fx9armb910bp6U4zfOvDd+1LlK9svLp0J/Mi838KVHi+b6+9V/O/edD09KFn+9w3X0pcpSrq/T7idZI/J/A+tIZI9qfUetQCb910PQ9qQzfKvDdR2p8gnXVum3YneSPev4+tQu8fmfhTWm+ZeG79qjaX5+h6elVGJjUrp32+4jdkO7619U/DD/kmuh/9cD/6G1fKhfOeD1r6s+GH/JNtD/64H/0Nq7sNuz5XOneMX5nnP7RRxJ4Z+l3/AO0a8Z0xj/atnjk+emMn/aFeyftGHEnhn6Xf/tGvGNKb/ib2X/XeP/0IV+m5LW5cp5f8X6nylRfvD7QnXU5bWP7PLaWtxnMnmRNOmPQYZD+P6Vl6cmpxateTXFtdbNqRr+/BimbI3SKrSMYwMn5RzgH7xIA6Civz06zhpdL8VvZ3YeeUXjXReBobovEN0SDdyyFUVw2Fw3U5VuCdvR7PU7fW9SkuZZ2snOYhO+SWLsflG9gFAIHReMccZreooAKKKKACiqWrx3UulXEdmWE5X5QjbWIzyFbjBIyAcjBPUVzs1pr0mnRRxx3yOhuVjzdruVmYGB3YP86IpKsCWJI6NwaAOa+Pv/Ikadgf8xRP/RM1fPIZg/Tt619WePvB0vjaxsNON4La1iuvPkZYtz5EbqMEnGMsOMfjXE/8M/WOc/8ACQXP/gOv+Nc9WlKUro9nAY6lQpcs273PDEdufl7+tCyN5f3e3rXuY/Z+sR/zMFz/AOA6/wCNH/DP1jjH/CQXP/gOv+NZfV5Hes3oLq/uPDfMbavHcd6Uyncvy/rXuP8Awz9Y8f8AFQXPH/Tuv+NRz/AC2WCR4NdnkmVCURoFAZscAnPFL6vIf9sUe7+48SEp3N8v60LKefl7+te4/wDDP9jnP/CQXP8A4Dr/AI0D9n6xH/MwXP8A4Dr/AI0fV5B/bNHu/uPDPMPldP1pzSNxx39a9x/4Z+scY/4SC5/8B1/xoP7P1if+Zguf/Adf8aPq8hf2xRtu/uPDvMbf93t60CRtzfL+te4/8M/WOc/8JBc/+A6/41HH8ALYyTeZrs6qHAjIhU7l2jk88c5H4UfV5D/tij3f3HiIkba3y9z3oMjeX93t617l/wAM/WPP/FQXPP8A07r/AI0f8M/WOMf8JBc/+A6/40fV5C/tijbd/ceGtI3Hy9/WjzG3/d7ete5H9n6xP/MwXP8A4Dr/AI0f8M/WOc/8JBc/+A6/40fV5D/tijfd/ceHCRtzfL+tIJG8vp29a9uPwAthcoBrs5iKMWfyVyGBGBjPcFvy96k/4Z+scY/4SC5/8B1/xo+ryD+2KPd/ceGmRvL6dvWlMh3L8v617j/wz9Y4x/wkFz/4Dr/jR/wz9Y5B/wCEguf/AAHX/Gj6vIP7Yo939x4d5p3/AHe3rQsp5+Xv617j/wAM/wBjnP8AwkFz/wCA6/41HL8ALZEBh12d2LqCDAo+UsNx69hk/hR9WkH9s0e7+48REp8v7vb1oMjbV+X0717l/wAM/WOMf8JBc/8AgOv+NH/DP1jx/wAVBc8f9O6/40fV5C/tijbd/ceGtI25fl/Wmlzv+729a90/4Z+scg/8JBc/+A6/40f8M/WOc/8ACQXP/gOv+NP6vITzeg+r+48IBJz8vf1r6u+GH/JNtD/64H/0Nq4gfs/WI/5mC5/8B1/xr0rwnoz+HvDNppMkgk+y70V8Y3LvYqSPXaRn3ralTcW7nm5hi6deMVB7HkX7R5w/hj6Xf/tGvFtJb/ic2P8A18R/+hCvqr4g/Di2+IB043GoTWf2Hzdvlxht2/ZnOfTYPzrjrf8AZ5sLa5inj8QXJeJw67rdSMg5Gea+mweZ06OF9jLfX8TxZQblc9noqnPFqbWsa293aR3AP7ySS1Z0YeyiQEfmazLOHVINflnmjnkt2hCNiTCNJuUb1RpWwuNxxhSAMfOSMeAam/RXEajZeIptJlgsodRikW9mdC14C5jKts+bzQcZI6k44+RhxXRWNjPFreoXcjXCwuEjije4aRCcFmcKSQuSwXGB9z0NAGrRRRQAUUUUAcjD4av4or2HbZFJxFu/eN/pDJKXJkGz/lorFW64wPvA8dBo9lJp+mR20uwMrOwSM5SMM5YIvA4UEKOBwOg6VeooAKKKKACsC50a7bxPDqcS2zosisXdysgTYyNGMKfly2/rywxjuN+igDG8P6ZPpy3j3FtZ2z3E3mCOzcmMDGBxsXnAGTzk+gwBs0UUAFFFFAGbrenyajZRxJHBMEmWRoLg4jlA/hY4P16HkCsiPw9qhn8Oyy3lsRpYCvGys+7Ebxl1bI+Zgy8EfLzgnnPU0UAFFFFABUV1E09pNCkhieRGVZF6qSMZH0qWigDjf+EVvX0p7GS3sltzcpP9kiuHSNwIthQkJlRuAkyAckke56uxhlt7C2hnkEs0cSo8gXaGYAAkDtk9qnooAKKKKACuXfQL8apfXEQtNtzFcRmZpGDv5gUpuAHOwptHzdGJBBGD1FFAGL4Y0ifRdMe2n8oEyl1ERBABAH8KIucg9FUfU5J2qKKACiiigDJ1/T7jULW2W1gtZZobuGcNcOU2BJFYlSFY5IBHbr1qtFo14fEKanKtspLiR3Ry0gHk7DAPlGY93z5yOf4e9b9FABRRRQAUUUUAFFFFABRRRQB//9k=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fbnd = (-50 * v * # middle of left and right boundary\n", " conditional(abs(x[1]-0.5)<0.1,1,0) ) * ds( (1,2) )\n", "dbc = [ DirichletBC(space, 1, # not middle of left and right boundary\n", " And( And( BoundaryId(space)<=2,\n", " abs(x[1]-0.5)>0.1 ), abs(x[1]-0.5)<0.3 ) ),\n", " DirichletBC(space, 3, # not middle of left and right boundary\n", " Not( And(BoundaryId(space)<=2,abs(x[1]-0.5)<0.3) ) ), ]\n", "\n", "scheme = solutionScheme( [a == fbnd, *dbc] )\n", "solution = space.interpolate(0, name='u_h')\n", "scheme.solve(target=solution)\n", "solution.plot()" ] }, { "cell_type": "markdown", "id": "eb6bc26c", "metadata": {}, "source": [ "Let check if that solution makes sense..." ] }, { "cell_type": "code", "execution_count": 10, "id": "2a3dba32", "metadata": { "execution": { "iopub.execute_input": "2024-03-10T12:55:04.724064Z", "iopub.status.busy": "2024-03-10T12:55:04.723863Z", "iopub.status.idle": "2024-03-10T12:55:07.545244Z", "shell.execute_reply": "2024-03-10T12:55:07.544128Z" } }, "outputs": [ { "data": { "image/jpeg": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "gridView.hierarchicalGrid.globalRefine(1)\n", "scheme.solve(target=solution)\n", "solution.plot()" ] } ], "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 }