From 2ee6e5462a30b525b8d826ff3a9c4ae77ec478c5 Mon Sep 17 00:00:00 2001 From: Christophe Prud'homme Date: Mon, 27 Nov 2023 17:05:54 +0100 Subject: [PATCH] add up to ps3 --- docs/modules/ROOT/images/fin.png | Bin 0 -> 66507 bytes docs/modules/ROOT/nav.adoc | 4 + .../ROOT/pages/homework/problem-set-1.adoc | 293 ++++++++++++++++++ .../ROOT/pages/homework/problem-set-2.adoc | 106 +++++++ .../ROOT/pages/homework/problem-set-3.adoc | 145 +++++++++ 5 files changed, 548 insertions(+) create mode 100644 docs/modules/ROOT/images/fin.png create mode 100644 docs/modules/ROOT/pages/homework/problem-set-1.adoc create mode 100644 docs/modules/ROOT/pages/homework/problem-set-2.adoc create mode 100644 docs/modules/ROOT/pages/homework/problem-set-3.adoc diff --git a/docs/modules/ROOT/images/fin.png b/docs/modules/ROOT/images/fin.png new file mode 100644 index 0000000000000000000000000000000000000000..cd7e42d572a6fa68835f8a9f54b220586c2d92fe GIT binary patch literal 66507 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 dD>{B~yuQ literal 0 HcmV?d00001 diff --git a/docs/modules/ROOT/nav.adoc b/docs/modules/ROOT/nav.adoc index 3b71977..4fad702 100644 --- a/docs/modules/ROOT/nav.adoc +++ b/docs/modules/ROOT/nav.adoc @@ -1,6 +1,10 @@ * xref:index.adoc[Introduction] * xref:quickstart.adoc[] * xref:overview.adoc[] +* Homework +** xref:homework/problem-set-1.adoc[Homework 1] +** xref:homework/problem-set-2.adoc[Homework 2] +** xref:homework/problem-set-3.adoc[Homework 3] * Setting up the development Environment ** xref:env/cmake.adoc[] ** xref:env/antora.adoc[] diff --git a/docs/modules/ROOT/pages/homework/problem-set-1.adoc b/docs/modules/ROOT/pages/homework/problem-set-1.adoc new file mode 100644 index 0000000..f42bdd0 --- /dev/null +++ b/docs/modules/ROOT/pages/homework/problem-set-1.adoc @@ -0,0 +1,293 @@ += Problem Set 1: RB for Linear Affine Elliptic Problems +:page-jupyter: true +C. Prud’homme +2023-11-27 +:stem: latexmath + +We consider the problem of designing a thermal fin to effectively remove heat from a surface. The two-dimensional fin, shown in <>, consists of a vertical central "`post`" and four horizontal "`subfins`"; the fin conducts heat from a prescribed uniform flux "`source`" at the root, latexmath:[\Gamma_{\mathrm{root}}] , through the large-surface-area subfins to surrounding flowing air. The fin is characterized by a five-component parameter vector, or "`input,`" latexmath:[\mu_ += (\mu_1 , \mu_2, \ldots, \mu_5 )],where latexmath:[\mu_i = k^i , i = 1, \ldots +, 4], and latexmath:[\mu_5 = \mathrm{Bi}]; latexmath:[\mu] may take on any value in a specified design set latexmath:[D \subset \mathbb{R}^5]. + +.Thermal fin +[#fig:1] +image::fin.png[image] + +Here latexmath:[k^i] is the thermal conductivity of the ith subfin (normalized relative to the post conductivity latexmath:[k^0 \equiv 1]); and latexmath:[\mathrm{Bi}] is the Biot number, a nondimensional heat transfer coefficient reflecting convective transport to the air at the fin surfaces (larger latexmath:[\mathrm{Bi}] means better heat transfer). For example, suppose we choose a thermal fin with latexmath:[k^1 = 0.4, k^2 = 0.6, k^3 = 0.8, k^4 = 1.2], and latexmath:[\mathrm{Bi} = 0.1]; for this particular configuration latexmath:[\mu = \{0.4, 0.6, 0.8, 1.2, 0.1\}], which corresponds to a single point in the set of all possible configurations D (the parameter or design set). The post is of width unity and height four; the subfins are of fixed thickness latexmath:[t = 0.25] and length latexmath:[L = 2.5]. + +We are interested in the design of this thermal fin, and we thus need to look at certain outputs or cost-functionals of the temperature as a function of latexmath:[\mu]. We choose for our output latexmath:[T_{\mathrm{root}}], the average steady-state temperature of the fin root normalized by the prescribed heat flux into the fin root. The particular output chosen relates directly to the cooling efficiency of the fin — lower values of latexmath:[T_{\mathrm{root}}] imply better thermal performance. The steady–state temperature distribution within the fin, latexmath:[u(\mu)], is governed by the elliptic partial differential equation + +[latexmath] +++++ +\label{eq:1} +-k^i \Delta u^i = 0 \text{ in } \Omega^i , i = 0, \ldots, 4, +++++ + +where latexmath:[\Delta] is the Laplacian operator, and latexmath:[u_i] refers to the restriction of latexmath:[u \text{ to } \Omega^i] . Here latexmath:[\Omega^i] is the region of the fin with conductivity latexmath:[k^i , i = 0,\ldots, 4: \Omega^0] is thus the central post, and latexmath:[\Omega^i , i = 1,\ldots, 4], corresponds to the four subfins. The entire fin domain is denoted latexmath:[\Omega (\bar{\Omega} = \cup_{i=0}^4 \bar{\Omega}^i )]; the boundary latexmath:[\Omega] is denoted latexmath:[\Gamma]. We must also ensure continuity of temperature and heat flux at the conductivity– discontinuity interfaces latexmath:[\Gamma^i_{int} \equiv \partial\Omega^0 \cap \partial\Omega^i , i = 1,\ldots, 4], where latexmath:[\partial\Omega^i] denotes the boundary of latexmath:[\Omega^i], we have on latexmath:[\Gamma^i_{int} i = 1,\ldots, 4] : + +[latexmath] +++++ +\begin{aligned} + u^0 &= u^i \\ + -(\nabla u^0 \cdot n^i ) &= -k^i (\nabla u^i \cdot n^i ) +\end{aligned} +++++ + +here latexmath:[n^i] is the outward normal on latexmath:[\partial\Omega^i] . Finally, we introduce a Neumann flux boundary condition on the fin root + +[latexmath] +++++ +-(\nabla u^0 \cdot n^0 ) = -1 \text{ on } \Gamma_{\mathrm{root}} , +++++ + +which models the heat source; and a Robin boundary condition + +[latexmath] +++++ +-k^i (\nabla u^i \cdot n^i ) = \mathrm{Bi} u^i \text{ on } \Gamma^i_{ext} , i = 0,\ldots, 4, +++++ + +which models the convective heat losses. Here latexmath:[\Gamma^i_{ext}] is that part of the boundary of latexmath:[\Omega^i] exposed to the flowing fluid; note that latexmath:[\cup_{i=0}^4 \Gamma^i_{ext} = \Gamma\backslash\Gamma_{\mathrm{root}}]. The average temperature at the root, latexmath:[T_{\mathrm{root}} (\mu)], can then be expressed as latexmath:[\ell^O(u(\mu))], where + +[latexmath] +++++ +\ell^O (v) = \int_{\Gamma_{\mathrm{root}}} v +++++ + +(recall latexmath:[\Gamma_{\mathrm{root}}] is of length unity). Note that latexmath:[\ell(v) = \ell^O(v)] for this problem. + +[[sec:part-1-finite]] +== Part 1 - Finite Element Approximation + +We saw in class that the reduced basis approximation is based on a "`truth`" finite element approximation of the exact (or analytic) problem statement. To begin, we have to show that the exact problem described above does indeed satisfy the affine parameter dependence and thus fits into the framework shown in class. + +{empty}a) Show that latexmath:[u^e (\mu) \in X^e \equiv H^1 (\Omega)] satisfies the weak form + +[latexmath] +++++ +a(u^e (\mu), v; \mu) = \ell(v), \forall v \in X^e , +++++ + +with + +[latexmath] +++++ +\begin{aligned} +a(w, v; \mu) &=\sum_{i=0}^4 k^i \int_{\Omega^i} \nabla w \cdot \nabla v dA ++ \mathrm{Bi}\int_{\Gamma\backslash\Gamma_{\mathrm{root}}} w v dS,\\ +\ell(v) &= \int_{\Gamma_{\mathrm{root}}} v +\end{aligned} +++++ + +{empty}b) Show that latexmath:[u^e (\mu)] is the argument that minimizes + +[latexmath] +++++ +\label{eq:2} +J(w) = \frac{1}{2}\sum_{i=0}^4 k^i \int_{\Omega_i} \nabla w \cdot +\nabla w dA + \frac{\mathrm{Bi}}{2} +\int_{\Gamma\backslash\Gamma_{\mathrm{root}}} w^2 dS - +\int_{\Gamma_{\mathrm{root}}} w dS +++++ +over all functions latexmath:[w] in latexmath:[X^e] . + +We now consider the linear finite element space + +[latexmath] +++++ +X^{\mathcal{N}} = \{v \in H^1 (\Omega)| v|_{T_h} \in \mathbb{P}^1 (\mathcal{T}_h ), \forall T_h \in \mathcal{T}_h \}, +++++ +and look for latexmath:[u^{\mathcal{N}} (\mu) \in X^{\mathcal{N}}] such that + +[latexmath] +++++ +a(u^{\mathcal{N}} (\mu), v; \mu) = \ell(v), \forall v \in X^{\mathcal{N}} ; +++++ +our output of interest is then given by + +[latexmath] +++++ +T_{\mathrm{root}}^\mathcal{N}(\mu) = \ell^O (u^{\mathcal{N}} (\mu)). +++++ +Applying our usual nodal basis, we arrive at the matrix equations + +[latexmath] +++++ +\begin{aligned} +% + A^{\mathcal{N}} (\mu) % + u^{\mathcal{N}} (\mu) & = % + F^{\mathcal{N}} ,\\ +T_{\mathrm{root}}^\mathcal{N}(\mu) &= (% + L^{\mathcal{N}} )^T % + u^{\mathcal{N}} (\mu), +\end{aligned} +++++ + +where latexmath:[% + A^{\mathcal{N}} \in +\mathbb{R}^{\mathcal{N}\times\mathcal{N}} , +% + u^{\mathcal{N}} \in \mathbb{R}^{\mathcal{N}} , +% + F^{\mathcal{N}} \in \mathbb{R}^{\mathcal{N}} , and +% + L^{\mathcal{N}} \in \mathbb{R}^{\mathcal{N}}]; here latexmath:[\mathcal{N}] is the dimension of the finite element space latexmath:[X^{\mathcal{N}}], which (given our natural boundary conditions) is equal to the number of nodes in latexmath:[\mathcal{T}_h]. + +[[sec:part-2-reduced]] +== Part 2 - Reduced-Basis Approximation + +In general, the dimension of the finite element space, latexmath:[\mathop{\mathrm{dim}}X = +\mathcal{N}], will be quite large (in particular if we were to treat the more realistic three-dimensional fin problem), and thus the solution of latexmath:[% + A^{\mathcal{N}} % + u^{\mathcal{N}} (\mu) = % + F^\mathcal{N}] can be quite expensive. We thus investigate the reduced-basis methods that allow us to accurately and very rapidly predict latexmath:[T_{\mathrm{root}} (\mu)] in the limit of many evaluations — that is, at many different values of latexmath:[\mu] — which is precisely the "`limit of interest`" in design and optimization studies. To derive the reduced-basis approximation we shall exploit the energy principle, + +[latexmath] +++++ +u(\mu) = \mathop{\mathrm{argmin}}_{w \in X} J(w), +++++ +where latexmath:[J(w)] is given by (#eq:2[[eq:2]]). + +To begin, we introduce a sample in parameter space, latexmath:[S_N = \{\mu_1 , + \mu_2 ,\ldots, \mu_N \}] with latexmath:[N \ll \mathcal{N}]. Each latexmath:[\mu_i , i = +1,\ldots, N] , belongs in the parameter set latexmath:[\mathcal{D}]. For our parameter set we choose latexmath:[\mathcal{D} = [0.1, 10.0]^4 \times [0.01, 1.0]], that is, latexmath:[0.1 \leq k^i \leq 10.0, i = 1,\ldots, 4] for the conductivities, and latexmath:[0.01 +\leq \mathrm{Bi} \leq 1.0] for the Biot number. We then introduce the reduced-basis space as + +[latexmath] +++++ +W_N = \mathop{\mathrm{span}}\{u^\mathcal{N} (\mu_1 ), u^\mathcal{N} (\mu_2 ),\ldots, u^\mathcal{N}(\mu_N ) \} +++++ +where latexmath:[u_N (\mu_i )] is the finite-element solution for latexmath:[\mu = +\mu_i]. + +To simplify the notation, we define latexmath:[\xi^i \in X] as latexmath:[\xi^i = u_N +(\mu_i ), i = 1,\ldots, N]; we can then write latexmath:[W_N = span\{\xi^i , i = + 1,\ldots, N \}]. Recall that latexmath:[W_N = \mathop{\mathrm{span}}\{\xi^i , i = 1,\ldots, N \}] means that latexmath:[W_N] consists of all functions in latexmath:[X] that can be expressed as a linear combination of the latexmath:[\xi^i] ; that is, any member latexmath:[v_N] of latexmath:[W_N] can be represented as + +[latexmath] +++++ +v_N =\sum_{i=1}^N \beta^j \xi^j , +++++ +for some unique choice of latexmath:[\beta^j \in \mathbb{R}, j = 1,\ldots, +N]. (We implicitly assume that the latexmath:[\xi^i , i = 1,\ldots, N], are linearly independent; it follows that latexmath:[W_N] is an latexmath:[N] -dimensional subspace of latexmath:[X^\mathcal{N}].) In the reduced-basis approach we look for an approximation latexmath:[u_N (\mu)] to latexmath:[u^\mathcal{N} (\mu)] (which for our purposes here we presume is arbitrarily close to latexmath:[u^e (\mu))] in latexmath:[W_N] ; in particular, we express latexmath:[u_N (\mu)] as + +[latexmath] +++++ +u_N (\mu) =\sum_{i=1}^N u^j_N \xi^j ; +++++ + +we denote by latexmath:[% + u_N (\mu) \in \mathbb{R}^N] the coefficient vector latexmath:[(u^1_N ,\ldots, u^N_N )^T]. The premise — or hope — is that we should be able to accurately represent the solution at some new point in parameter space, latexmath:[\mu], as an appropriate linear combination of solutions previously computed at a small number of points in parameter space (the latexmath:[\mu_i , i = 1,\ldots, N ).] But how do we find this appropriate linear combination? And how good is it? And how do we compute our approximation efficiently? The energy principle is crucial here (though more generally the weak form would suffice). To wit, we apply the classical Rayleigh-Ritz procedure to define + +[latexmath] +++++ +\label{eq:3} +u_N (\mu) = \mathop{\mathrm{argmin}}_{wN \in W_N} J(w_N ); +++++ + +alternatively we can apply Galerkin projection to obtain the equivalent statement + +[latexmath] +++++ +\label{eq:4} +a(u_N (\mu), v; \mu) = \ell(v),\quad \forall v \in W_N . +++++ + +The output can then be calculated from + +[latexmath] +++++ +\label{eq:5} +{T_{\mathrm{root}}}_N (\mu) = \ell^O (u_N (\mu)). +++++ + +We now study this approximation in more detail. + +{empty}a) Prove that, in the energy norm latexmath:[||| \cdot ||| \equiv (a(·, ·; +\mu))^{1/2}] , + +[latexmath] +++++ +|||u(\mu) - u_N (\mu)||| \leq |||u(\mu) - w_N |||, \forall w_N \in W_N . +++++ + +This inequality indicates that out of all the possible choices of wN in the space latexmath:[W_N] , the reduced basis method defined above will choose the "`best one`" (in the energy norm). Equivalently, we can say that even if we knew the solution latexmath:[u(\mu)], we would not be able to find a better approximation to latexmath:[u(\mu)] in latexmath:[W_N] — in the energy norm — than latexmath:[u_N +(\mu).] + +{empty}b) Prove that + +[latexmath] +++++ +T_{\mathrm{root}} (\mu) - {T_{\mathrm{root}}}_N (\mu) = |||u(\mu) - u_N (\mu)|||^2. +++++ + +{empty}c) Show that latexmath:[u_N (\mu)] as defined in #eq:3[[eq:3]]-#eq:5[[eq:5]] satisfies a set of latexmath:[N \times N] linear equations, + +[latexmath] +++++ +A_N (\mu) % + u_N (\mu) = % + F_N ; +++++ +and that + +[latexmath] +++++ +{T_{\mathrm{root}}}_N (\mu) = % + L^T_N % + u_N (\mu). +++++ + +Give expressions for latexmath:[% + A_N (\mu) \in \mathbb{R}^{N\times + N}] in terms of latexmath:[% + A^\mathcal{N} (\mu)] and latexmath:[Z, +% + F^N \in \mathbb{R}^N] in terms of latexmath:[% + F^\mathcal{N}] and latexmath:[Z,] and latexmath:[% + L^N \in +\mathbb{R}^N] in terms of latexmath:[% + L^\mathcal{N}] and latexmath:[Z]; here latexmath:[Z] is an latexmath:[\mathcal{N} \times N] matrix, the latexmath:[j] th column of which is latexmath:[% + u_N (\mu^j)] (the nodal values of latexmath:[% + u^\mathcal{N} +(\mu^j)]). + +{empty}d) Show that the bilinear form latexmath:[a(w, v; \mu)] can be decomposed as + +[latexmath] +++++ +a(w, v; \mu) = \sum_{q=0}^Q \theta^q (\mu) a^q (w, v), \forall w, v \in X, \forall \mu \in D,; +++++ +for latexmath:[Q=6] and give expressions for the latexmath:[\theta^q (\mu)] and the latexmath:[a^q +(w, v)]. Notice that the latexmath:[aq (w, v)] are not dependent on latexmath:[\mu]; the parameter dependence enters only through the functions latexmath:[\theta^q +(\mu), q = 1,\ldots, Q.] Further show that + +[latexmath] +++++ +% + A^\mathcal{N} (\mu) = \sum_{q=1}^Q \theta^q (\mu) {% + A^\mathcal{N}}^q , +++++ +and + +[latexmath] +++++ +% + A^N (\mu) = \sum_{q=1}^Q \theta^q (\mu) % + A^q_N , +++++ + +Give an expression for the latexmath:[{% + A^\mathcal{N}}^q] in terms of the nodal basis functions; and develop a formula for the latexmath:[% + A^q_N] in terms of the latexmath:[{% + A^\mathcal{N}}^q] and latexmath:[Z]. + +{empty}e) The coercivity and continuity constants of the bilinear form for the continuous problem are denoted by latexmath:[\alpha^e (\mu)] and latexmath:[\gamma^e +(\mu)], respectively. We now assume that the basis function latexmath:[\xi i , +i = 1,\ldots, N,] are orthonormalized. Show that the condition number of latexmath:[% + A_N (\mu)] is then bounded from above by latexmath:[\gamma^e (\mu)/\alpha^e +(\mu).] + +f): Take into account the parameters latexmath:[L] and latexmath:[t] as parameters: the geometric transformation must be taken into account in the affine decomposition procedure. + +_acknowledgment:_ This problem set is based on a problem set in the class "`16.920 Numerical Methods for Partial Differential Equations`" at MIT. We would like to thank Prof. A.T. Patera and Debbie Blanchard for providing the necessary material and the permission to use it. diff --git a/docs/modules/ROOT/pages/homework/problem-set-2.adoc b/docs/modules/ROOT/pages/homework/problem-set-2.adoc new file mode 100644 index 0000000..b0bc6b6 --- /dev/null +++ b/docs/modules/ROOT/pages/homework/problem-set-2.adoc @@ -0,0 +1,106 @@ += Problem Set 2: RB for Linear Affine Elliptic Problems +:page-jupyter: true +:page-plotly: true +Christophe Prud’homme +:stem: latexmath +:eqnums: all + +== Problem Statement — Design of a Thermal Fin + +We consider the problem of designing a thermal fin described in Problem Set 1. In PS1 we looked at some thoeretical issues (weak formulation and optimization formulation, convergence of the reduced basis approximation) and derived the necessary reduced basis quantities, i.e., expressions for latexmath:[A_N ( \mu )], latexmath:[F_N] , and latexmath:[L_N] . This problem set is devoted to implementing the reduced basis approximation and solving a simple design problem. + +=== Finite element approximation + +[source,python] +---- +import feelpp + +---- + +=== Part 1 – Reduced Basis Approximation + +The point of departure for the reduced basis approximation is a high – dimensional finite element "`truth`" discretization. In the offline stage we require the finite element solution to build the reduced basis and we thus also need the FE matrices. In this problem set we skip the FE assembly step and provide all of the necessary data for use in Python (see Appendix 1). + +We saw in class that the reduced basis solution latexmath:[u_N ( \mu ) \in \mathbb{R}^N] satisfies the set of latexmath:[N\times N] linear equations, + +[latexmath#eq:1.1] +++++ + A_N( \mu )u_N( \mu ) = F_N; +++++ +and that the outputis given by + +[latexmath#eq:1.2] +++++ + {T_{root}}_N ( \mu ) = L^T_N u_N ( \mu ). +++++ + +We derived expressions for latexmath:[A_N( \mu ) \in \mathbb{R}^{N\times N}] in terms of latexmath:[A_N( \mu )] and latexmath:[Z], latexmath:[F_N \in \mathbb{R}^N] in terms of latexmath:[F_N] and latexmath:[Z], and latexmath:[L_N \in \mathbb{R}^N] in terms of latexmath:[L_N] and latexmath:[Z]; here latexmath:[Z] is an latexmath:[\mathcal{N} \times N] matrix, the jth column of which is latexmath:[u_N ( \mu j )] (the nodal values of latexmath:[u_N ( \mu j ))]. Finally, it follows from affine parameter dependence that latexmath:[A_N ( \mu )] can be expressed as + +[latexmath#eq:1.3] +++++ +A_N( \mu ) = \sum_{q=1}^Q \Theta^q( \mu )A^q_N. +++++ +The goal is to implement an offline/ online version of the reduced – basis method following the computational decomposition indicated below. + +* Offline +. Choose latexmath:[N]. +. Choose the sample latexmath:[S_N] . +. Construct latexmath:[Z]. +. Construct latexmath:[A^q_N, q = 1,\ldots,Q; F_N; \text{ and } L_N.] +* Online +. Form latexmath:[A_N ( \mu )] from (<>). +. Solve latexmath:[A_N( \mu )u_N( \mu ) = F_N.] +. Evaluate the output latexmath:[{T_{root}}_N ( \mu )] from <>). + +1 The idea is that the offline stage is done only once, generating a small datafile with the latexmath:[A^q_N , q = 1,\ldots,Q], latexmath:[F_N], and latexmath:[L_N]; the on-line stage then accesses this datafile to provide real-time response to new latexmath:[\mu] queries. For the required off-line finite element calculations in this and the following questions, you should first use the coarse triangulation latexmath:[\mathcal{T}_{h,\mathrm{coarse}}]. + +[loweralpha] +. Show that the operation count for the on-line stage of your code is independent of latexmath:[\mathcal{N}] . In particular show that the operation count (number of floating-point operations) for the on-line stage, for each new latexmath:[\mu] of interest, can be expressed as + +[latexmath#eq:4] +++++ +c_1N^{\gamma_1} +c_2 N^{\gamma_2} +c_3 N^{\gamma_3}, +++++ +for latexmath:[c_1, c_2, c_3, \gamma_1, \gamma_2,] and latexmath:[\gamma_3] independent of latexmath:[N]. Give values for the constants latexmath:[c_1, c_2, c_3, \gamma_1, \gamma_2,] and latexmath:[\gamma_3]. + +. We first consider a one parameter (latexmath:[P = 1]) problem. To this end, we keep the Biot number fixed at latexmath:[Bi = 0.1] and assume that the conductivities of all fins are equivalent, i.e., latexmath:[k_1 = k_2 = k_3 = k_4], but are allowed to vary between latexmath:[0.1] and latexmath:[10] – we thus have latexmath:[\mu \in D = +[0.1, 10].] The sample set latexmath:[S_N] for latexmath:[N_{max} = 8] is given in the datafile `+RB_sample.sample1+`. + +. Generate the reduced basis "`matrix`" latexmath:[Z] and all necessary reduced basis quantities. You have two options: you can use the solution "snapshots" directly in latexmath:[Z] or perform a Gram-Schmidt orthonormalization to construct latexmath:[Z] (Note that you require the latexmath:[X] – inner product to perform Gram-Schmidt; here, we use latexmath:[(\cdot, \cdot)_X = a(\cdot, \cdot; \mu )], where latexmath:[\mu = 1] – all conductivities are latexmath:[1] and the Biot number is latexmath:[0.1]). Calculate the condition number of latexmath:[A_N ( \mu )] for latexmath:[N = 8] and for latexmath:[\mu = 1] and latexmath:[\mu = 10] with and without Gram – Schmidt orthonormalization. What do you observe? Solve the reduced basis approximation (where you use the snapshots directly in latexmath:[Z]) for latexmath:[\mu_1 = 0.1] and latexmath:[N = 8]. What is latexmath:[u_N( \mu_1)]? How do you expect latexmath:[u_N( \mu_2)] to look like for latexmath:[\mu_2 + = 10.0]? What about latexmath:[\mu_3 = 1.0975]? Solve the Gram – Schmidt orthonormalized reduced basis approximation for latexmath:[\mu_1 = 0.1] and latexmath:[\mu + 2 = 10] for latexmath:[N = 8]. What do you observe? Can you justify the result? For the remaining questions you should use the Gram – Schmidt orthonormalized reduced basis approximation. +.. Verify that, for latexmath:[\mu = 1.5] (recall that Biot is still fixed at latexmath:[0.1]) and latexmath:[N = 8], the value of the output is latexmath:[{T_{root}}_N ( \mu ) = 1.53107]. +.. We next introduce a regular test sample, latexmath:[\Xi_{test} \subset D], of size latexmath:[ntest = 100] (in Python you can simply use `+linspace(0.1, 10, 100)+` to generate latexmath:[\Xi_{test}]). Plot the convergence of the maximum relative error in the energy norm latexmath:[\max_{\mu \in\Xi_{test}} |||u( \mu ) - + u_N ( \mu )|||_\mu /|||u( \mu )|||_\mu] and the maximum relative output error max latexmath:[\mu \in\Xi_{test} |{T_{root}}( \mu ) - {T_{root}} N( \mu + )|/{T_{root}}( \mu )] as a function of latexmath:[N] (use the Python command `+semilogy+` for plotting). +.. Compare the average CPU time over the test sample required to solve the reduced basis online stage with direct solution of the FE approximation as a function of latexmath:[N]. +.. What value of latexmath:[N] do you require to achieve a relative accuracy in the output of 1%. What savings in terms of CPU time does this % correspond to? +.. Solve problems b) 3. to 5. using the medium and fine FE triangulation. Is the dependence on latexmath:[\mathcal{N}] as you would anticipate? + +. We now consider another one parameter latexmath:[(P = 1)] problem. This time, we assume that the conductivities are fixed at latexmath:[\{k_1,k_2,k_3,k_4\} = \{0.4,0.6,0.8,1.2\}], and that only the Biot number, latexmath:[Bi], is allowed to vary from latexmath:[0.01] to latexmath:[1]. The sample set latexmath:[S_N] for latexmath:[N_{max} = 11] is given in the datafile `+RB_sample.sample2+`. Generate an orthonormal latexmath:[Z] from the sample set using the medium triangulation. + +.. Verify that, for latexmath:[\mu_0 = {0.4, 0.6, 0.8, 1.2, 0.15}], i.e. latexmath:[Bi = 0.15], the value of the output is latexmath:[{T_{root}}_N ( \mu 0) = 1.51561]. +.. We next introduce a regular test sample, latexmath:[\Xi_{test} \subset D], of size latexmath:[ntest =100] (in Python you can simply use `+linspace(0.01, 1, 100)+` to generate latexmath:[\Xi_{test}]). Plot the convergence of the maximum relative error in the energy norm latexmath:[\max_{\mu \in\Xi_{test}} |||u( \mu ) - u_N ( \mu )|||_\mu /|||u( \mu + )|||_\mu] and the maximum relative output error latexmath:[\max_{\mu \in\Xi_{test}} |{T_{root}}( \mu ) - {T_{root}}_N( \mu )|/{T_{root}}( + \mu )] as a function of latexmath:[N] (use the Python command `+semilogy+` for plotting). +.. The Biot number is directly related to the cooling method; higher cooling rates (higher latexmath:[Bi]) imply lower (better) latexmath:[{T_{root}}] but also higher (worse) initial and operational costs. We can thus define (say) a total cost function as ++ +[latexmath#eq:CBi] +++++ +C(Bi) = Bi + {T_{root}}(Bi), +++++ ++ +minimization of which yields an optimal solution. Apply your (online) reduced – basis approx – imation for latexmath:[{T_{root}}_N] (that is, replace latexmath:[{T_{root}}(Bi)] in (<>) with latexmath:[{T_{root}}_N (Bi))] to find the optimal latexmath:[Bi.] Any (simple) optimization procedure suffices for the minimization. + +. We consider now a two parameter latexmath:[(P = 2)] problem where the conductivities are assumed to be equivalent, i.e., latexmath:[k_1 = k_2 = k_3 = k_4], but are allowed to vary between latexmath:[0.1] and latexmath:[10]; and the Biot number, latexmath:[Bi], is allowed to vary from latexmath:[0.01] to latexmath:[1]. The sample set latexmath:[S_N] for latexmath:[N_{max} = 46] is given in the datafile `+RB_sample.sample3+`. Generate an orthonormal latexmath:[Z] from the sample set using the coarse triangulation. + +. We next introduce a regular grid, latexmath:[\Xi_{test} \subset D], of size latexmath:[ntest = 400] (a regular latexmath:[20 \times 20] grid). Plot the convergence of the maximum relative error in the energy norm latexmath:[\max_{\mu \in\Xi_{test}} |||u( \mu ) - u_N ( \mu )|||_\mu /|||u( \mu + )|||_\mu] and the maximum relative output error latexmath:[max_{\mu \in \Xi_{test}} |{T_{root}}( \mu ) - {T_{root}}_N( \mu )|/{T_{root}}( \mu)] as a function of latexmath:[N]. + +. We now consider the POD method and we wish to compare it with the Greedy approximation. To this end, we sample log randomly the parameter space (latexmath:[P=2]) and take latexmath:[n_{\mathrm{train}}=100] samples. Build the POD approximation using these samples as training set and compare the results with the Greedy approximation. Compute the RIC and the dimension of the POD space (latexmath:[N]) such that the RIC is latexmath:[99\%] of the total energy. Plot the POD and Greedy convergence of the maximum relative error in the energy norm latexmath:[\max_{\mu \in\Xi_{test}} |||u( \mu ) - u_N ( \mu )|||_\mu /|||u( \mu +)|||_\mu] and the maximum relative output error latexmath:[max_{\mu \in \Xi_{test}} |{T_{root}}( \mu ) - {T_{root}}_N( \mu )|/{T_{root}}( \mu +)] as a function of latexmath:[N]. + +== Appendix 1 – Finite Element Method Implementation + +We use Feel++ to implement the finite element matrices. diff --git a/docs/modules/ROOT/pages/homework/problem-set-3.adoc b/docs/modules/ROOT/pages/homework/problem-set-3.adoc new file mode 100644 index 0000000..e0caa5b --- /dev/null +++ b/docs/modules/ROOT/pages/homework/problem-set-3.adoc @@ -0,0 +1,145 @@ += Problem Set 3: A Posteriori Error Bounds, Greedy Sampling Procedure +:page-jupyter: true +:page-plotly: true +:stem: latexmath +Christophe Prud’homme + + +We consider again the problem of designing a thermal fin of Problem Set 1 and 2. Given the reduced basis approximation implemented in PS2, we turn to implementing the associated a posteriori error estimation procedures developed in the lecture. The second half of this problem set is devoted to implementing the greedy sampling procedure. We will consider the following two cases: + +* Case I (latexmath:[P=1]): We keep the Biot number fixed at latexmath:[Bi = 0.1] and assume that the conductivities of all fins are equivalent, i.e., latexmath:[k = k_1 = k_2 = k_3 = k_4], but are allowed to vary between 0.1 and 10 — we thus have latexmath:[\mu \in D = [0.1, 10].] For this latexmath:[P = 1] case we define the latexmath:[X]-inner product latexmath:[(\cdot, \cdot)_X = a(\cdot, \cdot; \bar{\mu}),] where latexmath:[\bar{\mu} = 1.] +* Case II (latexmath:[P = 2]): We again assume that the conductivities of all fins are equivalent, i.e., latexmath:[k = k_1 = k_2 = k_3 = k_4] , but are allowed to vary between 0.1 and 10; furthermore, we assume that the Biot number satisfies latexmath:[0.01 \leq Bi \leq 1.] We thus have latexmath:[\mu = (k, Bi) = [0.1, 10\] \times [0.01, 1\].] For this latexmath:[P = 2] case we define the latexmath:[X]-inner product latexmath:[(\cdot, \cdot)_X = a(\cdot, \cdot; \bar{\mu}),] where latexmath:[\bar{\mu} = (1, 0.1)] (the two inner products are in fact the same since latexmath:[Bi = 0.1] here). + +We also define the parameter grids latexmath:[G^{\mathrm{lin}}_{[ \mu_{min} , \mu_{max} ;10\]}] and latexmath:[G^{\mathrm{ln}}_{[ \mu_{min} , \mu_{max} ;10\]}]. The former grid is equi-spaced in latexmath:[\mu], the latter grid is equi-spaced in latexmath:[ln(\mu)] — often advantageous within the reduced basis context. More generally, the "`log`" spacing represents equal relative increments, and thus represents better coverage for parameters that vary over a large range. For the latexmath:[P = 2] case we can then define tensor grids over latexmath:[\mathcal{D}], latexmath:[\Xi^{\mathrm{log}}_M \subset D \subset \mathbb{R}^2] , as + +[latexmath] +++++ +\Xi^{log}_M = G^{log}_{[ \mu_{min} , \mu_{max} ;M ]} \times G^{log}_{[ \mu_{min} , \mu_{max} ;M ]} ; +++++ +note latexmath:[\Xi^{log}_M] contains latexmath:[M^2] points; a similar definition applies to latexmath:[\Xi^{lin}_M]. We also define a particular test grid (biased neither towards "`log`" nor "`lin`") + +[latexmath] +++++ +\Xi^{test}_M = \Xi^{lin}_M \cup \Xi^{log}_M ; +++++ +note latexmath:[\Xi^{test}_M] contains latexmath:[2M^2] points. + +[[sec:1]] +== Part 1 - Coercivity Lower Bound and X-Norm Error Bound + +We first consider the construction of the lower bound for the coercivity constant. + +=== Q1. + +Since our problem is parametrically coercive, the simple latexmath:[\min \theta]-approach suffices for the construction of the coercivity lower bound, latexmath:[\alpha_{LB} (\mu)]. However, we have to slightly adapt the lower bound to Case I and II. + + (a) Derive an explicit expression for latexmath:[\alpha_{LB} (\mu)] for Case I and Case II. (b) What is the largest effectivity for the energy norm error bound and the output error bound we should anticipate for Case I and Case II? + +=== Q2. + +Prove the bounding properties of the latexmath:[X]-norm error bound, i.e., the effectivity latexmath:[\eta_N(\mu)] satisfies + +[latexmath] +++++ +1 \leq \eta_N(\mu) \leq \frac{\gamma_{UB} (\mu)}{\alpha_{LB} (\mu)}, \quad \forall \mu \in \mathcal{D}. +++++ + + +== Part 2 - A Posteriori Error Estimation + +Given the coercivity lower bound, we can now turn to implementing the a posteriori error bounds. Note that, in principle, there is an online-inefficient and an online-efficient way to evaluate these error bounds. We first consider the latter: From the lecture we know that the energy norm a posteriori error bound is given by + +[latexmath#eq:2.1] +++++ +\Delta^{en}_N(\mu)= \frac{\|\hat{e}(\mu\|}{\sqrt{\alpha_{LB}(\mu)}} +++++ +where latexmath:[\hat{e}(\mu) \in X] satisfies + +[latexmath#eq:2.2] +++++ +(\hat{e}(\mu), v)_X = r(v; \mu), \quad \forall v \in X, +++++ +and the residual is given by + +[latexmath#eq:2.3] +++++ +r(v; \mu) = f (v; \mu) - a(u_N (\mu), v; \mu),\quad \forall v \in X. +++++ + +For any new latexmath:[\mu] and associated reduced basis solution, latexmath:[u_N (\mu),] we can now directly calculate latexmath:[\hat{e}(\mu)] from <> and <>, evaluate the norm latexmath:[\|\hat{e}(\mu)||_X] and — given latexmath:[\alpha_{LB} (\mu)] — obtain latexmath:[\Delta^{en}_N (\mu)] from <>. Although this approach is online-inefficient because the computational cost depends on latexmath:[O(\mathcal{N})], it is nevertheless useful as a means to test your offline-online computational decomposition. We will consider Case I and Case II in the sequel. Note that you should only require one code to handle both cases, i.e., Case I is a specialization of Case II by keeping one of the parameters fixed. Also, when using you should try to replace loops by matrix-vector products as much as possible (e.g. try to write the nested loop over latexmath:[N] when summing up the contributions of the latexmath:[\|\hat{e}(\mu)\|_X] norm as a vector-matrix-vector product — the nested loop over latexmath:[Q_a] is less critical). + +=== Q3. + +We first consider Case I. To answer this question you should use the sample set latexmath:[S_N] provided for PS2 (`+RB_sample.sample1+`), orthonormalize the basis functions, and use the medium grid. + +[loweralpha] +. Implement an offline/online version of the a posteriori error bound calculation following the computational decomposition shown in the lecture. Show that the direct calculation and the offline-online decomposition deliver the same results for the error bound, latexmath:[\Delta^{en}_N (\mu)], for all latexmath:[N (1 \leq N \leq 8)] and (say) latexmath:[5] parameter values randomly distributed in latexmath:[\mathcal{D}.] + +. Calculate latexmath:[\eta^{en}_{\min,N},\eta^{en}_{\max,N}] and latexmath:[\eta^{en}_{ave,N}] the minimum, maximum, and average effectivity latexmath:[\eta^{en}_N(\mu)] over latexmath:[\Xi test = G^{lin}[ \mu_{min} , \mu_{max} ;50] \cup G^{ln}[ \mu_{min} , \mu_{max} ;50]], respectively (note that latexmath:[\Xi^{test}] is of size 100 since latexmath:[P = 1]). + +Present the results in a table for all latexmath:[N] . Is the minimum effectivity greater than unity? How does the maximum effectivity compare with your theoretical upper bound for the effectivity? (Note you should exclude from the min/max/mean-operation all points in latexmath:[\Xi^{test}] for which latexmath:[\|u(\mu) - u_N (\mu)\|_X] is less than (say) latexmath:[10e-11] .) + +. Evalulate the effectivity for latexmath:[\mu = 1] for latexmath:[N = 1,\ldots, 8]. What do you observe? Justify your answer. (d ) Evaluate the exact error, latexmath:[\|u(\mu) - u_N (\mu)\|_X] , and error bound for latexmath:[\mu = 0.1]. What do you observe? Justify your answer. + +=== Q4. + +We consider Case II. To answer this question you should use the sample set latexmath:[S_N] provided for the PS2 (`+RB_sample.sample3+`), orthonormalize the basis functions, and use the medium grid. + +. Implement an offline/online version of the a posteriori error bound calculation following the computational decomposition shown in the lecture. Show that the direct calculation and the offline-online decomposition deliver the same results for the error bound, latexmath:[\Delta^{en}_N (\mu)], for all latexmath:[N] latexmath:[(1 \leq N \leq 46)] and (say) 5 parameter values randomly distributed in latexmath:[\mathcal{D}]. + +. Calculate latexmath:[\eta^{en}_{\min,N},\eta^{en}_{\max,N}] and latexmath:[\eta^{en}_{ave,N}] the minimum, maximum, and average effectivity latexmath:[\eta^{en}_N(\mu)] over latexmath:[\Xi^{test}_M = \Xi^{lin}_{M=10}\cup \Xi^{log}_{M=10}], respectively. Present the results in a table for latexmath:[N = 5, 10, 20,30, 40.] Is the minimum effectivity greater than unity? How does the maximum effectivity compare with your theoretical upper bound for the effectivity? (Note you should again exclude from the min/max/mean-operation all points in latexmath:[\Xi^{test}_M] for which latexmath:[\|u(\mu) - u_N (\mu)\|_X] is less than (say) latexmath:[10e-11].) + +== Part 3 - Reduced Basis Output Bound + +Given the a posteriori error bound from Part 2 we can now directly evaluate the output error bound. + +=== Q5. + +We consider Case II. To answer this question you should use the sample set SN provided for PS2 (`+RB_sample.sample3+`), orthnormalize the basis functions, and use the medium grid. + +[loweralpha] +. Extend your code to also calculate the output error bound. + +. Calculate latexmath:[\eta^{s}_{\min,N},\eta^{s}_{\max,N}] and latexmath:[\eta^{s}_{ave,N}] the minimum, maximum, and average effectivity latexmath:[\eta^{s}_N(\mu)] over latexmath:[\Xi^{test}_M = \Xi^{lin}_M =10 \cup \Xi^{log}_M =10], respectively. Present the results in a table for latexmath:[N = 5, 10, 20,30, 40.] How does the maximum effectivity compare with your theoretical upper bound for the effectivity? (Note you should exclude from the min/max/mean-operation all points in latexmath:[\Xi^{test}] for which latexmath:[|s(\mu) - s_N (\mu)|] is less than (say) latexmath:[10e-11] .) + +. What value of latexmath:[N] do you require to achieve a relative accuracy in the output bound of approximately 1%? What is the true error for this value of latexmath:[N] ? + +. How does the online computational cost to calculate latexmath:[\Delta^s_N (\mu)] compare to the online computational cost to calculate latexmath:[s_N (\mu)] as a function of latexmath:[N] (take the average over the test sample latexmath:[\Xi^{test}_M] )? + +. How does the computational cost to calculate the truth output latexmath:[s(\mu)] compare to the online computational cost to calculate latexmath:[s_N (\mu)] and latexmath:[\Delta^s_N (\mu)] as a function of latexmath:[N] (take the average over the test sample latexmath:[\Xi^{test}_M] )? + + +== Part 4 - Greedy Sampling Procedure + +Given your (now tested and - hopefully - functioning) offline-online computational decomposition for the reduced basis approximation and associated a posteriori error estimation, we turn to the Greedy Sampling Procedure. In PS2 you where given the sample sets latexmath:[S_N] — now you can construct these yourself. + +For this problem set, you should use the algorithm with latexmath:[\omega(\mu) = +|||u_N (\mu)|||_\mu] (note that we can calculate latexmath:[|||u_N (\mu)|||_\mu] online-efficient in latexmath:[O(N^2)] operations — as opposed to latexmath:[|||u(\mu)|||_\mu] which would require latexmath:[O(\mathcal{N})] operations). We set the desired error tolerance to latexmath:[\varepsilon_{tol,\min} = +10e-6] and choose latexmath:[S_1 = \mu_{min}] and latexmath:[X_1 = \mathrm{span}\{u( \mu_{min} )\}.] + +Note that there are many steps implicit in the greedy loop. In particular, after the update latexmath:[S_N = S_{N-1} \cup \mu^{*}_N] , we must calculate latexmath:[u(\mu^{*}_N )] to construct (using Gram-Schmidt) the new contribution to our orthonormal basis set, latexmath:[\zeta_N] , to "`form`" latexmath:[X_N] , and finally calculate all the necessary online quantities for both our reduced basis approximation and associated a posteriori error estimation. We note here a practical point for our hierarchical space: as we proceed from latexmath:[N] to latexmath:[N + 1], we should only compute the necessary incremental quantities — the incremental contributions to the various online inner-product arrays required for the reduced basis approximation and a posteriori error estimators. + +== Q6. + +We consider Case I. Apply the greedy algorithm with latexmath:[\Xi^{train} = G^{ln}_{[ \mu_{min} , \mu_{max} ;100\]} , S_1 = \mu_{min} = 0.1] and latexmath:[\varepsilon_{tol,min} = 1e-6]. + +[loweralpha] +. What is the value of Nmax to achieve the desired accuracy? In a sequence of Nmax figures (or subplots), plot the relative exact error latexmath:[\|u(\mu) - u_N (\mu)\|_X /|||u_N (\mu)|||_\mu] and the relative energy error bound, latexmath:[\Delta^{en}_N (\mu)/|||u_N (\mu)|||_\mu] , over latexmath:[\mu \in \Xi^{train}] . In each plot, mark the parameter value which is picked by the greedy procedure in this step. + +. Plot latexmath:[\Delta_N^{max}] as a function of latexmath:[N] . + +. Generate a non-hierarchical reduced basis approximation for latexmath:[S^{lin}_N=G^{lin}_{[ \mu_{min} , \mu_{max} ;N \]}] and latexmath:[S^{ln}_N = +G^{ln}_{[ \mu_{min} , \mu_{max} ;N \]}] with latexmath:[2 \leq N \leq N_{max}] . We would like to compare the convergence of the reduced basis approximation generated using the greedy algorithm and the reduced basis approximations from the linear and logarithmic sample. Plot the convergence of the maximum relative error in the energy norm latexmath:[max_{\mu \in \Xi^test} |||u(\mu) - u_N (\mu)|||_\mu /|||u(\mu)|||_\mu] as a function of latexmath:[N] for all ln three cases in one plot. Here, latexmath:[\Xi^{test} = G^{lin}_{[ \mu_{min} , \mu_{max} ;50\]} \cup G^{ln}[ \mu_{min} , \mu_{max} ;50\]] is a test sample of size latexmath:[n_{test} = 100.] + +== Q7. + +We consider Case II. + +Apply the greedy algorithm with latexmath:[\Xi^{train} = \Xi^{log}_M] (the log tensor product grid with latexmath:[M = 25]), latexmath:[S_1 = \mu_{min} = (0.1, 0.01)], and latexmath:[\varepsilon_{tol,min} = 10e-6] . + +[loweralpha] +. What is the value of Nmax to achieve the desired accuracy? (b) Plot latexmath:[\Delta_N^{max}] as a function of latexmath:[N]. + +. Plot your greedy samples latexmath:[S_N] ; present your results as dots in the latexmath:[(ln \mu_1 , ln \mu_2 )] plane. Can you attribute the observed distribution of parameter points to any mathematical or physical causes? + +. For the reduced basis approximation you just generated, plot the convergence of the maximum relative error in the energy norm latexmath:[\max_{\mu \in \Xi^{test}} |||u(\mu) - u_N (\mu)|||_\mu /|||u(\mu)|||_\mu] and the maximum relative output error latexmath:[\max_{\mu\in \Xi^{test}} |Troot (\mu) - Troot_N (\mu)|/Troot (\mu)] as a function of latexmath:[N] . Use latexmath:[\Xi^{test} = \Xi^{test}_M] with latexmath:[M = 10] (the combined linear and logarithmic tensor product grid).