Parallel iMesh data model: Machine level: collection of iMesh instances, one per processor, communicating through MPI_COMM_WORLD (default) or other specified communicator (which is a tag on the mesh instance) Processor level: one iMesh instance/processor Partition: set of sets with an application-specified tag (by name or by tag handle) Part: entity set(s) in instance with partition tag specified by application iMesh basic interface extension: getEntsByTypeAndTag, getNumEntsByTypeAndTag: get number/entities having designated type, tag, and, optionally, tag value getSetsByTypeAndTag, getNumSetsByTypeAndTag: get number/entity sets having designated type, tag, and, optionally, tag value Partition level: . partition representation: . set which includes part sets . marked with "PartitionSet" tag to identify as partition . optionally contains "MPICommunicator" tag which identifies communicator associated with this partition . available as tag conventions: "ProcAssignment" (part-proc, entity-proc assignment), "PartitionSet" (identifies handle as a partition), "MPICommunicator" (identifies communicator associated with partition handle), "ParGlobalId" (for part ids) . handled by existing iMesh functions: getTotNumOfParts (getNumEntSets), getNumOfPartsArr (getNumEntSets), add/rmvPartOnProc (createEntSet/destroyEntSet), create/destroyPart (createEntSet/destroyEntSet), . New functionality: . getEntSetsPar (global part list) . getDataPar (handles part-proc mapping for non-local parts) . getNumEntsPar, getNumEntSetsPar, getNumEntsProcPar, getNumEntSetsProcPar . getTagsPar, getTagsProcPar, get by tag . global reduce on tags . get/setGlobalIDSize Processor level: . handled by existing iMesh functions: getNumOfPartsOnProc (getNumSetsByTypeAndTag), getPartsOnProc (getSetsByTypeAndTag), local ID <-> part handle (getSetByTypeAndTag, getData), what partition ( . entity-part classification: "PartOwner" tag . not necessary: . part iterator (don't have a set iterator in iMesh) . iMesh instance/handle (partition functions part of iMesh, no need for separate iPart interface instance) Part level: . handled by existing iMesh functions: owned entities (getEntities on Part handles), getNghbPartIds (getChldn-getPrnts from Part handles), part bdry size (getNumChldn on Part handles) . available as tag conventions: getOwnerOfEnt ("PartOwner"), getCopies/CopyOfEnt ("RemoteHandle"), getNumOfCopiesOfEnt ("NumProcs"), entity categorization ("ProcBdyCategory" = in/out/bdy), what partition ("PartitionClassifications"), get/set/createGlobalID[Arr] ("ParGlobalId") . not necessary: . part bdry iterator (don't have set iterators now in iMesh) . copies of non-owned interpart bdry entities (entities exist in iMesh instance and are not in Part handle) . new functionality: . addCopyOfEnt, rmvCopyOfEnt (i.e. ghosting functions) . disambiguate ownership of shared entity . createGlobalID[Arr] . getEntHandle[Arr] from global ID . convenience functions: . owned/bdy/ghost entities on Part handle