1af0996ceSBarry Smith #include <petsc/private/dmpleximpl.h> /*I "petscdmplex.h" I*/ 233879625SMatthew G. Knepley 3552f7358SJed Brown /*@ 4552f7358SJed Brown DMPlexGetPointLocal - get location of point data in local Vec 5552f7358SJed Brown 6552f7358SJed Brown Not Collective 7552f7358SJed Brown 8*4165533cSJose E. Roman Input Parameters: 9552f7358SJed Brown + dm - DM defining the topological space 10552f7358SJed Brown - point - topological point 11552f7358SJed Brown 12*4165533cSJose E. Roman Output Parameters: 13552f7358SJed Brown + start - start of point data 14552f7358SJed Brown - end - end of point data 15552f7358SJed Brown 16a89cf0ddSMatthew G. Knepley Note: This is a half open interval [start, end) 17a89cf0ddSMatthew G. Knepley 18552f7358SJed Brown Level: intermediate 19552f7358SJed Brown 2092fd8e1eSJed Brown .seealso: DMPlexGetPointLocalField(), DMGetLocalSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexPointLocalRead(), DMPlexPointLocalRead(), DMPlexPointLocalRef() 21552f7358SJed Brown @*/ 22552f7358SJed Brown PetscErrorCode DMPlexGetPointLocal(DM dm, PetscInt point, PetscInt *start, PetscInt *end) 23552f7358SJed Brown { 24a89cf0ddSMatthew G. Knepley PetscInt s, e; 25552f7358SJed Brown PetscErrorCode ierr; 26552f7358SJed Brown 27552f7358SJed Brown PetscFunctionBegin; 28552f7358SJed Brown PetscValidHeaderSpecific(dm,DM_CLASSID,1); 29a89cf0ddSMatthew G. Knepley if (start) PetscValidPointer(start, 3); 30a89cf0ddSMatthew G. Knepley if (end) PetscValidPointer(end, 4); 31088fd00dSMatthew G. Knepley ierr = DMGetLocalOffset_Private(dm, point, &s, &e);CHKERRQ(ierr); 32a89cf0ddSMatthew G. Knepley if (start) *start = s; 33a89cf0ddSMatthew G. Knepley if (end) *end = e; 34552f7358SJed Brown PetscFunctionReturn(0); 35552f7358SJed Brown } 36552f7358SJed Brown 37552f7358SJed Brown /*@ 38552f7358SJed Brown DMPlexPointLocalRead - return read access to a point in local array 39552f7358SJed Brown 40552f7358SJed Brown Not Collective 41552f7358SJed Brown 42*4165533cSJose E. Roman Input Parameters: 43552f7358SJed Brown + dm - DM defining topological space 44552f7358SJed Brown . point - topological point 45552f7358SJed Brown - array - array to index into 46552f7358SJed Brown 47*4165533cSJose E. Roman Output Parameter: 48552f7358SJed Brown . ptr - address of read reference to point data, type generic so user can place in structure 49552f7358SJed Brown 50552f7358SJed Brown Level: intermediate 51552f7358SJed Brown 52552f7358SJed Brown Note: 53552f7358SJed Brown A common usage when data sizes are known statically: 54552f7358SJed Brown 55552f7358SJed Brown $ const struct { PetscScalar foo,bar,baz; } *ptr; 56552f7358SJed Brown $ DMPlexPointLocalRead(dm,point,array,&ptr); 57552f7358SJed Brown $ x = 2*ptr->foo + 3*ptr->bar + 5*ptr->baz; 58552f7358SJed Brown 5992fd8e1eSJed Brown .seealso: DMGetLocalSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexGetPointLocal(), DMPlexPointGlobalRead() 60552f7358SJed Brown @*/ 61081a2d76SSatish Balay PetscErrorCode DMPlexPointLocalRead(DM dm,PetscInt point,const PetscScalar *array,void *ptr) 62552f7358SJed Brown { 63552f7358SJed Brown PetscErrorCode ierr; 64a89cf0ddSMatthew G. Knepley PetscInt start, end; 65552f7358SJed Brown 66552f7358SJed Brown PetscFunctionBegin; 67552f7358SJed Brown PetscValidHeaderSpecific(dm,DM_CLASSID,1); 68552f7358SJed Brown PetscValidScalarPointer(array,3); 69552f7358SJed Brown PetscValidPointer(ptr,4); 70088fd00dSMatthew G. Knepley ierr = DMGetLocalOffset_Private(dm,point,&start,&end);CHKERRQ(ierr); 71a89cf0ddSMatthew G. Knepley *(const PetscScalar**)ptr = (start < end) ? array + start : NULL; 72552f7358SJed Brown PetscFunctionReturn(0); 73552f7358SJed Brown } 74552f7358SJed Brown 75552f7358SJed Brown /*@ 76552f7358SJed Brown DMPlexPointLocalRef - return read/write access to a point in local array 77552f7358SJed Brown 78552f7358SJed Brown Not Collective 79552f7358SJed Brown 80*4165533cSJose E. Roman Input Parameters: 81552f7358SJed Brown + dm - DM defining topological space 82552f7358SJed Brown . point - topological point 83552f7358SJed Brown - array - array to index into 84552f7358SJed Brown 85*4165533cSJose E. Roman Output Parameter: 86552f7358SJed Brown . ptr - address of reference to point data, type generic so user can place in structure 87552f7358SJed Brown 88552f7358SJed Brown Level: intermediate 89552f7358SJed Brown 90552f7358SJed Brown Note: 91552f7358SJed Brown A common usage when data sizes are known statically: 92552f7358SJed Brown 93552f7358SJed Brown $ struct { PetscScalar foo,bar,baz; } *ptr; 94552f7358SJed Brown $ DMPlexPointLocalRef(dm,point,array,&ptr); 95552f7358SJed Brown $ ptr->foo = 2; ptr->bar = 3; ptr->baz = 5; 96552f7358SJed Brown 9792fd8e1eSJed Brown .seealso: DMGetLocalSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexGetPointLocal(), DMPlexPointGlobalRef() 98552f7358SJed Brown @*/ 99552f7358SJed Brown PetscErrorCode DMPlexPointLocalRef(DM dm,PetscInt point,PetscScalar *array,void *ptr) 100552f7358SJed Brown { 101552f7358SJed Brown PetscErrorCode ierr; 102a89cf0ddSMatthew G. Knepley PetscInt start, end; 103552f7358SJed Brown 104552f7358SJed Brown PetscFunctionBegin; 105552f7358SJed Brown PetscValidHeaderSpecific(dm,DM_CLASSID,1); 106552f7358SJed Brown PetscValidScalarPointer(array,3); 107552f7358SJed Brown PetscValidPointer(ptr,4); 108088fd00dSMatthew G. Knepley ierr = DMGetLocalOffset_Private(dm,point,&start,&end);CHKERRQ(ierr); 109a89cf0ddSMatthew G. Knepley *(PetscScalar**)ptr = (start < end) ? array + start : NULL; 110a89cf0ddSMatthew G. Knepley PetscFunctionReturn(0); 111a89cf0ddSMatthew G. Knepley } 112a89cf0ddSMatthew G. Knepley 113a89cf0ddSMatthew G. Knepley /*@ 114a89cf0ddSMatthew G. Knepley DMPlexGetPointLocalField - get location of point field data in local Vec 115a89cf0ddSMatthew G. Knepley 116a89cf0ddSMatthew G. Knepley Not Collective 117a89cf0ddSMatthew G. Knepley 118*4165533cSJose E. Roman Input Parameters: 119a89cf0ddSMatthew G. Knepley + dm - DM defining the topological space 120a89cf0ddSMatthew G. Knepley . point - topological point 121a89cf0ddSMatthew G. Knepley - field - the field number 122a89cf0ddSMatthew G. Knepley 123*4165533cSJose E. Roman Output Parameters: 124a89cf0ddSMatthew G. Knepley + start - start of point data 125a89cf0ddSMatthew G. Knepley - end - end of point data 126a89cf0ddSMatthew G. Knepley 127a89cf0ddSMatthew G. Knepley Note: This is a half open interval [start, end) 128a89cf0ddSMatthew G. Knepley 129a89cf0ddSMatthew G. Knepley Level: intermediate 130a89cf0ddSMatthew G. Knepley 13192fd8e1eSJed Brown .seealso: DMPlexGetPointLocal(), DMGetLocalSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexPointLocalRead(), DMPlexPointLocalRead(), DMPlexPointLocalRef() 132a89cf0ddSMatthew G. Knepley @*/ 133a89cf0ddSMatthew G. Knepley PetscErrorCode DMPlexGetPointLocalField(DM dm, PetscInt point, PetscInt field, PetscInt *start, PetscInt *end) 134a89cf0ddSMatthew G. Knepley { 135a89cf0ddSMatthew G. Knepley PetscInt s, e; 136a89cf0ddSMatthew G. Knepley PetscErrorCode ierr; 137a89cf0ddSMatthew G. Knepley 138a89cf0ddSMatthew G. Knepley PetscFunctionBegin; 139a89cf0ddSMatthew G. Knepley PetscValidHeaderSpecific(dm,DM_CLASSID,1); 140a89cf0ddSMatthew G. Knepley if (start) PetscValidPointer(start, 4); 141a89cf0ddSMatthew G. Knepley if (end) PetscValidPointer(end, 5); 142088fd00dSMatthew G. Knepley ierr = DMGetLocalFieldOffset_Private(dm, point, field, &s, &e);CHKERRQ(ierr); 143a89cf0ddSMatthew G. Knepley if (start) *start = s; 144a89cf0ddSMatthew G. Knepley if (end) *end = e; 145552f7358SJed Brown PetscFunctionReturn(0); 146552f7358SJed Brown } 147552f7358SJed Brown 1481ce3176fSMatthew G. Knepley /*@ 1491ce3176fSMatthew G. Knepley DMPlexPointLocalFieldRead - return read access to a field on a point in local array 1501ce3176fSMatthew G. Knepley 1511ce3176fSMatthew G. Knepley Not Collective 1521ce3176fSMatthew G. Knepley 153*4165533cSJose E. Roman Input Parameters: 1541ce3176fSMatthew G. Knepley + dm - DM defining topological space 1551ce3176fSMatthew G. Knepley . point - topological point 1561ce3176fSMatthew G. Knepley . field - field number 1571ce3176fSMatthew G. Knepley - array - array to index into 1581ce3176fSMatthew G. Knepley 159*4165533cSJose E. Roman Output Parameter: 1601ce3176fSMatthew G. Knepley . ptr - address of read reference to point data, type generic so user can place in structure 1611ce3176fSMatthew G. Knepley 1621ce3176fSMatthew G. Knepley Level: intermediate 1631ce3176fSMatthew G. Knepley 16492fd8e1eSJed Brown .seealso: DMGetLocalSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexGetPointLocal(), DMPlexPointGlobalRef() 1651ce3176fSMatthew G. Knepley @*/ 166081a2d76SSatish Balay PetscErrorCode DMPlexPointLocalFieldRead(DM dm, PetscInt point,PetscInt field,const PetscScalar *array,void *ptr) 1671ce3176fSMatthew G. Knepley { 1681ce3176fSMatthew G. Knepley PetscErrorCode ierr; 169a89cf0ddSMatthew G. Knepley PetscInt start, end; 1701ce3176fSMatthew G. Knepley 1711ce3176fSMatthew G. Knepley PetscFunctionBegin; 1721ce3176fSMatthew G. Knepley PetscValidHeaderSpecific(dm,DM_CLASSID,1); 173064a246eSJacob Faibussowitsch PetscValidScalarPointer(array,4); 174064a246eSJacob Faibussowitsch PetscValidPointer(ptr,5); 175088fd00dSMatthew G. Knepley ierr = DMGetLocalFieldOffset_Private(dm, point, field, &start, &end);CHKERRQ(ierr); 1761ce3176fSMatthew G. Knepley *(const PetscScalar**)ptr = array + start; 1771ce3176fSMatthew G. Knepley PetscFunctionReturn(0); 1781ce3176fSMatthew G. Knepley } 1791ce3176fSMatthew G. Knepley 1804824f456SMatthew G. Knepley /*@ 1814824f456SMatthew G. Knepley DMPlexPointLocalFieldRef - return read/write access to a field on a point in local array 1824824f456SMatthew G. Knepley 1834824f456SMatthew G. Knepley Not Collective 1844824f456SMatthew G. Knepley 185*4165533cSJose E. Roman Input Parameters: 1864824f456SMatthew G. Knepley + dm - DM defining topological space 1874824f456SMatthew G. Knepley . point - topological point 1884824f456SMatthew G. Knepley . field - field number 1894824f456SMatthew G. Knepley - array - array to index into 1904824f456SMatthew G. Knepley 191*4165533cSJose E. Roman Output Parameter: 1924824f456SMatthew G. Knepley . ptr - address of reference to point data, type generic so user can place in structure 1934824f456SMatthew G. Knepley 1944824f456SMatthew G. Knepley Level: intermediate 1954824f456SMatthew G. Knepley 19692fd8e1eSJed Brown .seealso: DMGetLocalSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexGetPointLocal(), DMPlexPointGlobalRef() 1974824f456SMatthew G. Knepley @*/ 1984824f456SMatthew G. Knepley PetscErrorCode DMPlexPointLocalFieldRef(DM dm,PetscInt point,PetscInt field,PetscScalar *array,void *ptr) 1994824f456SMatthew G. Knepley { 2004824f456SMatthew G. Knepley PetscErrorCode ierr; 201a89cf0ddSMatthew G. Knepley PetscInt start, end; 2024824f456SMatthew G. Knepley 2034824f456SMatthew G. Knepley PetscFunctionBegin; 2044824f456SMatthew G. Knepley PetscValidHeaderSpecific(dm,DM_CLASSID,1); 205064a246eSJacob Faibussowitsch PetscValidScalarPointer(array,4); 206064a246eSJacob Faibussowitsch PetscValidPointer(ptr,5); 207088fd00dSMatthew G. Knepley ierr = DMGetLocalFieldOffset_Private(dm, point, field, &start, &end);CHKERRQ(ierr); 2084824f456SMatthew G. Knepley *(PetscScalar**)ptr = array + start; 2094824f456SMatthew G. Knepley PetscFunctionReturn(0); 2104824f456SMatthew G. Knepley } 2114824f456SMatthew G. Knepley 212552f7358SJed Brown /*@ 213552f7358SJed Brown DMPlexGetPointGlobal - get location of point data in global Vec 214552f7358SJed Brown 215552f7358SJed Brown Not Collective 216552f7358SJed Brown 217*4165533cSJose E. Roman Input Parameters: 218552f7358SJed Brown + dm - DM defining the topological space 219552f7358SJed Brown - point - topological point 220552f7358SJed Brown 221*4165533cSJose E. Roman Output Parameters: 222a89cf0ddSMatthew G. Knepley + start - start of point data; returns -(globalStart+1) if point is not owned 223a89cf0ddSMatthew G. Knepley - end - end of point data; returns -(globalEnd+1) if point is not owned 224a89cf0ddSMatthew G. Knepley 225a89cf0ddSMatthew G. Knepley Note: This is a half open interval [start, end) 226552f7358SJed Brown 227552f7358SJed Brown Level: intermediate 228552f7358SJed Brown 22992fd8e1eSJed Brown .seealso: DMPlexGetPointGlobalField(), DMGetLocalSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexPointGlobalRead(), DMPlexGetPointLocal(), DMPlexPointGlobalRead(), DMPlexPointGlobalRef() 230552f7358SJed Brown @*/ 231552f7358SJed Brown PetscErrorCode DMPlexGetPointGlobal(DM dm, PetscInt point, PetscInt *start, PetscInt *end) 232552f7358SJed Brown { 233a89cf0ddSMatthew G. Knepley PetscInt s, e; 234552f7358SJed Brown PetscErrorCode ierr; 235552f7358SJed Brown 236552f7358SJed Brown PetscFunctionBegin; 237552f7358SJed Brown PetscValidHeaderSpecific(dm, DM_CLASSID, 1); 238a89cf0ddSMatthew G. Knepley if (start) PetscValidPointer(start, 3); 239a89cf0ddSMatthew G. Knepley if (end) PetscValidPointer(end, 4); 240088fd00dSMatthew G. Knepley ierr = DMGetGlobalOffset_Private(dm, point, &s, &e);CHKERRQ(ierr); 241a89cf0ddSMatthew G. Knepley if (start) *start = s; 242a89cf0ddSMatthew G. Knepley if (end) *end = e; 243552f7358SJed Brown PetscFunctionReturn(0); 244552f7358SJed Brown } 245552f7358SJed Brown 246552f7358SJed Brown /*@ 247552f7358SJed Brown DMPlexPointGlobalRead - return read access to a point in global array 248552f7358SJed Brown 249552f7358SJed Brown Not Collective 250552f7358SJed Brown 251*4165533cSJose E. Roman Input Parameters: 252552f7358SJed Brown + dm - DM defining topological space 253552f7358SJed Brown . point - topological point 254552f7358SJed Brown - array - array to index into 255552f7358SJed Brown 256*4165533cSJose E. Roman Output Parameter: 2570298fd71SBarry Smith . ptr - address of read reference to point data, type generic so user can place in structure; returns NULL if global point is not owned 258552f7358SJed Brown 259552f7358SJed Brown Level: intermediate 260552f7358SJed Brown 261552f7358SJed Brown Note: 262552f7358SJed Brown A common usage when data sizes are known statically: 263552f7358SJed Brown 264552f7358SJed Brown $ const struct { PetscScalar foo,bar,baz; } *ptr; 265552f7358SJed Brown $ DMPlexPointGlobalRead(dm,point,array,&ptr); 266552f7358SJed Brown $ x = 2*ptr->foo + 3*ptr->bar + 5*ptr->baz; 267552f7358SJed Brown 26892fd8e1eSJed Brown .seealso: DMGetLocalSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexGetPointGlobal(), DMPlexPointLocalRead(), DMPlexPointGlobalRef() 269552f7358SJed Brown @*/ 270552f7358SJed Brown PetscErrorCode DMPlexPointGlobalRead(DM dm,PetscInt point,const PetscScalar *array,const void *ptr) 271552f7358SJed Brown { 27279532bb4SMatthew G. Knepley PetscInt start, end; 273552f7358SJed Brown PetscErrorCode ierr; 274552f7358SJed Brown 275552f7358SJed Brown PetscFunctionBegin; 276552f7358SJed Brown PetscValidHeaderSpecific(dm, DM_CLASSID, 1); 277552f7358SJed Brown PetscValidScalarPointer(array, 3); 278552f7358SJed Brown PetscValidPointer(ptr, 4); 279088fd00dSMatthew G. Knepley ierr = DMGetGlobalOffset_Private(dm, point, &start, &end);CHKERRQ(ierr); 28079532bb4SMatthew G. Knepley *(const PetscScalar**) ptr = (start < end) ? array + start - dm->map->rstart : NULL; 281552f7358SJed Brown PetscFunctionReturn(0); 282552f7358SJed Brown } 283552f7358SJed Brown 284552f7358SJed Brown /*@ 285552f7358SJed Brown DMPlexPointGlobalRef - return read/write access to a point in global array 286552f7358SJed Brown 287552f7358SJed Brown Not Collective 288552f7358SJed Brown 289*4165533cSJose E. Roman Input Parameters: 290552f7358SJed Brown + dm - DM defining topological space 291552f7358SJed Brown . point - topological point 292552f7358SJed Brown - array - array to index into 293552f7358SJed Brown 294*4165533cSJose E. Roman Output Parameter: 2950298fd71SBarry Smith . ptr - address of reference to point data, type generic so user can place in structure; returns NULL if global point is not owned 296552f7358SJed Brown 297552f7358SJed Brown Level: intermediate 298552f7358SJed Brown 299552f7358SJed Brown Note: 300552f7358SJed Brown A common usage when data sizes are known statically: 301552f7358SJed Brown 302552f7358SJed Brown $ struct { PetscScalar foo,bar,baz; } *ptr; 303552f7358SJed Brown $ DMPlexPointGlobalRef(dm,point,array,&ptr); 304552f7358SJed Brown $ ptr->foo = 2; ptr->bar = 3; ptr->baz = 5; 305552f7358SJed Brown 30692fd8e1eSJed Brown .seealso: DMGetLocalSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexGetPointGlobal(), DMPlexPointLocalRef(), DMPlexPointGlobalRead() 307552f7358SJed Brown @*/ 308552f7358SJed Brown PetscErrorCode DMPlexPointGlobalRef(DM dm,PetscInt point,PetscScalar *array,void *ptr) 309552f7358SJed Brown { 31079532bb4SMatthew G. Knepley PetscInt start, end; 311552f7358SJed Brown PetscErrorCode ierr; 312552f7358SJed Brown 313552f7358SJed Brown PetscFunctionBegin; 314552f7358SJed Brown PetscValidHeaderSpecific(dm, DM_CLASSID, 1); 315552f7358SJed Brown PetscValidScalarPointer(array, 3); 316552f7358SJed Brown PetscValidPointer(ptr, 4); 317088fd00dSMatthew G. Knepley ierr = DMGetGlobalOffset_Private(dm, point, &start, &end);CHKERRQ(ierr); 31879532bb4SMatthew G. Knepley *(PetscScalar**) ptr = (start < end) ? array + start - dm->map->rstart : NULL; 319552f7358SJed Brown PetscFunctionReturn(0); 320552f7358SJed Brown } 32133879625SMatthew G. Knepley 322a89cf0ddSMatthew G. Knepley /*@ 323a89cf0ddSMatthew G. Knepley DMPlexGetPointGlobalField - get location of point field data in global Vec 324a89cf0ddSMatthew G. Knepley 325a89cf0ddSMatthew G. Knepley Not Collective 326a89cf0ddSMatthew G. Knepley 327*4165533cSJose E. Roman Input Parameters: 328a89cf0ddSMatthew G. Knepley + dm - DM defining the topological space 329a89cf0ddSMatthew G. Knepley . point - topological point 330a89cf0ddSMatthew G. Knepley - field - the field number 331a89cf0ddSMatthew G. Knepley 332*4165533cSJose E. Roman Output Parameters: 333a89cf0ddSMatthew G. Knepley + start - start of point data; returns -(globalStart+1) if point is not owned 334a89cf0ddSMatthew G. Knepley - end - end of point data; returns -(globalEnd+1) if point is not owned 335a89cf0ddSMatthew G. Knepley 336a89cf0ddSMatthew G. Knepley Note: This is a half open interval [start, end) 337a89cf0ddSMatthew G. Knepley 338a89cf0ddSMatthew G. Knepley Level: intermediate 339a89cf0ddSMatthew G. Knepley 34092fd8e1eSJed Brown .seealso: DMPlexGetPointGlobal(), DMGetLocalSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexPointGlobalRead(), DMPlexGetPointLocal(), DMPlexPointGlobalRead(), DMPlexPointGlobalRef() 341a89cf0ddSMatthew G. Knepley @*/ 342a89cf0ddSMatthew G. Knepley PetscErrorCode DMPlexGetPointGlobalField(DM dm, PetscInt point, PetscInt field, PetscInt *start, PetscInt *end) 343a89cf0ddSMatthew G. Knepley { 344a89cf0ddSMatthew G. Knepley PetscInt s, e; 345a89cf0ddSMatthew G. Knepley PetscErrorCode ierr; 346a89cf0ddSMatthew G. Knepley 347a89cf0ddSMatthew G. Knepley PetscFunctionBegin; 348a89cf0ddSMatthew G. Knepley PetscValidHeaderSpecific(dm, DM_CLASSID, 1); 349a89cf0ddSMatthew G. Knepley if (start) PetscValidPointer(start, 4); 350a89cf0ddSMatthew G. Knepley if (end) PetscValidPointer(end, 5); 351088fd00dSMatthew G. Knepley ierr = DMGetGlobalFieldOffset_Private(dm, point, field, &s, &e);CHKERRQ(ierr); 352a89cf0ddSMatthew G. Knepley if (start) *start = s; 353a89cf0ddSMatthew G. Knepley if (end) *end = e; 354a89cf0ddSMatthew G. Knepley PetscFunctionReturn(0); 355a89cf0ddSMatthew G. Knepley } 356a89cf0ddSMatthew G. Knepley 35733879625SMatthew G. Knepley /*@ 35833879625SMatthew G. Knepley DMPlexPointGlobalFieldRead - return read access to a field on a point in global array 35933879625SMatthew G. Knepley 36033879625SMatthew G. Knepley Not Collective 36133879625SMatthew G. Knepley 362*4165533cSJose E. Roman Input Parameters: 36333879625SMatthew G. Knepley + dm - DM defining topological space 36433879625SMatthew G. Knepley . point - topological point 36533879625SMatthew G. Knepley . field - field number 36633879625SMatthew G. Knepley - array - array to index into 36733879625SMatthew G. Knepley 368*4165533cSJose E. Roman Output Parameter: 36933879625SMatthew G. Knepley . ptr - address of read reference to point data, type generic so user can place in structure; returns NULL if global point is not owned 37033879625SMatthew G. Knepley 37133879625SMatthew G. Knepley Level: intermediate 37233879625SMatthew G. Knepley 37392fd8e1eSJed Brown .seealso: DMGetLocalSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexGetPointGlobal(), DMPlexPointLocalRead(), DMPlexPointGlobalRef() 37433879625SMatthew G. Knepley @*/ 375081a2d76SSatish Balay PetscErrorCode DMPlexPointGlobalFieldRead(DM dm,PetscInt point,PetscInt field,const PetscScalar *array,void *ptr) 37633879625SMatthew G. Knepley { 37779532bb4SMatthew G. Knepley PetscInt start, end; 37833879625SMatthew G. Knepley PetscErrorCode ierr; 37933879625SMatthew G. Knepley 38033879625SMatthew G. Knepley PetscFunctionBegin; 38133879625SMatthew G. Knepley PetscValidHeaderSpecific(dm, DM_CLASSID, 1); 382064a246eSJacob Faibussowitsch PetscValidScalarPointer(array, 4); 383064a246eSJacob Faibussowitsch PetscValidPointer(ptr, 5); 384088fd00dSMatthew G. Knepley ierr = DMGetGlobalFieldOffset_Private(dm, point, field, &start, &end);CHKERRQ(ierr); 38579532bb4SMatthew G. Knepley *(const PetscScalar**) ptr = (start < end) ? array + start - dm->map->rstart : NULL; 38633879625SMatthew G. Knepley PetscFunctionReturn(0); 38733879625SMatthew G. Knepley } 38833879625SMatthew G. Knepley 38933879625SMatthew G. Knepley /*@ 39033879625SMatthew G. Knepley DMPlexPointGlobalFieldRef - return read/write access to a field on a point in global array 39133879625SMatthew G. Knepley 39233879625SMatthew G. Knepley Not Collective 39333879625SMatthew G. Knepley 394*4165533cSJose E. Roman Input Parameters: 39533879625SMatthew G. Knepley + dm - DM defining topological space 39633879625SMatthew G. Knepley . point - topological point 39733879625SMatthew G. Knepley . field - field number 39833879625SMatthew G. Knepley - array - array to index into 39933879625SMatthew G. Knepley 400*4165533cSJose E. Roman Output Parameter: 40133879625SMatthew G. Knepley . ptr - address of reference to point data, type generic so user can place in structure; returns NULL if global point is not owned 40233879625SMatthew G. Knepley 40333879625SMatthew G. Knepley Level: intermediate 40433879625SMatthew G. Knepley 40592fd8e1eSJed Brown .seealso: DMGetLocalSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexGetPointGlobal(), DMPlexPointLocalRef(), DMPlexPointGlobalRead() 40633879625SMatthew G. Knepley @*/ 40733879625SMatthew G. Knepley PetscErrorCode DMPlexPointGlobalFieldRef(DM dm,PetscInt point,PetscInt field,PetscScalar *array,void *ptr) 40833879625SMatthew G. Knepley { 40979532bb4SMatthew G. Knepley PetscInt start, end; 41033879625SMatthew G. Knepley PetscErrorCode ierr; 41133879625SMatthew G. Knepley 41233879625SMatthew G. Knepley PetscFunctionBegin; 41333879625SMatthew G. Knepley PetscValidHeaderSpecific(dm, DM_CLASSID, 1); 414064a246eSJacob Faibussowitsch PetscValidScalarPointer(array, 4); 415064a246eSJacob Faibussowitsch PetscValidPointer(ptr, 5); 416088fd00dSMatthew G. Knepley ierr = DMGetGlobalFieldOffset_Private(dm, point, field, &start, &end);CHKERRQ(ierr); 41779532bb4SMatthew G. Knepley *(PetscScalar**) ptr = (start < end) ? array + start - dm->map->rstart : NULL; 41833879625SMatthew G. Knepley PetscFunctionReturn(0); 41933879625SMatthew G. Knepley } 420