Thank you John,

I do have some MPI code before LibMeshInit in my real application.

Also, If I do not call MPI_Finalize at the very end I'm getting warning messages from MPI.

Thank you for you explanation with .pvtu, I have changed my code to  libMesh::VTKIO out(mesh); out.write("mesh1.pvtu");   and this worked.

Do you have any suggestions for  the Problem #2 that I reported?

It seems to me that the problem is that the communicator of the Mesh object is smaller than the communicator of the VTK. This causes a problem for me.

Thank you,

Michael.

On 06/13/2018 12:01 PM, John Peterson wrote:


On Tue, Jun 12, 2018 at 7:48 PM, Povolotskyi, Mykhailo <mpovo...@purdue.edu <mailto:mpovo...@purdue.edu>> wrote:

    Dear Libmesh develepers,

    I want to create different instances of mesh on several MPI
    processes. Then I want to output the mesh from one MPI process.


    I am facing problems with the following code:


    #include "libmesh/libmesh.h"
    #include "libmesh/mesh_generation.h"
    #include "libmesh/mesh.h"
    int main(int argc, char ** argv)
    {

      MPI_Init(&argc, &argv);


MPI is already initialized in LibMeshInit, so no need to do this manually unless your real code does MPI communication before LibMeshInit...

      {
        libMesh::LibMeshInit init (argc, argv,MPI_COMM_WORLD);
        libMesh::Mesh
    mesh(libMesh::Parallel::Communicator(MPI_COMM_SELF));
        libMesh::MeshTools::Generation::build_cube (mesh,
                                                    10, 10, 5, 0.0,
    2.0, 0.0, 3.0, 0.0, 4.0,libMesh::HEX8);

        int rank;
        MPI_Comm_rank(MPI_COMM_WORLD, &rank);


Again, I'd just use init.comm().rank() to find out the rank.


        if (rank == 0)
        {
          mesh.write("mesh1.vtu");
        }
      }
      MPI_Finalize();


MPI_Finalize is called in the LibMeshInit destructor, no need to call it manually.

      return 0;
    }



    The problems are as follows:

    Problem #1) If I run the code in serial, I'm getting warning:

    Warning:  This MeshOutput subclass only supports meshes which have
    been serialized!
    Warning:  This MeshOutput subclass only supports meshes which have
    been serialized!
    The .pvtu extension should be used when writing VTK files in libMesh.


    My question:

    a) how to avoid the first waning about the mesh not being serialized?


Unless you have configured libmesh with --enable-parmesh (and therefore Mesh == DistributedMesh) this warning can be safely ignored.


    b) I tried to change the filename to mesh1.pvtu

    In this case I'm getting an error message:



    ERROR: Unrecognized file extension: mesh1.pvtu
       I understand the following:


This is just a (possibly unnecessary) limitation of the NamebasedIO class, it should work (as in misc_ex11 and misc_ex4 if you explicitly construct a VTKIO object and then call the write() method.

--
John

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Libmesh-users mailing list
Libmesh-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-users

Reply via email to