Actual source code: wash.h
1: #pragma once
3: #include <petscdmnetwork.h>
4: #include "pipe.h"
6: typedef enum {
7: NONE,
8: JUNCTION = 1,
9: RESERVOIR = 2,
10: VALVE = 3,
11: DEMAND = 4,
12: INFLOW = 5,
13: STAGE = 6,
14: TANK = 7
15: } VertexType;
17: typedef struct {
18: PetscInt rid; /*reservoir id*/
19: PetscScalar hres; /*Reservoir water column*/
20: } Reservoir;
22: typedef struct {
23: PetscInt vid; /*valve id*/
24: PetscScalar tau; /*valve aperture*/
25: PetscScalar cdag;
26: PetscScalar qout;
27: } Valve;
29: /* junction */
30: /*-----------------------*/
31: struct _p_Junction {
32: PetscInt id; /* global index */
33: PetscInt tag; /* external id */
34: VertexType type;
35: PetscInt isEnd; /* -1: left end; 0: not an end; 1: right end */
36: PetscInt nedges_in, nedges_out; /* number of connected in/out edges */
37: Mat *jacobian;
38: PetscReal latitude, longitude; /* GPS data */
40: /* boundary data structures */
41: Reservoir reservoir;
42: Valve valve;
43: } PETSC_ATTRIBUTEALIGNED(PetscMax(sizeof(double), sizeof(PetscScalar)));
44: typedef struct _p_Junction *Junction;
46: extern PetscErrorCode JunctionCreateJacobian(DM, PetscInt, Mat *, Mat *[]);
47: extern PetscErrorCode JunctionDestroyJacobian(DM, PetscInt, Junction);
49: /* wash */
50: /*------------------------*/
51: struct _p_Wash {
52: MPI_Comm comm;
53: PetscInt nedge, nvertex; /* local number of components */
54: PetscInt Nedge, Nvertex; /* global number of components */
55: PetscInt *edgelist; /* local edge list */
56: Vec localX, localXdot; /* vectors used in local function evaluation */
57: PetscInt nnodes_loc; /* num of global and local nodes */
59: /* Junction */
60: Junction junction;
61: PetscInt *vtype;
63: /* Pipe */
64: Pipe pipe;
65: PetscScalar Q0, H0, QL, HL; /* left and right boundary conditions for wash-network (not individual pipe) */
67: /* Events */
68: PetscInt close_valve;
69: } PETSC_ATTRIBUTEALIGNED(PetscMax(sizeof(double), sizeof(PetscScalar)));
70: typedef struct _p_Wash *Wash;
72: extern PetscErrorCode WashNetworkCreate(MPI_Comm, PetscInt, Wash *);
73: extern PetscErrorCode WashNetworkCleanUp(Wash);