Actual source code: wash.h

  1: #ifndef WASH_H
  2: #define WASH_H

  4: #include <petscdmnetwork.h>
  5: #include "pipe.h"

  7: typedef enum {
  8:   NONE,
  9:   JUNCTION  = 1,
 10:   RESERVOIR = 2,
 11:   VALVE     = 3,
 12:   DEMAND    = 4,
 13:   INFLOW    = 5,
 14:   STAGE     = 6,
 15:   TANK      = 7
 16: } VertexType;

 18: typedef struct {
 19:   PetscInt    rid;  /*reservoir id*/
 20:   PetscScalar hres; /*Reservoir water column*/
 21: } Reservoir;

 23: typedef struct {
 24:   PetscInt    vid; /*valve id*/
 25:   PetscScalar tau; /*valve aperture*/
 26:   PetscScalar cdag;
 27:   PetscScalar qout;
 28: } Valve;

 30: /* junction              */
 31: /*-----------------------*/
 32: struct _p_Junction {
 33:   PetscInt   id;  /* global index */
 34:   PetscInt   tag; /* external id */
 35:   VertexType type;
 36:   PetscInt   isEnd;                 /* -1: left end; 0: not an end; 1: right end */
 37:   PetscInt   nedges_in, nedges_out; /* number of connected in/out edges */
 38:   Mat       *jacobian;
 39:   PetscReal  latitude, longitude; /* GPS data */

 41:   /* boundary data structures */
 42:   Reservoir reservoir;
 43:   Valve     valve;
 44: } PETSC_ATTRIBUTEALIGNED(PetscMax(sizeof(double), sizeof(PetscScalar)));
 45: typedef struct _p_Junction *Junction;

 47: extern PetscErrorCode JunctionCreateJacobian(DM, PetscInt, Mat *, Mat *[]);
 48: extern PetscErrorCode JunctionDestroyJacobian(DM, PetscInt, Junction);

 50: /* wash                   */
 51: /*------------------------*/
 52: struct _p_Wash {
 53:   MPI_Comm  comm;
 54:   PetscInt  nedge, nvertex;    /* local number of components */
 55:   PetscInt  Nedge, Nvertex;    /* global number of components */
 56:   PetscInt *edgelist;          /* local edge list */
 57:   Vec       localX, localXdot; /* vectors used in local function evaluation */
 58:   PetscInt  nnodes_loc;        /* num of global and local nodes */

 60:   /* Junction */
 61:   Junction  junction;
 62:   PetscInt *vtype;

 64:   /* Pipe */
 65:   Pipe        pipe;
 66:   PetscScalar Q0, H0, QL, HL; /* left and right boundary conditions for wash-network (not individual pipe) */

 68:   /* Events */
 69:   PetscInt close_valve;
 70: } PETSC_ATTRIBUTEALIGNED(PetscMax(sizeof(double), sizeof(PetscScalar)));
 71: typedef struct _p_Wash *Wash;

 73: extern PetscErrorCode WashNetworkCreate(MPI_Comm, PetscInt, Wash *);
 74: extern PetscErrorCode WashNetworkCleanUp(Wash);
 75: #endif