Actual source code: samgfunc.h
1: #ifndef SAMGFUNC_H
2: #define SAMGFUNC_H
5: /*..Structure to hold SAMG parameters..*/
6: struct SAMG_PARAM{
7: /*....Primary parameters....*/
8: int MATRIX;
9: int IFIRST;
10: double EPS;
11: int NSOLVE;
12: int NCYC;
13: int ISWTCH;
14: double A_CMPLX;
15: double G_CMPLX;
16: double P_CMPLX;
17: double W_AVRGE;
18: double CHKTOL;
19: int IDUMP;
20: int IOUT;
21: /*....Secundary parameters....*/
22: int LEVELX;
23: int NPTMN;
24: double ECG;
25: double EWT;
26: int NCG;
27: int NWT;
28: double ETR;
29: int NTR;
30: int NRD;
31: int NRU;
32: int NRC;
33: };
35: /*..We'll use underscores in the name giving of the routines as the
36: Fortran compiler does not distinguish between lower and upper case..*/
38: #ifdef PETSC_HAVE_FORTRAN_CAPS
39: #elif defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
40: #define SAMGPETSC_apply_shift samgpetsc_apply_shift_
41: #define SAMGPETSC_get_levels samgpetsc_get_levels_
42: #define SAMGPETSC_get_dim_operator samgpetsc_get_dim_operator_
43: #define SAMGPETSC_get_operator samgpetsc_get_operator_
44: #define SAMGPETSC_get_dim_interpol samgpetsc_get_dim_interpol_
45: #define SAMGPETSC_get_interpol samgpetsc_get_interpol_
46: #else
47: #define SAMGPETSC_apply_shift samgpetsc_apply_shift
48: #define SAMGPETSC_get_levels samgpetsc_get_levels
49: #define SAMGPETSC_get_dim_operator samgpetsc_get_dim_operator
50: #define SAMGPETSC_get_operator samgpetsc_get_operator
51: #define SAMGPETSC_get_dim_interpol samgpetsc_get_dim_interpol
52: #define SAMGPETSC_get_interpol samgpetsc_get_interpol
53: #endif
55: /*..Routine to apply ia_shift on all elements of ia and ja_shift on all
56: elements of ja..*/
58: void SAMGPETSC_apply_shift(int* ia, int* nnu, int* ia_shift,
59: int* ja, int* nna, int* ja_shift);
61: /*..Level 1 routine to get number of levels created..*/
63: void SAMGPETSC_get_levels(int* levelscp);
65: /*..Level 1 routines to access grid operators..*/
67: void SAMGPETSC_get_dim_operator(int* k, int* nnu, int* nna);
69: void SAMGPETSC_get_operator(int* k, double* aout, int* iaout, int* jaout);
71: /*..Level 1 routines to access interpolation operator..*/
73: void SAMGPETSC_get_dim_interpol(int* k, int* nnu, int* nna);
75: void SAMGPETSC_get_interpol(int* k, double* wout, int* iwout, int* jwout);
77: /*..Aux function to pass SAMG hierarchy to PETSc..*/
78: void apply_shift(int*ia, int nnu, int ia_shift, int* ja, int nna,
79: int ja_shift);
81: /*..Functions for verifying intermediate results: printing interpolation
82: and coarser grid matrices to file..*/
83: PetscErrorCode SamgPetscWriteOperator(const int numnodes, const double* Asky,
84: const int* ia, const int* ja, int extension);
85: PetscErrorCode SamgPetscWriteInterpol(const int numrows, const double* weights,
86: const int* iweights, const int* jweights, int extension);
87:
88: #endif//SAMGFUNC_H