Subject: [Libmesh-users] Parallel Mesh Generation in
Libmesh



Dear Users,

We are writing a multiphysics tool where we need to replicate a FD mesh in a FE
way. We have been almost able to translate one into the other but are facing
some minor difficulties (hopefully).
I would greatly appreciate if someone could help us find the missing steps for
having a complete mesh.
We need to build/replicate the mesh from scratch in parallel (distributed mesh)
because due to the nature of a FD grid it has ~10^8 or more grid points
What we HAVE:
- functions that uniquely assign a node ID to each FD grid point (locally as
well as globally contiguously across processes, uniquely, 0-based)
- functions that assign these nodes to elements (we support TRI3, QUAD4, TET4,
HEX8) 2/3D respectively.
- functions that uniquely assign an element ID to each element (locally as well
as globally contiguously across processes, uniquely, 0-based)
- to copy the mesh we do:
- loop over element’s and their nodes and add their nodes if they are
not already added by:
- building a node (with the coordinates, and global ID)
- setting processor_id() (not necessarily the one that this is
done on)
- setting unique_id
- adding node
- loop over elements and add them by:
- building element
- setting processor_id()
- setting id
- setting unique_id
- setting nodes (with loop over nodes)
- adding element
- them we call the following functions:
mesh.partitioner() = NULL;
mesh.allow_renumbering(false);
mesh.skip_partitioning(true);

MeshCommunication().gather_neighboring_elements(cast_ref<DistributedMesh
&>(mesh));
mesh.prepare_for_use(/*skip_renumber_nodes_and_elements=*/
true, /*skip_find_neighbors=*/false);

This will create a mesh that looks ok if printed but trips assertions in debug
mode.

What we DON’T HAVE:
- A clear understanding of how ghost elements in LibMesh work.
- Knowledge about the difference of ghost and semilocal elements.
- A clear outline of operations to perform in order to set up such a parallel
mesh with the availability of the above mentioned functions for numbering.
A note on this: The above mentioned functions create elements across
the entire FD grid also such element that span across processor boundaries. If
I read them in like that will
Libmesh be able to find out about which of them
are ghost elements just by knowing that their vertices are not all on the same
processor (e.g. after calling prepare_for_use).
If this is not the case how exactly would I go
about telling this kind of information to Libmesh?

I come from a FD background and am currently gaining knowledge on all types of
FE codes, so excuse me for any obvious points that I might have missed.
I appreciate your help!

–Barna

<https://www.youtube.com/channel/UCQiVLRF9ub-T8sW-RKIULMA>
------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
_______________________________________________
Libmesh-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libmesh-users



Programming list archiving by: Enterprise Git Hosting