1 /* 2 An index set is a generalization of a subset of integers. Index sets 3 are used for defining scatters and gathers. 4 */ 5 #if !defined(__PETSCIS_H) 6 #define __PETSCIS_H 7 #include <petscsys.h> 8 #include <petscsftypes.h> 9 10 #define IS_FILE_CLASSID 1211218 11 PETSC_EXTERN PetscClassId IS_CLASSID; 12 13 PETSC_EXTERN PetscErrorCode ISInitializePackage(void); 14 15 /*S 16 IS - Abstract PETSc object that allows indexing. 17 18 Level: beginner 19 20 Concepts: indexing, stride 21 22 .seealso: ISCreateGeneral(), ISCreateBlock(), ISCreateStride(), ISGetIndices(), ISDestroy() 23 S*/ 24 typedef struct _p_IS* IS; 25 26 /*J 27 ISType - String with the name of a PETSc index set type 28 29 Level: beginner 30 31 .seealso: ISSetType(), IS, ISCreate(), ISRegister() 32 J*/ 33 typedef const char* ISType; 34 #define ISGENERAL "general" 35 #define ISSTRIDE "stride" 36 #define ISBLOCK "block" 37 38 /* Dynamic creation and loading functions */ 39 PETSC_EXTERN PetscFunctionList ISList; 40 PETSC_EXTERN PetscBool ISRegisterAllCalled; 41 PETSC_EXTERN PetscErrorCode ISSetType(IS, ISType); 42 PETSC_EXTERN PetscErrorCode ISGetType(IS, ISType *); 43 PETSC_EXTERN PetscErrorCode ISRegister(const char[],PetscErrorCode (*)(IS)); 44 PETSC_EXTERN PetscErrorCode ISRegisterAll(void); 45 PETSC_EXTERN PetscErrorCode ISCreate(MPI_Comm,IS*); 46 47 /* 48 Default index set data structures that PETSc provides. 49 */ 50 PETSC_EXTERN PetscErrorCode ISCreateGeneral(MPI_Comm,PetscInt,const PetscInt[],PetscCopyMode,IS *); 51 PETSC_EXTERN PetscErrorCode ISGeneralSetIndices(IS,PetscInt,const PetscInt[],PetscCopyMode); 52 PETSC_EXTERN PetscErrorCode ISCreateBlock(MPI_Comm,PetscInt,PetscInt,const PetscInt[],PetscCopyMode,IS *); 53 PETSC_EXTERN PetscErrorCode ISBlockSetIndices(IS,PetscInt,PetscInt,const PetscInt[],PetscCopyMode); 54 PETSC_EXTERN PetscErrorCode ISCreateStride(MPI_Comm,PetscInt,PetscInt,PetscInt,IS *); 55 PETSC_EXTERN PetscErrorCode ISStrideSetStride(IS,PetscInt,PetscInt,PetscInt); 56 57 PETSC_EXTERN PetscErrorCode ISDestroy(IS*); 58 PETSC_EXTERN PetscErrorCode ISSetPermutation(IS); 59 PETSC_EXTERN PetscErrorCode ISPermutation(IS,PetscBool *); 60 PETSC_EXTERN PetscErrorCode ISSetIdentity(IS); 61 PETSC_EXTERN PetscErrorCode ISIdentity(IS,PetscBool *); 62 PETSC_EXTERN PetscErrorCode ISContiguousLocal(IS,PetscInt,PetscInt,PetscInt*,PetscBool*); 63 64 PETSC_EXTERN PetscErrorCode ISGetIndices(IS,const PetscInt *[]); 65 PETSC_EXTERN PetscErrorCode ISRestoreIndices(IS,const PetscInt *[]); 66 PETSC_EXTERN PetscErrorCode ISGetTotalIndices(IS,const PetscInt *[]); 67 PETSC_EXTERN PetscErrorCode ISRestoreTotalIndices(IS,const PetscInt *[]); 68 PETSC_EXTERN PetscErrorCode ISGetNonlocalIndices(IS,const PetscInt *[]); 69 PETSC_EXTERN PetscErrorCode ISRestoreNonlocalIndices(IS,const PetscInt *[]); 70 PETSC_EXTERN PetscErrorCode ISGetNonlocalIS(IS, IS *is); 71 PETSC_EXTERN PetscErrorCode ISRestoreNonlocalIS(IS, IS *is); 72 PETSC_EXTERN PetscErrorCode ISGetSize(IS,PetscInt *); 73 PETSC_EXTERN PetscErrorCode ISGetLocalSize(IS,PetscInt *); 74 PETSC_EXTERN PetscErrorCode ISInvertPermutation(IS,PetscInt,IS*); 75 PETSC_EXTERN PetscErrorCode ISView(IS,PetscViewer); 76 PETSC_STATIC_INLINE PetscErrorCode ISViewFromOptions(IS A,const char prefix[],const char name[]) {return PetscObjectViewFromOptions((PetscObject)A,prefix,name);} 77 PETSC_EXTERN PetscErrorCode ISEqual(IS,IS,PetscBool *); 78 PETSC_EXTERN PetscErrorCode ISSort(IS); 79 PETSC_EXTERN PetscErrorCode ISSorted(IS,PetscBool *); 80 PETSC_EXTERN PetscErrorCode ISDifference(IS,IS,IS*); 81 PETSC_EXTERN PetscErrorCode ISSum(IS,IS,IS*); 82 PETSC_EXTERN PetscErrorCode ISExpand(IS,IS,IS*); 83 PETSC_EXTERN PetscErrorCode ISGetMinMax(IS,PetscInt*,PetscInt*); 84 85 PETSC_EXTERN PetscErrorCode ISBlockGetIndices(IS,const PetscInt *[]); 86 PETSC_EXTERN PetscErrorCode ISBlockRestoreIndices(IS,const PetscInt *[]); 87 PETSC_EXTERN PetscErrorCode ISBlockGetLocalSize(IS,PetscInt *); 88 PETSC_EXTERN PetscErrorCode ISBlockGetSize(IS,PetscInt *); 89 PETSC_EXTERN PetscErrorCode ISGetBlockSize(IS,PetscInt*); 90 PETSC_EXTERN PetscErrorCode ISSetBlockSize(IS,PetscInt); 91 92 PETSC_EXTERN PetscErrorCode ISStrideGetInfo(IS,PetscInt *,PetscInt*); 93 94 PETSC_EXTERN PetscErrorCode ISToGeneral(IS); 95 96 PETSC_EXTERN PetscErrorCode ISDuplicate(IS,IS*); 97 PETSC_EXTERN PetscErrorCode ISCopy(IS,IS); 98 PETSC_EXTERN PetscErrorCode ISAllGather(IS,IS*); 99 PETSC_EXTERN PetscErrorCode ISComplement(IS,PetscInt,PetscInt,IS*); 100 PETSC_EXTERN PetscErrorCode ISConcatenate(MPI_Comm,PetscInt,const IS[],IS*); 101 PETSC_EXTERN PetscErrorCode ISListToPair(MPI_Comm,PetscInt, IS[],IS*,IS*); 102 PETSC_EXTERN PetscErrorCode ISPairToList(IS,IS,PetscInt*, IS *[]); 103 PETSC_EXTERN PetscErrorCode ISEmbed(IS,IS,PetscBool,IS*); 104 PETSC_EXTERN PetscErrorCode ISOnComm(IS,MPI_Comm,PetscCopyMode,IS*); 105 106 /* --------------------------------------------------------------------------*/ 107 PETSC_EXTERN PetscClassId IS_LTOGM_CLASSID; 108 109 /*S 110 ISLocalToGlobalMapping - mappings from an arbitrary 111 local ordering from 0 to n-1 to a global PETSc ordering 112 used by a vector or matrix. 113 114 Level: intermediate 115 116 Note: mapping from Local to Global is scalable; but Global 117 to Local may not be if the range of global values represented locally 118 is very large. 119 120 Note: the ISLocalToGlobalMapping is actually a private object; it is included 121 here for the inline function ISLocalToGlobalMappingApply() to allow it to be inlined since 122 it is used so often. 123 124 .seealso: ISLocalToGlobalMappingCreate() 125 S*/ 126 typedef struct _p_ISLocalToGlobalMapping* ISLocalToGlobalMapping; 127 128 /*E 129 ISGlobalToLocalMappingType - Indicates if missing global indices are 130 131 IS_GTOLM_MASK - missing global indices are replaced with -1 132 IS_GTOLM_DROP - missing global indices are dropped 133 134 Level: beginner 135 136 .seealso: ISGlobalToLocalMappingApply() 137 138 E*/ 139 typedef enum {IS_GTOLM_MASK,IS_GTOLM_DROP} ISGlobalToLocalMappingType; 140 141 PETSC_EXTERN PetscErrorCode ISLocalToGlobalMappingCreate(MPI_Comm,PetscInt,const PetscInt[],PetscCopyMode,ISLocalToGlobalMapping*); 142 PETSC_EXTERN PetscErrorCode ISLocalToGlobalMappingCreateIS(IS,ISLocalToGlobalMapping *); 143 PETSC_EXTERN PetscErrorCode ISLocalToGlobalMappingCreateSF(PetscSF,PetscInt,ISLocalToGlobalMapping*); 144 PETSC_EXTERN PetscErrorCode ISLocalToGlobalMappingView(ISLocalToGlobalMapping,PetscViewer); 145 PETSC_EXTERN PetscErrorCode ISLocalToGlobalMappingDestroy(ISLocalToGlobalMapping*); 146 PETSC_EXTERN PetscErrorCode ISLocalToGlobalMappingApply(ISLocalToGlobalMapping,PetscInt,const PetscInt[],PetscInt[]); 147 PETSC_EXTERN PetscErrorCode ISLocalToGlobalMappingApplyIS(ISLocalToGlobalMapping,IS,IS*); 148 PETSC_EXTERN PetscErrorCode ISGlobalToLocalMappingApply(ISLocalToGlobalMapping,ISGlobalToLocalMappingType,PetscInt,const PetscInt[],PetscInt*,PetscInt[]); 149 PETSC_EXTERN PetscErrorCode ISLocalToGlobalMappingGetSize(ISLocalToGlobalMapping,PetscInt*); 150 PETSC_EXTERN PetscErrorCode ISLocalToGlobalMappingGetInfo(ISLocalToGlobalMapping,PetscInt*,PetscInt*[],PetscInt*[],PetscInt**[]); 151 PETSC_EXTERN PetscErrorCode ISLocalToGlobalMappingRestoreInfo(ISLocalToGlobalMapping,PetscInt*,PetscInt*[],PetscInt*[],PetscInt**[]); 152 PETSC_EXTERN PetscErrorCode ISLocalToGlobalMappingGetIndices(ISLocalToGlobalMapping,const PetscInt**); 153 PETSC_EXTERN PetscErrorCode ISLocalToGlobalMappingRestoreIndices(ISLocalToGlobalMapping,const PetscInt**); 154 PETSC_EXTERN PetscErrorCode ISLocalToGlobalMappingBlock(ISLocalToGlobalMapping,PetscInt,ISLocalToGlobalMapping*); 155 PETSC_EXTERN PetscErrorCode ISLocalToGlobalMappingUnBlock(ISLocalToGlobalMapping,PetscInt,ISLocalToGlobalMapping*); 156 PETSC_EXTERN PetscErrorCode ISLocalToGlobalMappingConcatenate(MPI_Comm,PetscInt,const ISLocalToGlobalMapping[],ISLocalToGlobalMapping*); 157 PETSC_EXTERN PetscErrorCode ISG2LMapApply(ISLocalToGlobalMapping,PetscInt,const PetscInt[],PetscInt[]); 158 159 /* --------------------------------------------------------------------------*/ 160 /*E 161 ISColoringType - determines if the coloring is for the entire parallel grid/graph/matrix 162 or for just the local ghosted portion 163 164 Level: beginner 165 166 $ IS_COLORING_GLOBAL - does not include the colors for ghost points, this is used when the function 167 $ is called synchronously in parallel. This requires generating a "parallel coloring". 168 $ IS_COLORING_GHOSTED - includes colors for ghost points, this is used when the function can be called 169 $ seperately on individual processes with the ghost points already filled in. Does not 170 $ require a "parallel coloring", rather each process colors its local + ghost part. 171 $ Using this can result in much less parallel communication. In the paradigm of 172 $ DMGetLocalVector() and DMGetGlobalVector() this could be called IS_COLORING_LOCAL 173 174 .seealso: DMCreateColoring() 175 E*/ 176 typedef enum {IS_COLORING_GLOBAL,IS_COLORING_GHOSTED} ISColoringType; 177 PETSC_EXTERN const char *const ISColoringTypes[]; 178 typedef unsigned PETSC_IS_COLOR_VALUE_TYPE ISColoringValue; 179 PETSC_EXTERN PetscErrorCode ISAllGatherColors(MPI_Comm,PetscInt,ISColoringValue*,PetscInt*,ISColoringValue*[]); 180 181 /*S 182 ISColoring - sets of IS's that define a coloring 183 of the underlying indices 184 185 Level: intermediate 186 187 Notes: 188 One should not access the *is records below directly because they may not yet 189 have been created. One should use ISColoringGetIS() to make sure they are 190 created when needed. 191 192 Developer Note: this is not a PetscObject 193 194 .seealso: ISColoringCreate(), ISColoringGetIS(), ISColoringView(), ISColoringGetIS() 195 S*/ 196 struct _n_ISColoring { 197 PetscInt refct; 198 PetscInt n; /* number of colors */ 199 IS *is; /* for each color indicates columns */ 200 MPI_Comm comm; 201 ISColoringValue *colors; /* for each column indicates color */ 202 PetscInt N; /* number of columns */ 203 ISColoringType ctype; 204 }; 205 typedef struct _n_ISColoring* ISColoring; 206 207 PETSC_EXTERN PetscErrorCode ISColoringCreate(MPI_Comm,PetscInt,PetscInt,const ISColoringValue[],ISColoring*); 208 PETSC_EXTERN PetscErrorCode ISColoringDestroy(ISColoring*); 209 PETSC_EXTERN PetscErrorCode ISColoringView(ISColoring,PetscViewer); 210 PETSC_EXTERN PetscErrorCode ISColoringViewFromOptions(ISColoring,const char[],const char[]); 211 PETSC_EXTERN PetscErrorCode ISColoringGetIS(ISColoring,PetscInt*,IS*[]); 212 PETSC_EXTERN PetscErrorCode ISColoringRestoreIS(ISColoring,IS*[]); 213 PETSC_EXTERN PetscErrorCode ISColoringReference(ISColoring); 214 PETSC_EXTERN PetscErrorCode ISColoringSetType(ISColoring,ISColoringType); 215 216 217 /* --------------------------------------------------------------------------*/ 218 219 PETSC_EXTERN PetscErrorCode ISPartitioningToNumbering(IS,IS*); 220 PETSC_EXTERN PetscErrorCode ISPartitioningCount(IS,PetscInt,PetscInt[]); 221 222 PETSC_EXTERN PetscErrorCode ISCompressIndicesGeneral(PetscInt,PetscInt,PetscInt,PetscInt,const IS[],IS[]); 223 PETSC_EXTERN PetscErrorCode ISCompressIndicesSorted(PetscInt,PetscInt,PetscInt,const IS[],IS[]); 224 PETSC_EXTERN PetscErrorCode ISExpandIndicesGeneral(PetscInt,PetscInt,PetscInt,PetscInt,const IS[],IS[]); 225 226 /*S 227 PetscLayout - defines layout of vectors and matrices across processes (which rows are owned by which processes) 228 229 Level: developer 230 231 232 .seealso: PetscLayoutCreate(), PetscLayoutDestroy() 233 S*/ 234 typedef struct _n_PetscLayout* PetscLayout; 235 struct _n_PetscLayout{ 236 MPI_Comm comm; 237 PetscInt n,N; /* local, global vector size */ 238 PetscInt rstart,rend; /* local start, local end + 1 */ 239 PetscInt *range; /* the offset of each processor */ 240 PetscInt bs; /* number of elements in each block (generally for multi-component 241 * problems). Defaults to -1 and can be arbitrarily lazy so always use 242 * PetscAbs(map->bs) when accessing directly and expecting result to be 243 * positive. Do NOT multiply above numbers by bs */ 244 PetscInt refcnt; /* MPI Vecs obtained with VecDuplicate() and from MatGetVecs() reuse map of input object */ 245 ISLocalToGlobalMapping mapping; /* mapping used in Vec/MatSetValuesLocal() */ 246 ISLocalToGlobalMapping bmapping; /* mapping used in Vec/MatSetValuesBlockedLocal() */ 247 PetscInt *trstarts; /* local start for each thread */ 248 }; 249 250 PETSC_EXTERN PetscErrorCode PetscLayoutCreate(MPI_Comm,PetscLayout*); 251 PETSC_EXTERN PetscErrorCode PetscLayoutSetUp(PetscLayout); 252 PETSC_EXTERN PetscErrorCode PetscLayoutDestroy(PetscLayout*); 253 PETSC_EXTERN PetscErrorCode PetscLayoutDuplicate(PetscLayout,PetscLayout*); 254 PETSC_EXTERN PetscErrorCode PetscLayoutReference(PetscLayout,PetscLayout*); 255 PETSC_EXTERN PetscErrorCode PetscLayoutSetLocalSize(PetscLayout,PetscInt); 256 PETSC_EXTERN PetscErrorCode PetscLayoutGetLocalSize(PetscLayout,PetscInt *); 257 PETSC_EXTERN PetscErrorCode PetscLayoutSetSize(PetscLayout,PetscInt); 258 PETSC_EXTERN PetscErrorCode PetscLayoutGetSize(PetscLayout,PetscInt *); 259 PETSC_EXTERN PetscErrorCode PetscLayoutSetBlockSize(PetscLayout,PetscInt); 260 PETSC_EXTERN PetscErrorCode PetscLayoutGetBlockSize(PetscLayout,PetscInt*); 261 PETSC_EXTERN PetscErrorCode PetscLayoutGetRange(PetscLayout,PetscInt *,PetscInt *); 262 PETSC_EXTERN PetscErrorCode PetscLayoutGetRanges(PetscLayout,const PetscInt *[]); 263 PETSC_EXTERN PetscErrorCode PetscLayoutSetISLocalToGlobalMapping(PetscLayout,ISLocalToGlobalMapping); 264 PETSC_EXTERN PetscErrorCode PetscLayoutSetISLocalToGlobalMappingBlock(PetscLayout,ISLocalToGlobalMapping); 265 PETSC_EXTERN PetscErrorCode PetscSFSetGraphLayout(PetscSF,PetscLayout,PetscInt,const PetscInt*,PetscCopyMode,const PetscInt*); 266 267 #undef __FUNCT__ 268 #define __FUNCT__ "PetscLayoutFindOwner" 269 /*@C 270 PetscLayoutFindOwner - Find the owning rank for a global index 271 272 Not Collective 273 274 Input Parameters: 275 + map - the layout 276 - idx - global index to find the owner of 277 278 Output Parameter: 279 . owner - the owning rank 280 281 Level: developer 282 283 Fortran Notes: 284 Not available from Fortran 285 286 @*/ 287 PETSC_STATIC_INLINE PetscErrorCode PetscLayoutFindOwner(PetscLayout map,PetscInt idx,PetscInt *owner) 288 { 289 PetscErrorCode ierr; 290 PetscMPIInt lo = 0,hi,t; 291 292 PetscFunctionBegin; 293 *owner = -1; /* GCC erroneously issues warning about possibly uninitialized use when error condition */ 294 if (!((map->n >= 0) && (map->N >= 0) && (map->range))) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONGSTATE,"PetscLayoutSetUp() must be called first"); 295 if (idx < 0 || idx > map->N) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Index %D is out of range",idx); 296 ierr = MPI_Comm_size(map->comm,&hi);CHKERRQ(ierr); 297 while (hi - lo > 1) { 298 t = lo + (hi - lo) / 2; 299 if (idx < map->range[t]) hi = t; 300 else lo = t; 301 } 302 *owner = lo; 303 PetscFunctionReturn(0); 304 } 305 306 #undef __FUNCT__ 307 #define __FUNCT__ "PetscLayoutFindOwnerIndex" 308 /*@C 309 PetscLayoutFindOwnerIndex - Find the owning rank and the local index for a global index 310 311 Not Collective 312 313 Input Parameters: 314 + map - the layout 315 - idx - global index to find the owner of 316 317 Output Parameter: 318 + owner - the owning rank 319 - lidx - local index used by the owner for idx 320 321 Level: developer 322 323 Fortran Notes: 324 Not available from Fortran 325 326 @*/ 327 PETSC_STATIC_INLINE PetscErrorCode PetscLayoutFindOwnerIndex(PetscLayout map,PetscInt idx,PetscInt *owner, PetscInt *lidx) 328 { 329 PetscErrorCode ierr; 330 PetscMPIInt lo = 0,hi,t; 331 332 PetscFunctionBegin; 333 if (!((map->n >= 0) && (map->N >= 0) && (map->range))) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONGSTATE,"PetscLayoutSetUp() must be called first"); 334 if (idx < 0 || idx > map->N) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Index %D is out of range",idx); 335 ierr = MPI_Comm_size(map->comm,&hi);CHKERRQ(ierr); 336 while (hi - lo > 1) { 337 t = lo + (hi - lo) / 2; 338 if (idx < map->range[t]) hi = t; 339 else lo = t; 340 } 341 *owner = lo; 342 *lidx = idx-map->range[lo]; 343 PetscFunctionReturn(0); 344 } 345 346 PETSC_EXTERN PetscClassId PETSC_SECTION_CLASSID; 347 348 /*S 349 PetscSection - Mapping from integers in a designated range to contiguous sets of integers. 350 351 In contrast to IS, which maps from integers to single integers, the range of a PetscSection is in the space of 352 contiguous sets of integers. These ranges are frequently interpreted as domains of other array-like objects, 353 especially other PetscSections, Vecs, and ISs. The domain is set with PetscSectionSetChart() and does not need to 354 start at 0. For each point in the domain of a PetscSection, the output set is represented through an offset and a 355 count, which are set using PetscSectionSetOffset() and PetscSectionSetDof() respectively. Lookup is typically using 356 accessors or routines like VecGetValuesSection(). 357 358 Level: developer 359 360 .seealso: PetscSectionCreate(), PetscSectionDestroy() 361 S*/ 362 typedef struct _p_PetscSection *PetscSection; 363 PETSC_EXTERN PetscErrorCode PetscSectionCreate(MPI_Comm,PetscSection*); 364 PETSC_EXTERN PetscErrorCode PetscSectionClone(PetscSection, PetscSection*); 365 PETSC_EXTERN PetscErrorCode PetscSectionGetNumFields(PetscSection, PetscInt *); 366 PETSC_EXTERN PetscErrorCode PetscSectionSetNumFields(PetscSection, PetscInt); 367 PETSC_EXTERN PetscErrorCode PetscSectionGetFieldName(PetscSection, PetscInt, const char *[]); 368 PETSC_EXTERN PetscErrorCode PetscSectionSetFieldName(PetscSection, PetscInt, const char []); 369 PETSC_EXTERN PetscErrorCode PetscSectionGetFieldComponents(PetscSection, PetscInt, PetscInt *); 370 PETSC_EXTERN PetscErrorCode PetscSectionSetFieldComponents(PetscSection, PetscInt, PetscInt); 371 PETSC_EXTERN PetscErrorCode PetscSectionGetChart(PetscSection, PetscInt *, PetscInt *); 372 PETSC_EXTERN PetscErrorCode PetscSectionSetChart(PetscSection, PetscInt, PetscInt); 373 PETSC_EXTERN PetscErrorCode PetscSectionGetDof(PetscSection, PetscInt, PetscInt*); 374 PETSC_EXTERN PetscErrorCode PetscSectionSetDof(PetscSection, PetscInt, PetscInt); 375 PETSC_EXTERN PetscErrorCode PetscSectionAddDof(PetscSection, PetscInt, PetscInt); 376 PETSC_EXTERN PetscErrorCode PetscSectionGetFieldDof(PetscSection, PetscInt, PetscInt, PetscInt*); 377 PETSC_EXTERN PetscErrorCode PetscSectionSetFieldDof(PetscSection, PetscInt, PetscInt, PetscInt); 378 PETSC_EXTERN PetscErrorCode PetscSectionAddFieldDof(PetscSection, PetscInt, PetscInt, PetscInt); 379 PETSC_EXTERN PetscErrorCode PetscSectionGetConstraintDof(PetscSection, PetscInt, PetscInt*); 380 PETSC_EXTERN PetscErrorCode PetscSectionSetConstraintDof(PetscSection, PetscInt, PetscInt); 381 PETSC_EXTERN PetscErrorCode PetscSectionAddConstraintDof(PetscSection, PetscInt, PetscInt); 382 PETSC_EXTERN PetscErrorCode PetscSectionGetFieldConstraintDof(PetscSection, PetscInt, PetscInt, PetscInt*); 383 PETSC_EXTERN PetscErrorCode PetscSectionSetFieldConstraintDof(PetscSection, PetscInt, PetscInt, PetscInt); 384 PETSC_EXTERN PetscErrorCode PetscSectionAddFieldConstraintDof(PetscSection, PetscInt, PetscInt, PetscInt); 385 PETSC_EXTERN PetscErrorCode PetscSectionGetConstraintIndices(PetscSection, PetscInt, const PetscInt**); 386 PETSC_EXTERN PetscErrorCode PetscSectionSetConstraintIndices(PetscSection, PetscInt, const PetscInt*); 387 PETSC_EXTERN PetscErrorCode PetscSectionGetFieldConstraintIndices(PetscSection, PetscInt, PetscInt, const PetscInt**); 388 PETSC_EXTERN PetscErrorCode PetscSectionSetFieldConstraintIndices(PetscSection, PetscInt, PetscInt, const PetscInt*); 389 PETSC_EXTERN PetscErrorCode PetscSectionSetUpBC(PetscSection); 390 PETSC_EXTERN PetscErrorCode PetscSectionSetUp(PetscSection); 391 PETSC_EXTERN PetscErrorCode PetscSectionGetMaxDof(PetscSection, PetscInt*); 392 PETSC_EXTERN PetscErrorCode PetscSectionGetStorageSize(PetscSection, PetscInt*); 393 PETSC_EXTERN PetscErrorCode PetscSectionGetConstrainedStorageSize(PetscSection, PetscInt*); 394 PETSC_EXTERN PetscErrorCode PetscSectionGetOffset(PetscSection, PetscInt, PetscInt*); 395 PETSC_EXTERN PetscErrorCode PetscSectionSetOffset(PetscSection, PetscInt, PetscInt); 396 PETSC_EXTERN PetscErrorCode PetscSectionGetFieldOffset(PetscSection, PetscInt, PetscInt, PetscInt*); 397 PETSC_EXTERN PetscErrorCode PetscSectionSetFieldOffset(PetscSection, PetscInt, PetscInt, PetscInt); 398 PETSC_EXTERN PetscErrorCode PetscSectionGetOffsetRange(PetscSection, PetscInt *, PetscInt *); 399 PETSC_EXTERN PetscErrorCode PetscSectionView(PetscSection, PetscViewer); 400 PETSC_STATIC_INLINE PetscErrorCode PetscSectionViewFromOptions(PetscSection A,const char prefix[],const char name[]) {return PetscObjectViewFromOptions((PetscObject)A,prefix,name);} 401 PETSC_EXTERN PetscErrorCode PetscSectionReset(PetscSection); 402 PETSC_EXTERN PetscErrorCode PetscSectionDestroy(PetscSection*); 403 PETSC_EXTERN PetscErrorCode PetscSectionCreateGlobalSection(PetscSection, PetscSF, PetscBool, PetscSection *); 404 PETSC_EXTERN PetscErrorCode PetscSectionCreateGlobalSectionCensored(PetscSection, PetscSF, PetscBool, PetscInt, const PetscInt [], PetscSection *); 405 PETSC_EXTERN PetscErrorCode PetscSectionCreateSubsection(PetscSection, PetscInt, PetscInt [], PetscSection *); 406 PETSC_EXTERN PetscErrorCode PetscSectionCreateSubmeshSection(PetscSection, IS, PetscSection *); 407 PETSC_EXTERN PetscErrorCode PetscSectionGetPointLayout(MPI_Comm, PetscSection, PetscLayout *); 408 PETSC_EXTERN PetscErrorCode PetscSectionGetValueLayout(MPI_Comm, PetscSection, PetscLayout *); 409 PETSC_EXTERN PetscErrorCode PetscSectionPermute(PetscSection, IS, PetscSection *); 410 PETSC_EXTERN PetscErrorCode PetscSectionGetField(PetscSection, PetscInt, PetscSection *); 411 412 PETSC_EXTERN PetscErrorCode PetscSectionSetClosureIndex(PetscSection, PetscObject, PetscSection, IS); 413 PETSC_EXTERN PetscErrorCode PetscSectionGetClosureIndex(PetscSection, PetscObject, PetscSection *, IS *); 414 415 /* PetscSF support */ 416 PETSC_EXTERN PetscErrorCode PetscSFConvertPartition(PetscSF, PetscSection, IS, ISLocalToGlobalMapping *, PetscSF *); 417 PETSC_EXTERN PetscErrorCode PetscSFCreateRemoteOffsets(PetscSF, PetscSection, PetscSection, PetscInt **); 418 PETSC_EXTERN PetscErrorCode PetscSFDistributeSection(PetscSF, PetscSection, PetscInt **, PetscSection); 419 PETSC_EXTERN PetscErrorCode PetscSFCreateSectionSF(PetscSF, PetscSection, PetscInt [], PetscSection, PetscSF *); 420 421 /* Reset __FUNCT__ in case the user does not define it themselves */ 422 #undef __FUNCT__ 423 #define __FUNCT__ "User provided function" 424 425 #endif 426