1 | /*************************************** 2 | $Header: /cvsroot/petscgraphics/cahnhill.h,v 1.8 2002/08/29 15:08:15 hazelsct Exp $ 3 | 4 | Common files for cahnhill.c and programs which use it (e.g. chts.c), based on 5 | PETSc SNES tutorial common8and9.h. 6 | ***************************************/ 7 | 8 | 9 | #ifndef CAHNHILL_H 10 | #define CAHNHILL_H 11 | 12 | /* 13 | Include "petscda.h" so that we can use distributed arrays (DAs). 14 | Include "petscts.h" so that we can use TS and SNES solvers. 15 | Note that this file automatically includes: 16 | petsc.h - base PETSc routines petscvec.h - vectors 17 | petscsys.h - system routines petscmat.h - matrices 18 | petscis.h - index sets petscksp.h - Krylov subspace methods 19 | petscviewer.h - viewers petscpc.h - preconditioners 20 | petscsles.h - linear solvers petscsnes.h - nonlinear solvers 21 | */ 22 | #include <petscts.h> 23 | #include <petscda.h> 24 | 25 | /*+ 26 | User-defined application context for chts.c - contains data needed by the 27 | application-provided callbacks: ch_residual_vector_xd() (x is 2 or 3). 28 | +*/ 29 | 30 | typedef struct { 31 | PetscTruth threedee; /* obvious :-) */ 32 | PetscScalar kappa,epsilon,gamma,mparam; /* physical parameters */ 33 | int mx,my,mz; /* discretization in x, y and z directions */ 34 | int mc; /* components in unknown vector */ 35 | int chvar; /* Which component in unks is Cahn-Hill */ 36 | Vec localX,localF; /* ghosted local vector */ 37 | DA da; /* distributed array data structure (unknowns) */ 38 | int rank; /* processor rank */ 39 | int size; /* number of processors */ 40 | MPI_Comm comm; /* MPI communicator */ 41 | int ilevel,nlevels; /* current/total levels through problem */ 42 | Vec x_old; /* old solution vector */ 43 | Mat J, alpha; /* Jacobian matrix, alpha values */ 44 | DAPeriodicType period; /* Periodicity: DA_XPERIODIC etc */ 45 | ISLocalToGlobalMapping isltog; /* mapping from local-to-global indices */ 46 | PetscViewer theviewer; /* Viewer for timesteps */ 47 | char **label; /* labels for components */ 48 | PetscTruth print_grid; /* flag - 1 indicates printing grid info */ 49 | PetscTruth print_vecs; /* flag - 1 indicates printing vectors */ 50 | PetscTruth no_contours; /* flag - 1 indicates no contours */ 51 | PetscTruth random; /* flag - 1 indicates random initial condition */ 52 | PetscTruth save_data; /* flag - 1 indicates save each timestep */ 53 | int load_data; /* Timestep to load for IC, -1 if no load */ 54 | } AppCtx; 55 | 56 | /* 57 | Define macros to allow us to easily access the components of the PDE 58 | solution and nonlinear residual vectors. mc and chvar must be variables 59 | where these are used. 60 | */ 61 | #define C(i) (mc*(i)+chvar) 62 | /* #define U(i) (mc*(i)) 63 | #define V(i) (mc*(i)+1) 64 | #define Omega(i) (mc*(i)+2) 65 | #define Temp(i) (mc*(i)+3) */ 66 | 67 | /* 68 | User-defined routines in cahnhill.c 69 | */ 70 | extern int ch_residual_vector_2d (Vec,Vec,void*); 71 | extern int ch_residual_vector_3d (Vec,Vec,void*); 72 | extern int ch_jacobian_2d (Vec,Mat*,Mat*,MatStructure*,void*); 73 | extern int ch_jacobian_3d (Vec,Mat*,Mat*,MatStructure*,void*); 74 | extern int ch_jacobian_alpha_2d (AppCtx*); 75 | extern int ch_jacobian_alpha_3d (AppCtx*); 76 | 77 | #endif /* CAHNHILL_H */