getfem-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Getfem-users] Interpolation


From: Giovani
Subject: Re: [Getfem-users] Interpolation
Date: Wed, 14 Mar 2007 10:07:14 -0300
User-agent: Thunderbird 1.5.0.9 (X11/20070106)

Yves

Using that piece of code with the mesh correspondences you gave me, I played with the program and found out the error: I was supposing that the numeration of the getfem::mesh points and getfem::mesh_fem dofs were the same. Once I figured this out, it was simple to write a class that would map these correspondences, thus allowing the program to work as it should. That's why nodes far away were moving when they should not.

Thank you very much!

Best,

Giovani


Renard Yves escreveu:
Selon Giovani <address@hidden>:

Yves:

Thank you very much for the quick reply!

I've prepared a simplified version of the program, which I've posted here:

http://www.ifi.unicamp.br/~gfaccin/download/interpolation.tar.gz


Using a sparse matrix, the following piece of code allows to see the
correspondance between nodes of the small mesh and node of the large mesh:

gmm::row_matrix< gmm::rsvector<double> >
    N( S_meshfem.nb_dof(), L_meshfem.nb_dof()  );
getfem::interpolation( L_meshfem, S_meshfem, N);

for (unsigned i = 0; i < S_meshfem.nb_dof(); ++i) {
  gmm::linalg_traits<gmm::rsvector<double> >::const_iterator
    it = gmm::vect_const_begin(N[i]),
    ite = gmm::vect_const_end(N[i]);
  for (; it != ite; ++it) {
    cout << "S dof " << i << " localized at  " << S_meshfem.point_of_dof(i)
                 << " influenced by L dof " << it.index() << " localized at  "
                 << L_meshfem.point_of_dof(it.index()) << endl;
  }
}

I tried and the result is normal. I did not detect some correspondance between
nodes that are far away from each other.

This version will load 2 meshes from the disk (which are also provided in the file) and solve their movement equations with a central difference scheme. The calculation's output is sent to the disk in opendx format, and can be viewed using an opendx program that's also provided in the file.

I've also added the resulting movies for the default situation (happens if you simply compile the program and run, without changing anything), in avi format.

One curiosity: you said that "gmm::mult( gmm::transposed(N), S_ax , L_ax); is not strictly speaking an interpolation of the solution on the fine mesh onto the coarse mesh". If I were to build an interpolation matrix, which I call here "N" that strictly speaking does the interpolation, how should I proceed in order to do it?

the function getfem::interpolation( L_meshfem, S_meshfem, N) gives you the
matrix with allows to compute the interpolation of a solution on the large mesh
on the small mesh. i.e. gmm::mult( N, L_az , S_az) really does this
interpolation. The meaning of gmm::mult( gmm::transposed(N), S_az , L_az) is
not strictly speaking speaking an interpolation. If fact, in your case, this
operation will sum the contribution of a lot of point of the small mesh without
making a mean of this contributions. I think you would better use
getfem::interpolation( S_meshfem, L_meshfem, N). (even if there is some
warnings ... !  you can suppress the warning by invoking
dal::set_warning_level(0))



Best,

Yves.

-------------------------------------------------------------------------
  Yves Renard (address@hidden)       tel : (33) 04.72.43.80.11
  Pole de Mathematiques, INSA de Lyon          fax : (33) 04.72.43.85.29
  Institut Camille Jordan - CNRS UMR 5208
  20, rue Albert Einstein
  69621 Villeurbanne Cedex, FRANCE
  http://math.univ-lyon1.fr/~renard
-------------------------------------------------------------------------






_______________________________________________
Getfem-users mailing list
address@hidden
https://mail.gna.org/listinfo/getfem-users





reply via email to

[Prev in Thread] Current Thread [Next in Thread]