// Entity functionality. For inter-part boundary entities, the APIs look sufficient but require some tuning And there is one function for convenience which we may want to consider. See comments below: 1) prefix_addCopyEnt will require remote_entity_handle along with remote_part_id (entity_handle is local on-process handle). prefix_removeCopyEnt may have either remote_part_id or remote_entity_handle (or both). 2) prefix_getEntityOwner should return owner_part_id and owner_copy_handle (can be remote_entity_handle). Also need to provide prefix_getEntityOwnerPart and prefix_getEntityOnwerCopy. prefix_getOwnedEnt is then a repeat. 3) For convenience, we may provide prefix_getResidencePartIds, see example in the end. 4) Some entity functions take both partition-handle and part-handle whereas some take only partition-handle, it is not clear which ones and why. For example, prefix_isEntOwner take both hanldes whereas prefix_getEntityOwner takes only partition-handle. 5) In functiona names, we may want to use Ent for Entity and rmv for remove. For example, prefix_getEntOwner and prefix_rmvCopyEnt. Example (as pseudo C code): uses residence parts functionality. All owner vertices at inter-part boundary wants to update some field value on its remote copies. In this example, the amount of sends from any part to every other part is determined. (assume a part per process for this case). ------------------------------------------------------------------- // nsends defines comm. volume from current part to every other part int *nsends = calloc(num_parts,sizeof(int)); while(pBdryVtx= getNext()) { // iterate over vertices on inter-part boundary if(prefix_isEntOwner()) { // check if this copy is owner int numCopies = getNumCopies(); // get num. copies of this owner vertex int *resParts = getResidencePartIds(); // get residence part IDs for(int iCopy=0; iCopy