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
Libmesh-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-users

Reply via email to