This is what I meant: MassMatrix = integral(phi_i*phi_j)
RHS = MassMatrix*Nodal_F_Vector On Fri, Mar 26, 2010 at 5:11 PM, Karen Lee <[email protected]> wrote: > Sorry, I think I was probably confused. I guess you just meant that I can > simply use integral of f_i phi_i phi_j as my RHS, and my original LHS as my > LHS, and that would already be effectively an interpolation? Please let me > know if this is the correct way to think about it instead of the long > message I sent with lots of code... > > My 2 questions regarding access to data would still remain: > > 1) I am still having problems accessing MeshData from the assemble > function. I would like to do something like > mesh_data.get_data(el.get_node(i))[0] to get the first data variable for > node i with an element, i from 0 to 3, but I'm not sure how to access > mesh_data from my System. (I should use Linear Implicit System so I can have > the matrix on the lhs right?) > > 2) The other question is, for Fe, do I integrate over all the quadrature > points of phi_i and phi_j with f_i being a constant? > > Thank you so much!!! > Karen > > > On Fri, Mar 26, 2010 at 4:57 PM, Karen Lee <[email protected]> wrote: >> >> Thanks Rahul. Your responses have clarified things for me. >> >> I am still having problems accessing MeshData from the assemble function >> (which is only supposed to have 2 arguments right?) >> >> I can do: >> >> void assemble_load(EquationSystems& es, >> const std::string& system_name) >> { >> >> libmesh_assert (system_name == "load"); >> >> >> const MeshBase& mesh = es.get_mesh(); >> printf("mesh_data obtained"); >> >> ...... >> >> But I'm not sure how I can get the MeshData object that I created in main >> that's attached to the mesh I created. In the look iterating over the >> elements el, I know that I have to use something like >> mesh_data.get_data(el.get_node(i))[0] to get the first data variable for >> node i with an element, i from 0 to 3, but I'm not sure how to access >> mesh_data from my System. (I should use Linear Implicit System so I can have >> the matrix on the lhs right?) >> >> My code is based on example 3, and the relevant part is this (not sure if >> it's correct): >> >> for ( ; el != end_el ; ++el) >> { >> const Elem* elem = *el; >> >> dof_map.dof_indices (elem, dof_indices); >> >> fe->reinit (elem); >> >> Ke.resize (dof_indices.size(), >> dof_indices.size()); >> >> Fe.resize (dof_indices.size()); >> >> for (unsigned int qp=0; qp<qrule.n_points(); qp++) >> { >> >> for (unsigned int i=0; i<phi.size(); i++) >> for (unsigned int j=0; j<phi.size(); j++) >> { >> Ke(i,j) += JxW[qp]*(phi[i][qp]*phi[j][qp]); >> } >> >> { >> for (unsigned int i=0; i<phi.size(); i++) >> { >> for (unsigned int k=0; k<phi.size(); k++) >> { >> Fe(i) += >> JxW[qp]*mesh_data.get_data(el.get_node(k))[0]*phi[i][qp]phi[k][qp]; >> >> } >> } >> } >> .... >> >> The other question is, for Fe, do I integrate over all the quadrature >> points of phi_i and phi_j with f_i being a constant? >> >> Then once I get this solution (the variable name is "R", let's say), I >> hope to use it in place of mesh_data.get_data(el.get_node(k))[0] and do >> something like this (of course this is another system that I'm adding to >> EquationSystems): >> >> for (unsigned int qp=0; qp<qrule.n_points(); qp++) >> { >> >> for (unsigned int i=0; i<phi.size(); i++) >> >> >> for (unsigned int j=0; j<phi.size(); j++) >> { >> Ke2(i,j) += JxW[qp]*(dphi[i][qp]*dphi[j][qp]); >> >> >> } >> >> { >> const Real x = q_point[qp](0); >> const Real y = q_point[qp](1); >> const Real z = q_point[qp](2); >> >> >> >> >> const Real fxy = R(x,y,z); >> >> for (unsigned int i=0; i<phi.size(); i++) >> >> >> Fe2(i) += JxW[qp]*fxy*phi[i][qp]; >> } >> } >> >> I'm not sure how to access anything in a Variable object though... Let's >> say "R" being a a variable I add to the first system to get the RHS >> interpolation, and "u" is the variable I add to the second equation system, >> which is the actual solution I'm after... I just know that I can output the >> values of the solution at various nodal points in a file, but am not sure >> what to do with the data structure and how I can extract values at different >> arbitrary locations. >> >> Apologies for the lengthy email... >> >> Thanks, >> Karen >> >> >> On Fri, Mar 26, 2010 at 9:15 AM, Rahul Sampath <[email protected]> >> wrote: >>> >>> Hi Karen: >>> >>> Take a look at any Nonlinear example problem. Whenever you want to use >>> any solution vector in your residual computation, you will need to >>> interpolate the nodal values using the FEM shape functions for this >>> element and then do the integration. It is very similar to what you >>> want to do. That is why I suggested the Mass matrix trick. It is very >>> simple to implement and fast too especially if you want to change f >>> often. You can use the same Mass matrix with differen f. The catch is >>> that you are using your FE shape functions for your interpolation. As >>> long as you are happy with linear interpolation for f this should do. >>> If you want to interpolate f with a higher order polynomial than your >>> FE shape function then this wont work. >>> >>> Btw, if I was not clear earlier: >>> You have to form a global Mass matrix by integrating phi_i phi_j over >>> all elements and doing a typically FEM assembly. Then you can simply >>> multiply this global Mass matrix with you global nodal vector for f. >>> >>> On Fri, Mar 26, 2010 at 12:51 AM, Karen Lee <[email protected]> wrote: >>> > Hi Rahul, I'm not completely sure what you mean. >>> > >>> > I would like to form my RHS by integrating f_i Phi_i (I guess there's >>> > no >>> > need to multiply Phi_j? But you can correct me) for each element. >>> > >>> > In order to do so, I need values of f at various quadrature points. I >>> > have f >>> > at various nodal values. The question is, how do I get this linear >>> > interpolation... >>> > >>> > Do you mean that, for each element, I form the mass matrix by the xyz >>> > values >>> > of the nodes (and a constant 1) and solve for the coefficient by saying >>> > \sum_j A_ij y_j= f_i, where: >>> > >>> > A = [1 x1 y1 z1; >>> > 1 x2 y2 z2; >>> > 1 x3 y3 z3; >>> > 1 x4 y4 z4] and y_j would be my unknown (where j = 1 corresponds >>> > to >>> > the constant value, and 2, 3, 4 corresponds to the gradient in the x, >>> > y, z >>> > directions respectively)? >>> > >>> > Thanks, >>> > Karen >>> > >>> > >>> > On Thu, Mar 25, 2010 at 11:44 PM, Rahul Sampath >>> > <[email protected]> >>> > wrote: >>> >> >>> >> If you want to form a RHS by integrating f_i Phi_i Phi_j, You could >>> >> form a Mass matrix and then multiply with your vector of nodal values. >>> >> >>> >> Rahul >>> >> >>> >> On Thu, Mar 25, 2010 at 11:40 PM, Karen Lee <[email protected]> >>> >> wrote: >>> >> > I'm afraid you misunderstood. I don't have the function that when >>> >> > given >>> >> > x, >>> >> > y, z values gives me the function value. What I do have is just the >>> >> > values >>> >> > at the nodes of the mesh, which need to be linearly interpolated >>> >> > such >>> >> > that I >>> >> > will have something like exact_function. which gives me the value >>> >> > when >>> >> > supplied with any x, y, z. >>> >> > >>> >> > >>> >> > >>> >> > On Thu, Mar 25, 2010 at 10:54 PM, Liang <[email protected]> wrote: >>> >> > >>> >> >> Karen Lee wrote: >>> >> >> >>> >> >>> I guess I'm not clear how to do this: Load data as a solution into >>> >> >>> that, >>> >> >>> and >>> >> >>> query >>> >> >>> it when you're integrating your real system. >>> >> >>> >>> >> >>> I have: >>> >> >>> Mesh mesh(3); >>> >> >>> MeshData mesh_data(mesh); >>> >> >>> mesh_data.activate(); >>> >> >>> mesh.read (mesh_file, &mesh_data); >>> >> >>> mesh_data.read(mesh_file); >>> >> >>> EquationSystems equation_systems (mesh); >>> >> >>> >>> >> >>> >>> >> >>> equation_systems.add_system<ExplicitSystem> ("RHS"); >>> >> >>> equation_systems.get_system("RHS").add_variable("R", FIRST); >>> >> >>> >>> >> >>> After that, I'm not clear how exactly to load data as a solution >>> >> >>> in >>> >> >>> the >>> >> >>> code. My goal is to get a linearly interpolated function of my >>> >> >>> data on >>> >> >>> the >>> >> >>> nodes (in the form of exact_solution, such that I get the function >>> >> >>> value >>> >> >>> out >>> >> >>> when supplying x, y and z). >>> >> >>> >>> >> >>> Hope that clarifies things, and sorry for the multiple emails... >>> >> >>> >>> >> >>> Karen >>> >> >>> >>> >> >>> >>> >> >>> >>> >> >>> ------------------------------------------------------------------------------ >>> >> >>> Download Intel® Parallel Studio Eval >>> >> >>> Try the new software tools for yourself. Speed compiling, find >>> >> >>> bugs >>> >> >>> proactively, and fine-tune applications for parallel performance. >>> >> >>> See why Intel Parallel Studio got high marks during beta. >>> >> >>> http://p.sf.net/sfu/intel-sw-dev >>> >> >>> _______________________________________________ >>> >> >>> Libmesh-users mailing list >>> >> >>> [email protected] >>> >> >>> https://lists.sourceforge.net/lists/listinfo/libmesh-users >>> >> >>> >>> >> >>> >>> >> >>> >>> >> >> so you already have the function, which is obtained from your >>> >> >> discreted >>> >> >> data? >>> >> >> then just put the function as the exact_function. >>> >> >> I think you are trying the 3D case, start from a 2d will be easier. >>> >> >> >>> >> >> Liang >>> >> >> >>> >> > >>> >> > >>> >> > ------------------------------------------------------------------------------ >>> >> > Download Intel® Parallel Studio Eval >>> >> > Try the new software tools for yourself. Speed compiling, find bugs >>> >> > proactively, and fine-tune applications for parallel performance. >>> >> > See why Intel Parallel Studio got high marks during beta. >>> >> > http://p.sf.net/sfu/intel-sw-dev >>> >> > _______________________________________________ >>> >> > Libmesh-users mailing list >>> >> > [email protected] >>> >> > https://lists.sourceforge.net/lists/listinfo/libmesh-users >>> >> > >>> > >>> > >> > > ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ Libmesh-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/libmesh-users
