From a52c64c2c8eeb99038e87806cd9373e8e101b9dd Mon Sep 17 00:00:00 2001 From: wolf Date: Thu, 2 May 2002 17:05:38 +0000 Subject: [PATCH] . git-svn-id: https://svn.dealii.org/trunk@5798 0785d39b-7218-0410-832d-ea1e28bc413d --- .../step-14.data/intro.html | 548 ++++++++++++++++++ .../step-14.data/intro/img1.gif | Bin 0 -> 746 bytes .../step-14.data/intro/img10.gif | Bin 0 -> 255 bytes .../step-14.data/intro/img11.gif | Bin 0 -> 259 bytes .../step-14.data/intro/img12.gif | Bin 0 -> 1540 bytes .../step-14.data/intro/img13.gif | Bin 0 -> 1979 bytes .../step-14.data/intro/img14.gif | Bin 0 -> 1217 bytes .../step-14.data/intro/img15.gif | Bin 0 -> 332 bytes .../step-14.data/intro/img16.gif | Bin 0 -> 1735 bytes .../step-14.data/intro/img17.gif | Bin 0 -> 236 bytes .../step-14.data/intro/img18.gif | Bin 0 -> 341 bytes .../step-14.data/intro/img19.gif | Bin 0 -> 356 bytes .../step-14.data/intro/img2.gif | Bin 0 -> 257 bytes .../step-14.data/intro/img20.gif | Bin 0 -> 503 bytes .../step-14.data/intro/img21.gif | Bin 0 -> 497 bytes .../step-14.data/intro/img22.gif | Bin 0 -> 131 bytes .../step-14.data/intro/img23.gif | Bin 0 -> 370 bytes .../step-14.data/intro/img3.gif | Bin 0 -> 223 bytes .../step-14.data/intro/img4.gif | Bin 0 -> 628 bytes .../step-14.data/intro/img5.gif | Bin 0 -> 736 bytes .../step-14.data/intro/img6.gif | Bin 0 -> 192 bytes .../step-14.data/intro/img7.gif | Bin 0 -> 865 bytes .../step-14.data/intro/img8.gif | Bin 0 -> 2428 bytes .../step-14.data/intro/img9.gif | Bin 0 -> 296 bytes 24 files changed, 548 insertions(+) create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img1.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img10.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img11.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img12.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img13.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img14.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img15.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img16.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img17.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img18.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img19.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img2.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img20.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img21.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img22.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img23.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img3.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img4.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img5.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img6.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img7.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img8.gif create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img9.gif diff --git a/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro.html b/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro.html index c59cfdf609..b1e39e70a3 100644 --- a/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro.html +++ b/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro.html @@ -1,2 +1,550 @@

Introduction

+ + +

+The maths +

+ +

+The Heidelberg group of Professor Rolf Rannacher, to which the three main +authors of the deal.II library belonged for the PhD time and partly also +afterwards, has been involved with adaptivity and error estimation for finite +element discretizations since the mid-90ies. The main achievement is the +development of error estimates for arbitrary functionals of the solution, and +of optimal mesh refinement for its computation. + +

+We will not discuss the derivation of these concepts in too great detail, but +will implement the main ideas in the present example program. For a thorough +introduction into the general idea, we refer to the seminal work of Becker and +Rannacher [9,8], and the overview article of the same authors in +Acta Numerica [5]; the first introduces the concept of error +estimation and adaptivity for general functional output for the Laplace +equation, while the second gives many examples of applications of these +concepts to a large number of other, more complicated equations. For +applications to individual types of equations, see also the publications by +Becker [6,7], Kanschat [15,11], Suttmeier +[19,16,17,18], Bangerth [3,1,4,2], and +Hartmann [12,14,13]. + +

+The basic idea is the following: in applications, one is not usually +interested in the solution per se, but rather in certain aspects of it. For +example, in simulations of flow problems, one may want to know the lift or +drag of a body immersed in the fluid; it is this quantity that we want to know +to best accuracy, and whether the rest of the solution of the describing +equations is well resolved is not of primary interest. Likewise, in elasticity +one might want to know about values of the stress at certain points to guess +whether maximal load values of joints are safe, for example. Or, in radiative +transfer problems, mean flux intensities are of interest. + +

+In all the cases just listed, it is the evaluation of a functional J(u) of +the solution which we are interested in, rather than the values of ueverywhere. Since the exact solution u is not available, but only its +numerical approximation uh, it is sensible to ask whether the computed +value J(uh) is within certain limits of the exact value J(u), i.e. we +want to bound the error with respect to this functional, + +J(u)-J(uh). + +

+For simplicity of exposition, we henceforth assume that both the quantity of +interest J, as well as the equation are linear, and we will in particular +show the derivation for the Laplace equation with homogeneous Dirichlet +boundary conditions, although the concept is much more general. For this +general case, we refer to the references listed above. The goal is to obtain +bounds on the error, + +J(e)=J(u)-J(uh). For this, let us denote by z the +solution of a dual problem, defined as follows: +
+\begin{gather}a(\varphi,z) = J(\varphi) \qquad \forall \varphi,
+\end{gather} +
+where + +$a(\cdot,\cdot)$ +is the bilinear form associated with the differential +equation, and the test functions are chosen from the corresponding solution +space. Then, taking as special test function $\varphi=e$ +the error, we have +that +
+\begin{gather}J(e) = a(e,z)
+\end{gather} +
+and we can, by Galerkin orthogonality, rewrite this as +
+\begin{gather}J(e) = a(e,z-\varphi_h)
+\end{gather} +
+for all possible functions $\varphi_h$ +from the discrete test space. + +

+Concretely, for Laplace's equation, the error identity reads +
+\begin{gather}J(e) = (\nabla e, \nabla(z-\varphi_h)).
+\end{gather} +
+For reasons that we will not explain, we do not want to use this formula as +is, but rather split the scalar products into terms on all cells, and +integrate by parts on each of them: +
+\begin{align*}J(e)
+&=
+\sum_K (\nabla (u-u_h), \nabla (z-\varphi_h))_K
+\\
+&=...
+...u-u_h), z-\varphi_h)_K
++ (\partial_n (u-u_h), z-z_h)_{\partial K}.
+\end{align*} +
+Next we use that + +$-\Delta u=f$, +and that + +$\partial_n u$ +is a quantity that is +continuous almost everywhere, so the terms involving + +$\partial_n u$ +on one +cell cancels with that on its neighbor, where the normal vector has the +opposite sign. At the boundary of the domain, where there is no neighbor cell +with which this term could cancel, the weight + +$z-\varphi_h$ +can be chosen as +zero, since z has zero boundary values, and $\varphi_h$ +can be chosen to +have the same. + +

+Thus, we have +
+\begin{align*}J(e)
+&=
+\sum_K (f+u_h), z-\varphi_h)_K
+- (\partial_n u_h, z-\varphi_h)_{\partial K\backslash \partial\Omega}.
+\end{align*} +
+In a final step, note that when taking the normal derivative of uh, we mean +the value of this quantity as taken from this side of the cell (for the usual +Lagrange elements, derivatives are not continuous across edges). We then +rewrite the above formula by exchanging half of the edge integral of cell Kwith the neighbor cell K', to obtain +
+\begin{align*}J(e)
+&=
+\sum_K (f+u_h), z-\varphi_h)_K
+- \frac 12 (\partial_n u...
+...h\vert _{K'},
+z-\varphi_h)_{\partial K\backslash \partial\Omega}.
+\end{align*} +
+Using that for the normal vectors n'=-n holds, we define the jump of the +normal derivative by +
+\begin{gather*}[\partial_n u_h]:= \partial_n u_h\vert _K + \partial_{n'} u_h\vert _{K'}
+=
+\partial_n u_h\vert _K - \partial_n u_h\vert _{K'},
+\end{gather*} +
+and get the final form after setting the discrete function $\varphi_h$, +which +is by now still arbitrary, to the point interpolation of the dual solution, + + +$\varphi_h=I_h z$: +
+\begin{align*}J(e)
+&=
+\sum_K (f+u_h), z-I_h z)_K
+- \frac 12 ([\partial_n u_h],
+z-I_h z)_{\partial K\backslash \partial\Omega}.
+\end{align*} +
+

+With this, we have obtained an exact representation of the error of the finite +element discretization with respect to arbitrary (linear) functionals +$J(\cdot)$. +Its structure is a weighted form of a residual estimator, as both + + +$f+\Delta u_h$ +and + +$[\partial_n u_h]$ +are cell and edge residuals that vanish +on the exact solution, and z-Ih z are weights indicating how important the +residuals on a certain cell is for the evaluation of the given functional. +Furthermore, it is a cell-wise quantity, so we can use it as a mesh refinement +criterion. The question, is: how to evaluate it? After all, the evaluation +requires knowledge of the dual solution z, which carries the information +about the quantity we want to know to best accuracy. + +

+In some, very special cases, this dual solution is known. For example, if the +functional $J(\cdot)$ +is the point evaluation, + +$J(\varphi)=\varphi(x_0)$, +then +the dual solution has to satisfy +
+\begin{gather*}-\Delta z = \delta(x-x_0),
+\end{gather*} +
+with the Dirac delta function on the right hand side, and the dual solution is +the Green's function with respect to the point x0. For simple geometries, +this function is analytically known, and we could insert it into the error +representation formula. + +

+However, we do not want to restrict ourselves to such special cases. Rather, +we will compute the dual solution numerically, and approximate z by some +numerically obtained $\tilde z$. +We note that it is not sufficient to compute +this approximation $\tilde z$ +using the same method as used for the primal +solution uh, since then + +$\tilde z-I_h \tilde z=0$, +and the overall error +estimate would be zero. Rather, the approximation $\tilde z$ +has to be from a +larger space than the primal finite element space. There are various ways to +obtain such an approximation (see the cited literature), and we will choose to +compute it with a higher order finite element space. While this is certainly +not the most efficient way, it is simple since we already have all we need to +do that in place, and it also allows for simple experimenting. For more +efficient methods, again refer to the given literature, in particular +[9,8,5]. + +

+With this, we end the discussion of the mathematical side of this program and +turn to the actual implementation. + + + +

+The software +

+ +

+The step-14 example program builds heavily on the techniques already used in +the step-13 program. Its implementation of the dual weighted residual error +estimator explained above is done by deriving a second class, properly called +DualSolver, from the Solver base class, and having a class +(WeightedResidual) that joins the two again and controls the solution +of the primal and dual problem, and then uses both to compute the error +indicator for mesh refinement. + +

+The program continues the modular concept of the previous example, by +implementing the dual functional, describing quantity of interest, by an +abstract base class, and providing two different functionals which implement +this interface. Adding a different quantity of interest is thus simple. + +

+One of the more fundamental differences is the handling of data. A common case +is that you develop a program that solves a certain equation, and test it with +different right hand sides, different domains, different coefficients and +boundary values, etc. Usually, these have to match, so that exact solutions +are known, or that their combination makes sense at all. + +

+We demonstrate a way how this can be achieved in a simple, yet very flexible +way. We will put everything that belongs to a certain setup into one class, +and provide a little C++ mortar around it, so that entire setups (domains, +coefficients, right hand sides, etc.) can be exchanged by only changing +something in one place. + +

+Going this way a little further, we have also centralized all the other +parameters that describe how the program is to work in one place, such as the +order of the finite element, the maximal number of degrees of freedom, the +evaluation objects that shall be executed on the computed solutions, and so +on. This allows for simpler configuration of the program, and we will show in +a later program how to use a library class that can handle setting these +parameters by reading an input file. The general aim is to reduce the places +within a program where one may have to look when wanting to change some +parameter, as it has turned out in practice that one forgets where they are as +programs grow. Furthermore, putting all options describing what the program +does in a certain run into a file (that can be stored with the results) helps +repeatability of results more than if the various flags were set somewhere in +the program, where their exact values are forgotten after the next change to +this place. + +

+Unfortunately, the program has become rather long. While this admittedly +reduces its usefulness as an example program, we think that it is a very good +starting point for development of a program for other kinds of problems, +involving different equations than the Laplace equation treated here. +Furthermore, it shows everything that we can show you about our way of a +posteriori error estimation, and its structure should make it simple for you +to adjust this method to other problems, other functionals, other geometries, +coefficients, etc. + +

+The author believes that the present program is his masterpiece among the +example programs, regarding the mathematical complexity, as well as the +simplicity to add extensions. If you use this program as a basis for your own +programs, we would kindly like to ask you to state this fact and the name of +the author of the example program, Wolfgang Bangerth, in publications that +arise from that, of your program consists in a considerable part of the +example program. + + +

Bibliography +

+
+

+

1 +
+Wolfgang Bangerth. +
Mesh adaptivity and error control for a finite element approximation + of the elastic wave equation. +
In Alfredo Bermúdez, Dolores Gómez, Christophe Hazard, Patrick + Joly, and Jean E. Roberts, editors, Proceedings of the Fifth + International Conference on Mathematical and Numerical Aspects of Wave + Propagation (Waves2000), Santiago de Compostela, Spain, 2000, pages + 725-729. SIAM, 2000. + +

+

2 +
+Wolfgang Bangerth. +
Adaptive Finite Element Methods for the Identification of + Distributed Coefficient in Partial Differential Equations. +
PhD thesis, University of Heidelberg, 2002. + +

+

3 +
+Wolfgang Bangerth and Rolf Rannacher. +
Finite element approximation of the acoustic wave equation: Error + control and mesh adaptation. +
East-West J. Numer. Math., 7(4):263-282, 1999. + +

+

4 +
+Wolfgang Bangerth and Rolf Rannacher. +
Adaptive finite element techniques for the acoustic wave equation. +
J. Comput. Acoustics, 9(2):575-591, 2001. + +

+

5 +
+R. Becker and R. Rannacher. +
An optimal control approach to error estimation and mesh adaptation + in finite element methods. +
Acta Numerica, 10:1-102, 2001. + +

+

6 +
+Roland Becker. +
An Adaptive Finite Element Method for the Incompressible + Navier-Stokes Equations on Time-dependent Domains. +
Dissertation, Universität Heidelberg, 1995. + +

+

7 +
+Roland Becker. +
Weighted error estimators for finite element approximations of the + incompressible Navier-Stokes equations. +
Preprint 98-20, SFB 359, Universität Heidelberg, 1998. + +

+

8 +
+Roland Becker and Rolf Rannacher. +
A feed-back approach to error control in finite element methods: + Basic analysis and examples. +
East-West J. Numer. Math., 4:237-264, 1996. + +

+

9 +
+Roland Becker and Rolf Rannacher. +
Weighted a posteriori error control in FE methods. +
In et al. H. G. Bock, editor, ENUMATH 95, pages 621-637, + Paris, September 1998. World Scientific Publ., Singapure. +
in [10]. + +

+

10 +
+Hans Georg Bock, Franco Brezzi, Roland Glowinsky, Guido Kanschat, Yuri A. + Kuznetsov, Jacques Périaux, and Rolf Rannacher, editors. +
ENUMATH 97, Proceedings of the 2nd European Conference on + Numerical Mathematics and Advanced Applications, Singapore, 1998. World + Scientific. + +

+

11 +
+Christian Führer and Guido Kanschat. +
A posteriori error control in radiative transfer. +
Computing, 58(4):317-334, 1997. + +

+

12 +
+Ralf Hartmann and Paul Houston. +
Adaptive discontinuous Galerkin finite element methods for + nonlinear hyperbolic conservation laws. +
Preprint 2001-20, (SFB 359), IWR Heidelberg, Mai 2001. +
submitted. + +

+

13 +
+Ralf Hartmann and Paul Houston. +
Adaptive discontinuous Galerkin finite element methods for the + compressible Euler equations. +
Preprint 2001-42, (SFB 359), IWR Heidelberg, Dez 2001. +
submitted. + +

+

14 +
+Paul Houston and Ralf Hartmann. +
Goal-oriented a posteriori error estimation for compressible fluid + flows. +
In Proceedings of ENUMATH 2001, 2001. +
submitted. + +

+

15 +
+Guido Kanschat. +
Parallel and Adaptive Galerkin Methods for Radiative Transfer + Problems. +
Dissertation, Universität Heidelberg, 1996. + +

+

16 +
+Rolf Rannacher and Franz-Theo Suttmeier. +
A feed-back approach to error control in finite element methods: + Application to linear elasticity. +
Comp. Mech., 19(5):434-446, 1997. + +

+

17 +
+Rolf Rannacher and Franz-Theo Suttmeier. +
A posteriori error control in finite element methods via duality + techniques: Application to perfect plasticity. +
Comp. Mech., 21(2):123-133, 1998. + +

+

18 +
+Rolf Rannacher and Franz-Theo Suttmeier. +
A posteriori error control and mesh adaptation for finite element + models in elasticity and elasto-plasticity. +
Comput. Methods Appl. Mech. Engrg., pages 333-361, 1999. + +

+

19 +
+Franz-Theo Suttmeier. +
Adaptive Finite Element Approximation of Problems in + Elasto-Plasticity Theory. +
Dissertation, Universität Heidelberg, 1996. +
\ No newline at end of file diff --git a/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img1.gif b/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img1.gif new file mode 100644 index 0000000000000000000000000000000000000000..d479f14ba8ac5c45335759f8a3081e48441fc523 GIT binary patch literal 746 zcmV%MR-&oo$Sr&Iuh8uiE;vsZVbQ$68k_P zx8AgR&2EFbl!cW7&j_Y$#~_UWpptkhdTtL41cw9$PK1n&j*l#NR1$I-g8>8>0(%k) z1{nFwQQ7tn1q`~NOJKov8Yis9y3&`urq{$YZDAK=mliNfOu`5MxC1BDmSSc z3RFExw(Kyd8@!It>gAg<1^{4EV0#Q}nwk^@tTfBFZxp&oX1WF8)5`#^Z2{=~7veA> z0?-QiolN;f;Rj1^Auh0>rxgNtwT$iKKoH&@Hvy&DL)t|(&%+A_&j>Sf8rt{2r047k+(e7O0()Q?w5 zw`$6#I%LLAssKj9KZN@F>CgGZ34>Mw-I6fLDAh&3E2|5~X*M5eyuV z00PN=I22ToehYbz_sbwQkI>{IgVoX2)jS{E=LI4Sv c>Bc-rjF|zNYX0IT4qMg<44WLJDM17PJ0@f*PXGV_ literal 0 HcmV?d00001 diff --git a/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img10.gif b/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img10.gif new file mode 100644 index 0000000000000000000000000000000000000000..a4f588abc72c90e553ecd1a4caa6ae73bebc7004 GIT binary patch literal 255 zcmZ?wbhEHblw*)(c+3C-D^{$SGiT0(2@_gcS}H0ka&mGK5)wi}LOeV?Y;0@{3=C9M zR3s!MczAd=Z{DoIc^6iQqy_wN>0NmwaFPnYMDvE*4B;N;#~q3y zJQ&) zhDIg^9TCrPRz60K1v=bm{49|(xqHMKL^u;zrL%EJlL2#WI0Rg~Bty-_xSRr&NAim)5p`tw5 z1fc-HRuKelgtxVEAXL^5#W&0E`~QG}f`di|4h#ZyMu`&$01kFB1WOhJ1echY7DW#N zoOu#X7zSexFF$1@6AC5;4k%m`1FQ^>Y(4@D0J{za6AZpVgHjd*G!F|2r+@^$gwN2? J($jnq06UP9T5|vZ literal 0 HcmV?d00001 diff --git a/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img12.gif b/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img12.gif new file mode 100644 index 0000000000000000000000000000000000000000..654eaa2b09564207ba2ab5b93979c88bc0cb60c0 GIT binary patch literal 1540 zcmV+f2K)I(Nk%w1VR8W?0OJ4v0001}sHmKroRE-^goK26czA4VY+ztuR8&+*NJu<9 zJTNdYBqSsl7#Iu;470PdA^8LW000jFEC2ui0CE8$06+x(@X1N5y*Sqa`ubqljliLu zXsWJk>%MR-&vZ>M%tYi=u_TMaM1inP5S?ObXF(_&2!n>8#5fa@LN!A?85|73fdCU9 z0S@x1YqT&a21bFfPyjO5>{j&+k7H&MNNFf+ZHEL3Ckaw*2n+!&i4p-02LJ*o0ctD+ z4H7?%4~!KFnTHYrcW$2#p%bJJ0!XH#01BrvlNy8ubtj&nv7@=Ds;t7Iqm2g(5(EyB z4-F;{2(6`=&Ck&f1zH2L2;ZpX=I7|?>g(+7?(Y}Wg4po&_V@Vt?ggV~xnh8lD!8%~Ju0Y*szga$m^>p*BrXL+ z9_9KO^v=+!UY5piDriV1qIoJHP!hnvfB`utKzVQgL04~E>fX)!GuKs)76LR#K%lYX z#{>*K>Oc>%<;$2eTbQM}#@@bvJBuDox^(9N{T%EBM$@$G*RUo26ov6b!#0)BtWHte z0)U!svc9<8nK-)M5)3Gib}e?(%K8fYK63Mc0|kv2aN2rkCYsO}xK~)vbCcr(j2#y< zAi$^ud7zkDt3Gk%0LYIm7;Hae0?hE$CH`R00N7n{AAXHBQJn)v{Zx$w?7271ga4^O zg@FhrSiybB6M8sAC5JZ~Nzh|L0B}N}0I3zzf&dGQ(Aoq`7SN=1t0~}2B@fCVfRU^2mxKro=B5MB-uB}2GWX=aukY$+0*UxN7_Knt`&&<`Y8aDXTc5ZVd@q8Nb9 z6INc(Ql%^<0G%(NTUkF6nI+0x!z*1u^TuRd5FiDq1>ID?iz5wEUQ?nay|eYMdTOZ za8^}fFNGlAcpboN(*-~noK*n_NSDw_KFEh+tJ)p#V+;tK;sgO~HXU9SCno!|3O7Ib zQ^-gw?IF`3LXGv*R9lVRHd=2D!zQR8k&Adgkyt=6L>eL8%yI$TCaVD;3le$A?#9w| zhb@k2-xrJ+x#5Ou%a%3%rw9;IPLD5G1ZWs&LHS$-izgjI1aX{`5RG%Lg5;Brj)3J) zWsZgG0H)GFI6mYk0fC&{E5PpFoFw5W00ZERDqGa~d&%n#A>7=Mz8>foO9&Ut*_=JH zaLfr+;i8Du7to;#3?RT39in)D%tci|EA0%QqZ2_ar!EIjTtbv_pJH?h6#{Ajavo^3 z6KrBsr*KnP7&1R^a6$l)*aW{&KnBLNQSUnE-sm#1czv<|JW!Pc_~k5+4>KUr-dB3?`-ms#ru7 z6+_1<0yV+!`T8bAgzU5uoFA18pC*)1Svw8#XuqT-Vx zRI(X6$w>+L(t#}2V;y&KS)5!S|;I@xXh(4cgf3M`tp~+45lzs q2*m;k^O(qV&Q&Uy%w{@MG-M>xGp9*Sj=-!Io8(wEw+XHY0027!PJ$Ky literal 0 HcmV?d00001 diff --git a/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img13.gif b/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img13.gif new file mode 100644 index 0000000000000000000000000000000000000000..214a261c21ed098112024f7e3bd1766f7da3423c GIT binary patch literal 1979 zcmV;s2SoTsNk%w1Vcr2L0OJ4v0001}sHmKroRE-^goK26czA4VY+ztuR8&+*NJu<9 zJTNdYBqSsl7#Iu;470PdA^8LW000jFEC2ui0Nw#906+x(@X1N5y*TU5yZ>M)j-)6c zWvZ@h>%MR-cL4)9Lq|Bp?Ek>jVi7DFkH};SkeDEd69evXq99O|z;Mf57&rpQEx>tR z5>O2Rdnp_W0Eq%x@M5kRE#bguk`MwC2nu_2b{2RNYl&B1K4wu<4+H=V7;bQKhK>_! z6pL7mYHSu#Ig^!nj+k)|a}sr&ilm@|2wwrR7J7Vse}NB!g%7cJYy}B}WRq8+w+~tt z$jTDA$q5F_APPMh18FM*k{kxUt~~-wq%yz(rxM>3ZaxML813)zK?4k@3#}BmX~@?B zU#E3O2!b#;Ys5Ty_AD@j2W}F95oriqRKl^N$B+Ig1^^g2(h|s%C{wCjN#O*OKnVaS z0LHSW&6_xL>fFh*r_Uiig9_ytfJvu{XLO|qAZDBnqz@J#aDZ?^0GchZ;nWI}0JwU< zlC|)(6l20bpzz8`G2;r4B^ZdCU~rMZiU2Gt;2^*)02db==yZ5N;>GC>QW(9U zv{rmXwOK!^_qq+V72L34E2Ks_koger+N zQWss2L=trr0vKV3Acpur0%ln?UkjtjoOrg!ZlPYwq zCO}X_1=YVAPPSxfy2Q-oWYyKT#WH-b!~h>$M;H*a3a8wjDX1% z6!34r1Pn~D!4=F*3d0gBLfiv3<2+&@MNdLp0Y2t%0@ODJ&_DwD;b(wiBPlK7PCd)P zdZusGdfAnGE zj5qGM3yVK4`A{(dz;`G92K-~!vp z2vorU4fJ+|S2*#GlI?OBu*T*ppxgqy!_Q!RPrkE62`3eAfcpy;62C$8LBp;a^`oCO zJxJI;V8DqtpILli<1bUbn`rj*{YneiMF8=2paG=3EX;oJ$<`CTHU=mggdcp=0sK`! z3Jeec&0jgDgOx0wMST z1v=pdECde;>Jx)q2?87rAcR*Arl%IbAx>6+%8qt%p95gcK3Fk;02JT{l0`)+H%t>k z(v>v`W@m|xnZW)bHVBTm!Gmt3t0D^lK*lnX(Fr*81ts{VL?(`mI$IQ(1iW|`FlM2M zN7M*b9H2(pU7|coY$6b6o&sSxTk&h(Q%mu2KVJ5)BES z#fF){qL=^KSAirbgE}oq8w{9<0u+|OPB2NAl|kkr6=k6IG2;$ndq6a)FwHAe6KUGW zWgN0;!f$pGHu!6R&qSjfSaN`vjtK;7+UW!=EYX~;SY}ng@lUSZC0|VffVo8Y7b|Ha zZpfI?1O9+G0y=si9sB7a01FcaBgW5|7MzR)B#}WF%}oF{Z~&{oFuNN7DWs^;);sj( zfXlrAqmIGaR8G+}gi@iVXozMYU@AXS(A1{e1dUF|(bFe&G^il$K}>;j)C`n#0w+!B zN?BS)9!!9!BhA5R8m648iU|s1eWN1m!T=a4K&4uOWCq@{01WvGmgR-p!JNUsvF;BlBOyLUK NBxx4Tu!18106Su0JlFsL literal 0 HcmV?d00001 diff --git a/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img14.gif b/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img14.gif new file mode 100644 index 0000000000000000000000000000000000000000..6a7f083fec35fb69ffe49c276c5ac46a2456a2c1 GIT binary patch literal 1217 zcmV;y1U~ymNk%w1VO;?b0OJ4v0001}sHmKroRE-^goK26czA4VY+ztuR8&+*NJu<9 zJTNdYBqSsl7#Iu;470PdA^8LW000jFEC2ui09^qP06+x(khJycE2!AbyRQgCePn52 znyGRGvc4q>&s9s`pNy0CKI=Y~%V#S9QV#<_Knffm0sx`nWNrwf;OSXWT0c%rbo!_Y zHxAbU5%2^Ma71DeM+`Pbr1z6JSi(?Je@kZ;X%A~{7JXWI7JFb%V^oBN6^DsAb#;Dt zTuGH~l7eNSHA9zbY#WT0PzDDA2mo3ZShXDju(Gtc4?R1;B)YM)zOKh6#JtDC$s5bY zxXv`dKo5)s3j1g~C+;AdN9njK<%TB*gFV758tcH3Z~fN>pEn7~6Oa!KKrG#F6l0(X|6C!Zyx$wQQavP3AJBpiA{ zl!_kHsGX2*ASnh{x@p>=g?_MUpPu?PgadmDmfl+eD3Gc~(zzC-52)G#z^bgeS^=z} zy@!ng6%3#N85<1L5&;J!aO^v1{-lZ;t`9Y2K&!8&*XxeI20QEtVeU|?sy|V?t8dq0 zn*gxzY}>&A%eLFWx6g*F>jS*HHq*J<5?esG7|pUA0}8Z?5CdO`cK|J7;U?*ECZtu_ zT8sH>0l-iwFmS;I9-PE|3j;F-Ip94daRmSi3p<8_S6$2&E!+#e4^%)!VH zlx*?I7`LHu!fDL=9?ZDltnQ!0*V|n1BQSOa!1X>RqJ8xNS)1K9*K>Rgw%js$R>s{9>D>+A zY(oLK*8vYMcHwm+u7%=q6)^sQ){ny-_S~pc4sBUdTL*2RMXHlmop?adM zC*ZmZyd=Ox0sur_!az5~o;teV)qXn^v*?aZ?|u&@{Omj!&tmSoGw(d=(EBAlM$|9w fy9c^UFsm;ij6Wj|m7YJR`s}CAe#kf|5&-}^dY&AV literal 0 HcmV?d00001 diff --git a/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img15.gif b/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img15.gif new file mode 100644 index 0000000000000000000000000000000000000000..c941877565a643288172cad2e3ee04370258f00c GIT binary patch literal 332 zcmV-S0ki%`Nk%w1VM72N0OJ4v0001}sHmKroRE-^goK26czA4VY+ztuR8&+*NJu<9 zJTNdYBqSsl7#Iu;470PdA^8LW000jFEC2ui07C#B06+x!@X1N5y*TSl#hD1;5L}5F z0I3-cs;jK6u0aVhuSEd>i9!gYRs;u11%(+}UBiYT009!ehFZJ~XA?|L zqXJm9qi_PY6V?|6&lL;^(FDK`2n+$)aIqBU>9U3!4Ij>$NU@^Dix}%f002AEes(AT literal 0 HcmV?d00001 diff --git a/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img16.gif b/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img16.gif new file mode 100644 index 0000000000000000000000000000000000000000..77f06705a84f05becfad9d178abe031eb354c2d0 GIT binary patch literal 1735 zcmV;&1~~agNk%w1VUPhS0OJ4v0001}sHmKroRE-^goK26czA4VY+ztuR8&+*NJu<9 zJTNdYBqSsl7#Iu;470PdA^8LW000jFEC2ui0FVJG06+x(@X1N5y*TU5yZ>M)j%4`= zh^ek@>%MRoFn}|3gj2+P@BfR%Z%8b{0Er1gI5F5xDP?pL2wJZT14rPf1vtw~f~g@) zErmk?AW<+2*$d)qsS*y1qzM7|KHypuc6fRca};KW4|9P$VH0LePY(nD3>ax^ZEtai zWEX>ZDtvx`bqjZ*QWFIU2nv3QQH&2&Xs)ml0S2xK27Vw4I~fC?Dg%=oycEJGNOUm* zx;GNV6=_B%(;L=A0}Rv)Y!%Iv&=u4V=^E0t=>%lhM(qLX7~PNrBV+{n+5Z3o3IsR+ zfI)+o1}a?0um}ny(h>kr(5|7yix@L%+{m$`$87#VK8oBJ00|^xVj8Uo&?OlTln)jl zaBxmnMHapQN*s}sAv{QD3^Zuxs>RQ2J9(;92tbGc0A~s$RM)3kp$7_TmQd9}ss$%F zv{GuY3B@7?0iKeZ@(S1=23iUzFp<;{TD20S#+^GMD+L2h6F4a16{v(tr5pr609fCG z1CYpKU0@c$-Eox2w56c;4_^{>&!)xvb}zFi4Tdd{40wUy3kMpdmatj^+$NG2<+2!{ zpYPwmfx8_^yol@K$dmtgO2Du3=g^}|pH96xiICQ_M=xj)3zmZiA!{F>0XzBgbZ-jU z%>wX555p!TP=CT7kpS#J;veo~i30~RiT)uC0Sy>a00Qx?U>Qsr?Z*)*561LVQ&82qn)Hpx%uxaFJjJ zJWc?>kGjk;#~4N;U{6UqFsBOu69#!fD^n(!q<9rPHAP7iQdvQeG(B(t0{rD=rIA>A zz@vw2#0S`fPc{jFKU`LDlm=d2bLJdrPM{?fP-1eGAx!KtzyKvp5ayU}9VmzahbCG{ zMNU3?fIV%fGynnWA@hP|Won?nQqFaVVQLIe$LV#PZ zPSAjO2;{cH0j?1_s$r}kNI?RS{z+9pI;g6%sx+-0_DKP;&bsRn)GCrItrWaU>|u&Y z@T(!h$|udZl$2Y*fj6M=Zbtz$kU((28DN<~>7u9Iwpdl=??+}0Z1BMrFlGpx2sf-y z0(=difPD^EZ1Kg}xKWD(ePZnK#~_C+a>5D#IP%FTr;LGlD!1(N$1J}rvjq|X(6OBc zh%?p98pX`>&)oHU&!9gy3a{JIg-5v1V(A{D`V8Cv{y7CSd2V@>XV;h)`x_y=hv^la8 z7{CCw3n)O^mkNk37TbS0aC+({u->}xulF?~2EE15rV^hxFflw7OS!@tGg4rEfOY(K zz`efRWPkv@n~P;9Uv^FV1e@Zky1AdA|9ScqKwQnl7qpMB1>k`PJt9+ZKp`q|GsBTj z59gxIQh+xTsJ5NU0>4+R*Q+asW2Og(f6ig$7nsI}3|;T$AQ9GfD7MSfEA^2ySG#z8M?EN!~{SC2QaL4TWiWN8d;c0 zR`Mn;(HKh#_<}*As4w@L2{qUis0eXv42!Jd4hoZ*zRZbz6!|0xa@K_fY;u-U@nj7^ zc>}=sN<5`7+8@ZlHN@p(kopwF z05Yg_r5$a7vZ}MR{`s_j%R`!ppd!?w8WlN3IjT~Zsu9~6sc%d@nJf&Uu&7$~szq27 dnXt;$uEwA>ukor_$7+HECXTFVHCO}y06W07*hl~X literal 0 HcmV?d00001 diff --git a/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img17.gif b/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img17.gif new file mode 100644 index 0000000000000000000000000000000000000000..27aabd116242542e94ef115ef9280d1237a64549 GIT binary patch literal 236 zcmZ?wbhEHblw*)*c+3C-D^{$SGiT0(2@_gcS}H0ka&mGK5)wi}LOeV?Y;0@{3=C9M zR3s!MczAd=Z{Do$h$r+vVgq8UN8CmS_cs2?KxAb=%N;OE` zb^pT-n|TQgdnSKz)lz0y!>^;qYsj4<#L_OACdtZ>C6z11Yi&QtK7gOcAac4GN4gLX jYv)X1`KjV69xPmvpl z9Ux8~`V=J>I0qnbPe9;2MKqE{V$~}ekCj0~h_nz?%}f9=FvTz@3j+Fh1|GGCr~p#9 zqUf}G&2GCTfWn4^BW;Q7#g(EX_zwwwem6;H4|fs<0%j5o2NMf;7YGY=dldoznwy+) z4+1m^3k(W33~~hw7Xv$QuCK7Mva_xNt!oEgu6iI+gd870Z(ehk7z+Y3!fm2fz=X;Z z1qTHH5(^biVdC{o ziqN!r&2GDmR*9kEORU}!baiEL+#Un~3>XCm1tbp&R0RtL8&qc3)e>_G$0jqj=va__cwzs%yai0bpgS4@z69x*D4+x&K!GL!LH7E** z7YGUoEU6dEaSqmb0Gt*E0@V@?;17+DD#rlE4-5)m3PMsolMe?Zjx!F_-GHZq?z#^De9?@j5HebLq&bAP+kM2BoqthY-Gp`4%5F z42(MFx+SjDTb&Uk|TNIy47dc&ritYb2}%3>6FrcbuSw zSk2E1n#vOfPYZK$e7O_SED8k_1`QVjomS@>LdKLf{pddjkECYaz;)=m$nxw7ZkSGuoqffIC1ajN3g*uoB zl;X6{QC4@nj}OaD0nM$3385??&?S2heR=>A3s@2ZRZM1_w*Eh+zr|PA>qU1q^uw z3Xuk&2-6bJ69$C~Jp!j`+`r#FwzgKs*LRrhCknLgCj*oZ1D6v8P+PjZ@)`q9{m2Ea$ zK?0(t%?Tm1V65|yPJ>MV5TSbjw7`c7^laX&Q1s{n1_cB(STfW{MGF^Q4U@ny6)RT$ z5R?=YqzJwVV!1|2OSIOdp)bUo0YJB|-2ww@FaY47m>LEM3M`m&hQ)yfFB%-^;^uJT n#Ujp~WkX|N#LJbiVIG0Nz~Bj*M)=*_PSj}9o)WNQ5di=@j#|1| literal 0 HcmV?d00001 diff --git a/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img22.gif b/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img22.gif new file mode 100644 index 0000000000000000000000000000000000000000..00cdfb2a960ad45b36c246bfaa060695e49f2d61 GIT binary patch literal 131 zcmZ?wbhEHb!3D77AI2M3_Gd&;yA1EO9VB>?1ABBi8ka8EP0NjMh QoJq5$&6_xL28jRwJMZ3!>Hq)$ literal 0 HcmV?d00001 diff --git a/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img3.gif b/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img3.gif new file mode 100644 index 0000000000000000000000000000000000000000..5fc88ec3eb6fceec2b316cf73f73a744d216554f GIT binary patch literal 223 zcmZ?wbhEHb)MAifc+3C-D^{$SGiT0(2@_gcS}H0ka&mGK5)wi}LOeV?Y;0@{3=C9M zR3s!MczAd=Z{DoYX{SE!E<%vclAh zDJ8l0E7rXiYvwUHq;zyK4+G;#g}@xE`4==c94<7R%i_QkxFSr7-RX+QhraVKwp5+X zTg=+d$@D((a=GFSruTGUE- literal 0 HcmV?d00001 diff --git a/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img4.gif b/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img4.gif new file mode 100644 index 0000000000000000000000000000000000000000..c53c7a2bb16f0d3f0743daaa09b844d723b09e8e GIT binary patch literal 628 zcmV-)0*n1eNk%w1VM75B0OJ4v0001}sHmKroRE-^goK26czA4VY+ztuR8&+*NJu<9 zJTNdYBqSsl7#Iu;470PdA^8LW000jFEC2ui07C%~06+x(@X1MM5_JX@vj3oWg`~7~ zWvZ@h>%MR-&)Mjm83JGuvQPv-0#V@gez5|8AaNWfzDaOcBoz{#C~eE_dcRyuKor1Q9(;6K(+p2X7e)1{DJYa{~@E0giEq5{eX!a|KKi z0v(em6OenQrl+VXm?WeX0YXw|API|h1hO-Kj0)Rcx z8Vl6b*0mG`4j4L6vdwSL9{~#l2Mkyg2-3do?(ZvO6l?7306+BE44G*X1L+SGuyb($ zK%fWd3heXO@4>$Z2sr3lR6s!mf$%bF+$cdI1q1#J)*)y>0V4?o!axkb6$T}U0>(0W^C zpu-)t#@J3_NJ4Ljg;gszJQ+c7BkLG&LdVB3LX>tz)seyAz!1*0)`+ruMPlQ@0~840 zxvj$X%MR-&$KjpYK8!qge(*SAb}|Ke85-%K#({Nlix&0G?EI5PXWR0a-oy~!q*dI z1H6y4#%{ac@b)^BNFyt|mB3DN4B`)aM}TpDgolWUiY|f^2L%!UNlpU+1_yr`3I-Je z1cL((Gy$K1nG%~}r4t2B5&|8hD>DrTt`lhrTw$V%zQ4eUsS{!bpuH4mSrP=3APJm= z&A~I!)YsVAEz>rf0{~;)8ADOd4+e$;;SakN0SoZ)^3kjg7(3+@=zr=T?*s=JEQ5id z2Lc5EffQIk56?Pn5F=)r!%P8yhU|6#+4HafgE0O8Rty-ZOU3~JK2R?6NGzm;k?c57 z@W`ov0vQYthTxhj2%Ft9?!rMh)A=SKC!m}J0irLdYu~Qv)lF0q7^>0ByZlk+ft*wL zfnb@__0CSJ!TwI3{f79+^6)uHzKKgp#gDKPJ91%AfO85A6a{wXH7L;>OMtP%azC{q zPz8I;@_=br$VABu3>-j&bJ1jI!BnPoV9_lDC?LRF_Q)W>0&v+z6$6kYML}>5_9&5w zHY9Kz6FZLO0Ri8IV2w0MesDt^LRCP(Vu3ZZq>oragk%X*Bjvj5)&j$}EB zW~xqG$8u{d&vb3yc!g$dh5(oeVlg2A5{N=jGQ>4A4Tpr`dKi&PQ*>H=JSm05r+_G% z%ZJJU!3+w-0ifs0B#RZo};9trXZaZ3Pzy=0R{(;9ts8&1BJFyIkX=z8Ml%T1q2|z6}%4u9RUQEGz|yD z6mkk>69c-}*{9sy-n+FV*gQuR1a=?^;W+0L3;<_m4KeTWX7dv5-y!P~>iYl#3jCmt z!Ve4mB$N|^?tuYN0@yH-NFl(2ix@K|^wMxjgDUBQBwn@T(L{4EosD`6JQz#CMJ$UM308EZM_IPEl1$dldjNpyLe%gKZQ@GXpUn z1NbTg2_S20$HIFvYu=Uk17;oXkgDpOp&;k208*=74M3-7*09$(_G#LR;mx>nkC@FO zTkU+URk^+v`S7{|@G=+(Oagh}TM_P-*6=i3&=&-l z(H$T{#5K%I87xvo0*KLBg(x=2=>e00(HVv>3J~%EpK(I9l>!31<3KPm2+$n>0d~f~ zV0}@5rv#!Xu&9}w?xQCK3p9Y#I+qgkB0qN!aB2-ZsGzDRb5%e9KIX0S4?>;hD$uJW r+**P~j6M)R0%6qvtPRDQaI78#5s)^*uw6i_>$CtZ%LB0zL;wIg-N#l) literal 0 HcmV?d00001 diff --git a/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img8.gif b/deal.II/doc/tutorial/chapter-2.step-by-step/step-14.data/intro/img8.gif new file mode 100644 index 0000000000000000000000000000000000000000..8dfe7759c6c98e833d5dca529e7bfa3632a750ba GIT binary patch literal 2428 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