/[escript]/trunk/paso/src/Solver.h
ViewVC logotype

Annotation of /trunk/paso/src/Solver.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1387 - (hide annotations)
Fri Jan 11 07:45:26 2008 UTC (11 years, 10 months ago) by trankine
Original Path: temp/paso/src/Solver.h
File MIME type: text/plain
File size: 3645 byte(s)
Restore the trunk that existed before the windows changes were committed to the (now moved to branches) old trunk.
1 ksteube 1312
2 jgs 150 /* $Id$ */
3    
4 ksteube 1312 /*******************************************************
5     *
6     * Copyright 2003-2007 by ACceSS MNRF
7     * Copyright 2007 by University of Queensland
8     *
9     * http://esscc.uq.edu.au
10     * Primary Business: Queensland, Australia
11     * Licensed under the Open Software License version 3.0
12     * http://www.opensource.org/licenses/osl-3.0.php
13     *
14     *******************************************************/
15 dhawcroft 631
16 jgs 150 #ifndef INC_SOLVER
17     #define INC_SOLVER
18    
19 gross 700 #include "SystemMatrix.h"
20     #include "performance.h"
21 jgs 150
22 ksteube 1312 #define PASO_TRACE
23 jgs 150 /* error codes used in the solver */
24     #define SOLVER_NO_ERROR 0
25     #define SOLVER_MAXITER_REACHED 1
26     #define SOLVER_INPUT_ERROR -1
27     #define SOLVER_MEMORY_ERROR -9
28     #define SOLVER_BREAKDOWN -10
29    
30 jgs 154 static double ONE=1.;
31     static double ZERO=0.;
32     static double TOLERANCE_FOR_SCALARS=0.;
33 jgs 150
34     /* ILU preconditioner */
35     struct Paso_Solver_ILU {
36 gross 431 dim_t n_block;
37 jgs 150 dim_t n;
38 gross 431 index_t num_colors;
39     index_t* colorOf;
40     index_t* main_iptr;
41     double* factors;
42 ksteube 1312 Paso_Pattern* pattern;
43 jgs 150 };
44     typedef struct Paso_Solver_ILU Paso_Solver_ILU;
45    
46 gross 430 /* RILU preconditioner */
47     struct Paso_Solver_RILU {
48     dim_t n;
49     dim_t n_block;
50     dim_t n_F;
51     dim_t n_C;
52     double* inv_A_FF;
53     index_t* A_FF_pivot;
54 ksteube 1312 Paso_SparseMatrix * A_FC;
55     Paso_SparseMatrix * A_CF;
56 gross 430 index_t* rows_in_F;
57     index_t* rows_in_C;
58     index_t* mask_F;
59     index_t* mask_C;
60     double* x_F;
61     double* b_F;
62     double* x_C;
63     double* b_C;
64     struct Paso_Solver_RILU * RILU_of_Schur;
65     };
66     typedef struct Paso_Solver_RILU Paso_Solver_RILU;
67 jgs 150
68 gross 430
69 jgs 150 /* jacobi preconditioner */
70    
71     typedef struct Paso_Solver_Jacobi {
72     dim_t n_block;
73     dim_t n;
74     double* values;
75     index_t* pivot;
76     } Paso_Solver_Jacobi;
77    
78     /* general preconditioner interface */
79    
80     typedef struct Paso_Solver_Preconditioner {
81     dim_t type;
82     /* jacobi preconditioner */
83     Paso_Solver_Jacobi* jacobi;
84     /* ilu preconditioner */
85     Paso_Solver_ILU* ilu;
86 gross 430 /* ilu preconditioner */
87     Paso_Solver_RILU* rilu;
88 jgs 150 } Paso_Solver_Preconditioner;
89    
90 gross 584 void Paso_Solver(Paso_SystemMatrix*,double*,double*,Paso_Options*,Paso_Performance* pp);
91 jgs 150 void Paso_Solver_free(Paso_SystemMatrix*);
92 ksteube 1312 err_t Paso_Solver_BiCGStab( Paso_SystemMatrix * A, double* B, double * X, dim_t *iter, double * tolerance, Paso_Performance* pp);
93     err_t Paso_Solver_PCG( Paso_SystemMatrix * A, double* B, double * X, dim_t *iter, double * tolerance, Paso_Performance* pp);
94     err_t Paso_Solver_GMRES(Paso_SystemMatrix * A, double * r, double * x, dim_t *num_iter, double * tolerance,dim_t length_of_recursion,dim_t restart, Paso_Performance* pp);
95 jgs 150 void Paso_Preconditioner_free(Paso_Solver_Preconditioner*);
96     void Paso_Solver_setPreconditioner(Paso_SystemMatrix* A,Paso_Options* options);
97     void Paso_Solver_solvePreconditioner(Paso_SystemMatrix* A,double*,double*);
98     void Paso_Solver_applyBlockDiagonalMatrix(dim_t n_block,dim_t n,double* D,index_t* pivot,double* x,double* b);
99 gross 431
100 jgs 150 void Paso_Solver_ILU_free(Paso_Solver_ILU * in);
101 ksteube 1312 Paso_Solver_ILU* Paso_Solver_getILU(Paso_SparseMatrix * A_p,bool_t verbose);
102 jgs 150 void Paso_Solver_solveILU(Paso_Solver_ILU * ilu, double * x, double * b);
103 gross 431
104     void Paso_Solver_RILU_free(Paso_Solver_RILU * in);
105 ksteube 1312 Paso_Solver_RILU* Paso_Solver_getRILU(Paso_SparseMatrix * A_p,bool_t verbose);
106 gross 431 void Paso_Solver_solveRILU(Paso_Solver_RILU * rilu, double * x, double * b);
107    
108 ksteube 1312 void Paso_Solver_updateIncompleteSchurComplement(Paso_SparseMatrix* A_CC, Paso_SparseMatrix *A_CF,double* invA_FF,index_t* A_FF_pivot, Paso_SparseMatrix *A_FC);
109     Paso_Solver_Jacobi* Paso_Solver_getJacobi(Paso_SparseMatrix * A_p);
110 jgs 150 void Paso_Solver_solveJacobi(Paso_Solver_Jacobi * prec, double * x, double * b);
111     void Paso_Solver_Jacobi_free(Paso_Solver_Jacobi * in);
112    
113     #endif /* #ifndef INC_SOLVER */

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

  ViewVC Help
Powered by ViewVC 1.1.26