itaps-parallel [Fwd: **** iMesh.h and iBase.h changes ****]

Vitus Leung vjleung at sandia.gov
Mon Jan 5 13:36:11 CST 2009


Lori,

I am traveling the first pair of days.

Vitus

On Mon, 2009-01-05 at 11:54 -0700, Lori A. Diachin wrote:
> Hi All,
> 
> I'd like to check in on the status of everyone's changes wrt to the
> iMesh.h and iBase.h files that Jason sent out back in October.  We
> decided to defer these until after SC08 and gave ourselves an internal
> deadline of Dec 15... so, are we done yet? :-)
> 
> Seriously - it was my understanding that folks had agreed in principle
> to all of these changes; the one exception was what to do about item #6
> below.   It may very well be that we need a quick telecon to discuss
> this as well as get an update on status.  Carl is planning to send out
> the iMesh paper by Jan 23, so we may want to touch base before then..
> when are folks available for a telecon?  To narrow it down a bit, please
> send me the times you are not available on Monday/Tuesday Jan 12th and
> 13th, or Tues/Wed the 20th and 21st.
> 
> Thanks,
> Lori
> 
> -------- Original Message --------
> Subject:        **** iMesh.h and iBase.h changes ****
> Date:   Fri, 24 Oct 2008 18:13:11 -0500
> From:   Jason Kraftcheck <kraftche at cae.wisc.edu>
> To:     TSTT Interface <tstt-interface at mcs.anl.gov>
> 
> 
> 
> Here is the list of proposed changes to iMesh.h (yes, not just iMeshP.h)
> that were a) agreed upon during the latest telecon and b) may need to be
> completed by all implementations by SC'08.  If you object to any of this,
> please speak out soon.  I've attached copies of the interface definitions,
> updated as described below.
> 
> 
> 1) Version defines:  Beginning with version 0.8 of iMesh.h, we will add the
> following C preprocessor macros.  This will allow, going forward,
> applications to be compatible with more than one version of the interface*.
>   #define IMESH_MAJOR_VERSION 0
>   #define IMESH_MINOR_VERSION 7
> 
> 2) Zero set handle:  All mention of passing 'zero' for a set handle in all
> iMesh.h documention should be replaced with the root set handle*.
> Implementations for which a) the root set handle is not zero and b) that
> actually followed the documentation in that they check for zero rather than
> the root set will need to be updated.
> 
> 3) Handle types*:  The current handle definitions:
>   typedef void* iBase_Instance;
>   typedef void* iBase_EntityHandle;
>   typedef void* iBase_EntitySetHandle;
>   typedef void* iBase_TagHandle;
> 
>   typedef void* iMesh_Instance;
>   typedef void* iMesh_EntityIterator;
>   typedef void* iMesh_EntityArrIterator;
> will be replaced with:
>   typedef struct iBase_Instance_Private* iBase_Instance;
>   typedef struct iBase_EntityHandle_Private* iBase_EntityHandle;
>   typedef struct iBase_EntitySetHandle_Private* iBase_EntitySetHandle;
>   typedef struct iBase_TagHandle_Private* iBase_TagHandle;
> 
>   typedef struct iMesh_Instance_Private* iMesh_Instance;
>   typedef struct iMesh_EntityIterator_Private* iMesh_EntityIterator;
>   typedef struct iMesh_EntityArrIterator_Private* iMesh_EntityArrIterator;
> 
> 
> 4) New Function:
>    /**\brief Set geometric dimension of vertex coordinates
>     *
>     * Set the geometric dimension of the mesh.  Notes:  An application
>     * should not expect this function to succeed unless the mesh database
>     * is empty (no vertices created, no files read, etc.)
>     *\param instance Mesh database from which to request change.
>     *\param geom_dim Requested geometric dimension.
>     */
>    void iMesh_setGeometricDimension( iMesh_Intance instance,
>                                      /*in*/ int geom_dim,
>                                      /*out*/ int* err );
> 
> 
> 5) Changed Functions:  There are several functions for which an entity set
>    handle is treated as 'inout' where it should be 'in'*.  These include:
>      iMesh_addEntToSet
>      iMesh_rmvEntFromSet
>      iMesh_addEntArrToSet
>      iMesh_rmvEntArrFromSet
>      iMesh_addEntSet
>      iMesh_rmvEntSet
>      iMesh_addPrntChld
>      iMesh_rmvPrntChld
>    The argument shoudl be 'in' because the argument (the value of the
>    handle) is not changed.
>    NOTE:  The changes described in 3) will ensure that this change results
>    in compile-time errors.  Without the changes in 3), changing the real
>    type from void** to void* for the arguments would still compile,
>    which could be disastrous.
> 
> 6) The following two functions:
>     iMesh_getAllVtxCoords
>     iMesh_getVtxCoordIndex
>    will be replaced with the new function below.
>    NOTE:  This is slightly different than what was discussed during
>    the telecon.  I a) noticed a deficiency in the usage (added
>    the 'entity_handles' output list) and b) dropped the in_entity_set
>    argument, for which no agreement was reached during the telecon.
> 
>    /**\brief Get indexed representation of mesh or subset of mesh
>     *
>     * Given an entity set and optionally a type or topology, return:
>     * - The entities in the set of the specified type or topology
>     * - The entities adjacent to those entities with a specified
>     *    type, as a list of unique handles.
>     * - For each entity in the first list, the adjacent entities,
>     *    specified as indices into the second list.
>     *
>     *\param entity_set_handle     The set of entities from which to query
>     *\param entity_type_requestor If not iBase_ALL_TYPES, act only on
>     *                             the subset of 'entity_set_handle' of the
>     *                             specified type.
>     *\param entity_topology_requestor If not iMesh_ALL_TOPOLOGIES, act only
>     *                             on the subset of 'entity_set_handle' with
>     *                             the specified topology.
>     *\param entity_type_requested The type of the adjacent entities to
>     *                             return.
>     *\param entity_handles        The handles of the (non-struct) subset of
>     *                             the entity set indicated by
>     *                             'entity_set_handle' and the optional type
>     *                             and topology filtering arguments.
>     *\param adj_entity_handles    The union of the entities of type
>     *                             'requested_entity_type' adjacent to each
>     *                             entity in 'entity_handles'.
>     *\param adj_entity_indices    For each entity in 'entity_handles', the
>     *                             adjacent entities of type
>     *                             'entity_type_requested', specified as
>     *                             indices into 'adj_entity_handles'.  The
>     *                             values are concatenated into a single
>     *                             array in the order of the entity handles
>     *                             in 'entity_handles'.
>     *\param offset                For each entity in the corresponding
>     *                             position in 'entity_handles', the position
>     *                             in 'adj_entity_indices' at which values
>     *                             for that entity are stored.
>     */
>    void iMesh_getAdjEntIndices(iMesh_Instance instance,
>                        /*in*/    const iBase_EntityHandle entity_set_handle,
>                        /*in*/    const int entity_type_requestor,
>                        /*in*/    const int entity_topology_requestor,
>                        /*in*/    const int entity_type_requested,
>                        /*inout*/ iBase_EntityHandle** entity_handles,
>                        /*inout*/ int* entity_handles_allocated,
>                        /*out*/   int* entity_handles_size,
>                        /*inout*/ iBase_EntityHandle** adj_entity_handles,
>                        /*inout*/ int* adj_entity_handles_allocated,
>                        /*out*/   int* adj_entity_handles_size,
>                        /*inout*/ iBsae_EntityHandle** adj_entity_indices,
>                        /*inout*/ int* adj_entity_indices_allocated,
>                        /*out*/   int* adj_entity_indices_size,
>                        /*inout*/ int** offset,
>                        /*inout*/ int* offset_allocated,
>                        /*out*/   int* offset_size,
>                        /*out*/   int *err);
> 
> The code below uses the old interface to retrieve a copy of a hexahedral
> mesh in a simple array form:
>    MBEntityHandle *vertices = 0, *hexes = 0;
>    int *hex_vertex_indices = 0, *hex_vertex_offsets = 0;
>    double* coords;
>    int num_vertices, num_hexes, junk, junk2, junk3, err, order;
>    int *junk_array;
>    junk = 0;
>    iMesh_getEntities( instance, root_set,
>                       iBase_ALL_TYPES,
>                       iMesh_HEXAHEDRON,
>                       &hexes, &junk, &num_hexes, &err );
>    junk = 0;
>    iMesh_getEntities( instance, root_set,
>                       iBase_VERTEX,
>                       iMesh_ALL_TOPOLOGIES,
>                       &vertices, &junk, &num_vertices, &err );
>    junk = junk2 = 0;
>    junk_array = NULL;
>    order = iBase_INTERLEAVED;
>    iMesh_getAllVtxCoords( instance, root_set,
>                           &coords, &junk, &junk,
>                           &junk_array, &junk2, &junk2,
>                           &order, &err);
>    free(junk_array);
>    junk = junk2 = junk3 = 0;
>    junk_array = NULL;
>    iMesh_getVtxCoordIndex( instance, root_set,
>                            iBase_ALL_TYPES, iMesh_HEXAHEDRON,
>                            iBase_VERTEX,
>                            &hex_vertex_offsets, &junk, &junk,
>                            &hex_vertex_indices, &junk2, &junk2,
>                            &junk_array, &junk3, &junk3,
>                            &err );
>    free( junk_array );
> 
> The same code in the new API will be:
>    MBEntityHandle *vertices = 0, *hexes = 0;
>    int *hex_vertex_indices = 0, *hex_vertex_offsets = 0;
>    double* coords;
>    int num_vertices, num_hexes, junk, junk2, junk3, junk4, err;
>    int order;
>    junk = junk2 = junk3 = junk4 = 0;
>    iMesh_getAdjEntIndices( instance, root_set,
>                            iBase_ALL_TYPES, iMesh_HEXAHEDRON,
>                            iBase_VERTEX,
>                            &hexes, &junk, &num_hexes,
>                            &vertices, &junk2, &num_vertices,
>                            &hex_vertex_indices, &junk3, &junk3,
>                            &hex_vertex_offsets, &junk4, &junk4 );
>    junk = 0;
>    order = iBase_INTERLEAVED;
>    iMesh_getVtxArrCoords( instance,
>                           vertices, num_vertex,
>                           &order,
>                           &coords, &junk, &junk,
>                           &err );
> 
> 7) New Function:  Array form of iMesh_isEntContained to replace
>    containment flags no longer returned from iMesh_getVtxCoordIndex
>    (and hopefully some day all the other functions with a similar
>    argument).
> 
>    void iMesh_isEntArrContained( iMesh_Instance instance,
>                           /*in*/ iBase_EntitySetHandle containing_set,
>                           /*in*/ const iBase_EntityHandle* entity_handles,
>                           /*in*/ int num_entity_handles,
>                        /*inout*/ int** is_contained,
>                        /*inout*/ int* is_contained_allocated,
>                          /*out*/ int* is_contained_size,
>                          /*out*/ int* err );
> 
> 
> 8) Replace some iBase_EntityHandle with iBase_EntitySetHandle where
> appropriate*:
>    iMesh_getAdjEntIndices
>    iMesh_getAdjEntities
> 
> - jason
> 
> 
> * Similar changes should probably be made to iGeom.h, iMeshP.h, and iRel.h,
> but that was not discussed during the telecon.
> 
> 
> 





More information about the itaps-parallel mailing list