[MOAB-dev] Possible bug in 2-D quadratic elements

Jason Kraftcheck kraftche at cae.wisc.edu
Tue Jan 13 15:27:35 CST 2009


Wollaber, Allan B. wrote:
> To whom it may concern:
> 
> I am a developer for the neutronics part (UNIC) of the SHARP project at
> ANL, and as of late I have been using MOAB to read CUBIT 10.2 files in
> order to generate UNIC-native mesh objects.  The mesh data in UNIC is
> organized by the MATERIAL_SET (block) tags.  Therefore, to bring in the
> entities, I have a subroutine (UNIC is written in FORTRAN90) that (1)
> calls "getEntitiesRec" to get all the elements in a block, and (2) calls
> "getEntArrAdj" to get the vertex connectivities of these entities, among
> other things.  For an example, see the code snippet below.
> 
> This works as desired for all 3D elements that I've tried and for linear
> 2-D elements. However, I have encountered a difficulty regarding
> quadratic 2-D elements, for instance: TRI6, QUAD8, and QUAD9. The
> connectivity array contains only the linear vertices. For example,
> although a TRI6 has 6 nodes, the connectivity array for a single TRI6 is
> 3 integers long and it correctly indexes into the global vertex
> coordinates with the correct MBCN ordering.  For a QUAD8, the
> connectivity indexing is 4 integers long, and for a QUAD9 (strangely),
> it is 5 integers long. 
> 

Hi,

You are using the iMesh API to access MOAB data.  The ITAPS workgroup has
not yet reached a consensus on how higher-order nodes will be handled in
this API.  The current behavior, as required by the interface standard, is
to return only the topological connectivity (first-order nodes) for
adjacency queries.  So, unfortunately, this is a feature rather than a bug
(except for the 5-handle result for QUAD9, which is a bug.)

The normal work-around for this is to use MOAB's native API rather than the
iMesh API.  However, as you are using FORTRAN and MOAB's native API is C++,
I assume that using MOAB's native API is not an option.  I have just checked
a change to MOAB that provides an alternate work-around.  Using the latest
version of MOAB, if you pass the string ";HIGHER_ORDER_ADJ" (the leading ';'
is not a typo) to the iMesh_createMesh function then iMesh_getEntArr and
iMesh_getEntAdjArr will return the complete connectivity.

Please note that this will not work with other implementations of the iMesh
implementation, and may no longer be supported by MOAB's implementation of
that API once the ITAPS workgroup has defined a standard mechanism for
obtaining this information.

- jason



More information about the moab-dev mailing list