1af0996ceSBarry Smith #include <petsc/private/dmpleximpl.h> /*I "petscdmplex.h" I*/ 233879625SMatthew G. Knepley 333879625SMatthew G. Knepley #undef __FUNCT__ 4552f7358SJed Brown #define __FUNCT__ "DMPlexGetPointLocal" 5552f7358SJed Brown /*@ 6552f7358SJed Brown DMPlexGetPointLocal - get location of point data in local Vec 7552f7358SJed Brown 8552f7358SJed Brown Not Collective 9552f7358SJed Brown 10552f7358SJed Brown Input Arguments: 11552f7358SJed Brown + dm - DM defining the topological space 12552f7358SJed Brown - point - topological point 13552f7358SJed Brown 14552f7358SJed Brown Output Arguments: 15552f7358SJed Brown + start - start of point data 16552f7358SJed Brown - end - end of point data 17552f7358SJed Brown 18a89cf0ddSMatthew G. Knepley Note: This is a half open interval [start, end) 19a89cf0ddSMatthew G. Knepley 20552f7358SJed Brown Level: intermediate 21552f7358SJed Brown 22a89cf0ddSMatthew G. Knepley .seealso: DMPlexGetPointLocalField(), DMGetDefaultSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexPointLocalRead(), DMPlexPointLocalRead(), DMPlexPointLocalRef() 23552f7358SJed Brown @*/ 24552f7358SJed Brown PetscErrorCode DMPlexGetPointLocal(DM dm, PetscInt point, PetscInt *start, PetscInt *end) 25552f7358SJed Brown { 26a89cf0ddSMatthew G. Knepley PetscInt s, e; 27552f7358SJed Brown PetscErrorCode ierr; 28552f7358SJed Brown 29552f7358SJed Brown PetscFunctionBegin; 30552f7358SJed Brown PetscValidHeaderSpecific(dm,DM_CLASSID,1); 31a89cf0ddSMatthew G. Knepley if (start) PetscValidPointer(start, 3); 32a89cf0ddSMatthew G. Knepley if (end) PetscValidPointer(end, 4); 33a89cf0ddSMatthew G. Knepley ierr = DMPlexGetLocalOffset_Private(dm, point, &s, &e);CHKERRQ(ierr); 34a89cf0ddSMatthew G. Knepley if (start) *start = s; 35a89cf0ddSMatthew G. Knepley if (end) *end = e; 36552f7358SJed Brown PetscFunctionReturn(0); 37552f7358SJed Brown } 38552f7358SJed Brown 39552f7358SJed Brown #undef __FUNCT__ 40552f7358SJed Brown #define __FUNCT__ "DMPlexPointLocalRead" 41552f7358SJed Brown /*@ 42552f7358SJed Brown DMPlexPointLocalRead - return read access to a point in local array 43552f7358SJed Brown 44552f7358SJed Brown Not Collective 45552f7358SJed Brown 46552f7358SJed Brown Input Arguments: 47552f7358SJed Brown + dm - DM defining topological space 48552f7358SJed Brown . point - topological point 49552f7358SJed Brown - array - array to index into 50552f7358SJed Brown 51552f7358SJed Brown Output Arguments: 52552f7358SJed Brown . ptr - address of read reference to point data, type generic so user can place in structure 53552f7358SJed Brown 54552f7358SJed Brown Level: intermediate 55552f7358SJed Brown 56552f7358SJed Brown Note: 57552f7358SJed Brown A common usage when data sizes are known statically: 58552f7358SJed Brown 59552f7358SJed Brown $ const struct { PetscScalar foo,bar,baz; } *ptr; 60552f7358SJed Brown $ DMPlexPointLocalRead(dm,point,array,&ptr); 61552f7358SJed Brown $ x = 2*ptr->foo + 3*ptr->bar + 5*ptr->baz; 62552f7358SJed Brown 63552f7358SJed Brown .seealso: DMGetDefaultSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexGetPointLocal(), DMPlexPointGlobalRead() 64552f7358SJed Brown @*/ 65*081a2d76SSatish Balay PetscErrorCode DMPlexPointLocalRead(DM dm,PetscInt point,const PetscScalar *array,void *ptr) 66552f7358SJed Brown { 67552f7358SJed Brown PetscErrorCode ierr; 68a89cf0ddSMatthew G. Knepley PetscInt start, end; 69552f7358SJed Brown 70552f7358SJed Brown PetscFunctionBegin; 71552f7358SJed Brown PetscValidHeaderSpecific(dm,DM_CLASSID,1); 72552f7358SJed Brown PetscValidScalarPointer(array,3); 73552f7358SJed Brown PetscValidPointer(ptr,4); 74a89cf0ddSMatthew G. Knepley ierr = DMPlexGetLocalOffset_Private(dm,point,&start,&end);CHKERRQ(ierr); 75a89cf0ddSMatthew G. Knepley *(const PetscScalar**)ptr = (start < end) ? array + start : NULL; 76552f7358SJed Brown PetscFunctionReturn(0); 77552f7358SJed Brown } 78552f7358SJed Brown 79552f7358SJed Brown #undef __FUNCT__ 80552f7358SJed Brown #define __FUNCT__ "DMPlexPointLocalRef" 81552f7358SJed Brown /*@ 82552f7358SJed Brown DMPlexPointLocalRef - return read/write access to a point in local array 83552f7358SJed Brown 84552f7358SJed Brown Not Collective 85552f7358SJed Brown 86552f7358SJed Brown Input Arguments: 87552f7358SJed Brown + dm - DM defining topological space 88552f7358SJed Brown . point - topological point 89552f7358SJed Brown - array - array to index into 90552f7358SJed Brown 91552f7358SJed Brown Output Arguments: 92552f7358SJed Brown . ptr - address of reference to point data, type generic so user can place in structure 93552f7358SJed Brown 94552f7358SJed Brown Level: intermediate 95552f7358SJed Brown 96552f7358SJed Brown Note: 97552f7358SJed Brown A common usage when data sizes are known statically: 98552f7358SJed Brown 99552f7358SJed Brown $ struct { PetscScalar foo,bar,baz; } *ptr; 100552f7358SJed Brown $ DMPlexPointLocalRef(dm,point,array,&ptr); 101552f7358SJed Brown $ ptr->foo = 2; ptr->bar = 3; ptr->baz = 5; 102552f7358SJed Brown 103552f7358SJed Brown .seealso: DMGetDefaultSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexGetPointLocal(), DMPlexPointGlobalRef() 104552f7358SJed Brown @*/ 105552f7358SJed Brown PetscErrorCode DMPlexPointLocalRef(DM dm,PetscInt point,PetscScalar *array,void *ptr) 106552f7358SJed Brown { 107552f7358SJed Brown PetscErrorCode ierr; 108a89cf0ddSMatthew G. Knepley PetscInt start, end; 109552f7358SJed Brown 110552f7358SJed Brown PetscFunctionBegin; 111552f7358SJed Brown PetscValidHeaderSpecific(dm,DM_CLASSID,1); 112552f7358SJed Brown PetscValidScalarPointer(array,3); 113552f7358SJed Brown PetscValidPointer(ptr,4); 114a89cf0ddSMatthew G. Knepley ierr = DMPlexGetLocalOffset_Private(dm,point,&start,&end);CHKERRQ(ierr); 115a89cf0ddSMatthew G. Knepley *(PetscScalar**)ptr = (start < end) ? array + start : NULL; 116a89cf0ddSMatthew G. Knepley PetscFunctionReturn(0); 117a89cf0ddSMatthew G. Knepley } 118a89cf0ddSMatthew G. Knepley 119a89cf0ddSMatthew G. Knepley #undef __FUNCT__ 120a89cf0ddSMatthew G. Knepley #define __FUNCT__ "DMPlexGetPointLocalField" 121a89cf0ddSMatthew G. Knepley /*@ 122a89cf0ddSMatthew G. Knepley DMPlexGetPointLocalField - get location of point field data in local Vec 123a89cf0ddSMatthew G. Knepley 124a89cf0ddSMatthew G. Knepley Not Collective 125a89cf0ddSMatthew G. Knepley 126a89cf0ddSMatthew G. Knepley Input Arguments: 127a89cf0ddSMatthew G. Knepley + dm - DM defining the topological space 128a89cf0ddSMatthew G. Knepley . point - topological point 129a89cf0ddSMatthew G. Knepley - field - the field number 130a89cf0ddSMatthew G. Knepley 131a89cf0ddSMatthew G. Knepley Output Arguments: 132a89cf0ddSMatthew G. Knepley + start - start of point data 133a89cf0ddSMatthew G. Knepley - end - end of point data 134a89cf0ddSMatthew G. Knepley 135a89cf0ddSMatthew G. Knepley Note: This is a half open interval [start, end) 136a89cf0ddSMatthew G. Knepley 137a89cf0ddSMatthew G. Knepley Level: intermediate 138a89cf0ddSMatthew G. Knepley 139a89cf0ddSMatthew G. Knepley .seealso: DMPlexGetPointLocal(), DMGetDefaultSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexPointLocalRead(), DMPlexPointLocalRead(), DMPlexPointLocalRef() 140a89cf0ddSMatthew G. Knepley @*/ 141a89cf0ddSMatthew G. Knepley PetscErrorCode DMPlexGetPointLocalField(DM dm, PetscInt point, PetscInt field, PetscInt *start, PetscInt *end) 142a89cf0ddSMatthew G. Knepley { 143a89cf0ddSMatthew G. Knepley PetscInt s, e; 144a89cf0ddSMatthew G. Knepley PetscErrorCode ierr; 145a89cf0ddSMatthew G. Knepley 146a89cf0ddSMatthew G. Knepley PetscFunctionBegin; 147a89cf0ddSMatthew G. Knepley PetscValidHeaderSpecific(dm,DM_CLASSID,1); 148a89cf0ddSMatthew G. Knepley if (start) PetscValidPointer(start, 4); 149a89cf0ddSMatthew G. Knepley if (end) PetscValidPointer(end, 5); 150a89cf0ddSMatthew G. Knepley ierr = DMPlexGetLocalFieldOffset_Private(dm, point, field, &s, &e);CHKERRQ(ierr); 151a89cf0ddSMatthew G. Knepley if (start) *start = s; 152a89cf0ddSMatthew G. Knepley if (end) *end = e; 153552f7358SJed Brown PetscFunctionReturn(0); 154552f7358SJed Brown } 155552f7358SJed Brown 156552f7358SJed Brown #undef __FUNCT__ 1571ce3176fSMatthew G. Knepley #define __FUNCT__ "DMPlexPointLocalFieldRead" 1581ce3176fSMatthew G. Knepley /*@ 1591ce3176fSMatthew G. Knepley DMPlexPointLocalFieldRead - return read access to a field on a point in local array 1601ce3176fSMatthew G. Knepley 1611ce3176fSMatthew G. Knepley Not Collective 1621ce3176fSMatthew G. Knepley 1631ce3176fSMatthew G. Knepley Input Arguments: 1641ce3176fSMatthew G. Knepley + dm - DM defining topological space 1651ce3176fSMatthew G. Knepley . point - topological point 1661ce3176fSMatthew G. Knepley . field - field number 1671ce3176fSMatthew G. Knepley - array - array to index into 1681ce3176fSMatthew G. Knepley 1691ce3176fSMatthew G. Knepley Output Arguments: 1701ce3176fSMatthew G. Knepley . ptr - address of read reference to point data, type generic so user can place in structure 1711ce3176fSMatthew G. Knepley 1721ce3176fSMatthew G. Knepley Level: intermediate 1731ce3176fSMatthew G. Knepley 1741ce3176fSMatthew G. Knepley .seealso: DMGetDefaultSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexGetPointLocal(), DMPlexPointGlobalRef() 1751ce3176fSMatthew G. Knepley @*/ 176*081a2d76SSatish Balay PetscErrorCode DMPlexPointLocalFieldRead(DM dm, PetscInt point,PetscInt field,const PetscScalar *array,void *ptr) 1771ce3176fSMatthew G. Knepley { 1781ce3176fSMatthew G. Knepley PetscErrorCode ierr; 179a89cf0ddSMatthew G. Knepley PetscInt start, end; 1801ce3176fSMatthew G. Knepley 1811ce3176fSMatthew G. Knepley PetscFunctionBegin; 1821ce3176fSMatthew G. Knepley PetscValidHeaderSpecific(dm,DM_CLASSID,1); 1831ce3176fSMatthew G. Knepley PetscValidScalarPointer(array,3); 1841ce3176fSMatthew G. Knepley PetscValidPointer(ptr,4); 185a89cf0ddSMatthew G. Knepley ierr = DMPlexGetLocalFieldOffset_Private(dm, point, field, &start, &end);CHKERRQ(ierr); 1861ce3176fSMatthew G. Knepley *(const PetscScalar**)ptr = array + start; 1871ce3176fSMatthew G. Knepley PetscFunctionReturn(0); 1881ce3176fSMatthew G. Knepley } 1891ce3176fSMatthew G. Knepley 1901ce3176fSMatthew G. Knepley #undef __FUNCT__ 1914824f456SMatthew G. Knepley #define __FUNCT__ "DMPlexPointLocalFieldRef" 1924824f456SMatthew G. Knepley /*@ 1934824f456SMatthew G. Knepley DMPlexPointLocalFieldRef - return read/write access to a field on a point in local array 1944824f456SMatthew G. Knepley 1954824f456SMatthew G. Knepley Not Collective 1964824f456SMatthew G. Knepley 1974824f456SMatthew G. Knepley Input Arguments: 1984824f456SMatthew G. Knepley + dm - DM defining topological space 1994824f456SMatthew G. Knepley . point - topological point 2004824f456SMatthew G. Knepley . field - field number 2014824f456SMatthew G. Knepley - array - array to index into 2024824f456SMatthew G. Knepley 2034824f456SMatthew G. Knepley Output Arguments: 2044824f456SMatthew G. Knepley . ptr - address of reference to point data, type generic so user can place in structure 2054824f456SMatthew G. Knepley 2064824f456SMatthew G. Knepley Level: intermediate 2074824f456SMatthew G. Knepley 2084824f456SMatthew G. Knepley .seealso: DMGetDefaultSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexGetPointLocal(), DMPlexPointGlobalRef() 2094824f456SMatthew G. Knepley @*/ 2104824f456SMatthew G. Knepley PetscErrorCode DMPlexPointLocalFieldRef(DM dm,PetscInt point,PetscInt field,PetscScalar *array,void *ptr) 2114824f456SMatthew G. Knepley { 2124824f456SMatthew G. Knepley PetscErrorCode ierr; 213a89cf0ddSMatthew G. Knepley PetscInt start, end; 2144824f456SMatthew G. Knepley 2154824f456SMatthew G. Knepley PetscFunctionBegin; 2164824f456SMatthew G. Knepley PetscValidHeaderSpecific(dm,DM_CLASSID,1); 2174824f456SMatthew G. Knepley PetscValidScalarPointer(array,3); 2184824f456SMatthew G. Knepley PetscValidPointer(ptr,4); 219a89cf0ddSMatthew G. Knepley ierr = DMPlexGetLocalFieldOffset_Private(dm, point, field, &start, &end);CHKERRQ(ierr); 2204824f456SMatthew G. Knepley *(PetscScalar**)ptr = array + start; 2214824f456SMatthew G. Knepley PetscFunctionReturn(0); 2224824f456SMatthew G. Knepley } 2234824f456SMatthew G. Knepley 2244824f456SMatthew G. Knepley #undef __FUNCT__ 225552f7358SJed Brown #define __FUNCT__ "DMPlexGetPointGlobal" 226552f7358SJed Brown /*@ 227552f7358SJed Brown DMPlexGetPointGlobal - get location of point data in global Vec 228552f7358SJed Brown 229552f7358SJed Brown Not Collective 230552f7358SJed Brown 231552f7358SJed Brown Input Arguments: 232552f7358SJed Brown + dm - DM defining the topological space 233552f7358SJed Brown - point - topological point 234552f7358SJed Brown 235552f7358SJed Brown Output Arguments: 236a89cf0ddSMatthew G. Knepley + start - start of point data; returns -(globalStart+1) if point is not owned 237a89cf0ddSMatthew G. Knepley - end - end of point data; returns -(globalEnd+1) if point is not owned 238a89cf0ddSMatthew G. Knepley 239a89cf0ddSMatthew G. Knepley Note: This is a half open interval [start, end) 240552f7358SJed Brown 241552f7358SJed Brown Level: intermediate 242552f7358SJed Brown 243a89cf0ddSMatthew G. Knepley .seealso: DMPlexGetPointGlobalField(), DMGetDefaultSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexPointGlobalRead(), DMPlexGetPointLocal(), DMPlexPointGlobalRead(), DMPlexPointGlobalRef() 244552f7358SJed Brown @*/ 245552f7358SJed Brown PetscErrorCode DMPlexGetPointGlobal(DM dm, PetscInt point, PetscInt *start, PetscInt *end) 246552f7358SJed Brown { 247a89cf0ddSMatthew G. Knepley PetscInt s, e; 248552f7358SJed Brown PetscErrorCode ierr; 249552f7358SJed Brown 250552f7358SJed Brown PetscFunctionBegin; 251552f7358SJed Brown PetscValidHeaderSpecific(dm, DM_CLASSID, 1); 252a89cf0ddSMatthew G. Knepley if (start) PetscValidPointer(start, 3); 253a89cf0ddSMatthew G. Knepley if (end) PetscValidPointer(end, 4); 254a89cf0ddSMatthew G. Knepley ierr = DMPlexGetGlobalOffset_Private(dm, point, &s, &e);CHKERRQ(ierr); 255a89cf0ddSMatthew G. Knepley if (start) *start = s; 256a89cf0ddSMatthew G. Knepley if (end) *end = e; 257552f7358SJed Brown PetscFunctionReturn(0); 258552f7358SJed Brown } 259552f7358SJed Brown 260552f7358SJed Brown #undef __FUNCT__ 261552f7358SJed Brown #define __FUNCT__ "DMPlexPointGlobalRead" 262552f7358SJed Brown /*@ 263552f7358SJed Brown DMPlexPointGlobalRead - return read access to a point in global array 264552f7358SJed Brown 265552f7358SJed Brown Not Collective 266552f7358SJed Brown 267552f7358SJed Brown Input Arguments: 268552f7358SJed Brown + dm - DM defining topological space 269552f7358SJed Brown . point - topological point 270552f7358SJed Brown - array - array to index into 271552f7358SJed Brown 272552f7358SJed Brown Output Arguments: 2730298fd71SBarry 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 274552f7358SJed Brown 275552f7358SJed Brown Level: intermediate 276552f7358SJed Brown 277552f7358SJed Brown Note: 278552f7358SJed Brown A common usage when data sizes are known statically: 279552f7358SJed Brown 280552f7358SJed Brown $ const struct { PetscScalar foo,bar,baz; } *ptr; 281552f7358SJed Brown $ DMPlexPointGlobalRead(dm,point,array,&ptr); 282552f7358SJed Brown $ x = 2*ptr->foo + 3*ptr->bar + 5*ptr->baz; 283552f7358SJed Brown 284552f7358SJed Brown .seealso: DMGetDefaultSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexGetPointGlobal(), DMPlexPointLocalRead(), DMPlexPointGlobalRef() 285552f7358SJed Brown @*/ 286552f7358SJed Brown PetscErrorCode DMPlexPointGlobalRead(DM dm,PetscInt point,const PetscScalar *array,const void *ptr) 287552f7358SJed Brown { 28879532bb4SMatthew G. Knepley PetscInt start, end; 289552f7358SJed Brown PetscErrorCode ierr; 290552f7358SJed Brown 291552f7358SJed Brown PetscFunctionBegin; 292552f7358SJed Brown PetscValidHeaderSpecific(dm, DM_CLASSID, 1); 293552f7358SJed Brown PetscValidScalarPointer(array, 3); 294552f7358SJed Brown PetscValidPointer(ptr, 4); 29579532bb4SMatthew G. Knepley ierr = DMPlexGetGlobalOffset_Private(dm, point, &start, &end);CHKERRQ(ierr); 29679532bb4SMatthew G. Knepley *(const PetscScalar**) ptr = (start < end) ? array + start - dm->map->rstart : NULL; 297552f7358SJed Brown PetscFunctionReturn(0); 298552f7358SJed Brown } 299552f7358SJed Brown 300552f7358SJed Brown #undef __FUNCT__ 301552f7358SJed Brown #define __FUNCT__ "DMPlexPointGlobalRef" 302552f7358SJed Brown /*@ 303552f7358SJed Brown DMPlexPointGlobalRef - return read/write access to a point in global array 304552f7358SJed Brown 305552f7358SJed Brown Not Collective 306552f7358SJed Brown 307552f7358SJed Brown Input Arguments: 308552f7358SJed Brown + dm - DM defining topological space 309552f7358SJed Brown . point - topological point 310552f7358SJed Brown - array - array to index into 311552f7358SJed Brown 312552f7358SJed Brown Output Arguments: 3130298fd71SBarry Smith . ptr - address of reference to point data, type generic so user can place in structure; returns NULL if global point is not owned 314552f7358SJed Brown 315552f7358SJed Brown Level: intermediate 316552f7358SJed Brown 317552f7358SJed Brown Note: 318552f7358SJed Brown A common usage when data sizes are known statically: 319552f7358SJed Brown 320552f7358SJed Brown $ struct { PetscScalar foo,bar,baz; } *ptr; 321552f7358SJed Brown $ DMPlexPointGlobalRef(dm,point,array,&ptr); 322552f7358SJed Brown $ ptr->foo = 2; ptr->bar = 3; ptr->baz = 5; 323552f7358SJed Brown 324552f7358SJed Brown .seealso: DMGetDefaultSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexGetPointGlobal(), DMPlexPointLocalRef(), DMPlexPointGlobalRead() 325552f7358SJed Brown @*/ 326552f7358SJed Brown PetscErrorCode DMPlexPointGlobalRef(DM dm,PetscInt point,PetscScalar *array,void *ptr) 327552f7358SJed Brown { 32879532bb4SMatthew G. Knepley PetscInt start, end; 329552f7358SJed Brown PetscErrorCode ierr; 330552f7358SJed Brown 331552f7358SJed Brown PetscFunctionBegin; 332552f7358SJed Brown PetscValidHeaderSpecific(dm, DM_CLASSID, 1); 333552f7358SJed Brown PetscValidScalarPointer(array, 3); 334552f7358SJed Brown PetscValidPointer(ptr, 4); 33579532bb4SMatthew G. Knepley ierr = DMPlexGetGlobalOffset_Private(dm, point, &start, &end);CHKERRQ(ierr); 33679532bb4SMatthew G. Knepley *(PetscScalar**) ptr = (start < end) ? array + start - dm->map->rstart : NULL; 337552f7358SJed Brown PetscFunctionReturn(0); 338552f7358SJed Brown } 33933879625SMatthew G. Knepley 34033879625SMatthew G. Knepley #undef __FUNCT__ 341a89cf0ddSMatthew G. Knepley #define __FUNCT__ "DMPlexGetPointGlobalField" 342a89cf0ddSMatthew G. Knepley /*@ 343a89cf0ddSMatthew G. Knepley DMPlexGetPointGlobalField - get location of point field data in global Vec 344a89cf0ddSMatthew G. Knepley 345a89cf0ddSMatthew G. Knepley Not Collective 346a89cf0ddSMatthew G. Knepley 347a89cf0ddSMatthew G. Knepley Input Arguments: 348a89cf0ddSMatthew G. Knepley + dm - DM defining the topological space 349a89cf0ddSMatthew G. Knepley . point - topological point 350a89cf0ddSMatthew G. Knepley - field - the field number 351a89cf0ddSMatthew G. Knepley 352a89cf0ddSMatthew G. Knepley Output Arguments: 353a89cf0ddSMatthew G. Knepley + start - start of point data; returns -(globalStart+1) if point is not owned 354a89cf0ddSMatthew G. Knepley - end - end of point data; returns -(globalEnd+1) if point is not owned 355a89cf0ddSMatthew G. Knepley 356a89cf0ddSMatthew G. Knepley Note: This is a half open interval [start, end) 357a89cf0ddSMatthew G. Knepley 358a89cf0ddSMatthew G. Knepley Level: intermediate 359a89cf0ddSMatthew G. Knepley 360a89cf0ddSMatthew G. Knepley .seealso: DMPlexGetPointGlobal(), DMGetDefaultSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexPointGlobalRead(), DMPlexGetPointLocal(), DMPlexPointGlobalRead(), DMPlexPointGlobalRef() 361a89cf0ddSMatthew G. Knepley @*/ 362a89cf0ddSMatthew G. Knepley PetscErrorCode DMPlexGetPointGlobalField(DM dm, PetscInt point, PetscInt field, PetscInt *start, PetscInt *end) 363a89cf0ddSMatthew G. Knepley { 364a89cf0ddSMatthew G. Knepley PetscInt s, e; 365a89cf0ddSMatthew G. Knepley PetscErrorCode ierr; 366a89cf0ddSMatthew G. Knepley 367a89cf0ddSMatthew G. Knepley PetscFunctionBegin; 368a89cf0ddSMatthew G. Knepley PetscValidHeaderSpecific(dm, DM_CLASSID, 1); 369a89cf0ddSMatthew G. Knepley if (start) PetscValidPointer(start, 4); 370a89cf0ddSMatthew G. Knepley if (end) PetscValidPointer(end, 5); 371a89cf0ddSMatthew G. Knepley ierr = DMPlexGetGlobalFieldOffset_Private(dm, point, field, &s, &e);CHKERRQ(ierr); 372a89cf0ddSMatthew G. Knepley if (start) *start = s; 373a89cf0ddSMatthew G. Knepley if (end) *end = e; 374a89cf0ddSMatthew G. Knepley PetscFunctionReturn(0); 375a89cf0ddSMatthew G. Knepley } 376a89cf0ddSMatthew G. Knepley 377a89cf0ddSMatthew G. Knepley #undef __FUNCT__ 37833879625SMatthew G. Knepley #define __FUNCT__ "DMPlexPointGlobalFieldRead" 37933879625SMatthew G. Knepley /*@ 38033879625SMatthew G. Knepley DMPlexPointGlobalFieldRead - return read access to a field on a point in global array 38133879625SMatthew G. Knepley 38233879625SMatthew G. Knepley Not Collective 38333879625SMatthew G. Knepley 38433879625SMatthew G. Knepley Input Arguments: 38533879625SMatthew G. Knepley + dm - DM defining topological space 38633879625SMatthew G. Knepley . point - topological point 38733879625SMatthew G. Knepley . field - field number 38833879625SMatthew G. Knepley - array - array to index into 38933879625SMatthew G. Knepley 39033879625SMatthew G. Knepley Output Arguments: 39133879625SMatthew 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 39233879625SMatthew G. Knepley 39333879625SMatthew G. Knepley Level: intermediate 39433879625SMatthew G. Knepley 39533879625SMatthew G. Knepley .seealso: DMGetDefaultSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexGetPointGlobal(), DMPlexPointLocalRead(), DMPlexPointGlobalRef() 39633879625SMatthew G. Knepley @*/ 397*081a2d76SSatish Balay PetscErrorCode DMPlexPointGlobalFieldRead(DM dm,PetscInt point,PetscInt field,const PetscScalar *array,void *ptr) 39833879625SMatthew G. Knepley { 39979532bb4SMatthew G. Knepley PetscInt start, end; 40033879625SMatthew G. Knepley PetscErrorCode ierr; 40133879625SMatthew G. Knepley 40233879625SMatthew G. Knepley PetscFunctionBegin; 40333879625SMatthew G. Knepley PetscValidHeaderSpecific(dm, DM_CLASSID, 1); 40433879625SMatthew G. Knepley PetscValidScalarPointer(array, 3); 40533879625SMatthew G. Knepley PetscValidPointer(ptr, 4); 40679532bb4SMatthew G. Knepley ierr = DMPlexGetGlobalFieldOffset_Private(dm, point, field, &start, &end);CHKERRQ(ierr); 40779532bb4SMatthew G. Knepley *(const PetscScalar**) ptr = (start < end) ? array + start - dm->map->rstart : NULL; 40833879625SMatthew G. Knepley PetscFunctionReturn(0); 40933879625SMatthew G. Knepley } 41033879625SMatthew G. Knepley 41133879625SMatthew G. Knepley #undef __FUNCT__ 41233879625SMatthew G. Knepley #define __FUNCT__ "DMPlexPointGlobalFieldRef" 41333879625SMatthew G. Knepley /*@ 41433879625SMatthew G. Knepley DMPlexPointGlobalFieldRef - return read/write access to a field on a point in global array 41533879625SMatthew G. Knepley 41633879625SMatthew G. Knepley Not Collective 41733879625SMatthew G. Knepley 41833879625SMatthew G. Knepley Input Arguments: 41933879625SMatthew G. Knepley + dm - DM defining topological space 42033879625SMatthew G. Knepley . point - topological point 42133879625SMatthew G. Knepley . field - field number 42233879625SMatthew G. Knepley - array - array to index into 42333879625SMatthew G. Knepley 42433879625SMatthew G. Knepley Output Arguments: 42533879625SMatthew 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 42633879625SMatthew G. Knepley 42733879625SMatthew G. Knepley Level: intermediate 42833879625SMatthew G. Knepley 42933879625SMatthew G. Knepley .seealso: DMGetDefaultSection(), PetscSectionGetOffset(), PetscSectionGetDof(), DMPlexGetPointGlobal(), DMPlexPointLocalRef(), DMPlexPointGlobalRead() 43033879625SMatthew G. Knepley @*/ 43133879625SMatthew G. Knepley PetscErrorCode DMPlexPointGlobalFieldRef(DM dm,PetscInt point,PetscInt field,PetscScalar *array,void *ptr) 43233879625SMatthew G. Knepley { 43379532bb4SMatthew G. Knepley PetscInt start, end; 43433879625SMatthew G. Knepley PetscErrorCode ierr; 43533879625SMatthew G. Knepley 43633879625SMatthew G. Knepley PetscFunctionBegin; 43733879625SMatthew G. Knepley PetscValidHeaderSpecific(dm, DM_CLASSID, 1); 43833879625SMatthew G. Knepley PetscValidScalarPointer(array, 3); 43933879625SMatthew G. Knepley PetscValidPointer(ptr, 4); 44079532bb4SMatthew G. Knepley ierr = DMPlexGetGlobalFieldOffset_Private(dm, point, field, &start, &end);CHKERRQ(ierr); 44179532bb4SMatthew G. Knepley *(PetscScalar**) ptr = (start < end) ? array + start - dm->map->rstart : NULL; 44233879625SMatthew G. Knepley PetscFunctionReturn(0); 44333879625SMatthew G. Knepley } 444