xref: /petsc/src/ts/tutorials/network/pipe.h (revision d5b43468fb8780a8feea140ccd6fa3e6a50411cc)
1 #ifndef PIPE_H
2 #define PIPE_H
3 
4 #define GRAV                9.806
5 #define PIPE_CHARACTERISTIC 10000000.0
6 
7 #include <petsc.h>
8 
9 typedef struct {
10   PetscScalar q; /* flow rate */
11   PetscScalar h; /* pressure */
12 } PipeField;
13 
14 typedef struct {
15   PetscScalar Q0, H0; /* boundary values in upstream */
16   PetscScalar QL, HL; /* boundary values in downstream */
17 } PipeBoundary;
18 
19 /* pipe                 */
20 /*----------------------*/
21 struct _p_Pipe {
22   /* identification variables */
23   PetscInt id;
24   PetscInt networkid; /* which network this pipe belongs */
25 
26   /* solver objects */
27   Vec        x;
28   PipeField *xold;
29   PetscReal  dt;
30   DM         da;
31   PetscInt   nnodes; /* number of nodes in da discretization */
32   Mat       *jacobian;
33 
34   /* physics */
35   PetscReal    length; /* pipe length */
36   PetscReal    a;      /* natural flow speed */
37   PetscReal    fric;   /* friction */
38   PetscReal    D;      /* diameter */
39   PetscReal    A;      /* area of cross section */
40   PetscReal    R;
41   PetscReal    rad;
42   PipeBoundary boundary; /* boundary conditions for H and Q */
43 } PETSC_ATTRIBUTEALIGNED(PetscMax(sizeof(double), sizeof(PetscScalar)));
44 
45 typedef struct _p_Pipe *Pipe;
46 
47 extern PetscErrorCode PipeCreate(MPI_Comm, Pipe *);
48 extern PetscErrorCode PipeDestroy(Pipe *);
49 extern PetscErrorCode PipeSetParameters(Pipe, PetscReal, PetscReal, PetscReal, PetscReal);
50 extern PetscErrorCode PipeSetUp(Pipe);
51 extern PetscErrorCode PipeCreateJacobian(Pipe, Mat *, Mat *[]);
52 extern PetscErrorCode PipeDestroyJacobian(Pipe);
53 
54 extern PetscErrorCode PipeComputeSteadyState(Pipe, PetscScalar, PetscScalar);
55 extern PetscErrorCode PipeIFunctionLocal(DMDALocalInfo *, PetscReal, PipeField *, PipeField *, PipeField *, Pipe);
56 extern PetscErrorCode PipeIFunctionLocal_Lax(DMDALocalInfo *, PetscReal, PipeField *, PipeField *, PetscScalar *, Pipe);
57 extern PetscErrorCode PipeRHSFunctionLocal(DMDALocalInfo *, PetscReal, PipeField *, PetscScalar *, Pipe);
58 extern PetscErrorCode PipeMonitor(TS, PetscInt, PetscReal, Vec, void *);
59 
60 extern PetscErrorCode PipeCreateJacobian(Pipe, Mat *, Mat *[]);
61 extern PetscErrorCode PipeDestroyJacobian(Pipe);
62 #endif
63