Fast Auxiliary Space Preconditioning 2.7.7 Aug/28/2022
Loading...
Searching...
No Matches
SolFAMG.c
Go to the documentation of this file.
1
16#include <time.h>
17
18#include "fasp.h"
19#include "fasp_functs.h"
20
21/*---------------------------------*/
22/*-- Public Functions --*/
23/*---------------------------------*/
24
42 const dvector *b,
43 dvector *x,
44 AMG_param *param)
45{
46 const SHORT max_levels = param->max_levels;
47 const SHORT prtlvl = param->print_level;
48 const SHORT amg_type = param->AMG_type;
49 const INT nnz = A->nnz, m = A->row, n = A->col;
50
51 // local variables
52 AMG_data * mgl = fasp_amg_data_create(max_levels);
53 REAL FMG_start = 0, FMG_end;
54
55#if DEBUG_MODE > 0
56 printf("###DEBUG: %s ...... [begin]\n", __FUNCTION__);
57 printf("###DEBUG: nr=%d, nc=%d, nnz=%d\n", m, n, nnz);
58#endif
59
60 if ( prtlvl > PRINT_NONE ) fasp_gettime(&FMG_start);
61
62 // check matrix data
64
65 // Step 0: initialize mgl[0] with A, b and x
66 mgl[0].A = fasp_dcsr_create(m,n,nnz);
67 fasp_dcsr_cp(A,&mgl[0].A);
68
69 mgl[0].b = fasp_dvec_create(n);
70 fasp_dvec_cp(b,&mgl[0].b);
71
72 mgl[0].x = fasp_dvec_create(n);
73 fasp_dvec_cp(x,&mgl[0].x);
74
75 // Step 1: AMG setup phase
76 switch (amg_type) {
77
78 case SA_AMG:
79 // Smoothed Aggregation AMG setup phase
80 fasp_amg_setup_sa(mgl, param); break;
81
82 case UA_AMG:
83 // Unsmoothed Aggregation AMG setup phase
84 fasp_amg_setup_ua(mgl, param); break;
85
86 default:
87 // Classical AMG setup phase
88 fasp_amg_setup_rs(mgl, param); break;
89
90 }
91
92 // Step 2: FAMG solve phase
93 fasp_famg_solve(mgl, param);
94
95 // Step 3: Save solution vector and return
96 fasp_dvec_cp(&mgl[0].x, x);
97
98 // clean-up memory
99 fasp_amg_data_free(mgl, param);
100
101 // print out CPU time if needed
102 if ( prtlvl > PRINT_NONE ) {
103 fasp_gettime(&FMG_end);
104 fasp_cputime("FAMG totally", FMG_end - FMG_start);
105 }
106
107#if DEBUG_MODE > 0
108 printf("### DEBUG: [--End--] %s ...\n", __FUNCTION__);
109#endif
110
111 return;
112}
113
114/*---------------------------------*/
115/*-- End of File --*/
116/*---------------------------------*/
void fasp_cputime(const char *message, const REAL cputime)
Print CPU walltime.
Definition: AuxMessage.c:179
void fasp_gettime(REAL *time)
Get system time.
Definition: AuxTiming.c:37
dvector fasp_dvec_create(const INT m)
Create dvector data space of REAL type.
Definition: AuxVector.c:62
void fasp_dvec_cp(const dvector *x, dvector *y)
Copy dvector x to dvector y.
Definition: AuxVector.c:334
dCSRmat fasp_dcsr_create(const INT m, const INT n, const INT nnz)
Create CSR sparse matrix data memory space.
Definition: BlaSparseCSR.c:47
void fasp_dcsr_cp(const dCSRmat *A, dCSRmat *B)
copy a dCSRmat to a new one B=A
Definition: BlaSparseCSR.c:851
void fasp_check_dCSRmat(const dCSRmat *A)
Check whether an dCSRmat matrix is supported or not.
SHORT fasp_amg_setup_rs(AMG_data *mgl, AMG_param *param)
Setup phase of Ruge and Stuben's classic AMG.
Definition: PreAMGSetupRS.c:52
SHORT fasp_amg_setup_sa(AMG_data *mgl, AMG_param *param)
Set up phase of smoothed aggregation AMG.
Definition: PreAMGSetupSA.c:63
SHORT fasp_amg_setup_ua(AMG_data *mgl, AMG_param *param)
Set up phase of unsmoothed aggregation AMG.
Definition: PreAMGSetupUA.c:55
AMG_data * fasp_amg_data_create(SHORT max_levels)
Create and initialize AMG_data for classical and SA AMG.
Definition: PreDataInit.c:64
void fasp_amg_data_free(AMG_data *mgl, AMG_param *param)
Free AMG_data data memeory space.
Definition: PreDataInit.c:101
void fasp_famg_solve(AMG_data *mgl, AMG_param *param)
FMG – SOLVE phase.
Definition: PreMGSolve.c:308
void fasp_solver_famg(const dCSRmat *A, const dvector *b, dvector *x, AMG_param *param)
Solve Ax=b by full AMG.
Definition: SolFAMG.c:41
Main header file for the FASP project.
#define REAL
Definition: fasp.h:75
#define SHORT
FASP integer and floating point numbers.
Definition: fasp.h:71
#define INT
Definition: fasp.h:72
#define SA_AMG
Definition: fasp_const.h:164
#define PRINT_NONE
Print level for all subroutines – not including DEBUG output.
Definition: fasp_const.h:73
#define UA_AMG
Definition: fasp_const.h:165
Data for AMG methods.
Definition: fasp.h:804
dCSRmat A
pointer to the matrix at level level_num
Definition: fasp.h:817
dvector b
pointer to the right-hand side at level level_num
Definition: fasp.h:826
dvector x
pointer to the iterative solution at level level_num
Definition: fasp.h:829
Parameters for AMG methods.
Definition: fasp.h:455
SHORT print_level
print level for AMG
Definition: fasp.h:461
SHORT AMG_type
type of AMG method
Definition: fasp.h:458
SHORT max_levels
max number of levels of AMG
Definition: fasp.h:470
Sparse matrix of REAL type in CSR format.
Definition: fasp.h:151
INT col
column of matrix A, n
Definition: fasp.h:157
INT row
row number of matrix A, m
Definition: fasp.h:154
INT nnz
number of nonzero entries
Definition: fasp.h:160
Vector with n entries of REAL type.
Definition: fasp.h:354