Actual source code: petscda.h
1: /*
2: Regular array object, for easy parallelism of simple grid
3: problems on regular distributed arrays.
4: */
7: #include petscvec.h
8: #include petscao.h
11: /*S
12: DA - Abstract PETSc object that manages distributed field data for a single structured grid
14: Level: beginner
16: Concepts: distributed array
18: .seealso: DACreate1d(), DACreate2d(), DACreate3d(), DADestroy(), VecScatter, DACreate()
19: S*/
20: typedef struct _p_DA* DA;
22: /*E
23: DAStencilType - Determines if the stencil extends only along the coordinate directions, or also
24: to the northeast, northwest etc
26: Level: beginner
28: .seealso: DACreate1d(), DACreate2d(), DACreate3d(), DA, DACreate()
29: E*/
30: typedef enum { DA_STENCIL_STAR,DA_STENCIL_BOX } DAStencilType;
32: /*M
33: DA_STENCIL_STAR - "Star"-type stencil. In logical grid coordinates, only (i,j,k), (i+s,j,k), (i,j+s,k),
34: (i,j,k+s) are in the stencil NOT, for example, (i+s,j+s,k)
36: Level: beginner
38: .seealso: DA_STENCIL_BOX, DAStencilType
39: M*/
41: /*M
42: DA_STENCIL_Box - "Box"-type stencil. In logical grid coordinates, any of (i,j,k), (i+s,j+r,k+t) may
43: be in the stencil.
45: Level: beginner
47: .seealso: DA_STENCIL_STAR, DAStencilType
48: M*/
50: /*E
51: DAPeriodicType - Is the domain periodic in one or more directions
53: Level: beginner
55: .seealso: DACreate1d(), DACreate2d(), DACreate3d(), DA, DACreate()
56: E*/
57: typedef enum { DA_NONPERIODIC,DA_XPERIODIC,DA_YPERIODIC,DA_XYPERIODIC,
58: DA_XYZPERIODIC,DA_XZPERIODIC,DA_YZPERIODIC,DA_ZPERIODIC}
59: DAPeriodicType;
61: /*E
62: DAInterpolationType - Defines the type of interpolation that will be returned by
63: DAGetInterpolation.
65: Level: beginner
67: .seealso: DACreate1d(), DACreate2d(), DACreate3d(), DA, DAGetInterpolation(), DASetInterpolationType(), DACreate()
68: E*/
69: typedef enum { DA_Q0, DA_Q1 } DAInterpolationType;
71: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DASetInterpolationType(DA,DAInterpolationType);
73: /*E
74: DAElementType - Defines the type of elements that will be returned by
75: DAGetElements.
77: Level: beginner
79: .seealso: DACreate1d(), DACreate2d(), DACreate3d(), DA, DAGetInterpolation(), DASetInterpolationType(),
80: DASetElementType(), DAGetElements(), DARestoreElements(), DACreate()
81: E*/
82: typedef enum { DA_ELEMENT_P1, DA_ELEMENT_Q1 } DAElementType;
84: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DASetElementType(DA,DAElementType);
85: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetElements(DA,PetscInt *,const PetscInt*[]);
86: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DARestoreElements(DA,PetscInt *,const PetscInt*[]);
89: #define DAXPeriodic(pt) ((pt)==DA_XPERIODIC||(pt)==DA_XYPERIODIC||(pt)==DA_XZPERIODIC||(pt)==DA_XYZPERIODIC)
90: #define DAYPeriodic(pt) ((pt)==DA_YPERIODIC||(pt)==DA_XYPERIODIC||(pt)==DA_YZPERIODIC||(pt)==DA_XYZPERIODIC)
91: #define DAZPeriodic(pt) ((pt)==DA_ZPERIODIC||(pt)==DA_XZPERIODIC||(pt)==DA_YZPERIODIC||(pt)==DA_XYZPERIODIC)
93: typedef enum { DA_X,DA_Y,DA_Z } DADirection;
98: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DACreate1d(MPI_Comm,DAPeriodicType,PetscInt,PetscInt,PetscInt,PetscInt*,DA *);
99: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DACreate2d(MPI_Comm,DAPeriodicType,DAStencilType,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt*,PetscInt*,DA *);
100: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DACreate3d(MPI_Comm,DAPeriodicType,DAStencilType,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt*,PetscInt*,PetscInt*,DA*);
101: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DACreate(MPI_Comm,PetscInt,DAPeriodicType,DAStencilType,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt*,PetscInt*,PetscInt*,DA*);
102: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DADestroy(DA);
103: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAView(DA,PetscViewer);
104: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAPrintHelp(DA);
106: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGlobalToLocalBegin(DA,Vec,InsertMode,Vec);
107: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGlobalToLocalEnd(DA,Vec,InsertMode,Vec);
108: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGlobalToNaturalBegin(DA,Vec,InsertMode,Vec);
109: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGlobalToNaturalEnd(DA,Vec,InsertMode,Vec);
110: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DANaturalToGlobalBegin(DA,Vec,InsertMode,Vec);
111: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DANaturalToGlobalEnd(DA,Vec,InsertMode,Vec);
112: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DALocalToLocalBegin(DA,Vec,InsertMode,Vec);
113: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DALocalToLocalEnd(DA,Vec,InsertMode,Vec);
114: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DALocalToGlobal(DA,Vec,InsertMode,Vec);
115: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DALocalToGlobalBegin(DA,Vec,Vec);
116: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DALocalToGlobalEnd(DA,Vec,Vec);
117: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetOwnershipRange(DA,PetscInt **,PetscInt **,PetscInt **);
118: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DACreateGlobalVector(DA,Vec *);
119: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DACreateNaturalVector(DA,Vec *);
120: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DACreateLocalVector(DA,Vec *);
121: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetLocalVector(DA,Vec *);
122: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DARestoreLocalVector(DA,Vec *);
123: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetGlobalVector(DA,Vec *);
124: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DARestoreGlobalVector(DA,Vec *);
125: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DALoad(PetscViewer,PetscInt,PetscInt,PetscInt,DA *);
126: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetCorners(DA,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*);
127: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetGhostCorners(DA,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*);
128: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetInfo(DA,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,DAPeriodicType*,DAStencilType*);
129: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetProcessorSubset(DA,DADirection,PetscInt,MPI_Comm*);
130: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DARefine(DA,MPI_Comm,DA*);
132: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGlobalToNaturalAllCreate(DA,VecScatter*);
133: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DANaturalAllToGlobalCreate(DA,VecScatter*);
135: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetGlobalIndices(DA,PetscInt*,PetscInt**);
136: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetISLocalToGlobalMapping(DA,ISLocalToGlobalMapping*);
137: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetISLocalToGlobalMappingBlck(DA,ISLocalToGlobalMapping*);
139: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetScatter(DA,VecScatter*,VecScatter*,VecScatter*);
141: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetAO(DA,AO*);
142: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DASetCoordinates(DA,Vec);
143: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetCoordinates(DA,Vec *);
144: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetGhostedCoordinates(DA,Vec *);
145: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetCoordinateDA(DA,DA *);
146: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DASetUniformCoordinates(DA,PetscReal,PetscReal,PetscReal,PetscReal,PetscReal,PetscReal);
147: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DASetFieldName(DA,PetscInt,const char[]);
148: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetFieldName(DA,PetscInt,char **);
150: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAVecGetArray(DA,Vec,void *);
151: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAVecRestoreArray(DA,Vec,void *);
153: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAVecGetArrayDOF(DA,Vec,void *);
154: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAVecRestoreArrayDOF(DA,Vec,void *);
156: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DASplitComm2d(MPI_Comm,PetscInt,PetscInt,PetscInt,MPI_Comm*);
158: /*S
159: SDA - This provides a simplified interface to the DA distributed
160: array object in PETSc. This is intended for people who are
161: NOT using PETSc vectors or objects but just want to distribute
162: simple rectangular arrays amoung a number of procesors and have
163: PETSc handle moving the ghost-values when needed.
165: In certain applications this can serve as a replacement for
166: BlockComm (which is apparently being phased out?).
169: Level: beginner
171: Concepts: simplified distributed array
173: .seealso: SDACreate1d(), SDACreate2d(), SDACreate3d(), SDADestroy(), DA, SDALocalToLocalBegin(),
174: SDALocalToLocalEnd(), SDAGetCorners(), SDAGetGhostCorners()
175: S*/
176: typedef struct _SDA* SDA;
178: EXTERN PetscErrorCode PETSCDM_DLLEXPORT SDACreate3d(MPI_Comm,DAPeriodicType,DAStencilType,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt*,PetscInt*,PetscInt*,SDA*);
179: EXTERN PetscErrorCode PETSCDM_DLLEXPORT SDACreate2d(MPI_Comm,DAPeriodicType,DAStencilType,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt*,PetscInt*,SDA*);
180: EXTERN PetscErrorCode PETSCDM_DLLEXPORT SDACreate1d(MPI_Comm,DAPeriodicType,PetscInt,PetscInt,PetscInt,PetscInt*,SDA*);
181: EXTERN PetscErrorCode PETSCDM_DLLEXPORT SDADestroy(SDA);
182: EXTERN PetscErrorCode PETSCDM_DLLEXPORT SDALocalToLocalBegin(SDA,PetscScalar*,InsertMode,PetscScalar*);
183: EXTERN PetscErrorCode PETSCDM_DLLEXPORT SDALocalToLocalEnd(SDA,PetscScalar*,InsertMode,PetscScalar*);
184: EXTERN PetscErrorCode PETSCDM_DLLEXPORT SDAGetCorners(SDA,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*);
185: EXTERN PetscErrorCode PETSCDM_DLLEXPORT SDAGetGhostCorners(SDA,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*);
187: EXTERN PetscErrorCode PETSCDM_DLLEXPORT MatRegisterDAAD(void);
188: EXTERN PetscErrorCode PETSCDM_DLLEXPORT MatCreateDAAD(DA,Mat*);
190: /*S
191: DALocalInfo - C struct that contains information about a structured grid and a processors logical
192: location in it.
194: Level: beginner
196: Concepts: distributed array
198: Developer note: Then entries in this struct are int instead of PetscInt so that the elements may
199: be extracted in Fortran as if from an integer array
201: .seealso: DACreate1d(), DACreate2d(), DACreate3d(), DADestroy(), DA, DAGetLocalInfo(), DAGetInfo()
202: S*/
203: typedef struct {
204: PetscInt dim,dof,sw;
205: DAPeriodicType pt;
206: DAStencilType st;
207: PetscInt mx,my,mz; /* global number of grid points in each direction */
208: PetscInt xs,ys,zs; /* starting pointd of this processor, excluding ghosts */
209: PetscInt xm,ym,zm; /* number of grid points on this processor, excluding ghosts */
210: PetscInt gxs,gys,gzs; /* starting point of this processor including ghosts */
211: PetscInt gxm,gym,gzm; /* number of grid points on this processor including ghosts */
212: DA da;
213: } DALocalInfo;
215: /*MC
216: DAForEachPointBegin2d - Starts a loop over the local part of a two dimensional DA
218: Synopsis:
219: void DAForEachPointBegin2d(DALocalInfo *info,PetscInt i,PetscInt j);
220:
221: Level: intermediate
223: .seealso: DAForEachPointEnd2d(), DAVecGetArray()
224: M*/
225: #define DAForEachPointBegin2d(info,i,j) {\
226: PetscInt _xints = info->xs,_xinte = info->xs+info->xm,_yints = info->ys,_yinte = info->ys+info->ym;\
227: for (j=_yints; j<_yinte; j++) {\
228: for (i=_xints; i<_xinte; i++) {\
230: /*MC
231: DAForEachPointEnd2d - Ends a loop over the local part of a two dimensional DA
233: Synopsis:
234: void DAForEachPointEnd2d;
235:
236: Level: intermediate
238: .seealso: DAForEachPointBegin2d(), DAVecGetArray()
239: M*/
240: #define DAForEachPointEnd2d }}}
242: /*MC
243: DACoor2d - Structure for holding 2d (x and y) coordinates.
245: Level: intermediate
247: Sample Usage:
248: DACoor2d **coors;
249: Vec vcoors;
250: DA cda;
252: DAGetCoordinates(da,&vcoors);
253: DAGetCoordinateDA(da,&cda);
254: DAVecGetArray(dac,vcoors,&coors);
255: DAGetCorners(dac,&mstart,&nstart,0,&m,&n,0)
256: for (i=mstart; i<mstart+m; i++) {
257: for (j=nstart; j<nstart+n; j++) {
258: x = coors[j][i].x;
259: y = coors[j][i].y;
260: ......
261: }
262: }
263: DAVecRestoreArray(dac,vcoors,&coors);
265: .seealso: DACoor3d, DAForEachPointBegin(), DAGetCoordinateDA(), DAGetCoordinates(), DAGetGhostCoordinates()
266: M*/
267: typedef struct {PetscScalar x,y;} DACoor2d;
269: /*MC
270: DACoor3d - Structure for holding 3d (x, y and z) coordinates.
272: Level: intermediate
274: Sample Usage:
275: DACoor3d **coors;
276: Vec vcoors;
277: DA cda;
279: DAGetCoordinates(da,&vcoors);
280: DAGetCoordinateDA(da,&cda);
281: DAVecGetArray(dac,vcoors,&coors);
282: DAGetCorners(dac,&mstart,&nstart,&pstart,&m,&n,&p)
283: for (i=mstart; i<mstart+m; i++) {
284: for (j=nstart; j<nstart+n; j++) {
285: for (k=pstart; k<pstart+p; k++) {
286: x = coors[k][j][i].x;
287: y = coors[k][j][i].y;
288: z = coors[k][j][i].z;
289: ......
290: }
291: }
292: DAVecRestoreArray(dac,vcoors,&coors);
294: .seealso: DACoor2d, DAForEachPointBegin(), DAGetCoordinateDA(), DAGetCoordinates(), DAGetGhostCoordinates()
295: M*/
296: typedef struct {PetscScalar x,y,z;} DACoor3d;
297:
298: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetLocalInfo(DA,DALocalInfo*);
299: typedef PetscErrorCode (*DALocalFunction1)(DALocalInfo*,void*,void*,void*);
300: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAFormFunction1(DA,Vec,Vec,void*);
301: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAFormFunctioni1(DA,PetscInt,Vec,PetscScalar*,void*);
302: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAComputeJacobian1WithAdic(DA,Vec,Mat,void*);
303: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAComputeJacobian1WithAdifor(DA,Vec,Mat,void*);
304: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAMultiplyByJacobian1WithAdic(DA,Vec,Vec,Vec,void*);
305: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAMultiplyByJacobian1WithAdifor(DA,Vec,Vec,Vec,void*);
306: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAMultiplyByJacobian1WithAD(DA,Vec,Vec,Vec,void*);
307: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAComputeJacobian1(DA,Vec,Mat,void*);
308: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetLocalFunction(DA,DALocalFunction1*);
309: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DASetLocalFunction(DA,DALocalFunction1);
310: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DASetLocalFunctioni(DA,PetscErrorCode (*)(DALocalInfo*,MatStencil*,void*,PetscScalar*,void*));
311: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DASetLocalJacobian(DA,DALocalFunction1);
312: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DASetLocalAdicFunction_Private(DA,DALocalFunction1);
314: /*MC
315: DASetLocalAdicFunction - Caches in a DA a local function computed by ADIC/ADIFOR
317: Collective on DA
319: Synopsis:
320: PetscErrorCode DASetLocalAdicFunction(DA da,DALocalFunction1 ad_lf)
321:
322: Input Parameter:
323: + da - initial distributed array
324: - ad_lf - the local function as computed by ADIC/ADIFOR
326: Level: intermediate
328: .keywords: distributed array, refine
330: .seealso: DACreate1d(), DACreate2d(), DACreate3d(), DADestroy(), DAGetLocalFunction(), DASetLocalFunction(),
331: DASetLocalJacobian()
332: M*/
333: #if defined(PETSC_HAVE_ADIC)
334: # define DASetLocalAdicFunction(a,d) DASetLocalAdicFunction_Private(a,(DALocalFunction1)d)
335: #else
336: # define DASetLocalAdicFunction(a,d) DASetLocalAdicFunction_Private(a,0)
337: #endif
339: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DASetLocalAdicMFFunction_Private(DA,DALocalFunction1);
340: #if defined(PETSC_HAVE_ADIC)
341: # define DASetLocalAdicMFFunction(a,d) DASetLocalAdicMFFunction_Private(a,(DALocalFunction1)d)
342: #else
343: # define DASetLocalAdicMFFunction(a,d) DASetLocalAdicMFFunction_Private(a,0)
344: #endif
345: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DASetLocalAdicFunctioni_Private(DA,PetscErrorCode (*)(DALocalInfo*,MatStencil*,void*,void*,void*));
346: #if defined(PETSC_HAVE_ADIC)
347: # define DASetLocalAdicFunctioni(a,d) DASetLocalAdicFunctioni_Private(a,(PetscErrorCode (*)(DALocalInfo*,MatStencil*,void*,void*,void*))d)
348: #else
349: # define DASetLocalAdicFunctioni(a,d) DASetLocalAdicFunctioni_Private(a,0)
350: #endif
351: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DASetLocalAdicMFFunctioni_Private(DA,PetscErrorCode (*)(DALocalInfo*,MatStencil*,void*,void*,void*));
352: #if defined(PETSC_HAVE_ADIC)
353: # define DASetLocalAdicMFFunctioni(a,d) DASetLocalAdicMFFunctioni_Private(a,(PetscErrorCode (*)(DALocalInfo*,MatStencil*,void*,void*,void*))d)
354: #else
355: # define DASetLocalAdicMFFunctioni(a,d) DASetLocalAdicMFFunctioni_Private(a,0)
356: #endif
357: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAFormFunctioniTest1(DA,void*);
359: #include petscmat.h
360: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetColoring(DA,ISColoringType,ISColoring *);
361: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetMatrix(DA, MatType,Mat *);
362: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DASetGetMatrix(DA,PetscErrorCode (*)(DA, MatType,Mat *));
363: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetInterpolation(DA,DA,Mat*,Vec*);
364: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetInjection(DA,DA,VecScatter*);
365: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DASetBlockFills(DA,PetscInt*,PetscInt*);
366: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DASetRefinementFactor(DA,PetscInt,PetscInt,PetscInt);
367: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetRefinementFactor(DA,PetscInt*,PetscInt*,PetscInt*);
369: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetAdicArray(DA,PetscTruth,void**,void**,PetscInt*);
370: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DARestoreAdicArray(DA,PetscTruth,void**,void**,PetscInt*);
371: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetAdicMFArray(DA,PetscTruth,void**,void**,PetscInt*);
372: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DARestoreAdicMFArray(DA,PetscTruth,void**,void**,PetscInt*);
373: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DAGetArray(DA,PetscTruth,void**);
374: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DARestoreArray(DA,PetscTruth,void**);
375: EXTERN PetscErrorCode PETSCDM_DLLEXPORT ad_DAGetArray(DA,PetscTruth,void**);
376: EXTERN PetscErrorCode PETSCDM_DLLEXPORT ad_DARestoreArray(DA,PetscTruth,void**);
377: EXTERN PetscErrorCode PETSCDM_DLLEXPORT admf_DAGetArray(DA,PetscTruth,void**);
378: EXTERN PetscErrorCode PETSCDM_DLLEXPORT admf_DARestoreArray(DA,PetscTruth,void**);
380: #include petscpf.h
381: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DACreatePF(DA,PF*);
383: /*S
384: VecPack - Abstract PETSc object that manages treating several distinct vectors as if they
385: were one. The VecPack routines allow one to manage a nonlinear solver that works on a
386: vector that consists of several distinct parts. This is mostly used for LNKS solvers,
387: that is design optimization problems that are written as a nonlinear system
389: Level: beginner
391: Concepts: multi-component, LNKS solvers
393: .seealso: VecPackCreate(), VecPackDestroy()
394: S*/
395: typedef struct _p_VecPack *VecPack;
397: EXTERN PetscErrorCode PETSCDM_DLLEXPORT VecPackCreate(MPI_Comm,VecPack*);
398: EXTERN PetscErrorCode PETSCDM_DLLEXPORT VecPackDestroy(VecPack);
399: EXTERN PetscErrorCode PETSCDM_DLLEXPORT VecPackAddArray(VecPack,PetscInt);
400: EXTERN PetscErrorCode PETSCDM_DLLEXPORT VecPackAddDA(VecPack,DA);
401: EXTERN PetscErrorCode PETSCDM_DLLEXPORT VecPackAddVecScatter(VecPack,VecScatter);
402: EXTERN PetscErrorCode PETSCDM_DLLEXPORT VecPackScatter(VecPack,Vec,...);
403: EXTERN PetscErrorCode PETSCDM_DLLEXPORT VecPackGather(VecPack,Vec,...);
404: EXTERN PetscErrorCode PETSCDM_DLLEXPORT VecPackGetAccess(VecPack,Vec,...);
405: EXTERN PetscErrorCode PETSCDM_DLLEXPORT VecPackRestoreAccess(VecPack,Vec,...);
406: EXTERN PetscErrorCode PETSCDM_DLLEXPORT VecPackGetLocalVectors(VecPack,...);
407: EXTERN PetscErrorCode PETSCDM_DLLEXPORT VecPackGetEntries(VecPack,...);
408: EXTERN PetscErrorCode PETSCDM_DLLEXPORT VecPackRestoreLocalVectors(VecPack,...);
409: EXTERN PetscErrorCode PETSCDM_DLLEXPORT VecPackCreateGlobalVector(VecPack,Vec*);
410: EXTERN PetscErrorCode PETSCDM_DLLEXPORT VecPackGetGlobalIndices(VecPack,...);
411: EXTERN PetscErrorCode PETSCDM_DLLEXPORT VecPackRefine(VecPack,MPI_Comm,VecPack*);
412: EXTERN PetscErrorCode PETSCDM_DLLEXPORT VecPackGetInterpolation(VecPack,VecPack,Mat*,Vec*);
414: /*S
415: DM - Abstract PETSc object that manages an abstract grid object
416:
417: Level: intermediate
419: Concepts: grids, grid refinement
421: Notes: The DA object and the VecPack object are examples of DMs
423: Though the DA objects require the petscsnes.h include files the DM library is
424: NOT dependent on the SNES or KSP library. In fact, the KSP and SNES libraries depend on
425: DM. (This is not great design, but not trivial to fix).
427: .seealso: VecPackCreate(), DA, VecPack
428: S*/
429: typedef struct _p_DM* DM;
431: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMView(DM,PetscViewer);
432: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDestroy(DM);
433: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCreateGlobalVector(DM,Vec*);
434: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMGetColoring(DM,ISColoringType,ISColoring*);
435: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMGetMatrix(DM, MatType,Mat*);
436: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMGetInterpolation(DM,DM,Mat*,Vec*);
437: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMGetInjection(DM,DM,VecScatter*);
438: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMRefine(DM,MPI_Comm,DM*);
439: EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMGetInterpolationScale(DM,DM,Mat,Vec*);
441: typedef struct NLF_DAAD* NLF;
445: #endif