![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 #ifndef IMESH_REC_CBIND_H__
00002 #define IMESH_REC_CBIND_H__
00003
00004 #include "moab/MOABConfig.h"
00005 #include "iMesh.h"
00006 #include "iMesh_protos.h"
00007 #ifdef MOAB_HAVE_MPI
00008 #include "iMeshP.h"
00009 #include "moab_mpi.h"
00010 #endif
00011
00012 #ifdef __cplusplus
00013 extern "C" {
00014 #endif
00015
00016 /**\brief Get entities of specific type and/or topology in set or instance, recursive
00017 *
00018 * Get entities of specific type and/or topology in set or instance. If recursive
00019 * is passed in non-zero, includes entities in owned sets. All
00020 * entities of a given type or topology are requested by specifying
00021 * iBase_ALL_TOPOLOGIES or iBase_ALL_TYPES, respectively. Specified type
00022 * or topology must be a value in the iBase_EntityType or iMesh_EntityTopology
00023 * enumeration, respectively.
00024 * \param instance iMesh instance handle
00025 * \param entity_set_handle Entity set being queried
00026 * \param entity_type Type of entities being requested
00027 * \param entity_topology Topology of entities being requested
00028 * \param recursive If non-zero, gets entities in owned sets too
00029 * \param *entity_handles Pointer to array of entity handles returned
00030 * from function
00031 * \param *entity_handles_allocated Pointer to allocated size of
00032 * entity_handles array
00033 * \param *entity_handles_size Pointer to occupied size of entity_handles array
00034 * \param *err Pointer to error type returned from function
00035 */
00036 void iMesh_getEntitiesRec( iMesh_Instance instance,
00037 /*in*/ const iBase_EntitySetHandle entity_set_handle,
00038 /*in*/ const int entity_type,
00039 /*in*/ const int entity_topology,
00040 /*in*/ const int recursive,
00041 /*out*/ iBase_EntityHandle** entity_handles,
00042 /*out*/ int* entity_handles_allocated,
00043 /*out*/ int* entity_handles_size,
00044 /*out*/ int* err );
00045
00046 /**\brief Get the number of entities with the specified type in the instance or set, recursive
00047 *
00048 * Get the number of entities with the specified type in the instance
00049 * or set. If recursive is passed in non-zero, includes entities in owned sets.
00050 * If entity set handle is zero, return information for instance,
00051 * otherwise for set. Value of entity type must be from the
00052 * iBase_EntityType enumeration. If iBase_ALL_TYPES is specified,
00053 * total number of entities (excluding entity sets) is returned.
00054 * \param instance iMesh instance handle
00055 * \param entity_set_handle Entity set being queried
00056 * \param entity_type Type of entity requested
00057 * \param recursive If non-zero, includes entities in owned sets too
00058 * \param num_type Pointer to number of entities, returned from function
00059 * \param *err Pointer to error type returned from function
00060 */
00061 void iMesh_getNumOfTypeRec( iMesh_Instance instance,
00062 /*in*/ const iBase_EntitySetHandle entity_set_handle,
00063 /*in*/ const int entity_type,
00064 /*in*/ const int recursive,
00065 /*out*/ int* num_type,
00066 /*out*/ int* err );
00067
00068 /**\brief Get the number of entities with the specified topology in the instance or set
00069 *
00070 * Get the number of entities with the specified topology in the instance
00071 * or set. If recursive is passed in non-zero, includes entities in owned sets.
00072 * If entity set handle is zero, return information for instance,
00073 * otherwise for set. Value of entity topology must be from the
00074 * iMesh_EntityTopology enumeration. If iMesh_ALL_TOPOLOGIES is specified,
00075 * total number of entities (excluding entity sets) is returned.
00076 * \param instance iMesh instance handle
00077 * \param entity_set_handle Entity set being queried
00078 * \param entity_topology Topology of entity requested
00079 * \param recursive If non-zero, includes entities in owned sets too
00080 * \param num_topo Pointer to number of entities, returned from function
00081 * \param *err Pointer to error type returned from function
00082 */
00083 void iMesh_getNumOfTopoRec( iMesh_Instance instance,
00084 /*in*/ const iBase_EntitySetHandle entity_set_handle,
00085 /*in*/ const int entity_topology,
00086 /*in*/ const int recursive,
00087 /*out*/ int* num_topo,
00088 /*out*/ int* err );
00089
00090 /**\brief Get entities with specified type, topology, tag(s) and (optionally) tag value(s)
00091 *
00092 * Get entities with the specified type, topology, tag(s), and optionally tag value(s).
00093 * If tag values pointer is input as zero, entities with specified tag(s) are returned,
00094 * regardless of their value.
00095 * \param instance iMesh instance handle
00096 * \param entity_set_handle Entity set being queried
00097 * \param entity_type Type of entities being requested
00098 * \param entity_topology Topology of entities being requested
00099 * \param tag_handles Array of tag handles
00100 * \param tag_vals Array of tag values (zero if values not requested)
00101 * \param num_tags_vals Number of tags and optionally values
00102 * \param recursive If non-zero, gets entities in owned sets too
00103 * \param *entity_handles Pointer to array of entity handles returned
00104 * from function
00105 * \param *entity_handles_allocated Pointer to allocated size of
00106 * entity_handles array
00107 * \param *entity_handles_size Pointer to occupied size of entity_handles array
00108 * \param *err Pointer to error type returned from function
00109 */
00110 void iMesh_getEntsByTagsRec( iMesh_Instance instance,
00111 /*in*/ const iBase_EntitySetHandle entity_set_handle,
00112 /*in*/ const int entity_type,
00113 /*in*/ const int entity_topology,
00114 /*in*/ const iBase_TagHandle* tag_handles,
00115 /*in*/ const char* const* tag_vals,
00116 /*in*/ const int num_tags_vals,
00117 /*in*/ const int recursive,
00118 /*out*/ iBase_EntityHandle** entity_handles,
00119 /*out*/ int* entity_handles_allocated,
00120 /*out*/ int* entity_handles_size,
00121 /*out*/ int* err );
00122
00123 /**\brief Get entity sets with specified tag(s) and (optionally) tag value(s)
00124 *
00125 * Get entity sets with the specified tag(s) and optionally tag value(s).
00126 * If tag values pointer is input as zero, entities with specified tag(s) are returned,
00127 * regardless of their value.
00128 * \param instance iMesh instance handle
00129 * \param entity_set_handle Entity set being queried
00130 * \param tag_handles Array of tag handles
00131 * \param tag_vals Array of tag values (zero if values not requested)
00132 * \param num_tags_vals Number of tags and optionally values
00133 * \param recursive If non-zero, gets entities in owned sets too
00134 * \param *set_handles Pointer to array of entity handles returned
00135 * from function
00136 * \param *set_handles_allocated Pointer to allocated size of
00137 * set_handles array
00138 * \param *set_handles_size Pointer to occupied size of entity_handles array
00139 * \param *err Pointer to error type returned from function
00140 */
00141 void iMesh_getEntSetsByTagsRec( iMesh_Instance instance,
00142 /*in*/ const iBase_EntitySetHandle entity_set_handle,
00143 /*in*/ const iBase_TagHandle* tag_handles,
00144 /*in*/ const char* const* tag_vals,
00145 /*in*/ const int num_tags_vals,
00146 /*in*/ const int recursive,
00147 /*out*/ iBase_EntitySetHandle** set_handles,
00148 /*out*/ int* set_handles_allocated,
00149 /*out*/ int* set_handles_size,
00150 /*out*/ int* err );
00151
00152 /**\brief Get MBCN type corresponding to iMesh topology value
00153 *
00154 * Get MBCN type corresponding to iMesh topology value. Required for input
00155 * to MBCN canonical numbering functions, which are written in terms of
00156 * MBCN entity types. Returns -1 for type if entity topology is out of
00157 * bounds, or MBMAXTYPE if no corresponding MBCN type exists.
00158 * \param imesh_entity_topology iMesh_EntityTopology value
00159 * \param mbcn_type MBEntityType corresponding to entity topology
00160 */
00161 void iMesh_MBCNType( /*in*/ const int imesh_entity_topology,
00162 /*out*/ int* mbcn_type );
00163
00164 /**\brief Access tag data via direct pointer into contiguous blocks
00165 *
00166 * Iteratively obtain direct access to contiguous blocks of tag
00167 * storage. This function cannot be used with bit tags because
00168 * of the compressed bit storage. This function cannot be used
00169 * with variable length tags because it does not provide a mechanism
00170 * to determine the length of the value for each entity. This
00171 * function may be used with sparse tags, but if it is used, it
00172 * will return data for a single entity at a time.
00173 *
00174 *\Note If this function is called for entities for which no tag value
00175 * has been set, but for which a default value exists, it will
00176 * force the allocation of explicit storage for each such entity
00177 * even though MOAB would normally not explicitly store tag values
00178 * for such entities.
00179 *
00180 *\Example:
00181 *\code
00182 *\endcode
00183 */
00184 void iMesh_tagIterate( iMesh_Instance instance,
00185 /**< [in] iMesh instance */
00186 const iBase_TagHandle tag_handle,
00187 /**< [in] Tag being queried */
00188 iBase_EntityArrIterator entArr_iterator,
00189 /**< [in] Iterator being queried */
00190 void* tag_value,
00191 /**< [out] Pointer to pointer that will be set to tag data memory */
00192 int* count,
00193 /**< [out] Number of contiguous entities in this subrange */
00194 int* err
00195 /**< [out] Returned Error status (see iBase_ErrorType) */
00196 );
00197
00198 /**\brief Access connectivity data via direct pointer into contiguous blocks
00199 *
00200 * Iteratively obtain direct access to contiguous blocks of connectivity
00201 * storage.
00202 *
00203 */
00204 void iMesh_connectIterate( iMesh_Instance instance,
00205 /**< [in] iMesh instance */
00206 iBase_EntityArrIterator entArr_iterator,
00207 /**< [in] Iterator being queried */
00208 iBase_EntityHandle** connect,
00209 /**< [out] Pointer to pointer that will be set to connectivity data memory */
00210 int* verts_per_entity,
00211 /**< [out] Number of vertices per entity in this subrange */
00212 int* count,
00213 /**< [out] Number of contiguous entities in this subrange */
00214 int* err
00215 /**< [out] Returned Error status (see iBase_ErrorType) */
00216 );
00217
00218 /**\brief Access coordinates data via direct pointer into contiguous blocks
00219 *
00220 * Iteratively obtain direct access to contiguous blocks of coordinate
00221 * storage.
00222 *
00223 */
00224 void iMesh_coordsIterate( iMesh_Instance instance,
00225 /**< [in] iMesh instance */
00226 iBase_EntityArrIterator entArr_iterator,
00227 /**< [in] Iterator being queried */
00228 double** coordsx,
00229 /**< [out] Pointer to pointer x coordinates */
00230 double** coordsy,
00231 /**< [out] Pointer to pointer y coordinates */
00232 double** coordsz,
00233 /**< [out] Pointer to pointer z coordinates */
00234 int* count,
00235 /**< [out] Number of contiguous entities in this subrange */
00236 int* err
00237 /**< [out] Returned Error status (see iBase_ErrorType) */
00238 );
00239
00240 /***************************************************************************/ /**
00241 * \ingroup
00242 *EntityIterators
00243 * \brief Step the
00244 *iterator a specified
00245 *number of entities
00246 *
00247 * Step the iterator a
00248 *specified number of
00249 *entities. If this
00250 *number is greater
00251 * than the number of
00252 *entities left in the
00253 *iterator, the
00254 *iterator is placed
00255 * at the end and
00256 *at_end is returned
00257 *non-zero; otherwise
00258 *at_end is returned
00259 *zero.
00260 ******************************************************************************/
00261
00262 void iMesh_stepEntIter( iMesh_Instance instance,
00263 /**< [in] iMesh instance handle */
00264 iBase_EntityIterator ent_iterator,
00265 /**< [in] Iterator being queried */
00266 int step_length,
00267 /**< [in] Number of entities to step the iterator */
00268 int* at_end,
00269 /**< [out] Non-zero if iterator is at the end of the iteration */
00270 int* err
00271 /**< [out] Returned Error status (see iBase_ErrorType) */
00272 );
00273
00274 void iMesh_stepEntArrIter( iMesh_Instance instance,
00275 /**< [in] iMesh instance handle */
00276 iBase_EntityArrIterator entArr_iterator,
00277 /**< [in] Iterator being queried */
00278 int step_length,
00279 /**< [in] Number of entities to step the iterator */
00280 int* at_end,
00281 /**< [out] Non-zero if iterator is at the end of the iteration */
00282 int* err
00283 /**< [out] Returned Error status (see iBase_ErrorType) */
00284 );
00285
00286 /***************************************************************************/ /**
00287 * \ingroup
00288 *EntityIterators
00289 * \brief Initialize
00290 *an array iterator
00291 *over specified
00292 *entity type,
00293 *topology, and size,
00294 *with an optional
00295 *recursive flag.
00296 *
00297 * Initialize an array
00298 *iterator over
00299 *specified entity
00300 *type, topology, and
00301 * size, for a
00302 *specified set or
00303 *instance. Iterator
00304 *returned can be used
00305 * as input to
00306 *functions returning
00307 *entities for the
00308 *iterator. If all
00309 * entities of a
00310 *specified type
00311 *and/or topology are
00312 *to be iterated,
00313 * specify
00314 *iBase_ALL_TYPES or
00315 *iMesh_ALL_TOPOLOGIES,
00316 *respectively.
00317 * Specified type or
00318 *topology must be a
00319 *value in the
00320 *iBase_EntityType or
00321 * iMesh_EntityTopology
00322 *enumerations,
00323 *respectively. If
00324 *recursive is true,
00325 * entities are
00326 *retrieved
00327 *recursively through
00328 *contained (but not
00329 *child) sets.
00330 ******************************************************************************/
00331
00332 void iMesh_initEntArrIterRec( iMesh_Instance instance,
00333 /**< [in] iMesh instance handle */
00334 const iBase_EntitySetHandle entity_set_handle,
00335 /**< [in] Entity set being iterated */
00336 const int requested_entity_type,
00337 /**< [in] Type of entity to iterate */
00338 const int requested_entity_topology,
00339 /**< [in] Topology of entity to iterate */
00340 const int requested_array_size,
00341 /**< [in] Size of chunks of handles returned for each value of the
00342 iterator */
00343 const int resilient,
00344 /**< [in] If zero, return a non-resilient iterator.
00345 Otherwise, a resilient iterator (\ref resilient) */
00346 const int recursive,
00347 /**< [in] If non-zero, entities retrieved recursively */
00348 iBase_EntityArrIterator* entArr_iterator,
00349 /**< [out] Pointer to iterator returned from function */
00350 int* err
00351 /**< [out] Returned Error status (see iBase_ErrorType) */
00352 );
00353
00354 /***************************************************************************/ /**
00355 * \ingroup Tags
00356 * \brief Get all the
00357 *tags associated with
00358 *the entire interface
00359 *
00360 * Get all the tags
00361 *associated with the
00362 *entire interface
00363 ******************************************************************************/
00364
00365 void iMesh_getAllIfaceTags( iMesh_Instance instance,
00366 /*inout*/ iBase_TagHandle** tag_handles,
00367 /*inout*/ int* tag_handles_allocated,
00368 /*out*/ int* tag_handles_size,
00369 /*out*/ int* err );
00370
00371 /***************************************************************************/ /**
00372 * \ingroup Tags
00373 * \brief Create a
00374 *tag with options
00375 *
00376 * Create a tag with
00377 *options; allows
00378 *creation of Dense
00379 *and Bit tags through
00380 *iMesh Allowable
00381 *options are:
00382 * TAG_STORAGE_TYPE={DENSE
00383 *| SPARSE | BIT |
00384 *MESH}
00385 * TAG_DEFAULT_VALUE=
00386 *(data type of value
00387 *should match tag
00388 *data type)
00389 ******************************************************************************/
00390
00391 void iMesh_createTagWithOptions( iMesh_Instance instance,
00392 /**< [in] iMesh instance handle */
00393 /*in*/ const char* tag_name,
00394 /**< [in] tag name*/
00395 /*in*/ const char* tmp_tag_options,
00396 /**< [in] options string */
00397 /*in*/ const int tag_size,
00398 /**< [in] tag size, in number of values */
00399 /*in*/ const int tag_type,
00400 /**< [in] tag data type (int, double, etc.) */
00401 /*out*/ iBase_TagHandle* tag_handle,
00402 /**< [out] handle of new tag */
00403 /*out*/ int* err,
00404 /**< [out] error */
00405 /*in*/ const int tag_name_len,
00406 /**< [in] length of tag name string */
00407 /*in*/ const int tag_options_len );
00408 /**< [in] length of options string */
00409
00410 /***************************************************************************/ /**
00411 * \ingroup ScdMesh
00412 * \brief Create a
00413 *structured mesh
00414 *
00415 * Create a structured
00416 *mesh, with local and
00417 *(optionally) global
00418 *ijk parameters and
00419 * optional physical
00420 *positions. If
00421 *running in parallel,
00422 *can request shared
00423 *vertex resolution
00424 * and optional number
00425 *and type of ghost
00426 *layers of elements.
00427 *Global parameters
00428 *are used to compute
00429 * global ids, which
00430 *are used in shared
00431 *vertex resolution.
00432 ******************************************************************************/
00433
00434 void iMesh_createStructuredMesh(
00435 iMesh_Instance instance,
00436 /**< [in] iMesh instance handle */
00437 int* local_dims,
00438 /**< [in] Min/max corners of local ijk parameters, -1 for unused dimensions; specified as
00439 ilo, jlo, klo, ihi, jhi, khi. */
00440 int* global_dims,
00441 /**< [in] Min/max corners of global ijk parameters, -1 for unused dimensions; NULL if running in
00442 serial. Order similar to local_dims. */
00443 double* i_vals,
00444 /**< [in] Physical positions of i values, NULL if not placed in physical space. */
00445 double* j_vals,
00446 /**< [in] Physical positions of j values, NULL if not placed in physical space. */
00447 double* k_vals,
00448 /**< [in] Physical positions of k values, NULL if not placed in physical space. */
00449 int resolve_shared,
00450 /**< [in] Non-zero if running in parallel and resolution of shared vertices is desired, zero
00451 otherwise. */
00452 int ghost_dim,
00453 /**< [in] Dimension of entities to ghost, -1 if none desired. */
00454 int bridge_dim,
00455 /**< [in] Dimension of bridge entities used to compute ghosts, -1 if no ghosts desired. */
00456 int num_layers,
00457 /**< [in] Number of layers of ghosts desired, -1 if no ghosts desired. */
00458 int addl_ents,
00459 /**< [in] Dimension of addition entities adjacent to ghosts to exchange. */
00460 int vert_gids,
00461 /**< [in] If non-zero, assigns global ids to vertices, according to global parameterization. */
00462 int elem_gids,
00463 /**< [in] If non-zero, assigns global ids to elements, according to global parameterization. */
00464 iBase_EntitySetHandle* set_handle,
00465 /**< [inout] A set to which the underlying ScdBox set will be added. NULL if not desired.
00466 * If *NULL, will be set directly to the underlying ScdBox's set. */
00467 int* err
00468 /**< [out] Error flag. */
00469 );
00470 /***************************************************************************/ /**
00471 * \brief Free memory
00472 *allocated with
00473 *malloc
00474 *
00475 ******************************************************************************/
00476
00477 void iMesh_freeMemory( iMesh_Instance instance,
00478 /**< [in] iMesh instance handle */
00479 void** ptrToMem );
00480
00481 /***************************************************************************/ /**
00482 * \defgroup ScdMesh
00483 *Structured Mesh
00484 * \ingroup
00485 *iMeshExtensions
00486 ******************************************************************************/
00487
00488 /***************************************************************************/ /**
00489 * \defgroup
00490 *iMeshExtensions
00491 *iMesh Extensions
00492 * \ingroup iMesh
00493 ******************************************************************************/
00494
00495 #ifdef __cplusplus
00496 }
00497 #endif
00498
00499 #endif