1*a4963045SJacob Faibussowitsch #pragma once 23ea99036SJacob Faibussowitsch 360f0b76eSHong Zhang #include <petscts.h> 460f0b76eSHong Zhang 560f0b76eSHong Zhang /* Simple C struct that allows us to access the two velocity (x and y directions) values easily in the code */ 660f0b76eSHong Zhang typedef struct { 760f0b76eSHong Zhang PetscScalar u, v; 860f0b76eSHong Zhang } Field; 960f0b76eSHong Zhang 1060f0b76eSHong Zhang /* Data structure to store the model parameters */ 1160f0b76eSHong Zhang typedef struct { 1260f0b76eSHong Zhang PetscReal D1, D2, gamma, kappa; 1360f0b76eSHong Zhang PetscBool aijpc; 1460f0b76eSHong Zhang Vec U; 1560f0b76eSHong Zhang Mat A; 1660f0b76eSHong Zhang TS ts; 1760f0b76eSHong Zhang } AppCtx; 1860f0b76eSHong Zhang 1960f0b76eSHong Zhang /* User-supplied functions for TS */ 2060f0b76eSHong Zhang PetscErrorCode RHSFunction(TS, PetscReal, Vec, Vec, void *); 2160f0b76eSHong Zhang PetscErrorCode RHSJacobian(TS, PetscReal, Vec, Mat, Mat, void *); 2260f0b76eSHong Zhang PetscErrorCode IFunction(TS, PetscReal, Vec, Vec, Vec, void *); 2360f0b76eSHong Zhang PetscErrorCode IJacobian(TS, PetscReal, Vec, Vec, PetscReal, Mat, Mat, void *); 24