18cbae1a6SVijay Mahadevan #include <petsc-private/dmmbimpl.h> /*I "petscdm.h" I*/ 28cbae1a6SVijay Mahadevan 38cbae1a6SVijay Mahadevan #include <petscdmmoab.h> 48cbae1a6SVijay Mahadevan 58cbae1a6SVijay Mahadevan #undef __FUNCT__ 68cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabSetFieldVector" 78cbae1a6SVijay Mahadevan PetscErrorCode DMMoabSetFieldVector(DM dm, PetscInt ifield, Vec fvec) 88cbae1a6SVijay Mahadevan { 98cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 108cbae1a6SVijay Mahadevan moab::Tag vtag,ntag; 118cbae1a6SVijay Mahadevan const PetscScalar *varray; 128cbae1a6SVijay Mahadevan PetscScalar *farray; 138cbae1a6SVijay Mahadevan moab::ErrorCode merr; 148cbae1a6SVijay Mahadevan PetscErrorCode ierr; 158cbae1a6SVijay Mahadevan std::string tag_name; 168cbae1a6SVijay Mahadevan 178cbae1a6SVijay Mahadevan PetscFunctionBegin; 188cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 198cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 208cbae1a6SVijay Mahadevan 21*addae81cSVijay 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); 22*addae81cSVijay Mahadevan 238cbae1a6SVijay Mahadevan /* Create a tag in MOAB mesh to index and keep track of number of Petsc vec tags */ 24*addae81cSVijay Mahadevan merr = dmmoab->mbiface->tag_get_handle(dmmoab->fieldNames[ifield],1,moab::MB_TYPE_DOUBLE,ntag, 258cbae1a6SVijay Mahadevan moab::MB_TAG_DENSE|moab::MB_TAG_CREAT);MBERRNM(merr); 268cbae1a6SVijay Mahadevan 278cbae1a6SVijay Mahadevan ierr = DMMoabGetVecTag(fvec,&vtag);CHKERRQ(ierr); 288cbae1a6SVijay Mahadevan 298cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_get_name(vtag, tag_name); 308cbae1a6SVijay Mahadevan if (!tag_name.length() && merr !=moab::MB_SUCCESS) { 318cbae1a6SVijay Mahadevan ierr = VecGetArrayRead(fvec,&varray);CHKERRQ(ierr); 328cbae1a6SVijay Mahadevan /* use the entity handle and the Dof index to set the right value */ 338cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_set_data(ntag, *dmmoab->vowned, (const void*)varray);MBERRNM(merr); 348cbae1a6SVijay Mahadevan ierr = VecRestoreArrayRead(fvec,&varray);CHKERRQ(ierr); 358cbae1a6SVijay Mahadevan } 368cbae1a6SVijay Mahadevan else { 378cbae1a6SVijay Mahadevan ierr = PetscMalloc(dmmoab->nloc*sizeof(PetscScalar),&farray);CHKERRQ(ierr); 388cbae1a6SVijay Mahadevan /* we are using a MOAB Vec - directly copy the tag data to new one */ 398cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_get_data(vtag, *dmmoab->vowned, (void*)farray);MBERRNM(merr); 408cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_set_data(ntag, *dmmoab->vowned, (const void*)farray);MBERRNM(merr); 418cbae1a6SVijay Mahadevan /* make sure the parallel exchange for ghosts are done appropriately */ 428cbae1a6SVijay Mahadevan ierr = PetscFree(farray);CHKERRQ(ierr); 438cbae1a6SVijay Mahadevan } 448cbae1a6SVijay Mahadevan merr = dmmoab->pcomm->exchange_tags(ntag, *dmmoab->vowned);MBERRNM(merr); 458cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 468cbae1a6SVijay Mahadevan } 478cbae1a6SVijay Mahadevan 488cbae1a6SVijay Mahadevan 498cbae1a6SVijay Mahadevan #undef __FUNCT__ 508cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabSetGlobalFieldVector" 518cbae1a6SVijay Mahadevan PetscErrorCode DMMoabSetGlobalFieldVector(DM dm, Vec fvec) 528cbae1a6SVijay Mahadevan { 538cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 548cbae1a6SVijay Mahadevan moab::Tag vtag,ntag; 558cbae1a6SVijay Mahadevan const PetscScalar *varray; 568cbae1a6SVijay Mahadevan PetscScalar *farray; 578cbae1a6SVijay Mahadevan moab::ErrorCode merr; 588cbae1a6SVijay Mahadevan PetscErrorCode ierr; 598cbae1a6SVijay Mahadevan PetscInt i,ifield; 608cbae1a6SVijay Mahadevan std::string tag_name; 618cbae1a6SVijay Mahadevan moab::Range::iterator iter; 628cbae1a6SVijay Mahadevan 638cbae1a6SVijay Mahadevan PetscFunctionBegin; 648cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 658cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 668cbae1a6SVijay Mahadevan 678cbae1a6SVijay Mahadevan /* get the Tag corresponding to the global vector - possible that there is no tag associated.. */ 688cbae1a6SVijay Mahadevan ierr = DMMoabGetVecTag(fvec,&vtag);CHKERRQ(ierr); 698cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_get_name(vtag, tag_name); 708cbae1a6SVijay Mahadevan ierr = PetscMalloc(dmmoab->nloc*sizeof(PetscScalar),&farray);CHKERRQ(ierr); 718cbae1a6SVijay Mahadevan if (!tag_name.length() && merr !=moab::MB_SUCCESS) { 728cbae1a6SVijay Mahadevan /* not a MOAB vector - use VecGetSubVector to get the parts as needed */ 738cbae1a6SVijay Mahadevan 748cbae1a6SVijay Mahadevan ierr = VecGetArrayRead(fvec,&varray);CHKERRQ(ierr); 75*addae81cSVijay Mahadevan for (ifield=0; ifield<dmmoab->numFields; ++ifield) { 768cbae1a6SVijay Mahadevan 778cbae1a6SVijay Mahadevan /* Create a tag in MOAB mesh to index and keep track of number of Petsc vec tags */ 78*addae81cSVijay Mahadevan merr = dmmoab->mbiface->tag_get_handle(dmmoab->fieldNames[ifield],1,moab::MB_TYPE_DOUBLE,ntag, 798cbae1a6SVijay Mahadevan moab::MB_TAG_DENSE|moab::MB_TAG_CREAT);MBERRNM(merr); 808cbae1a6SVijay Mahadevan 818cbae1a6SVijay Mahadevan for(i=0;i<dmmoab->nloc;i++) { 828cbae1a6SVijay Mahadevan if (dmmoab->bs == 1) 838cbae1a6SVijay Mahadevan farray[i]=varray[ifield*dmmoab->nloc+i]; 848cbae1a6SVijay Mahadevan else 85*addae81cSVijay Mahadevan farray[i]=varray[i*dmmoab->numFields+ifield]; 868cbae1a6SVijay Mahadevan } 878cbae1a6SVijay Mahadevan 888cbae1a6SVijay Mahadevan /* use the entity handle and the Dof index to set the right value */ 898cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_set_data(ntag, *dmmoab->vowned, (const void*)farray);MBERRNM(merr); 908cbae1a6SVijay Mahadevan } 918cbae1a6SVijay Mahadevan ierr = VecRestoreArrayRead(fvec,&varray);CHKERRQ(ierr); 928cbae1a6SVijay Mahadevan } 938cbae1a6SVijay Mahadevan else { 948cbae1a6SVijay Mahadevan ierr = PetscMalloc(dmmoab->nloc*dmmoab->bs*sizeof(PetscScalar),&varray);CHKERRQ(ierr); 958cbae1a6SVijay Mahadevan 968cbae1a6SVijay Mahadevan /* we are using a MOAB Vec - directly copy the tag data to new one */ 978cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_get_data(vtag, *dmmoab->vowned, (void*)varray);MBERRNM(merr); 98*addae81cSVijay Mahadevan for (ifield=0; ifield<dmmoab->numFields; ++ifield) { 998cbae1a6SVijay Mahadevan 1008cbae1a6SVijay Mahadevan /* Create a tag in MOAB mesh to index and keep track of number of Petsc vec tags */ 101*addae81cSVijay Mahadevan merr = dmmoab->mbiface->tag_get_handle(dmmoab->fieldNames[ifield],1,moab::MB_TYPE_DOUBLE,ntag, 1028cbae1a6SVijay Mahadevan moab::MB_TAG_DENSE|moab::MB_TAG_CREAT);MBERRNM(merr); 1038cbae1a6SVijay Mahadevan 1048cbae1a6SVijay Mahadevan /* we are using a MOAB Vec - directly copy the tag data to new one */ 1058cbae1a6SVijay Mahadevan for(i=0; i < dmmoab->nloc; i++) { 1068cbae1a6SVijay Mahadevan farray[i] = varray[i*dmmoab->bs+ifield]; 1078cbae1a6SVijay Mahadevan } 1088cbae1a6SVijay Mahadevan 1098cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_set_data(ntag, *dmmoab->vowned, (const void*)farray);MBERRNM(merr); 1108cbae1a6SVijay Mahadevan /* make sure the parallel exchange for ghosts are done appropriately */ 1118cbae1a6SVijay Mahadevan merr = dmmoab->pcomm->exchange_tags(ntag, *dmmoab->vlocal);MBERRNM(merr); 1128cbae1a6SVijay Mahadevan } 1138cbae1a6SVijay Mahadevan ierr = PetscFree(varray);CHKERRQ(ierr); 1148cbae1a6SVijay Mahadevan } 1158cbae1a6SVijay Mahadevan ierr = PetscFree(farray);CHKERRQ(ierr); 1168cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 1178cbae1a6SVijay Mahadevan } 1188cbae1a6SVijay Mahadevan 1198cbae1a6SVijay Mahadevan 1208cbae1a6SVijay Mahadevan #undef __FUNCT__ 1218cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabSetFields" 122*addae81cSVijay Mahadevan PetscErrorCode DMMoabSetFields(DM dm,PetscInt numFields,const char** fields) 1238cbae1a6SVijay Mahadevan { 124*addae81cSVijay Mahadevan PetscErrorCode ierr; 125*addae81cSVijay Mahadevan PetscInt i; 1268cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 1278cbae1a6SVijay Mahadevan 1288cbae1a6SVijay Mahadevan PetscFunctionBegin; 1298cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 1308cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 1318cbae1a6SVijay Mahadevan 132*addae81cSVijay Mahadevan /* first deallocate the existing field structure */ 133*addae81cSVijay Mahadevan if (dmmoab->fieldNames) { 134*addae81cSVijay Mahadevan for(i=0; i<dmmoab->numFields; i++) { 135*addae81cSVijay Mahadevan ierr = PetscFree(dmmoab->fieldNames[i]);CHKERRQ(ierr); 136*addae81cSVijay Mahadevan } 137*addae81cSVijay Mahadevan ierr = PetscFree(dmmoab->fieldNames);CHKERRQ(ierr); 138*addae81cSVijay Mahadevan } 139*addae81cSVijay Mahadevan 140*addae81cSVijay Mahadevan /* now re-allocate and assign field names */ 141*addae81cSVijay Mahadevan dmmoab->numFields = numFields; 142*addae81cSVijay Mahadevan ierr = PetscMalloc(sizeof(char*)*numFields,&dmmoab->fieldNames);CHKERRQ(ierr); 143*addae81cSVijay Mahadevan if (fields) { 144*addae81cSVijay Mahadevan for(i=0; i<dmmoab->numFields; i++) { 145*addae81cSVijay Mahadevan ierr = PetscStrallocpy(fields[i], (char**) &dmmoab->fieldNames[i]);CHKERRQ(ierr); 146*addae81cSVijay Mahadevan } 147*addae81cSVijay Mahadevan } 1488cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 1498cbae1a6SVijay Mahadevan } 1508cbae1a6SVijay Mahadevan 1518cbae1a6SVijay Mahadevan 1528cbae1a6SVijay Mahadevan #undef __FUNCT__ 1538cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabGetFieldDof" 1548cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetFieldDof(DM dm,moab::EntityHandle point,PetscInt field,PetscInt* dof) 1558cbae1a6SVijay Mahadevan { 1568cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 1578cbae1a6SVijay Mahadevan 1588cbae1a6SVijay Mahadevan PetscFunctionBegin; 1598cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 1608cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 1618cbae1a6SVijay Mahadevan 1628cbae1a6SVijay Mahadevan *dof=dmmoab->gidmap[(PetscInt)point]; 1638cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 1648cbae1a6SVijay Mahadevan } 1658cbae1a6SVijay Mahadevan 1668cbae1a6SVijay Mahadevan 1678cbae1a6SVijay Mahadevan #undef __FUNCT__ 1688cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabGetFieldDofs" 1698cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetFieldDofs(DM dm,PetscInt npoints,const moab::EntityHandle* points,PetscInt field,PetscInt* dof) 1708cbae1a6SVijay Mahadevan { 1718cbae1a6SVijay Mahadevan PetscInt i; 1728cbae1a6SVijay Mahadevan PetscErrorCode ierr; 1738cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 1748cbae1a6SVijay Mahadevan 1758cbae1a6SVijay Mahadevan PetscFunctionBegin; 1768cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 1778cbae1a6SVijay Mahadevan PetscValidPointer(points,2); 1788cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 1798cbae1a6SVijay Mahadevan 1808cbae1a6SVijay Mahadevan if (!dof) { 1818cbae1a6SVijay Mahadevan ierr = PetscMalloc(sizeof(PetscInt)*npoints, &dof);CHKERRQ(ierr); 1828cbae1a6SVijay Mahadevan } 1838cbae1a6SVijay Mahadevan 1848cbae1a6SVijay Mahadevan /* first get the local indices */ 1858cbae1a6SVijay Mahadevan if (dmmoab->bs > 1) { 1868cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 187*addae81cSVijay Mahadevan dof[i] = dmmoab->gidmap[(PetscInt)points[i]]*dmmoab->numFields+field; 1888cbae1a6SVijay Mahadevan } 1898cbae1a6SVijay Mahadevan else { 1908cbae1a6SVijay Mahadevan /* assume all fields have equal distribution */ 1918cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 1928cbae1a6SVijay Mahadevan dof[i] = dmmoab->gidmap[(PetscInt)points[i]]+field*dmmoab->n; 1938cbae1a6SVijay Mahadevan } 1948cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 1958cbae1a6SVijay Mahadevan } 1968cbae1a6SVijay Mahadevan 1978cbae1a6SVijay Mahadevan 1988cbae1a6SVijay Mahadevan #undef __FUNCT__ 1998cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabGetFieldDofsLocal" 2008cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetFieldDofsLocal(DM dm,PetscInt npoints,const moab::EntityHandle* points,PetscInt field,PetscInt* dof) 2018cbae1a6SVijay Mahadevan { 2028cbae1a6SVijay Mahadevan PetscInt i,offset; 2038cbae1a6SVijay Mahadevan PetscErrorCode ierr; 2048cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 2058cbae1a6SVijay Mahadevan 2068cbae1a6SVijay Mahadevan PetscFunctionBegin; 2078cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 2088cbae1a6SVijay Mahadevan PetscValidPointer(points,2); 2098cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 2108cbae1a6SVijay Mahadevan 2118cbae1a6SVijay Mahadevan if (!dof) { 2128cbae1a6SVijay Mahadevan ierr = PetscMalloc(sizeof(PetscInt)*npoints, &dof);CHKERRQ(ierr); 2138cbae1a6SVijay Mahadevan } 2148cbae1a6SVijay Mahadevan 2158cbae1a6SVijay Mahadevan if (dmmoab->bs > 1) { 2168cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 217*addae81cSVijay Mahadevan dof[i] = dmmoab->lidmap[(PetscInt)points[i]]*dmmoab->numFields+field; 2188cbae1a6SVijay Mahadevan } 2198cbae1a6SVijay Mahadevan else { 2208cbae1a6SVijay Mahadevan offset = field*dmmoab->n; /* assume all fields have equal distribution */ 2218cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 2228cbae1a6SVijay Mahadevan dof[i] = dmmoab->lidmap[(PetscInt)points[i]]+offset; 2238cbae1a6SVijay Mahadevan } 2248cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 2258cbae1a6SVijay Mahadevan } 2268cbae1a6SVijay Mahadevan 2278cbae1a6SVijay Mahadevan 2288cbae1a6SVijay Mahadevan #undef __FUNCT__ 2298cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabGetDofs" 2308cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetDofs(DM dm,PetscInt npoints,const moab::EntityHandle* points,PetscInt* dof) 2318cbae1a6SVijay Mahadevan { 2328cbae1a6SVijay Mahadevan PetscInt i,field,offset; 2338cbae1a6SVijay Mahadevan PetscErrorCode ierr; 2348cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 2358cbae1a6SVijay Mahadevan 2368cbae1a6SVijay Mahadevan PetscFunctionBegin; 2378cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 2388cbae1a6SVijay Mahadevan PetscValidPointer(points,2); 2398cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 2408cbae1a6SVijay Mahadevan 2418cbae1a6SVijay Mahadevan if (!dof) { 242*addae81cSVijay Mahadevan ierr = PetscMalloc(sizeof(PetscInt)*dmmoab->numFields*npoints, &dof);CHKERRQ(ierr); 2438cbae1a6SVijay Mahadevan } 2448cbae1a6SVijay Mahadevan 2458cbae1a6SVijay Mahadevan if (dmmoab->bs > 1) { 246*addae81cSVijay Mahadevan for (field=0; field<dmmoab->numFields; ++field) { 2478cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 248*addae81cSVijay Mahadevan dof[i*dmmoab->numFields+field] = dmmoab->gidmap[(PetscInt)points[i]]*dmmoab->numFields+field; 2498cbae1a6SVijay Mahadevan } 2508cbae1a6SVijay Mahadevan } 2518cbae1a6SVijay Mahadevan else { 252*addae81cSVijay Mahadevan for (field=0; field<dmmoab->numFields; ++field) { 2538cbae1a6SVijay Mahadevan offset = field*dmmoab->n; /* assume all fields have equal distribution */ 2548cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 255*addae81cSVijay Mahadevan dof[i*dmmoab->numFields+field] = dmmoab->gidmap[(PetscInt)points[i]]+offset; 2568cbae1a6SVijay Mahadevan } 2578cbae1a6SVijay Mahadevan } 2588cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 2598cbae1a6SVijay Mahadevan } 2608cbae1a6SVijay Mahadevan 2618cbae1a6SVijay Mahadevan 2628cbae1a6SVijay Mahadevan #undef __FUNCT__ 2638cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabGetDofsLocal" 2648cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetDofsLocal(DM dm,PetscInt npoints,const moab::EntityHandle* points,PetscInt* dof) 2658cbae1a6SVijay Mahadevan { 2668cbae1a6SVijay Mahadevan PetscInt i,field,offset; 2678cbae1a6SVijay Mahadevan PetscErrorCode ierr; 2688cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 2698cbae1a6SVijay Mahadevan 2708cbae1a6SVijay Mahadevan PetscFunctionBegin; 2718cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 2728cbae1a6SVijay Mahadevan PetscValidPointer(points,2); 2738cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 2748cbae1a6SVijay Mahadevan 2758cbae1a6SVijay Mahadevan if (!dof) { 276*addae81cSVijay Mahadevan ierr = PetscMalloc(sizeof(PetscInt)*dmmoab->numFields*npoints, &dof);CHKERRQ(ierr); 2778cbae1a6SVijay Mahadevan } 2788cbae1a6SVijay Mahadevan 2798cbae1a6SVijay Mahadevan if (dmmoab->bs > 1) { 280*addae81cSVijay Mahadevan for (field=0; field<dmmoab->numFields; ++field) { 2818cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 282*addae81cSVijay Mahadevan dof[i*dmmoab->numFields+field] = dmmoab->lidmap[(PetscInt)points[i]]*dmmoab->numFields+field; 2838cbae1a6SVijay Mahadevan } 2848cbae1a6SVijay Mahadevan } 2858cbae1a6SVijay Mahadevan else { 286*addae81cSVijay Mahadevan for (field=0; field<dmmoab->numFields; ++field) { 2878cbae1a6SVijay Mahadevan offset = field*dmmoab->n; /* assume all fields have equal distribution */ 2888cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 289*addae81cSVijay Mahadevan dof[i*dmmoab->numFields+field] = dmmoab->lidmap[(PetscInt)points[i]]+offset; 2908cbae1a6SVijay Mahadevan } 2918cbae1a6SVijay Mahadevan } 2928cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 2938cbae1a6SVijay Mahadevan } 2948cbae1a6SVijay Mahadevan 2958cbae1a6SVijay Mahadevan 2968cbae1a6SVijay Mahadevan #undef __FUNCT__ 2978cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabGetDofsBlocked" 2988cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetDofsBlocked(DM dm,PetscInt npoints,const moab::EntityHandle* points,PetscInt* dof) 2998cbae1a6SVijay Mahadevan { 3008cbae1a6SVijay Mahadevan PetscInt i; 3018cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 3028cbae1a6SVijay Mahadevan PetscErrorCode ierr; 3038cbae1a6SVijay Mahadevan 3048cbae1a6SVijay Mahadevan PetscFunctionBegin; 3058cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 3068cbae1a6SVijay Mahadevan PetscValidPointer(points,2); 3078cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 3088cbae1a6SVijay Mahadevan 3098cbae1a6SVijay Mahadevan if (!dof) { 3108cbae1a6SVijay Mahadevan ierr = PetscMalloc(sizeof(PetscInt)*npoints, &dof);CHKERRQ(ierr); 3118cbae1a6SVijay Mahadevan } 3128cbae1a6SVijay Mahadevan 3138cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) { 3148cbae1a6SVijay Mahadevan dof[i]=dmmoab->gidmap[(PetscInt)points[i]]; 3158cbae1a6SVijay Mahadevan } 3168cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 3178cbae1a6SVijay Mahadevan } 3188cbae1a6SVijay Mahadevan 3198cbae1a6SVijay Mahadevan 3208cbae1a6SVijay Mahadevan #undef __FUNCT__ 3218cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabGetDofsBlockedLocal" 3228cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetDofsBlockedLocal(DM dm,PetscInt npoints,const moab::EntityHandle* points,PetscInt* dof) 3238cbae1a6SVijay Mahadevan { 3248cbae1a6SVijay Mahadevan PetscInt i; 3258cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 3268cbae1a6SVijay Mahadevan PetscErrorCode ierr; 3278cbae1a6SVijay Mahadevan 3288cbae1a6SVijay Mahadevan PetscFunctionBegin; 3298cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 3308cbae1a6SVijay Mahadevan PetscValidPointer(points,2); 3318cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 3328cbae1a6SVijay Mahadevan 3338cbae1a6SVijay Mahadevan if (!dof) { 3348cbae1a6SVijay Mahadevan ierr = PetscMalloc(sizeof(PetscInt)*npoints, &dof);CHKERRQ(ierr); 3358cbae1a6SVijay Mahadevan } 3368cbae1a6SVijay Mahadevan 3378cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 3388cbae1a6SVijay Mahadevan dof[i] = dmmoab->lidmap[(PetscInt)points[i]]; 3398cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 3408cbae1a6SVijay Mahadevan } 3418cbae1a6SVijay Mahadevan 3428cbae1a6SVijay Mahadevan 3438cbae1a6SVijay Mahadevan #undef __FUNCT__ 3448cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabGetVertexDofsBlocked" 3458cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetVertexDofsBlocked(DM dm,PetscInt** dof) 3468cbae1a6SVijay Mahadevan { 3478cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 3488cbae1a6SVijay Mahadevan 3498cbae1a6SVijay Mahadevan PetscFunctionBegin; 3508cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 3518cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 3528cbae1a6SVijay Mahadevan 3538cbae1a6SVijay Mahadevan *dof = dmmoab->gidmap; 3548cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 3558cbae1a6SVijay Mahadevan } 3568cbae1a6SVijay Mahadevan 3578cbae1a6SVijay Mahadevan 3588cbae1a6SVijay Mahadevan #undef __FUNCT__ 3598cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabGetVertexDofsBlockedLocal" 3608cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetVertexDofsBlockedLocal(DM dm,PetscInt** dof) 3618cbae1a6SVijay Mahadevan { 3628cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 3638cbae1a6SVijay Mahadevan 3648cbae1a6SVijay Mahadevan PetscFunctionBegin; 3658cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 3668cbae1a6SVijay Mahadevan PetscValidPointer(dof,2); 3678cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 3688cbae1a6SVijay Mahadevan 3698cbae1a6SVijay Mahadevan *dof = dmmoab->lidmap; 3708cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 3718cbae1a6SVijay Mahadevan } 3728cbae1a6SVijay Mahadevan 3738cbae1a6SVijay Mahadevan 3748cbae1a6SVijay Mahadevan 375