MeshRefiner assert fail without MPI

Issue #37 resolved
cpcqrt created an issue

I compiled the moab with latest commit in develop branch (cf01e04), MSMPI(based on MPICH) and VS2015, the library compiled successfully. However, the test_mesh_refiner.cpp is failed when not using MPI.

After I #undef MOAB_HAS_MPI, the error occur at mref->refine(ents_to_refine) in test_mesh_refiner.cpp.

The error message is: Assertion failed: valid_tag_handle( tag_handle ), file ...\src\Core.cpp, line 2136 , which was called by this->tag_manager->set_element_procs_from_ent( *it ); in Line 133 of RefinerTagManager.cpp.

I haven't yet tested with MPI, but I assume MeshRefiner can work without MPI, based on how test_mesh_refiner.cpp was written.

I also found that NestedRefine is not included in CMakeList as well.

Thanks.

Comments (11)

  1. Vijay M

    Thanks for reporting this. I will take a look at it and update master with a fix.

    You should not manually modify undef MOAB_HAVE_MPI. This is a configuration change and needs to propagate correctly. The Refiner tool is currently deprecated and will be removed in the next release. We suggest you use the NestedRefine based UMR tool for your needs. If this is not getting compiled currently, I'll update this also.

  2. cpcqrt reporter

    Thanks.

    I tried to compile NestedRefine as well, but currently, the it's not in any project. (I use cmake on windows).

    Besides, does that mean both MeshRefiner and NestedRefine will be removed, or just the former?

  3. Vijay M

    No, only the former since it relates to only simplices. The latter has templates for all MOAB supported elements and so is more extensible in sense.

  4. cpcqrt reporter

    I tried the NestedRefine. But seems it can't adapt to geometry, I suppose I should keep on MeshRefiner. Is there any workaround there?

    The problem I found about MeshRefiner, is the tag tag_ipsproc/ tag_opsproc is not set properly before it is requested.

  5. Vijay M

    Sorry, I haven't had time to get around to this yet. Soon.

    I tried the NestedRefine. But seems it can't adapt to geometry, I suppose I should keep on MeshRefiner. Is there any workaround there?

    Do you compile MOAB with CGM ? If you load OCC-based BREP geometry with CGM, then we can use iGeom calls to project the newly inserted points on to the exact geometric surface. You could do a ray trace (line segment intersection on a surface) to find the exact location of the new vertex.

    There is ongoing work to make use of the geometry information and in the absence of it, do a higher order surface reconstruction with just the mesh elements. The code is currently being tested and we hope to merge to master by end of August.

    I don't think MeshRefiner makes use of the geometry information either. Do you see any code for that tool that suggests otherwise ?

  6. cpcqrt reporter

    Actually I am only guessing MeshRefiner can adapt to geometry because they have something called edge evaluator. Those are pure speculation.

    Thanks for the your help. I will try the CGM right away.

  7. Vijay M

    NestedRefine should be compiled with CMake now. Can you please verify so that I can close this issue ?

  8. Log in to comment