1: #if !defined(_NETWORKIMPL_H)
2: #define _NETWORKIMPL_H 4: #include <petscmat.h> /*I "petscmat.h" I*/
5: #include <petscdmnetwork.h> /*I "petscdmnetwork.h" I*/
6: #include petsc/private/dmimpl.h 8: #define MAX_DATA_AT_POINT 14 10: typedef struct _p_DMNetworkComponentHeader *DMNetworkComponentHeader;
11: struct _p_DMNetworkComponentHeader {
12: PetscInt ndata;
13: PetscInt size[MAX_DATA_AT_POINT];
14: PetscInt key[MAX_DATA_AT_POINT];
15: PetscInt offset[MAX_DATA_AT_POINT];
16: } PETSC_ATTRIBUTEALIGNED(sizeof(PetscScalar));
18: typedef struct _p_DMNetworkComponentValue *DMNetworkComponentValue;
19: struct _p_DMNetworkComponentValue {
20: void* data[MAX_DATA_AT_POINT];
21: } PETSC_ATTRIBUTEALIGNED(sizeof(PetscScalar));
23: typedef struct {
24: char name[32-sizeof(PetscInt)];
25: PetscInt size;
26: } DMNetworkComponent PETSC_ATTRIBUTEALIGNED(sizeof(PetscScalar));
28: typedef struct {
29: PetscInt refct; /* reference count */
30: PetscInt NEdges; /* Number of global edges */
31: PetscInt NNodes; /* Number of global nodes */
32: PetscInt nEdges; /* Number of local edges */
33: PetscInt nNodes; /* Number of local nodes */
34: int *edges; /* Edge list */
35: PetscInt pStart,pEnd; /* Start and end indices for topological points */
36: PetscInt vStart,vEnd; /* Start and end indices for vertices */
37: PetscInt eStart,eEnd; /* Start and end indices for edges */
38: DM plex; /* DM created from Plex */
39: PetscSection DataSection; /* Section for managing parameter distribution */
40: PetscSection DofSection; /* Section for managing data distribution */
41: PetscSection GlobalDofSection; /* Global Dof section */
42: PetscInt ncomponent; /* Number of components */
43: DMNetworkComponent component[10]; /* List of components */
44: DMNetworkComponentHeader header;
45: DMNetworkComponentValue cvalue;
46: PetscInt dataheadersize;
47: DMNetworkComponentGenericDataType *componentdataarray; /* Array to hold the data */
49: PetscBool userEdgeJacobian,userVertexJacobian; /* Global flag for using user's sub Jacobians */
50: Mat *Je; /* Pointer array to hold local sub Jacobians for edges, 3 elements for an edge */
51: Mat *Jv; /* Pointer array to hold local sub Jacobians for vertices, 1+2*nsupportedges for a vertex */
52: PetscInt *Jvptr; /* index of Jv for v-th vertex
53: Jvpt[v-vStart]: Jacobian(v,v)
54: Jvpt[v-vStart]+2i+1: Jacobian(v,e[i]), e[i]: i-th supporting edge
55: Jvpt[v-vStart]+2i+2: Jacobian(v,vc[i]), vc[i]: i-th connected vertex
56: */
57: } DM_Network;
59: #endif /* _NETWORKIMPL_H */