Functions that need cloning for per-part queries
Hello, all. First, I apologize for being slower than I'd promised in getting these out. Second, I apologize for an earlier miscount: by the time we clone getNumOfType/Topo (twice each) and the global entity query functions and both sets of iterator functions (once each), there are a total of sixteen new functions, of which the whole-partition getNumOf* funcs are already mandated elsewhere. Here they are; let the debate begin. :-) Carl -- ------------------------------------------------------------------------ Dr. Carl Ollivier-Gooch, P.Eng. Voice: +1-604-822-1854 Associate Professor Fax: +1-604-822-2403 Department of Mechanical Engineering email: [email protected] University of British Columbia http://www.mech.ubc.ca/~cfog Vancouver, BC V6T 1Z4 http://tetra.mech.ubc.ca/ANSLab/ ------------------------------------------------------------------------ Serial: void iMesh_getNumOfType(iMesh_Instance instance, const iBase_EntitySetHandle entity_set_handle, const int entity_type, int *num_type, int *err); void iMesh_getNumOfTopo(iMesh_Instance instance, const iBase_EntitySetHandle entity_set_handle, const int entity_topology, int *num_topo, int *err); Per part: void prefix_getNumOfType(iMesh_Instance instance, const prefix_PartHandle part_handle, const iBase_EntitySetHandle entity_set_handle, const int entity_type, int *num_type, int *err); void prefix_getNumOfTopo(iMesh_Instance instance, const prefix_PartHandle part_handle, const iBase_EntitySetHandle entity_set_handle, const int entity_topology, int *num_topo, int *err); Whole partition: void prefix_getNumOfTypePar(const prefix_PartitionHandle partition_handle, const iBase_EntitySetHandle entity_set_handle, const int entity_type, int *num_type, int *err); void prefix_getNumOfTopoPar(const prefix_PartitionHandle partition_handle, const iBase_EntitySetHandle entity_set_handle, const int entity_topology, int *num_topo, int *err); Entity queries: Serial: void iMesh_getAllVtxCoords (iMesh_Instance instance, const iBase_EntitySetHandle entity_set_handle, n double** coordinates, int* coordinates_allocated, int* coordinates_size, int** in_entity_set, int* in_entity_set_allocated, int* in_entity_set_size, int* storage_order, int *err); void iMesh_getVtxCoordIndex (iMesh_Instance instance, const iBase_EntitySetHandle entity_set_handle, const int requested_entity_type, const int requested_entity_topology, const int entity_adjacency_type, int** offset, int* offset_allocated, int* offset_size, int** index, int* index_allocated, int* index_size, int** entity_topologies, int* entity_topologies_allocated, int* entity_topologies_size, int *err); void iMesh_getEntities(iMesh_Instance instance, const iBase_EntitySetHandle entity_set_handle, const int entity_type, const int entity_topology, iBase_EntityHandle** entity_handles, int* entity_handles_allocated, int* entity_handles_size, int *err); void iMesh_getAdjEntities(iMesh_Instance instance, const iBase_EntityHandle entity_set_handle, const int entity_type_requestor, const int entity_topology_requestor, const int entity_type_requested, iBase_EntityHandle** adj_entity_handles, int* adj_entity_handles_allocated, int* adj_entity_handles_size, int** offset, int* offset_allocated, int* offset_size, int** in_entity_set, int* in_entity_set_allocated, int* in_entity_set_size, int *err); Per part: void prefix_getAllVtxCoords (iMesh_Instance instance, prefix_PartHandle part_handle, const iBase_EntitySetHandle entity_set_handle, double** coordinates, int* coordinates_allocated, int* coordinates_size, int** in_entity_set, int* in_entity_set_allocated, int* in_entity_set_size, int* storage_order, int *err); void prefix_getVtxCoordIndex (iMesh_Instance instance, prefix_PartHandle part_handle, const iBase_EntitySetHandle entity_set_handle, const int requested_entity_type, const int requested_entity_topology, const int entity_adjacency_type, int** offset, int* offset_allocated, int* offset_size, int** index, int* index_allocated, int* index_size, int** entity_topologies, int* entity_topologies_allocated, int* entity_topologies_size, int *err); void prefix_getEntities(iMesh_Instance instance, prefix_PartHandle part_handle, const iBase_EntitySetHandle entity_set_handle, const int entity_type, const int entity_topology, iBase_EntityHandle** entity_handles, int* entity_handles_allocated, int* entity_handles_size, int *err); void prefix_getAdjEntities(iMesh_Instance instance, prefix_PartHandle part_handle, const iBase_EntityHandle entity_set_handle, const int entity_type_requestor, const int entity_topology_requestor, const int entity_type_requested, iBase_EntityHandle** adj_entity_handles, int* adj_entity_handles_allocated, int* adj_entity_handles_size, int** offset, int* offset_allocated, int* offset_size, int** in_entity_set, int* in_entity_set_allocated, int* in_entity_set_size, int *err); Entity iterators: Serial: void iMesh_initEntIter(iMesh_Instance instance, const iBase_EntitySetHandle entity_set_handle, const int requested_entity_type, const int requested_entity_topology, iMesh_EntityIterator* entity_iterator, int *err); void iMesh_getNextEntIter(iMesh_Instance instance, iMesh_EntityIterator entity_iterator, iBase_EntityHandle* entity_handle, int *has_data, int *err); void iMesh_resetEntIter(iMesh_Instance instance, iMesh_EntityIterator entity_iterator, int *err); void iMesh_endEntIter(iMesh_Instance instance, iMesh_EntityIterator entity_iterator, int *err); Per part: void prefix_initEntIter(iMesh_Instance instance, prefix_PartHandle part_handle, const iBase_EntitySetHandle entity_set_handle, const int requested_entity_type, const int requested_entity_topology, iMesh_EntityIterator* entity_iterator, int *err); void prefix_getNextEntIter(iMesh_Instance instance, prefix_PartHandle part_handle, iMesh_EntityIterator entity_iterator, iBase_EntityHandle* entity_handle, int *has_data, int *err); void prefix_resetEntIter(iMesh_Instance instance, prefix_PartHandle part_handle, iMesh_EntityIterator entity_iterator, int *err); void prefix_endEntIter(iMesh_Instance instance, prefix_PartHandle part_handle, iMesh_EntityIterator entity_iterator, int *err); Array iterators Serial: void iMesh_initEntArrIter(iMesh_Instance instance, const iBase_EntitySetHandle entity_set_handle, const int requested_entity_type, const int requested_entity_topology, const int requested_array_size, iMesh_EntityArrIterator* entArr_iterator, int *err); void iMesh_getNextEntArrIter(iMesh_Instance instance, iMesh_EntityArrIterator entArr_iterator, iBase_EntityHandle** entity_handles, int* entity_handles_allocated, int* entity_handles_size, int *has_data, int *err); void iMesh_resetEntArrIter(iMesh_Instance instance, iMesh_EntityArrIterator entArr_iterator, int *err); void iMesh_endEntArrIter(iMesh_Instance instance, iMesh_EntityArrIterator entArr_iterator, int *err); Per part: void prefix_initEntArrIter(iMesh_Instance instance, prefix_PartHandle part_handle, const iBase_EntitySetHandle entity_set_handle, const int requested_entity_type, const int requested_entity_topology, const int requested_array_size, iMesh_EntityArrIterator* entArr_iterator, int *err); void prefix_getNextEntArrIter(iMesh_Instance instance, prefix_PartHandle part_handle, iMesh_EntityArrIterator entArr_iterator, iBase_EntityHandle** entity_handles, int* entity_handles_allocated, int* entity_handles_size, int *has_data, int *err); void prefix_resetEntArrIter(iMesh_Instance instance, prefix_PartHandle part_handle, iMesh_EntityArrIterator entArr_iterator, int *err); void prefix_endEntArrIter(iMesh_Instance instance, prefix_PartHandle part_handle, iMesh_EntityArrIterator entArr_iterator, int *err);
Just one comment that is general in nature and may or may not have any bearing to the decisions we need to make. There is the assumption that having a small number of functions is the best answer. However, in an effort to make things as compact as possible, one can become vague in the functions. We (RPI SCOREC) have experience with software that actually goes the other direction where there is an insistence that the functions be very clear and because of that the number of functions is larger than if the focus was to keep the number at a minimum. Students here that have developed stuff have typically been more successful with the software that follows the second model. I guess my point is we should be focused on being sure our interfaces make sense and will be useful to those that we want to use it. Within that, let the number of functions be whatever comes out. Mark Carl Ollivier-Gooch wrote:
Hello, all.
First, I apologize for being slower than I'd promised in getting these out.
Second, I apologize for an earlier miscount: by the time we clone getNumOfType/Topo (twice each) and the global entity query functions and both sets of iterator functions (once each), there are a total of sixteen new functions, of which the whole-partition getNumOf* funcs are already mandated elsewhere.
Here they are; let the debate begin. :-)
Carl
Hi, Carl. Thank you for putting together this list. I have only one question: Mesh instances contain entity sets, so iMesh functions have both Mesh instance handles and entity set handles in their argument lists. Similarly, partitions contain parts. So I assumed functions with part handles in their argument lists would also have partition handles in the argument lists. I think having both arguments would make implementing and supporting multiple partitions easier, and would provide a nice analogue with the mesh instance/entity set. Karen On 1/14/08 8:58 AM, "Carl Ollivier-Gooch" <[email protected]> wrote:
Hello, all.
First, I apologize for being slower than I'd promised in getting these out.
Second, I apologize for an earlier miscount: by the time we clone getNumOfType/Topo (twice each) and the global entity query functions and both sets of iterator functions (once each), there are a total of sixteen new functions, of which the whole-partition getNumOf* funcs are already mandated elsewhere.
Here they are; let the debate begin. :-)
Carl
Devine, Karen D wrote:
Hi, Carl.
Thank you for putting together this list. I have only one question:
Mesh instances contain entity sets, so iMesh functions have both Mesh instance handles and entity set handles in their argument lists. Similarly, partitions contain parts. So I assumed functions with part handles in their argument lists would also have partition handles in the argument lists. I think having both arguments would make implementing and supporting multiple partitions easier, and would provide a nice analogue with the mesh instance/entity set.
I had been assuming that part handles would be unique (or at least unique within an instance / process). This is probably not a great assumption, given that an implementation could easily choose to use integers as process-specific part handles (instead of pointers). I've got no objection to adding the partition handle as an argument as well; any other opinions? Carl -- ------------------------------------------------------------------------ Dr. Carl Ollivier-Gooch, P.Eng. Voice: +1-604-822-1854 Associate Professor Fax: +1-604-822-2403 Department of Mechanical Engineering email: [email protected] University of British Columbia http://www.mech.ubc.ca/~cfog Vancouver, BC V6T 1Z4 http://tetra.mech.ubc.ca/ANSLab/ ------------------------------------------------------------------------
The ITAPS Parallel Interface Subcommittee will have a phone conference on Friday, 1/18, at 1PM PST. Please read Carl's list of functions that would have to be modified to include partition and part handles. Be prepared to decide whether this list is small enough to be accepted into the parallel interface and large enough to provide the needed functionality. Karen
What is the phone number and code. I search many emails and did not find. Xiaolin On Thu, 2008-01-17 at 11:10 -0700, Devine, Karen D wrote:
The ITAPS Parallel Interface Subcommittee will have a phone conference on Friday, 1/18, at 1PM PST.
Please read Carl's list of functions that would have to be modified to include partition and part handles. Be prepared to decide whether this list is small enough to be accepted into the parallel interface and large enough to provide the needed functionality.
Karen
Phone Number: 866-213-1863 Participate code: 956751 Xiaolin Li wrote:
What is the phone number and code. I search many emails and did not find.
Xiaolin
On Thu, 2008-01-17 at 11:10 -0700, Devine, Karen D wrote:
The ITAPS Parallel Interface Subcommittee will have a phone conference on Friday, 1/18, at 1PM PST.
Please read Carl's list of functions that would have to be modified to include partition and part handles. Be prepared to decide whether this list is small enough to be accepted into the parallel interface and large enough to provide the needed functionality.
Karen
-- ================================================================ "You will keep in perfect peace him whose mind is steadfast, because he trusts in you." Isaiah 26:3 Tim Tautges Argonne National Laboratory ([email protected]) (telecommuting from UW-Madison) phone: (608) 263-8485 1500 Engineering Dr. fax: (608) 263-4499 Madison, WI 53706
participants (5)
-
Carl Ollivier-Gooch -
Devine, Karen D -
Mark Shephard -
Tim Tautges -
Xiaolin Li