1*8cbae1a6SVijay Mahadevan #include <petsc-private/dmmbimpl.h> /*I "petscdm.h" I*/ 2*8cbae1a6SVijay Mahadevan 3*8cbae1a6SVijay Mahadevan #include <petscdmmoab.h> 4*8cbae1a6SVijay Mahadevan 5*8cbae1a6SVijay Mahadevan #undef __FUNCT__ 6*8cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabSetFieldVector" 7*8cbae1a6SVijay Mahadevan PetscErrorCode DMMoabSetFieldVector(DM dm, PetscInt ifield, Vec fvec) 8*8cbae1a6SVijay Mahadevan { 9*8cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 10*8cbae1a6SVijay Mahadevan moab::Tag vtag,ntag; 11*8cbae1a6SVijay Mahadevan const PetscScalar *varray; 12*8cbae1a6SVijay Mahadevan PetscScalar *farray; 13*8cbae1a6SVijay Mahadevan moab::ErrorCode merr; 14*8cbae1a6SVijay Mahadevan PetscErrorCode ierr; 15*8cbae1a6SVijay Mahadevan std::string tag_name; 16*8cbae1a6SVijay Mahadevan 17*8cbae1a6SVijay Mahadevan PetscFunctionBegin; 18*8cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 19*8cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 20*8cbae1a6SVijay Mahadevan 21*8cbae1a6SVijay Mahadevan /* Create a tag in MOAB mesh to index and keep track of number of Petsc vec tags */ 22*8cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_get_handle(dmmoab->fields[ifield],1,moab::MB_TYPE_DOUBLE,ntag, 23*8cbae1a6SVijay Mahadevan moab::MB_TAG_DENSE|moab::MB_TAG_CREAT);MBERRNM(merr); 24*8cbae1a6SVijay Mahadevan 25*8cbae1a6SVijay Mahadevan ierr = DMMoabGetVecTag(fvec,&vtag);CHKERRQ(ierr); 26*8cbae1a6SVijay Mahadevan 27*8cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_get_name(vtag, tag_name); 28*8cbae1a6SVijay Mahadevan if (!tag_name.length() && merr !=moab::MB_SUCCESS) { 29*8cbae1a6SVijay Mahadevan ierr = VecGetArrayRead(fvec,&varray);CHKERRQ(ierr); 30*8cbae1a6SVijay Mahadevan /* use the entity handle and the Dof index to set the right value */ 31*8cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_set_data(ntag, *dmmoab->vowned, (const void*)varray);MBERRNM(merr); 32*8cbae1a6SVijay Mahadevan ierr = VecRestoreArrayRead(fvec,&varray);CHKERRQ(ierr); 33*8cbae1a6SVijay Mahadevan } 34*8cbae1a6SVijay Mahadevan else { 35*8cbae1a6SVijay Mahadevan ierr = PetscMalloc(dmmoab->nloc*sizeof(PetscScalar),&farray);CHKERRQ(ierr); 36*8cbae1a6SVijay Mahadevan /* we are using a MOAB Vec - directly copy the tag data to new one */ 37*8cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_get_data(vtag, *dmmoab->vowned, (void*)farray);MBERRNM(merr); 38*8cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_set_data(ntag, *dmmoab->vowned, (const void*)farray);MBERRNM(merr); 39*8cbae1a6SVijay Mahadevan /* make sure the parallel exchange for ghosts are done appropriately */ 40*8cbae1a6SVijay Mahadevan ierr = PetscFree(farray);CHKERRQ(ierr); 41*8cbae1a6SVijay Mahadevan } 42*8cbae1a6SVijay Mahadevan merr = dmmoab->pcomm->exchange_tags(ntag, *dmmoab->vowned);MBERRNM(merr); 43*8cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 44*8cbae1a6SVijay Mahadevan } 45*8cbae1a6SVijay Mahadevan 46*8cbae1a6SVijay Mahadevan 47*8cbae1a6SVijay Mahadevan #undef __FUNCT__ 48*8cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabSetGlobalFieldVector" 49*8cbae1a6SVijay Mahadevan PetscErrorCode DMMoabSetGlobalFieldVector(DM dm, Vec fvec) 50*8cbae1a6SVijay Mahadevan { 51*8cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 52*8cbae1a6SVijay Mahadevan moab::Tag vtag,ntag; 53*8cbae1a6SVijay Mahadevan const PetscScalar *varray; 54*8cbae1a6SVijay Mahadevan PetscScalar *farray; 55*8cbae1a6SVijay Mahadevan moab::ErrorCode merr; 56*8cbae1a6SVijay Mahadevan PetscErrorCode ierr; 57*8cbae1a6SVijay Mahadevan PetscInt i,ifield; 58*8cbae1a6SVijay Mahadevan std::string tag_name; 59*8cbae1a6SVijay Mahadevan moab::Range::iterator iter; 60*8cbae1a6SVijay Mahadevan 61*8cbae1a6SVijay Mahadevan PetscFunctionBegin; 62*8cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 63*8cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 64*8cbae1a6SVijay Mahadevan 65*8cbae1a6SVijay Mahadevan /* get the Tag corresponding to the global vector - possible that there is no tag associated.. */ 66*8cbae1a6SVijay Mahadevan ierr = DMMoabGetVecTag(fvec,&vtag);CHKERRQ(ierr); 67*8cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_get_name(vtag, tag_name); 68*8cbae1a6SVijay Mahadevan ierr = PetscMalloc(dmmoab->nloc*sizeof(PetscScalar),&farray);CHKERRQ(ierr); 69*8cbae1a6SVijay Mahadevan if (!tag_name.length() && merr !=moab::MB_SUCCESS) { 70*8cbae1a6SVijay Mahadevan /* not a MOAB vector - use VecGetSubVector to get the parts as needed */ 71*8cbae1a6SVijay Mahadevan 72*8cbae1a6SVijay Mahadevan ierr = VecGetArrayRead(fvec,&varray);CHKERRQ(ierr); 73*8cbae1a6SVijay Mahadevan for (ifield=0; ifield<dmmoab->nfields; ++ifield) { 74*8cbae1a6SVijay Mahadevan 75*8cbae1a6SVijay Mahadevan /* Create a tag in MOAB mesh to index and keep track of number of Petsc vec tags */ 76*8cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_get_handle(dmmoab->fields[ifield],1,moab::MB_TYPE_DOUBLE,ntag, 77*8cbae1a6SVijay Mahadevan moab::MB_TAG_DENSE|moab::MB_TAG_CREAT);MBERRNM(merr); 78*8cbae1a6SVijay Mahadevan 79*8cbae1a6SVijay Mahadevan for(i=0;i<dmmoab->nloc;i++) { 80*8cbae1a6SVijay Mahadevan if (dmmoab->bs == 1) 81*8cbae1a6SVijay Mahadevan farray[i]=varray[ifield*dmmoab->nloc+i]; 82*8cbae1a6SVijay Mahadevan else 83*8cbae1a6SVijay Mahadevan farray[i]=varray[i*dmmoab->nfields+ifield]; 84*8cbae1a6SVijay Mahadevan } 85*8cbae1a6SVijay Mahadevan 86*8cbae1a6SVijay Mahadevan /* use the entity handle and the Dof index to set the right value */ 87*8cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_set_data(ntag, *dmmoab->vowned, (const void*)farray);MBERRNM(merr); 88*8cbae1a6SVijay Mahadevan } 89*8cbae1a6SVijay Mahadevan ierr = VecRestoreArrayRead(fvec,&varray);CHKERRQ(ierr); 90*8cbae1a6SVijay Mahadevan } 91*8cbae1a6SVijay Mahadevan else { 92*8cbae1a6SVijay Mahadevan ierr = PetscMalloc(dmmoab->nloc*dmmoab->bs*sizeof(PetscScalar),&varray);CHKERRQ(ierr); 93*8cbae1a6SVijay Mahadevan 94*8cbae1a6SVijay Mahadevan /* we are using a MOAB Vec - directly copy the tag data to new one */ 95*8cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_get_data(vtag, *dmmoab->vowned, (void*)varray);MBERRNM(merr); 96*8cbae1a6SVijay Mahadevan for (ifield=0; ifield<dmmoab->nfields; ++ifield) { 97*8cbae1a6SVijay Mahadevan 98*8cbae1a6SVijay Mahadevan /* Create a tag in MOAB mesh to index and keep track of number of Petsc vec tags */ 99*8cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_get_handle(dmmoab->fields[ifield],1,moab::MB_TYPE_DOUBLE,ntag, 100*8cbae1a6SVijay Mahadevan moab::MB_TAG_DENSE|moab::MB_TAG_CREAT);MBERRNM(merr); 101*8cbae1a6SVijay Mahadevan 102*8cbae1a6SVijay Mahadevan /* we are using a MOAB Vec - directly copy the tag data to new one */ 103*8cbae1a6SVijay Mahadevan for(i=0; i < dmmoab->nloc; i++) { 104*8cbae1a6SVijay Mahadevan farray[i] = varray[i*dmmoab->bs+ifield]; 105*8cbae1a6SVijay Mahadevan } 106*8cbae1a6SVijay Mahadevan 107*8cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->tag_set_data(ntag, *dmmoab->vowned, (const void*)farray);MBERRNM(merr); 108*8cbae1a6SVijay Mahadevan /* make sure the parallel exchange for ghosts are done appropriately */ 109*8cbae1a6SVijay Mahadevan merr = dmmoab->pcomm->exchange_tags(ntag, *dmmoab->vlocal);MBERRNM(merr); 110*8cbae1a6SVijay Mahadevan } 111*8cbae1a6SVijay Mahadevan ierr = PetscFree(varray);CHKERRQ(ierr); 112*8cbae1a6SVijay Mahadevan } 113*8cbae1a6SVijay Mahadevan ierr = PetscFree(farray);CHKERRQ(ierr); 114*8cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 115*8cbae1a6SVijay Mahadevan } 116*8cbae1a6SVijay Mahadevan 117*8cbae1a6SVijay Mahadevan 118*8cbae1a6SVijay Mahadevan #undef __FUNCT__ 119*8cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabSetFields" 120*8cbae1a6SVijay Mahadevan PetscErrorCode DMMoabSetFields(DM dm,PetscInt nfields,const char** fields) 121*8cbae1a6SVijay Mahadevan { 122*8cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 123*8cbae1a6SVijay Mahadevan 124*8cbae1a6SVijay Mahadevan PetscFunctionBegin; 125*8cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 126*8cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 127*8cbae1a6SVijay Mahadevan 128*8cbae1a6SVijay Mahadevan dmmoab->fields = fields; 129*8cbae1a6SVijay Mahadevan dmmoab->nfields = nfields; 130*8cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 131*8cbae1a6SVijay Mahadevan } 132*8cbae1a6SVijay Mahadevan 133*8cbae1a6SVijay Mahadevan 134*8cbae1a6SVijay Mahadevan #undef __FUNCT__ 135*8cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabGetFieldDof" 136*8cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetFieldDof(DM dm,moab::EntityHandle point,PetscInt field,PetscInt* dof) 137*8cbae1a6SVijay Mahadevan { 138*8cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 139*8cbae1a6SVijay Mahadevan 140*8cbae1a6SVijay Mahadevan PetscFunctionBegin; 141*8cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 142*8cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 143*8cbae1a6SVijay Mahadevan 144*8cbae1a6SVijay Mahadevan *dof=dmmoab->gidmap[(PetscInt)point]; 145*8cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 146*8cbae1a6SVijay Mahadevan } 147*8cbae1a6SVijay Mahadevan 148*8cbae1a6SVijay Mahadevan 149*8cbae1a6SVijay Mahadevan #undef __FUNCT__ 150*8cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabGetFieldDofs" 151*8cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetFieldDofs(DM dm,PetscInt npoints,const moab::EntityHandle* points,PetscInt field,PetscInt* dof) 152*8cbae1a6SVijay Mahadevan { 153*8cbae1a6SVijay Mahadevan PetscInt i; 154*8cbae1a6SVijay Mahadevan PetscErrorCode ierr; 155*8cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 156*8cbae1a6SVijay Mahadevan 157*8cbae1a6SVijay Mahadevan PetscFunctionBegin; 158*8cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 159*8cbae1a6SVijay Mahadevan PetscValidPointer(points,2); 160*8cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 161*8cbae1a6SVijay Mahadevan 162*8cbae1a6SVijay Mahadevan if (!dof) { 163*8cbae1a6SVijay Mahadevan ierr = PetscMalloc(sizeof(PetscInt)*npoints, &dof);CHKERRQ(ierr); 164*8cbae1a6SVijay Mahadevan } 165*8cbae1a6SVijay Mahadevan 166*8cbae1a6SVijay Mahadevan /* first get the local indices */ 167*8cbae1a6SVijay Mahadevan if (dmmoab->bs > 1) { 168*8cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 169*8cbae1a6SVijay Mahadevan dof[i] = dmmoab->gidmap[(PetscInt)points[i]]*dmmoab->nfields+field; 170*8cbae1a6SVijay Mahadevan } 171*8cbae1a6SVijay Mahadevan else { 172*8cbae1a6SVijay Mahadevan /* assume all fields have equal distribution */ 173*8cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 174*8cbae1a6SVijay Mahadevan dof[i] = dmmoab->gidmap[(PetscInt)points[i]]+field*dmmoab->n; 175*8cbae1a6SVijay Mahadevan } 176*8cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 177*8cbae1a6SVijay Mahadevan } 178*8cbae1a6SVijay Mahadevan 179*8cbae1a6SVijay Mahadevan 180*8cbae1a6SVijay Mahadevan #undef __FUNCT__ 181*8cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabGetFieldDofsLocal" 182*8cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetFieldDofsLocal(DM dm,PetscInt npoints,const moab::EntityHandle* points,PetscInt field,PetscInt* dof) 183*8cbae1a6SVijay Mahadevan { 184*8cbae1a6SVijay Mahadevan PetscInt i,offset; 185*8cbae1a6SVijay Mahadevan PetscErrorCode ierr; 186*8cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 187*8cbae1a6SVijay Mahadevan 188*8cbae1a6SVijay Mahadevan PetscFunctionBegin; 189*8cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 190*8cbae1a6SVijay Mahadevan PetscValidPointer(points,2); 191*8cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 192*8cbae1a6SVijay Mahadevan 193*8cbae1a6SVijay Mahadevan if (!dof) { 194*8cbae1a6SVijay Mahadevan ierr = PetscMalloc(sizeof(PetscInt)*npoints, &dof);CHKERRQ(ierr); 195*8cbae1a6SVijay Mahadevan } 196*8cbae1a6SVijay Mahadevan 197*8cbae1a6SVijay Mahadevan if (dmmoab->bs > 1) { 198*8cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 199*8cbae1a6SVijay Mahadevan dof[i] = dmmoab->lidmap[(PetscInt)points[i]]*dmmoab->nfields+field; 200*8cbae1a6SVijay Mahadevan } 201*8cbae1a6SVijay Mahadevan else { 202*8cbae1a6SVijay Mahadevan offset = field*dmmoab->n; /* assume all fields have equal distribution */ 203*8cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 204*8cbae1a6SVijay Mahadevan dof[i] = dmmoab->lidmap[(PetscInt)points[i]]+offset; 205*8cbae1a6SVijay Mahadevan } 206*8cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 207*8cbae1a6SVijay Mahadevan } 208*8cbae1a6SVijay Mahadevan 209*8cbae1a6SVijay Mahadevan 210*8cbae1a6SVijay Mahadevan #undef __FUNCT__ 211*8cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabGetDofs" 212*8cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetDofs(DM dm,PetscInt npoints,const moab::EntityHandle* points,PetscInt* dof) 213*8cbae1a6SVijay Mahadevan { 214*8cbae1a6SVijay Mahadevan PetscInt i,field,offset; 215*8cbae1a6SVijay Mahadevan PetscErrorCode ierr; 216*8cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 217*8cbae1a6SVijay Mahadevan 218*8cbae1a6SVijay Mahadevan PetscFunctionBegin; 219*8cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 220*8cbae1a6SVijay Mahadevan PetscValidPointer(points,2); 221*8cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 222*8cbae1a6SVijay Mahadevan 223*8cbae1a6SVijay Mahadevan if (!dof) { 224*8cbae1a6SVijay Mahadevan ierr = PetscMalloc(sizeof(PetscInt)*dmmoab->nfields*npoints, &dof);CHKERRQ(ierr); 225*8cbae1a6SVijay Mahadevan } 226*8cbae1a6SVijay Mahadevan 227*8cbae1a6SVijay Mahadevan if (dmmoab->bs > 1) { 228*8cbae1a6SVijay Mahadevan for (field=0; field<dmmoab->nfields; ++field) { 229*8cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 230*8cbae1a6SVijay Mahadevan dof[i*dmmoab->nfields+field] = dmmoab->gidmap[(PetscInt)points[i]]*dmmoab->nfields+field; 231*8cbae1a6SVijay Mahadevan } 232*8cbae1a6SVijay Mahadevan } 233*8cbae1a6SVijay Mahadevan else { 234*8cbae1a6SVijay Mahadevan for (field=0; field<dmmoab->nfields; ++field) { 235*8cbae1a6SVijay Mahadevan offset = field*dmmoab->n; /* assume all fields have equal distribution */ 236*8cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 237*8cbae1a6SVijay Mahadevan dof[i*dmmoab->nfields+field] = dmmoab->gidmap[(PetscInt)points[i]]+offset; 238*8cbae1a6SVijay Mahadevan } 239*8cbae1a6SVijay Mahadevan } 240*8cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 241*8cbae1a6SVijay Mahadevan } 242*8cbae1a6SVijay Mahadevan 243*8cbae1a6SVijay Mahadevan 244*8cbae1a6SVijay Mahadevan #undef __FUNCT__ 245*8cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabGetDofsLocal" 246*8cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetDofsLocal(DM dm,PetscInt npoints,const moab::EntityHandle* points,PetscInt* dof) 247*8cbae1a6SVijay Mahadevan { 248*8cbae1a6SVijay Mahadevan PetscInt i,field,offset; 249*8cbae1a6SVijay Mahadevan PetscErrorCode ierr; 250*8cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 251*8cbae1a6SVijay Mahadevan 252*8cbae1a6SVijay Mahadevan PetscFunctionBegin; 253*8cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 254*8cbae1a6SVijay Mahadevan PetscValidPointer(points,2); 255*8cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 256*8cbae1a6SVijay Mahadevan 257*8cbae1a6SVijay Mahadevan if (!dof) { 258*8cbae1a6SVijay Mahadevan ierr = PetscMalloc(sizeof(PetscInt)*dmmoab->nfields*npoints, &dof);CHKERRQ(ierr); 259*8cbae1a6SVijay Mahadevan } 260*8cbae1a6SVijay Mahadevan 261*8cbae1a6SVijay Mahadevan if (dmmoab->bs > 1) { 262*8cbae1a6SVijay Mahadevan for (field=0; field<dmmoab->nfields; ++field) { 263*8cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 264*8cbae1a6SVijay Mahadevan dof[i*dmmoab->nfields+field] = dmmoab->lidmap[(PetscInt)points[i]]*dmmoab->nfields+field; 265*8cbae1a6SVijay Mahadevan } 266*8cbae1a6SVijay Mahadevan } 267*8cbae1a6SVijay Mahadevan else { 268*8cbae1a6SVijay Mahadevan for (field=0; field<dmmoab->nfields; ++field) { 269*8cbae1a6SVijay Mahadevan offset = field*dmmoab->n; /* assume all fields have equal distribution */ 270*8cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 271*8cbae1a6SVijay Mahadevan dof[i*dmmoab->nfields+field] = dmmoab->lidmap[(PetscInt)points[i]]+offset; 272*8cbae1a6SVijay Mahadevan } 273*8cbae1a6SVijay Mahadevan } 274*8cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 275*8cbae1a6SVijay Mahadevan } 276*8cbae1a6SVijay Mahadevan 277*8cbae1a6SVijay Mahadevan 278*8cbae1a6SVijay Mahadevan #undef __FUNCT__ 279*8cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabGetDofsBlocked" 280*8cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetDofsBlocked(DM dm,PetscInt npoints,const moab::EntityHandle* points,PetscInt* dof) 281*8cbae1a6SVijay Mahadevan { 282*8cbae1a6SVijay Mahadevan PetscInt i; 283*8cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 284*8cbae1a6SVijay Mahadevan PetscErrorCode ierr; 285*8cbae1a6SVijay Mahadevan 286*8cbae1a6SVijay Mahadevan PetscFunctionBegin; 287*8cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 288*8cbae1a6SVijay Mahadevan PetscValidPointer(points,2); 289*8cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 290*8cbae1a6SVijay Mahadevan 291*8cbae1a6SVijay Mahadevan if (!dof) { 292*8cbae1a6SVijay Mahadevan ierr = PetscMalloc(sizeof(PetscInt)*npoints, &dof);CHKERRQ(ierr); 293*8cbae1a6SVijay Mahadevan } 294*8cbae1a6SVijay Mahadevan 295*8cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) { 296*8cbae1a6SVijay Mahadevan dof[i]=dmmoab->gidmap[(PetscInt)points[i]]; 297*8cbae1a6SVijay Mahadevan } 298*8cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 299*8cbae1a6SVijay Mahadevan } 300*8cbae1a6SVijay Mahadevan 301*8cbae1a6SVijay Mahadevan 302*8cbae1a6SVijay Mahadevan #undef __FUNCT__ 303*8cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabGetDofsBlockedLocal" 304*8cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetDofsBlockedLocal(DM dm,PetscInt npoints,const moab::EntityHandle* points,PetscInt* dof) 305*8cbae1a6SVijay Mahadevan { 306*8cbae1a6SVijay Mahadevan PetscInt i; 307*8cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 308*8cbae1a6SVijay Mahadevan PetscErrorCode ierr; 309*8cbae1a6SVijay Mahadevan 310*8cbae1a6SVijay Mahadevan PetscFunctionBegin; 311*8cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 312*8cbae1a6SVijay Mahadevan PetscValidPointer(points,2); 313*8cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 314*8cbae1a6SVijay Mahadevan 315*8cbae1a6SVijay Mahadevan if (!dof) { 316*8cbae1a6SVijay Mahadevan ierr = PetscMalloc(sizeof(PetscInt)*npoints, &dof);CHKERRQ(ierr); 317*8cbae1a6SVijay Mahadevan } 318*8cbae1a6SVijay Mahadevan 319*8cbae1a6SVijay Mahadevan for (i=0; i<npoints; ++i) 320*8cbae1a6SVijay Mahadevan dof[i] = dmmoab->lidmap[(PetscInt)points[i]]; 321*8cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 322*8cbae1a6SVijay Mahadevan } 323*8cbae1a6SVijay Mahadevan 324*8cbae1a6SVijay Mahadevan 325*8cbae1a6SVijay Mahadevan #undef __FUNCT__ 326*8cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabGetVertexDofsBlocked" 327*8cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetVertexDofsBlocked(DM dm,PetscInt** dof) 328*8cbae1a6SVijay Mahadevan { 329*8cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 330*8cbae1a6SVijay Mahadevan 331*8cbae1a6SVijay Mahadevan PetscFunctionBegin; 332*8cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 333*8cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 334*8cbae1a6SVijay Mahadevan 335*8cbae1a6SVijay Mahadevan *dof = dmmoab->gidmap; 336*8cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 337*8cbae1a6SVijay Mahadevan } 338*8cbae1a6SVijay Mahadevan 339*8cbae1a6SVijay Mahadevan 340*8cbae1a6SVijay Mahadevan #undef __FUNCT__ 341*8cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabGetVertexDofsBlockedLocal" 342*8cbae1a6SVijay Mahadevan PetscErrorCode DMMoabGetVertexDofsBlockedLocal(DM dm,PetscInt** dof) 343*8cbae1a6SVijay Mahadevan { 344*8cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 345*8cbae1a6SVijay Mahadevan 346*8cbae1a6SVijay Mahadevan PetscFunctionBegin; 347*8cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 348*8cbae1a6SVijay Mahadevan PetscValidPointer(dof,2); 349*8cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 350*8cbae1a6SVijay Mahadevan 351*8cbae1a6SVijay Mahadevan *dof = dmmoab->lidmap; 352*8cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 353*8cbae1a6SVijay Mahadevan } 354*8cbae1a6SVijay Mahadevan 355*8cbae1a6SVijay Mahadevan 356*8cbae1a6SVijay Mahadevan 357