1af0996ceSBarry Smith #include <petsc/private/dmmbimpl.h> /*I "petscdmmoab.h" I*/ 28cbae1a6SVijay Mahadevan 38cbae1a6SVijay Mahadevan #include <petscdmmoab.h> 48cbae1a6SVijay Mahadevan 599fa7e03SVijay Mahadevan /*@C 699fa7e03SVijay Mahadevan DMMoabSetFieldVector - Sets the vector reference that represents the solution associated 799fa7e03SVijay Mahadevan with a particular field component. 899fa7e03SVijay Mahadevan 999fa7e03SVijay Mahadevan Not Collective 1099fa7e03SVijay Mahadevan 1199fa7e03SVijay Mahadevan Input Parameters: 1299fa7e03SVijay Mahadevan + dm - the discretization manager object 1399fa7e03SVijay Mahadevan . ifield - the index of the field as set before via DMMoabSetFieldName. 14b8ecf6d3SVijay Mahadevan . fvec - the Vector solution corresponding to the field (component) 1599fa7e03SVijay Mahadevan 1699fa7e03SVijay Mahadevan Level: intermediate 1799fa7e03SVijay Mahadevan 1899fa7e03SVijay Mahadevan .keywords: discretization manager, set, component solution 1999fa7e03SVijay Mahadevan 2099fa7e03SVijay Mahadevan .seealso: DMMoabGetFieldName(), DMMoabSetGlobalFieldVector() 2199fa7e03SVijay Mahadevan @*/ 228cbae1a6SVijay Mahadevan PetscErrorCode DMMoabSetFieldVector(DM dm, PetscInt ifield, Vec fvec) 238cbae1a6SVijay Mahadevan { 248cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 258cbae1a6SVijay Mahadevan moab::Tag vtag,ntag; 268cbae1a6SVijay Mahadevan const PetscScalar *varray; 278cbae1a6SVijay Mahadevan PetscScalar *farray; 288cbae1a6SVijay Mahadevan moab::ErrorCode merr; 298cbae1a6SVijay Mahadevan PetscErrorCode ierr; 308cbae1a6SVijay Mahadevan std::string tag_name; 318cbae1a6SVijay Mahadevan 328cbae1a6SVijay Mahadevan PetscFunctionBegin; 338cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 348cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 358cbae1a6SVijay Mahadevan 36addae81cSVijay Mahadevan if ((ifield < 0) || (ifield >= dmmoab->numFields)) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "The field %d should be positive and less than %d.", ifield, dmmoab->numFields); 37addae81cSVijay Mahadevan 388cbae1a6SVijay Mahadevan /* Create a tag in MOAB mesh to index and keep track of number of Petsc vec tags */ 39addae81cSVijay Mahadevan merr = dmmoab->mbiface->tag_get_handle(dmmoab->fieldNames[ifield],1,moab::MB_TYPE_DOUBLE,ntag, 408cbae1a6SVijay Mahadevan moab::MB_TAG_DENSE|moab::MB_TAG_CREAT);MBERRNM(merr); 418cbae1a6SVijay Mahadevan 428cbae1a6SVijay Mahadevan ierr = DMMoabGetVecTag(fvec,&vtag);CHKERRQ(ierr); 438cbae1a6SVijay Mahadevan 448cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_get_name(vtag, tag_name); 458cbae1a6SVijay Mahadevan if (!tag_name.length() && merr !=moab::MB_SUCCESS) { 468cbae1a6SVijay Mahadevan ierr = VecGetArrayRead(fvec,&varray);CHKERRQ(ierr); 478cbae1a6SVijay Mahadevan /* use the entity handle and the Dof index to set the right value */ 488cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_set_data(ntag, *dmmoab->vowned, (const void*)varray);MBERRNM(merr); 498cbae1a6SVijay Mahadevan ierr = VecRestoreArrayRead(fvec,&varray);CHKERRQ(ierr); 508cbae1a6SVijay Mahadevan } 518cbae1a6SVijay Mahadevan else { 527ae5e5b6SVijay Mahadevan ierr = PetscMalloc1(dmmoab->nloc,&farray);CHKERRQ(ierr); 538cbae1a6SVijay Mahadevan /* we are using a MOAB Vec - directly copy the tag data to new one */ 548cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_get_data(vtag, *dmmoab->vowned, (void*)farray);MBERRNM(merr); 558cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_set_data(ntag, *dmmoab->vowned, (const void*)farray);MBERRNM(merr); 568cbae1a6SVijay Mahadevan /* make sure the parallel exchange for ghosts are done appropriately */ 578cbae1a6SVijay Mahadevan ierr = PetscFree(farray);CHKERRQ(ierr); 588cbae1a6SVijay Mahadevan } 598cbae1a6SVijay Mahadevan merr = dmmoab->pcomm->exchange_tags(ntag, *dmmoab->vowned);MBERRNM(merr); 608cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 618cbae1a6SVijay Mahadevan } 628cbae1a6SVijay Mahadevan 638cbae1a6SVijay Mahadevan 6499fa7e03SVijay Mahadevan /*@C 6599fa7e03SVijay Mahadevan DMMoabSetGlobalFieldVector - Sets the vector reference that represents the global solution associated 6699fa7e03SVijay Mahadevan with all fields (components) managed by DM. 6799fa7e03SVijay Mahadevan A useful utility when updating the DM solution after a solve, to be serialized with the mesh for 6899fa7e03SVijay Mahadevan checkpointing purposes. 6999fa7e03SVijay Mahadevan 7099fa7e03SVijay Mahadevan Not Collective 7199fa7e03SVijay Mahadevan 7299fa7e03SVijay Mahadevan Input Parameters: 7399fa7e03SVijay Mahadevan + dm - the discretization manager object 74b8ecf6d3SVijay Mahadevan . fvec - the global Vector solution corresponding to all the fields managed by DM 7599fa7e03SVijay Mahadevan 7699fa7e03SVijay Mahadevan Level: intermediate 7799fa7e03SVijay Mahadevan 7899fa7e03SVijay Mahadevan .keywords: discretization manager, set, component solution 7999fa7e03SVijay Mahadevan 8099fa7e03SVijay Mahadevan .seealso: DMMoabGetFieldName(), DMMoabSetFieldVector() 8199fa7e03SVijay Mahadevan @*/ 828cbae1a6SVijay Mahadevan PetscErrorCode DMMoabSetGlobalFieldVector(DM dm, Vec fvec) 838cbae1a6SVijay Mahadevan { 848cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 858cbae1a6SVijay Mahadevan moab::Tag vtag,ntag; 86f28b2503SVijay Mahadevan const PetscScalar *rarray; 87f28b2503SVijay Mahadevan PetscScalar *varray,*farray; 888cbae1a6SVijay Mahadevan moab::ErrorCode merr; 898cbae1a6SVijay Mahadevan PetscErrorCode ierr; 908cbae1a6SVijay Mahadevan PetscInt i,ifield; 918cbae1a6SVijay Mahadevan std::string tag_name; 928cbae1a6SVijay Mahadevan moab::Range::iterator iter; 938cbae1a6SVijay Mahadevan 948cbae1a6SVijay Mahadevan PetscFunctionBegin; 958cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 968cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 978cbae1a6SVijay Mahadevan 988cbae1a6SVijay Mahadevan /* get the Tag corresponding to the global vector - possible that there is no tag associated.. */ 998cbae1a6SVijay Mahadevan ierr = DMMoabGetVecTag(fvec,&vtag);CHKERRQ(ierr); 1008cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_get_name(vtag, tag_name); 1017ae5e5b6SVijay Mahadevan ierr = PetscMalloc1(dmmoab->nloc,&farray);CHKERRQ(ierr); 1028cbae1a6SVijay Mahadevan if (!tag_name.length() && merr !=moab::MB_SUCCESS) { 1038cbae1a6SVijay Mahadevan /* not a MOAB vector - use VecGetSubVector to get the parts as needed */ 104f28b2503SVijay Mahadevan ierr = VecGetArrayRead(fvec,&rarray);CHKERRQ(ierr); 105addae81cSVijay Mahadevan for (ifield=0; ifield<dmmoab->numFields; ++ifield) { 1068cbae1a6SVijay Mahadevan 1078cbae1a6SVijay Mahadevan /* Create a tag in MOAB mesh to index and keep track of number of Petsc vec tags */ 108addae81cSVijay Mahadevan merr = dmmoab->mbiface->tag_get_handle(dmmoab->fieldNames[ifield],1,moab::MB_TYPE_DOUBLE,ntag, 1098cbae1a6SVijay Mahadevan moab::MB_TAG_DENSE|moab::MB_TAG_CREAT);MBERRNM(merr); 1108cbae1a6SVijay Mahadevan 1118cbae1a6SVijay Mahadevan for(i=0;i<dmmoab->nloc;i++) { 112*3f1c6e43SVijay Mahadevan farray[i]=(dmmoab->bs == 1 ? rarray[ifield*dmmoab->nloc+i] : rarray[i*dmmoab->numFields+ifield]); 1138cbae1a6SVijay Mahadevan } 1148cbae1a6SVijay Mahadevan 1158cbae1a6SVijay Mahadevan /* use the entity handle and the Dof index to set the right value */ 1168cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_set_data(ntag, *dmmoab->vowned, (const void*)farray);MBERRNM(merr); 1178cbae1a6SVijay Mahadevan } 118f28b2503SVijay Mahadevan ierr = VecRestoreArrayRead(fvec,&rarray);CHKERRQ(ierr); 1198cbae1a6SVijay Mahadevan } 1208cbae1a6SVijay Mahadevan else { 1217ae5e5b6SVijay Mahadevan ierr = PetscMalloc1(dmmoab->nloc*dmmoab->numFields,&varray);CHKERRQ(ierr); 1228cbae1a6SVijay Mahadevan 1238cbae1a6SVijay Mahadevan /* we are using a MOAB Vec - directly copy the tag data to new one */ 1248cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_get_data(vtag, *dmmoab->vowned, (void*)varray);MBERRNM(merr); 125addae81cSVijay Mahadevan for (ifield=0; ifield<dmmoab->numFields; ++ifield) { 1268cbae1a6SVijay Mahadevan 1278cbae1a6SVijay Mahadevan /* Create a tag in MOAB mesh to index and keep track of number of Petsc vec tags */ 128addae81cSVijay Mahadevan merr = dmmoab->mbiface->tag_get_handle(dmmoab->fieldNames[ifield],1,moab::MB_TYPE_DOUBLE,ntag, 1298cbae1a6SVijay Mahadevan moab::MB_TAG_DENSE|moab::MB_TAG_CREAT);MBERRNM(merr); 1308cbae1a6SVijay Mahadevan 1318cbae1a6SVijay Mahadevan /* we are using a MOAB Vec - directly copy the tag data to new one */ 1328cbae1a6SVijay Mahadevan for(i=0; i < dmmoab->nloc; i++) { 133*3f1c6e43SVijay Mahadevan farray[i]=(dmmoab->bs == 1 ? varray[ifield*dmmoab->nloc+i] : varray[i*dmmoab->numFields+ifield]); 1348cbae1a6SVijay Mahadevan } 1358cbae1a6SVijay Mahadevan 1368cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_set_data(ntag, *dmmoab->vowned, (const void*)farray);MBERRNM(merr); 1378cbae1a6SVijay Mahadevan /* make sure the parallel exchange for ghosts are done appropriately */ 1388cbae1a6SVijay Mahadevan merr = dmmoab->pcomm->exchange_tags(ntag, *dmmoab->vlocal);MBERRNM(merr); 1398cbae1a6SVijay Mahadevan } 1408cbae1a6SVijay Mahadevan ierr = PetscFree(varray);CHKERRQ(ierr); 1418cbae1a6SVijay Mahadevan } 1428cbae1a6SVijay Mahadevan ierr = PetscFree(farray);CHKERRQ(ierr); 1438cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 1448cbae1a6SVijay Mahadevan } 1458cbae1a6SVijay Mahadevan 1468cbae1a6SVijay Mahadevan 14799fa7e03SVijay Mahadevan /*@C 14899fa7e03SVijay Mahadevan DMMoabSetFieldNames - Sets the number of fields and their names to be managed by the DM 14999fa7e03SVijay Mahadevan 15099fa7e03SVijay Mahadevan Not Collective 15199fa7e03SVijay Mahadevan 15299fa7e03SVijay Mahadevan Input Parameters: 15399fa7e03SVijay Mahadevan + dm - the discretization manager object 15499fa7e03SVijay Mahadevan . numFields - the total number of fields 155b8ecf6d3SVijay Mahadevan . fields - the array containing the names of each field (component); Can be NULL. 15699fa7e03SVijay Mahadevan 15799fa7e03SVijay Mahadevan Level: intermediate 15899fa7e03SVijay Mahadevan 15999fa7e03SVijay Mahadevan .keywords: discretization manager, set, component name 16099fa7e03SVijay Mahadevan 16199fa7e03SVijay Mahadevan .seealso: DMMoabGetFieldName(), DMMoabSetFieldName() 16299fa7e03SVijay Mahadevan @*/ 163f28b2503SVijay Mahadevan PetscErrorCode DMMoabSetFieldNames(DM dm,PetscInt numFields,const char* fields[]) 1648cbae1a6SVijay Mahadevan { 165addae81cSVijay Mahadevan PetscErrorCode ierr; 166addae81cSVijay Mahadevan PetscInt i; 1678cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 1688cbae1a6SVijay Mahadevan 1698cbae1a6SVijay Mahadevan PetscFunctionBegin; 1708cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 1718cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 1728cbae1a6SVijay Mahadevan 173addae81cSVijay Mahadevan /* first deallocate the existing field structure */ 174addae81cSVijay Mahadevan if (dmmoab->fieldNames) { 175addae81cSVijay Mahadevan for(i=0; i<dmmoab->numFields; i++) { 176addae81cSVijay Mahadevan ierr = PetscFree(dmmoab->fieldNames[i]);CHKERRQ(ierr); 177addae81cSVijay Mahadevan } 178addae81cSVijay Mahadevan ierr = PetscFree(dmmoab->fieldNames);CHKERRQ(ierr); 179addae81cSVijay Mahadevan } 180addae81cSVijay Mahadevan 181addae81cSVijay Mahadevan /* now re-allocate and assign field names */ 182addae81cSVijay Mahadevan dmmoab->numFields = numFields; 18395dccacaSBarry Smith ierr = PetscMalloc1(numFields,&dmmoab->fieldNames);CHKERRQ(ierr); 184addae81cSVijay Mahadevan if (fields) { 185addae81cSVijay Mahadevan for(i=0; i<dmmoab->numFields; i++) { 186addae81cSVijay Mahadevan ierr = PetscStrallocpy(fields[i], (char**) &dmmoab->fieldNames[i]);CHKERRQ(ierr); 187addae81cSVijay Mahadevan } 188addae81cSVijay Mahadevan } 1898cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 1908cbae1a6SVijay Mahadevan } 1918cbae1a6SVijay Mahadevan 19299fa7e03SVijay Mahadevan 19399fa7e03SVijay Mahadevan /*@C 19499fa7e03SVijay Mahadevan DMMoabGetFieldName - Gets the names of individual field components in multicomponent 19599fa7e03SVijay Mahadevan vectors associated with a DMDA. 19699fa7e03SVijay Mahadevan 19799fa7e03SVijay Mahadevan Not Collective 19899fa7e03SVijay Mahadevan 19999fa7e03SVijay Mahadevan Input Parameter: 20099fa7e03SVijay Mahadevan + dm - the discretization manager object 201b8ecf6d3SVijay Mahadevan . field - field number for the DMMoab (0, 1, ... dof-1), where dof indicates the 20299fa7e03SVijay Mahadevan number of degrees of freedom per node within the DMMoab 20399fa7e03SVijay Mahadevan 20499fa7e03SVijay Mahadevan Output Parameter: 20599fa7e03SVijay Mahadevan . fieldName - the name of the field (component) 20699fa7e03SVijay Mahadevan 20799fa7e03SVijay Mahadevan Level: intermediate 20899fa7e03SVijay Mahadevan 20999fa7e03SVijay Mahadevan .keywords: discretization manager, get, component name 21099fa7e03SVijay Mahadevan 21199fa7e03SVijay Mahadevan .seealso: DMMoabSetFieldName(), DMMoabSetFields() 21299fa7e03SVijay Mahadevan @*/ 21399fa7e03SVijay Mahadevan PetscErrorCode DMMoabGetFieldName(DM dm, PetscInt field, const char **fieldName) 21499fa7e03SVijay Mahadevan { 21599fa7e03SVijay Mahadevan DM_Moab *dmmoab; 21699fa7e03SVijay Mahadevan 21799fa7e03SVijay Mahadevan PetscFunctionBegin; 21899fa7e03SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 21999fa7e03SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 22099fa7e03SVijay Mahadevan if ((field < 0) || (field >= dmmoab->numFields)) SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "DM field %d should be in [%d, %d)", field, 0, dmmoab->numFields); 22199fa7e03SVijay Mahadevan 22299fa7e03SVijay Mahadevan *fieldName = dmmoab->fieldNames[field]; 22399fa7e03SVijay Mahadevan PetscFunctionReturn(0); 22499fa7e03SVijay Mahadevan } 22599fa7e03SVijay Mahadevan 22699fa7e03SVijay Mahadevan 227c68c6878SVijay Mahadevan /*@C 22899fa7e03SVijay Mahadevan DMMoabSetFieldName - Sets the name of a field (component) managed by the DM 229c68c6878SVijay Mahadevan 230c68c6878SVijay Mahadevan Not Collective 231c68c6878SVijay Mahadevan 232c68c6878SVijay Mahadevan Input Parameters: 23399fa7e03SVijay Mahadevan + dm - the discretization manager object 234c68c6878SVijay Mahadevan . field - the field number 235b8ecf6d3SVijay Mahadevan . fieldName - the field (component) name 236c68c6878SVijay Mahadevan 23799fa7e03SVijay Mahadevan Level: intermediate 23899fa7e03SVijay Mahadevan Notes: Can only be called after DMMoabSetFields supplied with correct numFields 239c68c6878SVijay Mahadevan 24099fa7e03SVijay Mahadevan .keywords: discretization manager, set, component name 24199fa7e03SVijay Mahadevan 24299fa7e03SVijay Mahadevan .seealso: DMMoabGetFieldName(), DMMoabSetFields() 243c68c6878SVijay Mahadevan @*/ 2445f7ae369SVijay Mahadevan PetscErrorCode DMMoabSetFieldName(DM dm, PetscInt field, const char *fieldName) 245c68c6878SVijay Mahadevan { 246c68c6878SVijay Mahadevan PetscErrorCode ierr; 247c68c6878SVijay Mahadevan DM_Moab *dmmoab; 248c68c6878SVijay Mahadevan 249c68c6878SVijay Mahadevan PetscFunctionBegin; 250c68c6878SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 2515f7ae369SVijay Mahadevan PetscValidCharPointer(fieldName,3); 252c68c6878SVijay Mahadevan 25399fa7e03SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 254c68c6878SVijay Mahadevan if ((field < 0) || (field >= dmmoab->numFields)) SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "DM field %d should be in [%d, %d)", field, 0, dmmoab->numFields); 25599fa7e03SVijay Mahadevan 25699fa7e03SVijay Mahadevan if (dmmoab->fieldNames[field]) { 257c68c6878SVijay Mahadevan ierr = PetscFree(dmmoab->fieldNames[field]);CHKERRQ(ierr); 25899fa7e03SVijay Mahadevan } 2595f7ae369SVijay Mahadevan ierr = PetscStrallocpy(fieldName, (char**) &dmmoab->fieldNames[field]);CHKERRQ(ierr); 260c68c6878SVijay Mahadevan PetscFunctionReturn(0); 261c68c6878SVijay Mahadevan } 262c68c6878SVijay Mahadevan 2638cbae1a6SVijay Mahadevan 26499fa7e03SVijay Mahadevan /*@C 26599fa7e03SVijay Mahadevan DMMoabGetFieldDof - Gets the global degree-of-freedom of a field (component) defined on a 26699fa7e03SVijay Mahadevan particular MOAB EntityHandle. 26799fa7e03SVijay Mahadevan 26899fa7e03SVijay Mahadevan Not Collective 26999fa7e03SVijay Mahadevan 27099fa7e03SVijay Mahadevan Input Parameters: 27199fa7e03SVijay Mahadevan + dm - the discretization manager object 27299fa7e03SVijay Mahadevan . point - the MOAB EntityHandle container which holds the field degree-of-freedom values 273b8ecf6d3SVijay Mahadevan . field - the field (component) index 27499fa7e03SVijay Mahadevan 27599fa7e03SVijay Mahadevan Output Parameter: 27699fa7e03SVijay Mahadevan + dof - the global degree-of-freedom index corresponding to the field in the discrete representation (Vec, Mat) 27799fa7e03SVijay Mahadevan 27899fa7e03SVijay Mahadevan Level: beginner 27999fa7e03SVijay Mahadevan 28099fa7e03SVijay Mahadevan .keywords: discretization manager, get, global degree of freedom 28199fa7e03SVijay Mahadevan 28299fa7e03SVijay Mahadevan .seealso: DMMoabGetFieldDofs(), DMMoabGetFieldDofsLocal() 28399fa7e03SVijay Mahadevan @*/ 2848cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetFieldDof(DM dm,moab::EntityHandle point,PetscInt field,PetscInt* dof) 2858cbae1a6SVijay Mahadevan { 2868cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 2878cbae1a6SVijay Mahadevan 2888cbae1a6SVijay Mahadevan PetscFunctionBegin; 2898cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 2908cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 2918cbae1a6SVijay Mahadevan 292*3f1c6e43SVijay Mahadevan *dof=dmmoab->gidmap[((PetscInt)point-dmmoab->seqstart)]*dmmoab->numFields+field; 2938cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 2948cbae1a6SVijay Mahadevan } 2958cbae1a6SVijay Mahadevan 2968cbae1a6SVijay Mahadevan 29799fa7e03SVijay Mahadevan /*@C 29899fa7e03SVijay Mahadevan DMMoabGetFieldDofs - Gets the global degree-of-freedom of a field (component) defined on an 29999fa7e03SVijay Mahadevan array of MOAB EntityHandles. 30099fa7e03SVijay Mahadevan 30199fa7e03SVijay Mahadevan Not Collective 30299fa7e03SVijay Mahadevan 30399fa7e03SVijay Mahadevan Input Parameters: 30499fa7e03SVijay Mahadevan + dm - the discretization manager object 30599fa7e03SVijay Mahadevan . npoints - the total number of Entities in the points array 30699fa7e03SVijay Mahadevan . points - the MOAB EntityHandle container array which holds the field degree-of-freedom values 307b8ecf6d3SVijay Mahadevan . field - the field (component) index 30899fa7e03SVijay Mahadevan 30999fa7e03SVijay Mahadevan Output Parameter: 31099fa7e03SVijay Mahadevan + dof - the global degree-of-freedom index array corresponding to the field in the discrete representation (Vec, Mat) 31199fa7e03SVijay Mahadevan 31299fa7e03SVijay Mahadevan Level: intermediate 31399fa7e03SVijay Mahadevan 31499fa7e03SVijay Mahadevan .keywords: discretization manager, get, global degrees of freedom 31599fa7e03SVijay Mahadevan 31699fa7e03SVijay Mahadevan .seealso: DMMoabGetFieldDof(), DMMoabGetFieldDofsLocal() 31799fa7e03SVijay Mahadevan @*/ 3188cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetFieldDofs(DM dm,PetscInt npoints,const moab::EntityHandle* points,PetscInt field,PetscInt* dof) 3198cbae1a6SVijay Mahadevan { 3208cbae1a6SVijay Mahadevan PetscInt i; 3218cbae1a6SVijay Mahadevan PetscErrorCode ierr; 3228cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 3238cbae1a6SVijay Mahadevan 3248cbae1a6SVijay Mahadevan PetscFunctionBegin; 3258cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 32699fa7e03SVijay Mahadevan PetscValidPointer(points,3); 3278cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 3288cbae1a6SVijay Mahadevan 3298cbae1a6SVijay Mahadevan if (!dof) { 3307ae5e5b6SVijay Mahadevan ierr = PetscMalloc1(npoints,&dof);CHKERRQ(ierr); 3318cbae1a6SVijay Mahadevan } 3328cbae1a6SVijay Mahadevan 333*3f1c6e43SVijay Mahadevan /* compute the DOF based on local blocking in the fields */ 334*3f1c6e43SVijay Mahadevan /* We also assume all fields have equal distribution; i.e., all fields are either defined on vertices or elements and not on a mixture */ 33599fa7e03SVijay Mahadevan /* TODO: eliminate the limitation using PetscSection to manage DOFs */ 3368cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 337*3f1c6e43SVijay Mahadevan dof[i] = (dmmoab->bs == 1 ? dmmoab->gidmap[(PetscInt)points[i]-dmmoab->seqstart]+field*dmmoab->n : 338*3f1c6e43SVijay Mahadevan dmmoab->gidmap[(PetscInt)points[i]-dmmoab->seqstart]*dmmoab->numFields+field); 3398cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 3408cbae1a6SVijay Mahadevan } 3418cbae1a6SVijay Mahadevan 3428cbae1a6SVijay Mahadevan 34399fa7e03SVijay Mahadevan /*@C 34499fa7e03SVijay Mahadevan DMMoabGetFieldDofsLocal - Gets the local degrees-of-freedom of a field (component) defined on an 34599fa7e03SVijay Mahadevan array of MOAB EntityHandles. 34699fa7e03SVijay Mahadevan 34799fa7e03SVijay Mahadevan Not Collective 34899fa7e03SVijay Mahadevan 34999fa7e03SVijay Mahadevan Input Parameters: 35099fa7e03SVijay Mahadevan + dm - the discretization manager object 35199fa7e03SVijay Mahadevan . npoints - the total number of Entities in the points array 35299fa7e03SVijay Mahadevan . points - the MOAB EntityHandle container array which holds the field degree-of-freedom values 353b8ecf6d3SVijay Mahadevan . field - the field (component) index 35499fa7e03SVijay Mahadevan 35599fa7e03SVijay Mahadevan Output Parameter: 35699fa7e03SVijay Mahadevan + dof - the local degree-of-freedom index array corresponding to the field in the discrete representation (Vec, Mat) 35799fa7e03SVijay Mahadevan 35899fa7e03SVijay Mahadevan Level: intermediate 35999fa7e03SVijay Mahadevan 36099fa7e03SVijay Mahadevan .keywords: discretization manager, get, local degrees of freedom 36199fa7e03SVijay Mahadevan 36299fa7e03SVijay Mahadevan .seealso: DMMoabGetFieldDof(), DMMoabGetFieldDofs() 36399fa7e03SVijay Mahadevan @*/ 3648cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetFieldDofsLocal(DM dm,PetscInt npoints,const moab::EntityHandle* points,PetscInt field,PetscInt* dof) 3658cbae1a6SVijay Mahadevan { 366*3f1c6e43SVijay Mahadevan PetscInt i; 3678cbae1a6SVijay Mahadevan PetscErrorCode ierr; 3688cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 3698cbae1a6SVijay Mahadevan 3708cbae1a6SVijay Mahadevan PetscFunctionBegin; 3718cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 37299fa7e03SVijay Mahadevan PetscValidPointer(points,3); 3738cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 3748cbae1a6SVijay Mahadevan 3758cbae1a6SVijay Mahadevan if (!dof) { 3767ae5e5b6SVijay Mahadevan ierr = PetscMalloc1(npoints,&dof);CHKERRQ(ierr); 3778cbae1a6SVijay Mahadevan } 3788cbae1a6SVijay Mahadevan 379*3f1c6e43SVijay Mahadevan /* compute the DOF based on local blocking in the fields */ 38099fa7e03SVijay Mahadevan /* assume all fields have equal distribution; i.e., all fields are either defined on vertices or elements and not on a mixture */ 38199fa7e03SVijay Mahadevan /* TODO: eliminate the limitation using PetscSection to manage DOFs */ 382*3f1c6e43SVijay Mahadevan for (i=0; i<npoints; ++i) { 383*3f1c6e43SVijay Mahadevan dof[i] = (dmmoab->bs > 1 ? dmmoab->lidmap[(PetscInt)points[i]-dmmoab->seqstart]*dmmoab->numFields+field : 384*3f1c6e43SVijay Mahadevan dmmoab->lidmap[(PetscInt)points[i]-dmmoab->seqstart]+field*dmmoab->n); 3858cbae1a6SVijay Mahadevan } 3868cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 3878cbae1a6SVijay Mahadevan } 3888cbae1a6SVijay Mahadevan 3898cbae1a6SVijay Mahadevan 39099fa7e03SVijay Mahadevan /*@C 39199fa7e03SVijay Mahadevan DMMoabGetDofs - Gets the global degree-of-freedom for all fields (components) defined on an 39299fa7e03SVijay Mahadevan array of MOAB EntityHandles. 39399fa7e03SVijay Mahadevan 39499fa7e03SVijay Mahadevan Not Collective 39599fa7e03SVijay Mahadevan 39699fa7e03SVijay Mahadevan Input Parameters: 39799fa7e03SVijay Mahadevan + dm - the discretization manager object 39899fa7e03SVijay Mahadevan . npoints - the total number of Entities in the points array 39999fa7e03SVijay Mahadevan . points - the MOAB EntityHandle container array which holds the field degree-of-freedom values 40099fa7e03SVijay Mahadevan 40199fa7e03SVijay Mahadevan Output Parameter: 40299fa7e03SVijay Mahadevan + dof - the global degree-of-freedom index array corresponding to the field in the discrete representation (Vec, Mat) 40399fa7e03SVijay Mahadevan 40499fa7e03SVijay Mahadevan Level: intermediate 40599fa7e03SVijay Mahadevan 40699fa7e03SVijay Mahadevan .keywords: discretization manager, get, global degrees of freedom 40799fa7e03SVijay Mahadevan 40899fa7e03SVijay Mahadevan .seealso: DMMoabGetFieldDofs(), DMMoabGetDofsLocal(), DMMoabGetDofsBlocked() 40999fa7e03SVijay Mahadevan @*/ 4108cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetDofs(DM dm,PetscInt npoints,const moab::EntityHandle* points,PetscInt* dof) 4118cbae1a6SVijay Mahadevan { 4128cbae1a6SVijay Mahadevan PetscInt i,field,offset; 4138cbae1a6SVijay Mahadevan PetscErrorCode ierr; 4148cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 4158cbae1a6SVijay Mahadevan 4168cbae1a6SVijay Mahadevan PetscFunctionBegin; 4178cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 41899fa7e03SVijay Mahadevan PetscValidPointer(points,3); 4198cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 4208cbae1a6SVijay Mahadevan 4218cbae1a6SVijay Mahadevan if (!dof) { 4227ae5e5b6SVijay Mahadevan ierr = PetscMalloc1(dmmoab->numFields*npoints,&dof);CHKERRQ(ierr); 4238cbae1a6SVijay Mahadevan } 4248cbae1a6SVijay Mahadevan 425*3f1c6e43SVijay Mahadevan /* compute the DOF based on local blocking in the fields */ 42699fa7e03SVijay Mahadevan /* assume all fields have equal distribution; i.e., all fields are either defined on vertices or elements and not on a mixture */ 42799fa7e03SVijay Mahadevan /* TODO: eliminate the limitation using PetscSection to manage DOFs */ 428addae81cSVijay Mahadevan for (field=0; field<dmmoab->numFields; ++field) { 42999fa7e03SVijay Mahadevan offset = field*dmmoab->n; 4308cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 431*3f1c6e43SVijay Mahadevan dof[i*dmmoab->numFields+field] = (dmmoab->bs > 1 ? dmmoab->gidmap[(PetscInt)points[i]-dmmoab->seqstart]*dmmoab->numFields+field : 432*3f1c6e43SVijay Mahadevan dmmoab->gidmap[(PetscInt)points[i]-dmmoab->seqstart]+offset); 4338cbae1a6SVijay Mahadevan } 4348cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 4358cbae1a6SVijay Mahadevan } 4368cbae1a6SVijay Mahadevan 437*3f1c6e43SVijay Mahadevan #undef __FUNCT__ 438*3f1c6e43SVijay Mahadevan #define __FUNCT__ "DMMoabGetDofsLocal" 43999fa7e03SVijay Mahadevan /*@C 44099fa7e03SVijay Mahadevan DMMoabGetDofsLocal - Gets the local degree-of-freedom for all fields (components) defined on an 44199fa7e03SVijay Mahadevan array of MOAB EntityHandles. 44299fa7e03SVijay Mahadevan 44399fa7e03SVijay Mahadevan Not Collective 44499fa7e03SVijay Mahadevan 44599fa7e03SVijay Mahadevan Input Parameters: 44699fa7e03SVijay Mahadevan + dm - the discretization manager object 44799fa7e03SVijay Mahadevan . npoints - the total number of Entities in the points array 44899fa7e03SVijay Mahadevan . points - the MOAB EntityHandle container array which holds the field degree-of-freedom values 44999fa7e03SVijay Mahadevan 45099fa7e03SVijay Mahadevan Output Parameter: 45199fa7e03SVijay Mahadevan + dof - the local degree-of-freedom index array corresponding to the field in the discrete representation (Vec, Mat) 45299fa7e03SVijay Mahadevan 45399fa7e03SVijay Mahadevan Level: intermediate 45499fa7e03SVijay Mahadevan 45599fa7e03SVijay Mahadevan .keywords: discretization manager, get, global degrees of freedom 45699fa7e03SVijay Mahadevan 45799fa7e03SVijay Mahadevan .seealso: DMMoabGetFieldDofs(), DMMoabGetDofs(), DMMoabGetDofsBlocked() 45899fa7e03SVijay Mahadevan @*/ 4598cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetDofsLocal(DM dm,PetscInt npoints,const moab::EntityHandle* points,PetscInt* dof) 4608cbae1a6SVijay Mahadevan { 4618cbae1a6SVijay Mahadevan PetscInt i,field,offset; 4628cbae1a6SVijay Mahadevan PetscErrorCode ierr; 4638cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 4648cbae1a6SVijay Mahadevan 4658cbae1a6SVijay Mahadevan PetscFunctionBegin; 4668cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 46799fa7e03SVijay Mahadevan PetscValidPointer(points,3); 4688cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 4698cbae1a6SVijay Mahadevan 4708cbae1a6SVijay Mahadevan if (!dof) { 4717ae5e5b6SVijay Mahadevan ierr = PetscMalloc1(dmmoab->numFields*npoints,&dof);CHKERRQ(ierr); 4728cbae1a6SVijay Mahadevan } 4738cbae1a6SVijay Mahadevan 474*3f1c6e43SVijay Mahadevan /* compute the DOF based on local blocking in the fields */ 47599fa7e03SVijay Mahadevan /* assume all fields have equal distribution; i.e., all fields are either defined on vertices or elements and not on a mixture */ 47699fa7e03SVijay Mahadevan /* TODO: eliminate the limitation using PetscSection to manage DOFs */ 477addae81cSVijay Mahadevan for (field=0; field<dmmoab->numFields; ++field) { 47899fa7e03SVijay Mahadevan offset = field*dmmoab->n; 4798cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 480*3f1c6e43SVijay Mahadevan dof[i*dmmoab->numFields+field] = (dmmoab->bs > 1 ? dmmoab->lidmap[(PetscInt)points[i]-dmmoab->seqstart]*dmmoab->numFields+field : 481*3f1c6e43SVijay Mahadevan dmmoab->lidmap[(PetscInt)points[i]-dmmoab->seqstart]+offset); 4828cbae1a6SVijay Mahadevan } 4838cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 4848cbae1a6SVijay Mahadevan } 4858cbae1a6SVijay Mahadevan 4868cbae1a6SVijay Mahadevan 48799fa7e03SVijay Mahadevan /*@C 48899fa7e03SVijay Mahadevan DMMoabGetDofsBlocked - Gets the global degree-of-freedom for the first field (component) defined on an 48999fa7e03SVijay Mahadevan array of MOAB EntityHandles. It is useful when performing Blocked(Get/Set) methods in computation 49099fa7e03SVijay Mahadevan of element residuals and assembly of the discrete systems when all fields are co-located. 49199fa7e03SVijay Mahadevan 49299fa7e03SVijay Mahadevan Not Collective 49399fa7e03SVijay Mahadevan 49499fa7e03SVijay Mahadevan Input Parameters: 49599fa7e03SVijay Mahadevan + dm - the discretization manager object 49699fa7e03SVijay Mahadevan . npoints - the total number of Entities in the points array 49799fa7e03SVijay Mahadevan . points - the MOAB EntityHandle container array which holds the field degree-of-freedom values 49899fa7e03SVijay Mahadevan 49999fa7e03SVijay Mahadevan Output Parameter: 50099fa7e03SVijay Mahadevan + dof - the blocked global degree-of-freedom index array in the discrete representation (Vec, Mat) 50199fa7e03SVijay Mahadevan 50299fa7e03SVijay Mahadevan Level: intermediate 50399fa7e03SVijay Mahadevan 50499fa7e03SVijay Mahadevan .keywords: discretization manager, get, global degrees of freedom 50599fa7e03SVijay Mahadevan 50699fa7e03SVijay Mahadevan .seealso: DMMoabGetDofsLocal(), DMMoabGetDofs(), DMMoabGetDofsBlockedLocal() 50799fa7e03SVijay Mahadevan @*/ 5088cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetDofsBlocked(DM dm,PetscInt npoints,const moab::EntityHandle* points,PetscInt* dof) 5098cbae1a6SVijay Mahadevan { 5108cbae1a6SVijay Mahadevan PetscInt i; 5118cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 5128cbae1a6SVijay Mahadevan PetscErrorCode ierr; 5138cbae1a6SVijay Mahadevan 5148cbae1a6SVijay Mahadevan PetscFunctionBegin; 5158cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 516*3f1c6e43SVijay Mahadevan PetscValidPointer(points,3); 5178cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 5188cbae1a6SVijay Mahadevan 5198cbae1a6SVijay Mahadevan if (!dof) { 5207ae5e5b6SVijay Mahadevan ierr = PetscMalloc1(npoints,&dof);CHKERRQ(ierr); 5218cbae1a6SVijay Mahadevan } 5228cbae1a6SVijay Mahadevan 5238cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) { 524*3f1c6e43SVijay Mahadevan dof[i]=dmmoab->gidmap[(PetscInt)points[i]-dmmoab->seqstart]; 5258cbae1a6SVijay Mahadevan } 5268cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 5278cbae1a6SVijay Mahadevan } 5288cbae1a6SVijay Mahadevan 5298cbae1a6SVijay Mahadevan 53099fa7e03SVijay Mahadevan /*@C 53199fa7e03SVijay Mahadevan DMMoabGetDofsBlockedLocal - Gets the local degree-of-freedom for the first field (component) defined on an 53299fa7e03SVijay Mahadevan array of MOAB EntityHandles. It is useful when performing local Blocked(Get/Set) methods in computation 53399fa7e03SVijay Mahadevan of element residuals and assembly of the discrete systems when all fields are co-located. 53499fa7e03SVijay Mahadevan 53599fa7e03SVijay Mahadevan Not Collective 53699fa7e03SVijay Mahadevan 53799fa7e03SVijay Mahadevan Input Parameters: 53899fa7e03SVijay Mahadevan + dm - the discretization manager object 53999fa7e03SVijay Mahadevan . npoints - the total number of Entities in the points array 54099fa7e03SVijay Mahadevan . points - the MOAB EntityHandle container array which holds the field degree-of-freedom values 54199fa7e03SVijay Mahadevan 54299fa7e03SVijay Mahadevan Output Parameter: 54399fa7e03SVijay Mahadevan + dof - the blocked local degree-of-freedom index array in the discrete representation (Vec, Mat) 54499fa7e03SVijay Mahadevan 54599fa7e03SVijay Mahadevan Level: intermediate 54699fa7e03SVijay Mahadevan 54799fa7e03SVijay Mahadevan .keywords: discretization manager, get, global degrees of freedom 54899fa7e03SVijay Mahadevan 54999fa7e03SVijay Mahadevan .seealso: DMMoabGetDofsLocal(), DMMoabGetDofs(), DMMoabGetDofsBlockedLocal() 55099fa7e03SVijay Mahadevan @*/ 5518cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetDofsBlockedLocal(DM dm,PetscInt npoints,const moab::EntityHandle* points,PetscInt* dof) 5528cbae1a6SVijay Mahadevan { 5538cbae1a6SVijay Mahadevan PetscInt i; 5548cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 5558cbae1a6SVijay Mahadevan PetscErrorCode ierr; 5568cbae1a6SVijay Mahadevan 5578cbae1a6SVijay Mahadevan PetscFunctionBegin; 5588cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 559*3f1c6e43SVijay Mahadevan PetscValidPointer(points,3); 5608cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 5618cbae1a6SVijay Mahadevan 5628cbae1a6SVijay Mahadevan if (!dof) { 5637ae5e5b6SVijay Mahadevan ierr = PetscMalloc1(npoints,&dof);CHKERRQ(ierr); 5648cbae1a6SVijay Mahadevan } 5658cbae1a6SVijay Mahadevan 5668cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 567*3f1c6e43SVijay Mahadevan dof[i]=dmmoab->lidmap[(PetscInt)points[i]-dmmoab->seqstart]; 5688cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 5698cbae1a6SVijay Mahadevan } 5708cbae1a6SVijay Mahadevan 5718cbae1a6SVijay Mahadevan 57299fa7e03SVijay Mahadevan /*@C 57399fa7e03SVijay Mahadevan DMMoabGetVertexDofsBlocked - Gets the global degree-of-freedom for the first field (component) defined on an 57499fa7e03SVijay Mahadevan array of locally owned MOAB mesh vertices. It's utility is when performing Finite-Difference type calculations 57599fa7e03SVijay Mahadevan where vertex traversal is faster than element-wise assembly that is typically done in FEM calculations. 57699fa7e03SVijay Mahadevan 57799fa7e03SVijay Mahadevan Not Collective 57899fa7e03SVijay Mahadevan 57999fa7e03SVijay Mahadevan Input Parameters: 58099fa7e03SVijay Mahadevan + dm - the discretization manager object 58199fa7e03SVijay Mahadevan 58299fa7e03SVijay Mahadevan Output Parameter: 58399fa7e03SVijay Mahadevan + dof - the blocked global degree-of-freedom index array in the discrete representation (Vec, Mat) that is vertex-based based on local numbering 58499fa7e03SVijay Mahadevan 58599fa7e03SVijay Mahadevan Level: intermediate 58699fa7e03SVijay Mahadevan 58799fa7e03SVijay Mahadevan .keywords: discretization manager, get, blocked degrees of freedom 58899fa7e03SVijay Mahadevan 58999fa7e03SVijay Mahadevan .seealso: DMMoabGetVertexDofsBlockedLocal(), DMMoabGetDofsBlocked(), DMMoabGetDofsBlockedLocal() 59099fa7e03SVijay Mahadevan @*/ 5918cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetVertexDofsBlocked(DM dm,PetscInt** dof) 5928cbae1a6SVijay Mahadevan { 5938cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 5948cbae1a6SVijay Mahadevan 5958cbae1a6SVijay Mahadevan PetscFunctionBegin; 5968cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 5978cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 5988cbae1a6SVijay Mahadevan 5998cbae1a6SVijay Mahadevan *dof = dmmoab->gidmap; 6008cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 6018cbae1a6SVijay Mahadevan } 6028cbae1a6SVijay Mahadevan 6038cbae1a6SVijay Mahadevan 60499fa7e03SVijay Mahadevan /*@C 60599fa7e03SVijay Mahadevan DMMoabGetVertexDofsBlockedLocal - Gets the local degree-of-freedom for the first field (component) defined on an 60699fa7e03SVijay Mahadevan array of locally owned MOAB mesh vertices. It's utility is when performing Finite-Difference type calculations 60799fa7e03SVijay Mahadevan where vertex traversal is faster than element-wise assembly that is typically done in FEM calculations. 60899fa7e03SVijay Mahadevan 60999fa7e03SVijay Mahadevan Not Collective 61099fa7e03SVijay Mahadevan 61199fa7e03SVijay Mahadevan Input Parameters: 61299fa7e03SVijay Mahadevan + dm - the discretization manager object 61399fa7e03SVijay Mahadevan 61499fa7e03SVijay Mahadevan Output Parameter: 61599fa7e03SVijay Mahadevan + dof - the blocked local degree-of-freedom index array in the discrete representation (Vec, Mat) that is vertex-based based on local numbering 61699fa7e03SVijay Mahadevan 61799fa7e03SVijay Mahadevan Level: intermediate 61899fa7e03SVijay Mahadevan 61999fa7e03SVijay Mahadevan .keywords: discretization manager, get, blocked degrees of freedom 62099fa7e03SVijay Mahadevan 62199fa7e03SVijay Mahadevan .seealso: DMMoabGetVertexDofsBlocked(), DMMoabGetDofsBlocked(), DMMoabGetDofsBlockedLocal() 62299fa7e03SVijay Mahadevan @*/ 6238cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetVertexDofsBlockedLocal(DM dm,PetscInt** dof) 6248cbae1a6SVijay Mahadevan { 6258cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 6268cbae1a6SVijay Mahadevan 6278cbae1a6SVijay Mahadevan PetscFunctionBegin; 6288cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 6298cbae1a6SVijay Mahadevan PetscValidPointer(dof,2); 6308cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 6318cbae1a6SVijay Mahadevan 6328cbae1a6SVijay Mahadevan *dof = dmmoab->lidmap; 6338cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 6348cbae1a6SVijay Mahadevan } 6358cbae1a6SVijay Mahadevan 636