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&#174; 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&#174; 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&#174; 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

Reply via email to