Hi David, I'm afraid creating a lift function is much more complicated than I thought. I'm not sure why we need to solve a Laplace equation since we already know what the lift function looks like --- some values on the nodes of the inhomogeneous Dirichlet BC and zeros elsewhere. I guess it would be much easier to directly set up a lift function by checking whether a node belongs to the inhomogeneous Dirichlet BC. Is this because we cannot create a lift function in that way?
Anyway, If I follow what you suggest, I guess I need to do the following steps. 1. obtain u0 by solving a Laplace equation with inhomogeneous Dirichlet BC --- maybe I can refer to introduction_ex3 for solving a Laplace equation, but somehow I need to deal with inhomogeneous Dirichlet BC by using heterogeneously_constrain_element_matrix_and_vector ? 2. assemble a(u0,v) by integrating the gradient of u0 Overall it looks like a nested problem --- solving a Laplace equation inside of a reduced basis model construction. I wonder if you'd suggest some relevant examples/codes regarding the lift function creation. Best, K. Lee. On Sun, Jan 27, 2013 at 1:43 AM, David Knezevic <[email protected]>wrote: > To create the lift function, probably the simplest thing to do is solve > a Laplace equation (\Laplacian u = 0) with the Dirichlet boundary > conditions that you want, and then use the solution as your u0. This > process is called "elliptic lifting" since the Laplace equation is an > elliptic PDE. > > Then to assemble a(u0,v), you need to do something like what you wrote. > But the code can be simplified a bit; you don't need to compute Ke and > then multiply. You can just get the gradient of u0 directly (by > multiplying the coefficients of u0 with c.interior_gradient) and then > integrate. > > David > > > > On 01/26/2013 06:14 AM, Kyunghoon Lee wrote: > > Thanks for the reply. Now I'd appreciate if you'd help me with the > > implementation of a(u0,v). I was thinking of computing Ke*u0 where Ke is > > the stiffness matrix and u0 is the lift function as below: > > > > //inhomogeneous Dirichlet BC > > struct IDBCAssembly : ElemAssembly { > > > > short unsigned int sbd_id; > > IDBCAssembly(short unsigned int sbd_id_in) : sbd_id(sbd_id_in) {} > > > > virtual void interior_assembly(FEMContext &c) { > > > > const unsigned int u_var = 0; > > const std::vector<Real> &JxW = > > c.element_fe_var[u_var]->get_JxW(); > > const std::vector<std::vector<RealGradient> >& dphi = > > c.element_fe_var[u_var]->get_dphi(); > > > > const unsigned int n_u_dofs = > c.dof_indices_var[u_var].size(); > > unsigned int n_qpoints = c.element_qrule->n_points(); > > > > // stiffness matrix Ke > > std::vector<std::vector<Number> > Ke(n_u_dofs, > > std::vector<Number>(n_u_dofs)); > > for (unsigned int qp=0; qp != n_qpoints; qp++) > > for (unsigned int i=0; i != n_u_dofs; i++) > > for (unsigned int j=0; j != n_u_dofs; j++) > > Ke[i][j] += JxW[qp] * dphi[j][qp] * dphi[i][qp]; > > > > // lift function u0 > > std::vector<Number> u0(n_u_dofs, 0.0); > > > > // multiply stiffness matrix by lift function > > for (unsigned int qp=0; qp != n_qpoints; qp++) > > for (unsigned int i=0; i != n_u_dofs; i++) > > for (unsigned int j=0; j != n_u_dofs; j++) > > c.elem_residual(i) += Ke[i][j] * u0[j]; > > } // end of interior_assembly > > }; > > > > However, I'm not sure of how to create the lift function u0 such that it > > has values for given boundary ID and zeros for elsewhere. I think I need > > to the following: > > > > iterate nodes > > if node belongs to the given boundary ID, set u0(i) = u0_given; otherwise > > u(i) = 0.0 > > > > but I'm not sure of how to check whether a node is associated with > boundary > > ID. Can you help me with this problem, plz? (or are there examples > related > > to this issue?) > > > > Best, > > K. Lee. > > > > > > On Fri, Jan 25, 2013 at 12:38 PM, David Knezevic < > [email protected] > >> wrote: > >> Yep, that's right, use the RB method to solve for u'. > >> > >> Note that you put a(u0,v) on the right-hand side, since u0 is known > >> (it's the "lifting function"). > >> > >> David > >> > >> > >> > >> On 01/24/2013 11:34 PM, Kyunghoon Lee wrote: > >>> Thanks for clearing it up. Then I guess we just solve for u' > >>> > >>> a(u',v) + a(u0,v) = f(v) > >>> > >>> and attach assemblies a(u',v), a(u0,v), and f(v) as usual, then > restore u > >>> by u = u' + u0. > >>> > >>> K. Lee. > >>> > >>> On Fri, Jan 25, 2013 at 12:17 PM, David Knezevic < > >> [email protected] > >>>> wrote: > >>>> Hi K, > >>>> > >>>> heterogeneously_constrain_element_matrix_and_vector is not relevant to > >>>> Reduced Basis stuff. For Reduced Basis formulations, you have to > >>>> transform the problem using a lifting function so that it has zero > >>>> Dirichlet BC's --- this is essential since you want your Reduced Basis > >>>> space to be a vector space, i.e. it must contain 0 (which would be not > >>>> be the case with non-zero Dirichlet BCs). This lifting function > approach > >>>> is what you described in your email already, so that's fine. > >>>> > >>>> Once you've transformed your problem using a lifting function, then > you > >>>> just proceed as normal, e.g. as in reduced_basis_ex1. The only trick > is > >>>> you have to add your lifting function back on at the end to recover u > >>>> from u'. > >>>> > >>>> David > >>>> > >>>> > >>>> > >>>> On 01/24/2013 11:10 PM, Kyunghoon Lee wrote: > >>>>> Hi all, > >>>>> > >>>>> In my previous email regarding inhomogeneous Dirichlet boundary > >>>> conditions, > >>>>> David suggested using > >> heterogenously_constrain_element_matrix_and_vector > >>>> in > >>>>> introduction_ex4, but I'm not sure of how to deal with inhomogeneous > >>>>> Dirichlet BCs in connection with reduced basis models. Suppose we > >> have a > >>>>> simple steady state heat conduction model whose BCs are u = T on > \Gamma > >>>> and > >>>>> u = 0 on the rest surfaces. After variable change, we solve > >>>>> > >>>>> a(u',v) = f(v) - a(u0,v) > >>>>> > >>>>> where 1) u' = u - T on \Gamma and u' = u on the rest surfaces; and 2) > >> u0 > >>>> = > >>>>> T on \Gamma and u0 = zero on the rest surfaces. I thought we build > the > >>>> LHS > >>>>> then call attach_F_assembly to attach it, but in that case, I'm not > >> sure > >>>>> how heterogenously_constrain_element_matrix_and_vector can be used. > Or > >>>>> should we attach a(u',v) and f(v) as usual then call > >>>>> heterogenously_constrain_element_matrix_and_vector to impose - > a(u0,v) > >> on > >>>>> the LHS? I'd appreciate if someone can briefly describe how the > >> function > >>>>> work. > >>>>> > >>>>> Regards, > >>>>> K. Lee. > >>>>> > >> > ------------------------------------------------------------------------------ > >>>>> Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, > >>>>> MVC, Windows 8 Apps, JavaScript and much more. Keep your skills > current > >>>>> with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft > >>>>> MVPs and experts. ON SALE this month only -- learn more at: > >>>>> http://p.sf.net/sfu/learnnow-d2d > >>>>> _______________________________________________ > >>>>> Libmesh-users mailing list > >>>>> [email protected] > >>>>> https://lists.sourceforge.net/lists/listinfo/libmesh-users > >>>> > >>>> > >> > ------------------------------------------------------------------------------ > >>>> Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, > >>>> MVC, Windows 8 Apps, JavaScript and much more. Keep your skills > current > >>>> with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft > >>>> MVPs and experts. ON SALE this month only -- learn more at: > >>>> http://p.sf.net/sfu/learnnow-d2d > >>>> _______________________________________________ > >>>> Libmesh-users mailing list > >>>> [email protected] > >>>> https://lists.sourceforge.net/lists/listinfo/libmesh-users > >>>> > >> > ------------------------------------------------------------------------------ > >>> Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, > >>> MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current > >>> with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft > >>> MVPs and experts. ON SALE this month only -- learn more at: > >>> http://p.sf.net/sfu/learnnow-d2d > >>> _______________________________________________ > >>> Libmesh-users mailing list > >>> [email protected] > >>> https://lists.sourceforge.net/lists/listinfo/libmesh-users > >> > >> > >> > ------------------------------------------------------------------------------ > >> Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, > >> MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current > >> with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft > >> MVPs and experts. ON SALE this month only -- learn more at: > >> http://p.sf.net/sfu/learnnow-d2d > >> _______________________________________________ > >> Libmesh-users mailing list > >> [email protected] > >> https://lists.sourceforge.net/lists/listinfo/libmesh-users > >> > > > ------------------------------------------------------------------------------ > > Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, > > MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current > > with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft > > MVPs and experts. ON SALE this month only -- learn more at: > > http://p.sf.net/sfu/learnnow-d2d > > _______________________________________________ > > Libmesh-users mailing list > > [email protected] > > https://lists.sourceforge.net/lists/listinfo/libmesh-users > > > > ------------------------------------------------------------------------------ > Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, > MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current > with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft > MVPs and experts. ON SALE this month only -- learn more at: > http://p.sf.net/sfu/learnnow-d2d > _______________________________________________ > Libmesh-users mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/libmesh-users > ------------------------------------------------------------------------------ Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft MVPs and experts. ON SALE this month only -- learn more at: http://p.sf.net/sfu/learnnow-d2d _______________________________________________ Libmesh-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/libmesh-users
