source: CIVL/examples/mpi-omp/AMG2013/parcsr_ls/par_amg.h

main
Last change on this file was ea777aa, checked in by Alex Wilton <awilton@…>, 3 years ago

Moved examples, include, build_default.properties, common.xml, and README out from dev.civl.com into the root of the repo.

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@5704 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 13.4 KB
Line 
1/*BHEADER**********************************************************************
2 * Copyright (c) 2008, Lawrence Livermore National Security, LLC.
3 * Produced at the Lawrence Livermore National Laboratory.
4 * This file is part of HYPRE. See file COPYRIGHT for details.
5 *
6 * HYPRE is free software; you can redistribute it and/or modify it under the
7 * terms of the GNU Lesser General Public License (as published by the Free
8 * Software Foundation) version 2.1 dated February 1999.
9 *
10 * $Revision: 2.4 $
11 ***********************************************************************EHEADER*/
12
13
14
15
16#ifndef hypre_ParAMG_DATA_HEADER
17#define hypre_ParAMG_DATA_HEADER
18
19#define CUMNUMIT
20
21/*#include "../parcsr_block_mv/par_csr_block_matrix.h"*/
22
23typedef struct
24{
25
26 hypre_CSRMatrix **A_array;
27 hypre_Vector **F_array;
28 hypre_Vector **U_array;
29 hypre_CSRMatrix **P_array;
30
31 hypre_Vector *Vtemp;
32
33 int num_levels;
34 int participate;
35
36
37} hypre_SeqAMGData;
38
39#define hypre_SeqAMGDataAArray(amg_data) ((amg_data)->A_array)
40#define hypre_SeqAMGDataFArray(amg_data) ((amg_data)->F_array)
41#define hypre_SeqAMGDataUArray(amg_data) ((amg_data)->U_array)
42#define hypre_SeqAMGDataPArray(amg_data) ((amg_data)->P_array)
43#define hypre_SeqAMGDataVtemp(amg_data) ((amg_data)->Vtemp)
44
45#define hypre_SeqAMGDataNumLevels(amg_data) ((amg_data)->num_levels)
46#define hypre_SeqAMGDataParticipate(amg_data) ((amg_data)->participate)
47
48/*--------------------------------------------------------------------------
49 * hypre_ParAMGData
50 *--------------------------------------------------------------------------*/
51
52typedef struct
53{
54
55 /* setup params */
56 int max_levels;
57 double strong_threshold;
58 double max_row_sum;
59 double trunc_factor;
60 double agg_trunc_factor;
61 double jacobi_trunc_threshold;
62 double S_commpkg_switch;
63 double CR_rate;
64 int measure_type;
65 int setup_type;
66 int coarsen_type;
67 int P_max_elmts;
68 int interp_type;
69 int restr_par;
70 int agg_interp_type;
71 int agg_P_max_elmts;
72 int P_max1;
73 int P_max2;
74 int agg_num_levels;
75 int num_paths;
76 int post_interp_type;
77 int num_CR_relax_steps;
78 int IS_type;
79 int CR_use_CG;
80 int max_coarse_size;
81 int min_coarse_size;
82 int redundant;
83 int participate;
84 int seq_threshold;
85
86 /* solve params */
87 int max_iter;
88 int min_iter;
89 int cycle_type;
90 int *num_grid_sweeps;
91 int *grid_relax_type;
92 int **grid_relax_points;
93 int relax_order;
94 int user_coarse_relax_type;
95 double *relax_weight;
96 double *omega;
97 double tol;
98
99 /* problem data */
100 hypre_ParCSRMatrix *A;
101 int num_variables;
102 int num_functions;
103 int nodal;
104 int num_points;
105 int *dof_func;
106 int *dof_point;
107 int *point_dof_map;
108
109 /* data generated in the setup phase */
110 hypre_ParCSRMatrix **A_array;
111 hypre_ParVector **F_array;
112 hypre_ParVector **U_array;
113 hypre_ParCSRMatrix **P_array;
114 hypre_ParCSRMatrix **R_array;
115 int **CF_marker_array;
116 int **dof_func_array;
117 int **dof_point_array;
118 int **point_dof_map_array;
119 int num_levels;
120 double **l1_norms;
121
122
123 /* Block data */
124 /*hypre_ParCSRBlockMatrix **A_block_array;
125 hypre_ParCSRBlockMatrix **P_block_array;
126 hypre_ParCSRBlockMatrix **R_block_array;*/
127
128 int block_mode;
129
130 /* data for more complex smoothers */
131 int smooth_num_levels;
132 int smooth_type;
133 HYPRE_Solver *smoother;
134 HYPRE_Solver *smoother_prec;
135 int smooth_num_sweeps;
136 int variant;
137 int overlap;
138 int domain_type;
139 double schwarz_rlx_weight;
140 int sym;
141 int level;
142 int max_nz_per_row;
143 double threshold;
144 double filter;
145 double drop_tol;
146 char *euclidfile;
147
148 double *theta_est;
149
150 double *max_eig_est;
151 double *min_eig_est;
152 int cheby_order;
153 double cheby_eig_ratio;
154
155
156 /* data generated in the solve phase */
157 hypre_ParVector *Vtemp;
158 hypre_Vector *Vtemp_local;
159 double *Vtemp_local_data;
160 double cycle_op_count;
161 hypre_ParVector *Rtemp;
162 hypre_ParVector *Ptemp;
163 hypre_ParVector *Ztemp;
164
165 /* fields used by GSMG and LS interpolation */
166 int gsmg; /* nonzero indicates use of GSMG */
167 int num_samples; /* number of sample vectors */
168
169 /* log info */
170 int logging;
171 int num_iterations;
172#ifdef CUMNUMIT
173 int cum_num_iterations;
174#endif
175 double rel_resid_norm;
176 hypre_ParVector *residual; /* available if logging>1 */
177
178 /* output params */
179 int print_level;
180 char log_file_name[256];
181 int debug_flag;
182
183 /* enable redundant coarse grid solve */
184 HYPRE_Solver coarse_solver;
185 hypre_ParCSRMatrix *A_coarse;
186 hypre_ParVector *f_coarse;
187 hypre_ParVector *u_coarse;
188 MPI_Comm new_comm;
189
190 /* store matrix, vector and communication info for Gaussian elimination */
191 double *A_mat;
192 double *b_vec;
193 int *comm_info;
194
195 hypre_SeqAMGData *seq_data;
196
197
198} hypre_ParAMGData;
199
200/*--------------------------------------------------------------------------
201 * Accessor functions for the hypre_AMGData structure
202 *--------------------------------------------------------------------------*/
203
204/* setup params */
205
206#define hypre_ParAMGDataRestriction(amg_data) ((amg_data)->restr_par)
207#define hypre_ParAMGDataMaxLevels(amg_data) ((amg_data)->max_levels)
208#define hypre_ParAMGDataStrongThreshold(amg_data) \
209((amg_data)->strong_threshold)
210#define hypre_ParAMGDataMaxRowSum(amg_data) ((amg_data)->max_row_sum)
211#define hypre_ParAMGDataTruncFactor(amg_data) ((amg_data)->trunc_factor)
212#define hypre_ParAMGDataAggTruncFactor(amg_data) ((amg_data)->agg_trunc_factor)
213#define hypre_ParAMGDataJacobiTruncThreshold(amg_data) ((amg_data)->jacobi_trunc_threshold)
214#define hypre_ParAMGDataSCommPkgSwitch(amg_data) ((amg_data)->S_commpkg_switch)
215#define hypre_ParAMGDataInterpType(amg_data) ((amg_data)->interp_type)
216#define hypre_ParAMGDataCoarsenType(amg_data) ((amg_data)->coarsen_type)
217#define hypre_ParAMGDataMeasureType(amg_data) ((amg_data)->measure_type)
218#define hypre_ParAMGDataSetupType(amg_data) ((amg_data)->setup_type)
219#define hypre_ParAMGDataPMaxElmts(amg_data) ((amg_data)->P_max_elmts)
220#define hypre_ParAMGDataNumPaths(amg_data) ((amg_data)->num_paths)
221#define hypre_ParAMGDataAggInterpType(amg_data) ((amg_data)->agg_interp_type)
222#define hypre_ParAMGDataAggPMaxElmts(amg_data) ((amg_data)->agg_P_max_elmts)
223#define hypre_ParAMGDataPMax1(amg_data) ((amg_data)->P_max1)
224#define hypre_ParAMGDataPMax2(amg_data) ((amg_data)->P_max2)
225#define hypre_ParAMGDataAggNumLevels(amg_data) ((amg_data)->agg_num_levels)
226#define hypre_ParAMGDataPostInterpType(amg_data) ((amg_data)->post_interp_type)
227#define hypre_ParAMGDataNumCRRelaxSteps(amg_data) ((amg_data)->num_CR_relax_steps)
228#define hypre_ParAMGDataCRRate(amg_data) ((amg_data)->CR_rate)
229#define hypre_ParAMGDataISType(amg_data) ((amg_data)->IS_type)
230#define hypre_ParAMGDataCRUseCG(amg_data) ((amg_data)->CR_use_CG)
231#define hypre_ParAMGDataL1Norms(amg_data) ((amg_data)->l1_norms)
232#define hypre_ParAMGDataSeqThreshold(amg_data) ((amg_data)->seq_threshold)
233#define hypre_ParAMGDataCGCIts(amg_data) ((amg_data)->cgc_its)
234#define hypre_ParAMGDataMaxCoarseSize(amg_data) ((amg_data)->max_coarse_size)
235#define hypre_ParAMGDataMinCoarseSize(amg_data) ((amg_data)->min_coarse_size)
236
237/* solve params */
238
239#define hypre_ParAMGDataMinIter(amg_data) ((amg_data)->min_iter)
240#define hypre_ParAMGDataMaxIter(amg_data) ((amg_data)->max_iter)
241#define hypre_ParAMGDataCycleType(amg_data) ((amg_data)->cycle_type)
242#define hypre_ParAMGDataTol(amg_data) ((amg_data)->tol)
243#define hypre_ParAMGDataNumGridSweeps(amg_data) ((amg_data)->num_grid_sweeps)
244#define hypre_ParAMGDataUserCoarseRelaxType(amg_data) ((amg_data)->user_coarse_relax_type)
245#define hypre_ParAMGDataGridRelaxType(amg_data) ((amg_data)->grid_relax_type)
246#define hypre_ParAMGDataGridRelaxPoints(amg_data) \
247((amg_data)->grid_relax_points)
248#define hypre_ParAMGDataRelaxOrder(amg_data) ((amg_data)->relax_order)
249#define hypre_ParAMGDataRelaxWeight(amg_data) ((amg_data)->relax_weight)
250#define hypre_ParAMGDataOmega(amg_data) ((amg_data)->omega)
251
252/* problem data parameters */
253#define hypre_ParAMGDataNumVariables(amg_data) ((amg_data)->num_variables)
254#define hypre_ParAMGDataNumFunctions(amg_data) ((amg_data)->num_functions)
255#define hypre_ParAMGDataNodal(amg_data) ((amg_data)->nodal)
256#define hypre_ParAMGDataNumPoints(amg_data) ((amg_data)->num_points)
257#define hypre_ParAMGDataDofFunc(amg_data) ((amg_data)->dof_func)
258#define hypre_ParAMGDataDofPoint(amg_data) ((amg_data)->dof_point)
259#define hypre_ParAMGDataPointDofMap(amg_data) ((amg_data)->point_dof_map)
260
261/* data generated by the setup phase */
262#define hypre_ParAMGDataCFMarkerArray(amg_data) ((amg_data)-> CF_marker_array)
263#define hypre_ParAMGDataAArray(amg_data) ((amg_data)->A_array)
264#define hypre_ParAMGDataFArray(amg_data) ((amg_data)->F_array)
265#define hypre_ParAMGDataUArray(amg_data) ((amg_data)->U_array)
266#define hypre_ParAMGDataPArray(amg_data) ((amg_data)->P_array)
267#define hypre_ParAMGDataRArray(amg_data) ((amg_data)->R_array)
268#define hypre_ParAMGDataDofFuncArray(amg_data) ((amg_data)->dof_func_array)
269#define hypre_ParAMGDataDofPointArray(amg_data) ((amg_data)->dof_point_array)
270#define hypre_ParAMGDataPointDofMapArray(amg_data) \
271((amg_data)->point_dof_map_array)
272#define hypre_ParAMGDataNumLevels(amg_data) ((amg_data)->num_levels)
273#define hypre_ParAMGDataSmoothType(amg_data) ((amg_data)->smooth_type)
274#define hypre_ParAMGDataSmoothNumLevels(amg_data) \
275((amg_data)->smooth_num_levels)
276#define hypre_ParAMGDataSmoothNumSweeps(amg_data) \
277((amg_data)->smooth_num_sweeps)
278#define hypre_ParAMGDataSmoother(amg_data) ((amg_data)->smoother)
279#define hypre_ParAMGDataSmootherPrec(amg_data) ((amg_data)->smoother_prec)
280#define hypre_ParAMGDataVariant(amg_data) ((amg_data)->variant)
281#define hypre_ParAMGDataOverlap(amg_data) ((amg_data)->overlap)
282#define hypre_ParAMGDataDomainType(amg_data) ((amg_data)->domain_type)
283#define hypre_ParAMGDataSchwarzRlxWeight(amg_data) \
284((amg_data)->schwarz_rlx_weight)
285#define hypre_ParAMGDataSym(amg_data) ((amg_data)->sym)
286#define hypre_ParAMGDataLevel(amg_data) ((amg_data)->level)
287#define hypre_ParAMGDataMaxNzPerRow(amg_data) ((amg_data)->max_nz_per_row)
288#define hypre_ParAMGDataThreshold(amg_data) ((amg_data)->threshold)
289#define hypre_ParAMGDataFilter(amg_data) ((amg_data)->filter)
290#define hypre_ParAMGDataDropTol(amg_data) ((amg_data)->drop_tol)
291#define hypre_ParAMGDataEuclidFile(amg_data) ((amg_data)->euclidfile)
292
293#define hypre_ParAMGDataThetaEst(amg_data) ((amg_data)->theta_est)
294#define hypre_ParAMGDataMaxEigEst(amg_data) ((amg_data)->max_eig_est)
295#define hypre_ParAMGDataMinEigEst(amg_data) ((amg_data)->min_eig_est)
296#define hypre_ParAMGDataChebyOrder(amg_data) ((amg_data)->cheby_order)
297#define hypre_ParAMGDataChebyEigRatio(amg_data) ((amg_data)->cheby_eig_ratio)
298/* block */
299#define hypre_ParAMGDataABlockArray(amg_data) ((amg_data)->A_block_array)
300#define hypre_ParAMGDataPBlockArray(amg_data) ((amg_data)->P_block_array)
301#define hypre_ParAMGDataRBlockArray(amg_data) ((amg_data)->R_block_array)
302
303#define hypre_ParAMGDataBlockMode(amg_data) ((amg_data)->block_mode)
304
305
306/* data generated in the solve phase */
307#define hypre_ParAMGDataVtemp(amg_data) ((amg_data)->Vtemp)
308#define hypre_ParAMGDataVtempLocal(amg_data) ((amg_data)->Vtemp_local)
309#define hypre_ParAMGDataVtemplocalData(amg_data) ((amg_data)->Vtemp_local_data)
310#define hypre_ParAMGDataCycleOpCount(amg_data) ((amg_data)->cycle_op_count)
311#define hypre_ParAMGDataRtemp(amg_data) ((amg_data)->Rtemp)
312#define hypre_ParAMGDataPtemp(amg_data) ((amg_data)->Ptemp)
313#define hypre_ParAMGDataZtemp(amg_data) ((amg_data)->Ztemp)
314
315/* fields used by GSMG */
316#define hypre_ParAMGDataGSMG(amg_data) ((amg_data)->gsmg)
317#define hypre_ParAMGDataNumSamples(amg_data) ((amg_data)->num_samples)
318
319/* log info data */
320#define hypre_ParAMGDataLogging(amg_data) ((amg_data)->logging)
321#define hypre_ParAMGDataNumIterations(amg_data) ((amg_data)->num_iterations)
322#ifdef CUMNUMIT
323#define hypre_ParAMGDataCumNumIterations(amg_data) ((amg_data)->cum_num_iterations)
324#endif
325#define hypre_ParAMGDataRelativeResidualNorm(amg_data) ((amg_data)->rel_resid_norm)
326#define hypre_ParAMGDataResidual(amg_data) ((amg_data)->residual)
327
328/* output parameters */
329#define hypre_ParAMGDataPrintLevel(amg_data) ((amg_data)->print_level)
330#define hypre_ParAMGDataLogFileName(amg_data) ((amg_data)->log_file_name)
331#define hypre_ParAMGDataDebugFlag(amg_data) ((amg_data)->debug_flag)
332
333#define hypre_ParAMGDataSeqData(amg_data) ((amg_data)->seq_data)
334#define hypre_ParAMGDataCoarseSolver(amg_data) ((amg_data)->coarse_solver)
335#define hypre_ParAMGDataACoarse(amg_data) ((amg_data)->A_coarse)
336#define hypre_ParAMGDataFCoarse(amg_data) ((amg_data)->f_coarse)
337#define hypre_ParAMGDataUCoarse(amg_data) ((amg_data)->u_coarse)
338#define hypre_ParAMGDataNewComm(amg_data) ((amg_data)->new_comm)
339#define hypre_ParAMGDataRedundant(amg_data) ((amg_data)->redundant)
340#define hypre_ParAMGDataParticipate(amg_data) ((amg_data)->participate)
341
342#define hypre_ParAMGDataAMat(amg_data) ((amg_data)->A_mat)
343#define hypre_ParAMGDataBVec(amg_data) ((amg_data)->b_vec)
344#define hypre_ParAMGDataCommInfo(amg_data) ((amg_data)->comm_info)
345
346#endif
347
348
349
Note: See TracBrowser for help on using the repository browser.