Fast Auxiliary Space Preconditioning 2.7.7 Aug/28/2022
Loading...
Searching...
No Matches
AuxInput.c
Go to the documentation of this file.
1
14#include "fasp.h"
15#include "fasp_functs.h"
16
17/*---------------------------------*/
18/*-- Public Functions --*/
19/*---------------------------------*/
20
34{
35 SHORT status = FASP_SUCCESS;
36
37 if (inparam->problem_num < 0 || inparam->solver_type < 0 ||
38 inparam->solver_type > 50 || inparam->precond_type < 0 ||
39 inparam->decoup_type < 0 || inparam->itsolver_tol < 0 ||
40 inparam->itsolver_abstol < 0 || inparam->itsolver_maxit < 0 ||
41 inparam->stop_type <= 0 || inparam->stop_type > 3 || inparam->restart < 0 ||
42 inparam->ILU_type <= 0 || inparam->ILU_type > 3 || inparam->ILU_lfil < 0 ||
43 inparam->ILU_droptol <= 0 || inparam->ILU_relax < 0 ||
44 inparam->ILU_permtol < 0 || inparam->SWZ_mmsize < 0 ||
45 inparam->SWZ_maxlvl < 0 || inparam->SWZ_type < 0 ||
46 inparam->SWZ_blksolver < 0 || inparam->AMG_type <= 0 || inparam->AMG_type > 3 ||
47 inparam->AMG_cycle_type <= 0 || inparam->AMG_levels < 0 ||
48 inparam->AMG_ILU_levels < 0 || inparam->AMG_coarse_dof <= 0 ||
49 inparam->AMG_tol < 0 || inparam->AMG_maxit < 0 ||
50 inparam->AMG_coarsening_type <= 0 || inparam->AMG_coarsening_type > 4 ||
51 inparam->AMG_coarse_solver < 0 || inparam->AMG_interpolation_type < 0 ||
52 inparam->AMG_interpolation_type > 5 || inparam->AMG_smoother < 0 ||
53 inparam->AMG_smoother > 30 || inparam->AMG_strong_threshold < 0.0 ||
54 inparam->AMG_strong_threshold > 0.9999 ||
55 inparam->AMG_truncation_threshold < 0.0 ||
56 inparam->AMG_truncation_threshold > 0.9999 || inparam->AMG_max_row_sum < 0.0 ||
57 inparam->AMG_presmooth_iter < 0 || inparam->AMG_postsmooth_iter < 0 ||
58 inparam->AMG_amli_degree < 0 || inparam->AMG_aggressive_level < 0 ||
59 inparam->AMG_aggressive_path < 0 || inparam->AMG_aggregation_type < 0 ||
60 inparam->AMG_pair_number < 0 || inparam->AMG_strong_coupled < 0 ||
61 inparam->AMG_max_aggregation <= 0 || inparam->AMG_tentative_smooth < 0 ||
62 inparam->AMG_smooth_filter < 0 || inparam->AMG_smooth_restriction < 0 ||
63 inparam->AMG_smooth_restriction > 1)
64 status = ERROR_INPUT_PAR;
65
66 return status;
67}
68
86void fasp_param_input(const char* fname, input_param* inparam)
87{
88 char buffer[STRLEN]; // Note: max number of char for each line!
89 int val;
90 SHORT status = FASP_SUCCESS;
91 FILE* fp;
92
93 // set default input parameters
94 fasp_param_input_init(inparam);
95
96 // if input file is not specified, use the default values
97 if (fname == NULL) return;
98
99 fp = fopen(fname, "r");
100 if (fp == NULL) fasp_chkerr(ERROR_OPEN_FILE, __FUNCTION__);
101
102 while (status == FASP_SUCCESS) {
103 int ibuff;
104 double dbuff;
105 char sbuff[STRLEN];
106
107 val = fscanf(fp, "%s", buffer);
108 if (val == EOF) break;
109 if (val != 1) {
110 status = ERROR_INPUT_PAR;
111 break;
112 }
113 if (buffer[0] == '[' || buffer[0] == '%' || buffer[0] == '|') {
114 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
115 };
116 continue;
117 }
118
119 // match keyword and scan for value
120 if (strcmp(buffer, "workdir") == 0) {
121 val = fscanf(fp, "%s", buffer);
122 if (val != 1 || strcmp(buffer, "=") != 0) {
123 status = ERROR_INPUT_PAR;
124 break;
125 }
126 val = fscanf(fp, "%s", sbuff);
127 if (val != 1) {
128 status = ERROR_INPUT_PAR;
129 break;
130 }
131 memcpy(inparam->workdir, sbuff, STRLEN);
132 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
133 };
134 }
135
136 else if (strcmp(buffer, "problem_num") == 0) {
137 val = fscanf(fp, "%s", buffer);
138 if (val != 1 || strcmp(buffer, "=") != 0) {
139 status = ERROR_INPUT_PAR;
140 break;
141 }
142 val = fscanf(fp, "%d", &ibuff);
143 if (val != 1) {
144 status = ERROR_INPUT_PAR;
145 break;
146 }
147 inparam->problem_num = ibuff;
148 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
149 };
150 }
151
152 else if (strcmp(buffer, "print_level") == 0) {
153 val = fscanf(fp, "%s", buffer);
154 if (val != 1 || strcmp(buffer, "=") != 0) {
155 status = ERROR_INPUT_PAR;
156 break;
157 }
158 val = fscanf(fp, "%d", &ibuff);
159 if (val != 1) {
160 status = ERROR_INPUT_PAR;
161 break;
162 }
163 inparam->print_level = ibuff;
164 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
165 };
166 }
167
168 else if (strcmp(buffer, "output_type") == 0) {
169 val = fscanf(fp, "%s", buffer);
170 if (val != 1 || strcmp(buffer, "=") != 0) {
171 status = ERROR_INPUT_PAR;
172 break;
173 }
174 val = fscanf(fp, "%d", &ibuff);
175 if (val != 1) {
176 status = ERROR_INPUT_PAR;
177 break;
178 }
179 inparam->output_type = ibuff;
180 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
181 };
182 }
183
184 else if (strcmp(buffer, "solver_type") == 0) {
185 val = fscanf(fp, "%s", buffer);
186 if (val != 1 || strcmp(buffer, "=") != 0) {
187 status = ERROR_INPUT_PAR;
188 break;
189 }
190 val = fscanf(fp, "%d", &ibuff);
191 if (val != 1) {
192 status = ERROR_INPUT_PAR;
193 break;
194 }
195 inparam->solver_type = ibuff;
196 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
197 };
198 }
199
200 else if (strcmp(buffer, "stop_type") == 0) {
201 val = fscanf(fp, "%s", buffer);
202 if (val != 1 || strcmp(buffer, "=") != 0) {
203 status = ERROR_INPUT_PAR;
204 break;
205 }
206 val = fscanf(fp, "%d", &ibuff);
207 if (val != 1) {
208 status = ERROR_INPUT_PAR;
209 break;
210 }
211 inparam->stop_type = ibuff;
212 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
213 };
214 }
215
216 else if (strcmp(buffer, "decoup_type") == 0) {
217 val = fscanf(fp, "%s", buffer);
218 if (val != 1 || strcmp(buffer, "=") != 0) {
219 status = ERROR_INPUT_PAR;
220 break;
221 }
222 val = fscanf(fp, "%d", &ibuff);
223 if (val != 1) {
224 status = ERROR_INPUT_PAR;
225 break;
226 }
227 inparam->decoup_type = ibuff;
228 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
229 };
230 }
231
232 else if (strcmp(buffer, "precond_type") == 0) {
233 val = fscanf(fp, "%s", buffer);
234 if (val != 1 || strcmp(buffer, "=") != 0) {
235 status = ERROR_INPUT_PAR;
236 break;
237 }
238 val = fscanf(fp, "%d", &ibuff);
239 if (val != 1) {
240 status = ERROR_INPUT_PAR;
241 break;
242 }
243 inparam->precond_type = ibuff;
244 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
245 };
246 }
247
248 else if (strcmp(buffer, "itsolver_tol") == 0) {
249 val = fscanf(fp, "%s", buffer);
250 if (val != 1 || strcmp(buffer, "=") != 0) {
251 status = ERROR_INPUT_PAR;
252 break;
253 }
254 val = fscanf(fp, "%lf", &dbuff);
255 if (val != 1) {
256 status = ERROR_INPUT_PAR;
257 break;
258 }
259 inparam->itsolver_tol = dbuff;
260 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
261 };
262 }
263
264 else if (strcmp(buffer, "itsolver_abstol") == 0) {
265 val = fscanf(fp, "%s", buffer);
266 if (val != 1 || strcmp(buffer, "=") != 0) {
267 status = ERROR_INPUT_PAR;
268 break;
269 }
270 val = fscanf(fp, "%lf", &dbuff);
271 if (val != 1) {
272 status = ERROR_INPUT_PAR;
273 break;
274 }
275 inparam->itsolver_abstol = dbuff;
276 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
277 };
278 }
279
280 else if (strcmp(buffer, "itsolver_maxit") == 0) {
281 val = fscanf(fp, "%s", buffer);
282 if (val != 1 || strcmp(buffer, "=") != 0) {
283 status = ERROR_INPUT_PAR;
284 break;
285 }
286 val = fscanf(fp, "%d", &ibuff);
287 if (val != 1) {
288 status = ERROR_INPUT_PAR;
289 break;
290 }
291 inparam->itsolver_maxit = ibuff;
292 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
293 };
294 }
295
296 else if (strcmp(buffer, "AMG_ILU_levels") == 0) {
297 val = fscanf(fp, "%s", buffer);
298 if (val != 1 || strcmp(buffer, "=") != 0) {
299 status = ERROR_INPUT_PAR;
300 break;
301 }
302 val = fscanf(fp, "%d", &ibuff);
303 if (val != 1) {
304 status = ERROR_INPUT_PAR;
305 break;
306 }
307 inparam->AMG_ILU_levels = ibuff;
308 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
309 };
310 }
311
312 else if (strcmp(buffer, "AMG_SWZ_levels") == 0) {
313 val = fscanf(fp, "%s", buffer);
314 if (val != 1 || strcmp(buffer, "=") != 0) {
315 status = ERROR_INPUT_PAR;
316 break;
317 }
318 val = fscanf(fp, "%d", &ibuff);
319 if (val != 1) {
320 status = ERROR_INPUT_PAR;
321 break;
322 }
323 inparam->AMG_SWZ_levels = ibuff;
324 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
325 };
326 }
327
328 else if (strcmp(buffer, "itsolver_restart") == 0) {
329 val = fscanf(fp, "%s", buffer);
330 if (val != 1 || strcmp(buffer, "=") != 0) {
331 status = ERROR_INPUT_PAR;
332 break;
333 }
334 val = fscanf(fp, "%d", &ibuff);
335 if (val != 1) {
336 status = ERROR_INPUT_PAR;
337 break;
338 }
339 inparam->restart = ibuff;
340 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
341 };
342 }
343
344 else if (strcmp(buffer, "AMG_type") == 0) {
345 val = fscanf(fp, "%s", buffer);
346 if (val != 1 || strcmp(buffer, "=") != 0) {
347 status = ERROR_INPUT_PAR;
348 break;
349 }
350 val = fscanf(fp, "%s", buffer);
351 if (val != 1) {
352 status = ERROR_INPUT_PAR;
353 break;
354 }
355
356 if ((strcmp(buffer, "C") == 0) || (strcmp(buffer, "c") == 0))
357 inparam->AMG_type = CLASSIC_AMG;
358 else if ((strcmp(buffer, "SA") == 0) || (strcmp(buffer, "sa") == 0))
359 inparam->AMG_type = SA_AMG;
360 else if ((strcmp(buffer, "UA") == 0) || (strcmp(buffer, "ua") == 0))
361 inparam->AMG_type = UA_AMG;
362 else {
363 status = ERROR_INPUT_PAR;
364 break;
365 }
366 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
367 };
368 }
369
370 else if (strcmp(buffer, "AMG_strong_coupled") == 0) {
371 val = fscanf(fp, "%s", buffer);
372 if (val != 1 || strcmp(buffer, "=") != 0) {
373 status = ERROR_INPUT_PAR;
374 break;
375 }
376 val = fscanf(fp, "%lf", &dbuff);
377 if (val != 1) {
378 status = ERROR_INPUT_PAR;
379 break;
380 }
381 inparam->AMG_strong_coupled = dbuff;
382 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
383 };
384 }
385
386 else if (strcmp(buffer, "AMG_max_aggregation") == 0) {
387 val = fscanf(fp, "%s", buffer);
388 if (val != 1 || strcmp(buffer, "=") != 0) {
389 status = ERROR_INPUT_PAR;
390 break;
391 }
392 val = fscanf(fp, "%d", &ibuff);
393 if (val != 1) {
394 status = ERROR_INPUT_PAR;
395 break;
396 }
397 inparam->AMG_max_aggregation = ibuff;
398 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
399 };
400 }
401
402 else if (strcmp(buffer, "AMG_tentative_smooth") == 0) {
403 val = fscanf(fp, "%s", buffer);
404 if (val != 1 || strcmp(buffer, "=") != 0) {
405 status = ERROR_INPUT_PAR;
406 break;
407 }
408 val = fscanf(fp, "%lf", &dbuff);
409 if (val != 1) {
410 status = ERROR_INPUT_PAR;
411 break;
412 }
413 inparam->AMG_tentative_smooth = dbuff;
414 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
415 };
416 }
417
418 else if (strcmp(buffer, "AMG_smooth_filter") == 0) {
419 val = fscanf(fp, "%s", buffer);
420 if (val != 1 || strcmp(buffer, "=") != 0) {
421 status = ERROR_INPUT_PAR;
422 break;
423 }
424 val = fscanf(fp, "%s", buffer);
425 if (val != 1) {
426 status = ERROR_INPUT_PAR;
427 break;
428 }
429
430 if ((strcmp(buffer, "ON") == 0) || (strcmp(buffer, "on") == 0) ||
431 (strcmp(buffer, "On") == 0) || (strcmp(buffer, "oN") == 0)) {
432 inparam->AMG_smooth_filter = ON;
433 } else if ((strcmp(buffer, "OFF") == 0) || (strcmp(buffer, "off") == 0) ||
434 (strcmp(buffer, "ofF") == 0) || (strcmp(buffer, "oFf") == 0) ||
435 (strcmp(buffer, "Off") == 0) || (strcmp(buffer, "oFF") == 0) ||
436 (strcmp(buffer, "OfF") == 0) || (strcmp(buffer, "OFf") == 0)) {
437 inparam->AMG_smooth_filter = OFF;
438 } else {
439 status = ERROR_INPUT_PAR;
440 break;
441 }
442 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
443 };
444 }
445
446 else if (strcmp(buffer, "AMG_smooth_restriction") == 0) {
447 val = fscanf(fp, "%s", buffer);
448 if (val != 1 || strcmp(buffer, "=") != 0) {
449 status = ERROR_INPUT_PAR;
450 break;
451 }
452 val = fscanf(fp, "%s", buffer);
453 if (val != 1) {
454 status = ERROR_INPUT_PAR;
455 break;
456 }
457
458 if ((strcmp(buffer, "ON") == 0) || (strcmp(buffer, "on") == 0) ||
459 (strcmp(buffer, "On") == 0) || (strcmp(buffer, "oN") == 0)) {
460 inparam->AMG_smooth_restriction = ON;
461 } else if ((strcmp(buffer, "OFF") == 0) || (strcmp(buffer, "off") == 0) ||
462 (strcmp(buffer, "ofF") == 0) || (strcmp(buffer, "oFf") == 0) ||
463 (strcmp(buffer, "Off") == 0) || (strcmp(buffer, "oFF") == 0) ||
464 (strcmp(buffer, "OfF") == 0) || (strcmp(buffer, "OFf") == 0)) {
465 inparam->AMG_smooth_restriction = OFF;
466 } else {
467 status = ERROR_INPUT_PAR;
468 break;
469 }
470 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
471 };
472 }
473
474 else if (strcmp(buffer, "AMG_coarse_solver") == 0) {
475 val = fscanf(fp, "%s", buffer);
476 if (val != 1 || strcmp(buffer, "=") != 0) {
477 status = ERROR_INPUT_PAR;
478 break;
479 }
480 val = fscanf(fp, "%d", &ibuff);
481 if (val != 1) {
482 status = ERROR_INPUT_PAR;
483 break;
484 }
485 inparam->AMG_coarse_solver = ibuff;
486 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
487 };
488 }
489
490 else if (strcmp(buffer, "AMG_coarse_scaling") == 0) {
491 val = fscanf(fp, "%s", buffer);
492 if (val != 1 || strcmp(buffer, "=") != 0) {
493 status = ERROR_INPUT_PAR;
494 break;
495 }
496 val = fscanf(fp, "%s", buffer);
497 if (val != 1) {
498 status = ERROR_INPUT_PAR;
499 break;
500 }
501
502 if ((strcmp(buffer, "ON") == 0) || (strcmp(buffer, "on") == 0) ||
503 (strcmp(buffer, "On") == 0) || (strcmp(buffer, "oN") == 0)) {
504 inparam->AMG_coarse_scaling = ON;
505 } else if ((strcmp(buffer, "OFF") == 0) || (strcmp(buffer, "off") == 0) ||
506 (strcmp(buffer, "ofF") == 0) || (strcmp(buffer, "oFf") == 0) ||
507 (strcmp(buffer, "Off") == 0) || (strcmp(buffer, "oFF") == 0) ||
508 (strcmp(buffer, "OfF") == 0) || (strcmp(buffer, "OFf") == 0)) {
509 inparam->AMG_coarse_scaling = OFF;
510 } else {
511 status = ERROR_INPUT_PAR;
512 break;
513 }
514 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
515 };
516 }
517
518 else if (strcmp(buffer, "AMG_levels") == 0) {
519 val = fscanf(fp, "%s", buffer);
520 if (val != 1 || strcmp(buffer, "=") != 0) {
521 status = ERROR_INPUT_PAR;
522 break;
523 }
524 val = fscanf(fp, "%d", &ibuff);
525 if (val != 1) {
526 status = ERROR_INPUT_PAR;
527 break;
528 }
529 inparam->AMG_levels = ibuff;
530 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
531 };
532 }
533
534 else if (strcmp(buffer, "AMG_tol") == 0) {
535 val = fscanf(fp, "%s", buffer);
536 if (val != 1 || strcmp(buffer, "=") != 0) {
537 status = ERROR_INPUT_PAR;
538 break;
539 }
540 val = fscanf(fp, "%lf", &dbuff);
541 if (val != 1) {
542 status = ERROR_INPUT_PAR;
543 break;
544 }
545 inparam->AMG_tol = dbuff;
546 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
547 };
548 }
549
550 else if (strcmp(buffer, "AMG_maxit") == 0) {
551 val = fscanf(fp, "%s", buffer);
552 if (val != 1 || strcmp(buffer, "=") != 0) {
553 status = ERROR_INPUT_PAR;
554 break;
555 }
556 val = fscanf(fp, "%d", &ibuff);
557 if (val != 1) {
558 status = ERROR_INPUT_PAR;
559 break;
560 }
561 inparam->AMG_maxit = ibuff;
562 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
563 };
564 }
565
566 else if (strcmp(buffer, "AMG_coarse_dof") == 0) {
567 val = fscanf(fp, "%s", buffer);
568 if (val != 1 || strcmp(buffer, "=") != 0) {
569 status = ERROR_INPUT_PAR;
570 break;
571 }
572 val = fscanf(fp, "%d", &ibuff);
573 if (val != 1) {
574 status = ERROR_INPUT_PAR;
575 break;
576 }
577 inparam->AMG_coarse_dof = ibuff;
578 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
579 };
580 }
581
582 else if (strcmp(buffer, "AMG_cycle_type") == 0) {
583 val = fscanf(fp, "%s", buffer);
584 if (val != 1 || strcmp(buffer, "=") != 0) {
585 status = ERROR_INPUT_PAR;
586 break;
587 }
588 val = fscanf(fp, "%s", buffer);
589 if (val != 1) {
590 status = ERROR_INPUT_PAR;
591 break;
592 }
593
594 if ((strcmp(buffer, "V") == 0) || (strcmp(buffer, "v") == 0))
595 inparam->AMG_cycle_type = V_CYCLE;
596 else if ((strcmp(buffer, "W") == 0) || (strcmp(buffer, "w") == 0))
597 inparam->AMG_cycle_type = W_CYCLE;
598 else if ((strcmp(buffer, "A") == 0) || (strcmp(buffer, "a") == 0))
599 inparam->AMG_cycle_type = AMLI_CYCLE;
600 else if ((strcmp(buffer, "NA") == 0) || (strcmp(buffer, "na") == 0))
601 inparam->AMG_cycle_type = NL_AMLI_CYCLE;
602 else if ((strcmp(buffer, "VW") == 0) || (strcmp(buffer, "vw") == 0))
603 inparam->AMG_cycle_type = VW_CYCLE;
604 else if ((strcmp(buffer, "WV") == 0) || (strcmp(buffer, "wv") == 0))
605 inparam->AMG_cycle_type = WV_CYCLE;
606 else {
607 status = ERROR_INPUT_PAR;
608 break;
609 }
610 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
611 };
612 }
613
614 else if (strcmp(buffer, "AMG_smoother") == 0) {
615 val = fscanf(fp, "%s", buffer);
616 if (val != 1 || strcmp(buffer, "=") != 0) {
617 status = ERROR_INPUT_PAR;
618 break;
619 }
620 val = fscanf(fp, "%s", buffer);
621 if (val != 1) {
622 status = ERROR_INPUT_PAR;
623 break;
624 }
625 // printf("buffer: %s\n", buffer);
626
627 if ((strcmp(buffer, "JACOBI") == 0) || (strcmp(buffer, "jacobi") == 0))
628 inparam->AMG_smoother = SMOOTHER_JACOBI;
629 else if ((strcmp(buffer, "JACOBIF") == 0) ||
630 (strcmp(buffer, "jacobif") == 0))
632 else if ((strcmp(buffer, "GS") == 0) || (strcmp(buffer, "gs") == 0))
633 inparam->AMG_smoother = SMOOTHER_GS;
634 else if ((strcmp(buffer, "GSF") == 0) || (strcmp(buffer, "gsf") == 0))
635 inparam->AMG_smoother = SMOOTHER_GSF;
636 else if ((strcmp(buffer, "SGS") == 0) || (strcmp(buffer, "sgs") == 0))
637 inparam->AMG_smoother = SMOOTHER_SGS;
638 else if ((strcmp(buffer, "CG") == 0) || (strcmp(buffer, "cg") == 0))
639 inparam->AMG_smoother = SMOOTHER_CG;
640 else if ((strcmp(buffer, "SOR") == 0) || (strcmp(buffer, "sor") == 0))
641 inparam->AMG_smoother = SMOOTHER_SOR;
642 else if ((strcmp(buffer, "SSOR") == 0) || (strcmp(buffer, "ssor") == 0))
643 inparam->AMG_smoother = SMOOTHER_SSOR;
644 else if ((strcmp(buffer, "GSOR") == 0) || (strcmp(buffer, "gsor") == 0))
645 inparam->AMG_smoother = SMOOTHER_GSOR;
646 else if ((strcmp(buffer, "SGSOR") == 0) || (strcmp(buffer, "sgsor") == 0))
647 inparam->AMG_smoother = SMOOTHER_SGSOR;
648 else if ((strcmp(buffer, "POLY") == 0) || (strcmp(buffer, "poly") == 0))
649 inparam->AMG_smoother = SMOOTHER_POLY;
650 else if ((strcmp(buffer, "L1DIAG") == 0) || (strcmp(buffer, "l1diag") == 0))
651 inparam->AMG_smoother = SMOOTHER_L1DIAG;
652 else if ((strcmp(buffer, "BLKOIL") == 0) || (strcmp(buffer, "blkoil") == 0))
653 inparam->AMG_smoother = SMOOTHER_BLKOIL;
654 else if ((strcmp(buffer, "SPETEN") == 0) || (strcmp(buffer, "speten") == 0))
655 inparam->AMG_smoother = SMOOTHER_SPETEN;
656 else if ((strcmp(buffer, "CPRGS") == 0) || (strcmp(buffer, "cprgs") == 0))
657 inparam->AMG_smoother = SMOOTHER_CPRGS;
658 else if ((strcmp(buffer, "CPTRGS") == 0) || (strcmp(buffer, "cptrgs") == 0))
659 inparam->AMG_smoother = SMOOTHER_CPTRGS;
660 else {
661 status = ERROR_INPUT_PAR;
662 break;
663 }
664 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
665 };
666 }
667
668 else if (strcmp(buffer, "AMG_smooth_order") == 0) {
669 val = fscanf(fp, "%s", buffer);
670 if (val != 1 || strcmp(buffer, "=") != 0) {
671 status = ERROR_INPUT_PAR;
672 break;
673 }
674 val = fscanf(fp, "%s", buffer);
675 if (val != 1) {
676 status = ERROR_INPUT_PAR;
677 break;
678 }
679
680 if ((strcmp(buffer, "NO") == 0) || (strcmp(buffer, "no") == 0))
681 inparam->AMG_smooth_order = NO_ORDER;
682 else if ((strcmp(buffer, "CF") == 0) || (strcmp(buffer, "cf") == 0))
683 inparam->AMG_smooth_order = CF_ORDER;
684 else {
685 status = ERROR_INPUT_PAR;
686 break;
687 }
688 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
689 };
690 }
691
692 else if (strcmp(buffer, "AMG_coarsening_type") == 0) {
693 val = fscanf(fp, "%s", buffer);
694 if (val != 1 || strcmp(buffer, "=") != 0) {
695 status = ERROR_INPUT_PAR;
696 break;
697 }
698 val = fscanf(fp, "%d", &ibuff);
699 if (val != 1) {
700 status = ERROR_INPUT_PAR;
701 break;
702 }
703 inparam->AMG_coarsening_type = ibuff;
704 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
705 };
706 }
707
708 else if (strcmp(buffer, "AMG_interpolation_type") == 0) {
709 val = fscanf(fp, "%s", buffer);
710 if (val != 1 || strcmp(buffer, "=") != 0) {
711 status = ERROR_INPUT_PAR;
712 break;
713 }
714 val = fscanf(fp, "%d", &ibuff);
715 if (val != 1) {
716 status = ERROR_INPUT_PAR;
717 break;
718 }
719 inparam->AMG_interpolation_type = ibuff;
720 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
721 };
722 }
723
724 else if (strcmp(buffer, "AMG_aggregation_type") == 0) {
725 val = fscanf(fp, "%s", buffer);
726 if (val != 1 || strcmp(buffer, "=") != 0) {
727 status = ERROR_INPUT_PAR;
728 break;
729 }
730 val = fscanf(fp, "%d", &ibuff);
731 if (val != 1) {
732 status = ERROR_INPUT_PAR;
733 break;
734 }
735 inparam->AMG_aggregation_type = ibuff;
736 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
737 };
738 }
739
740 else if (strcmp(buffer, "AMG_aggregation_norm_type") == 0) {
741 val = fscanf(fp, "%s", buffer);
742 if (val != 1 || strcmp(buffer, "=") != 0) {
743 status = ERROR_INPUT_PAR;
744 break;
745 }
746 val = fscanf(fp, "%d", &ibuff);
747 if (val != 1) {
748 status = ERROR_INPUT_PAR;
749 break;
750 }
751 inparam->AMG_aggregation_norm_type = ibuff;
752 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
753 };
754 }
755
756 else if (strcmp(buffer, "AMG_pair_number") == 0) {
757 val = fscanf(fp, "%s", buffer);
758 if (val != 1 || strcmp(buffer, "=") != 0) {
759 status = ERROR_INPUT_PAR;
760 break;
761 }
762 val = fscanf(fp, "%d", &ibuff);
763 if (val != 1) {
764 status = ERROR_INPUT_PAR;
765 break;
766 }
767 inparam->AMG_pair_number = ibuff;
768 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
769 };
770 }
771
772 else if (strcmp(buffer, "AMG_quality_bound") == 0) {
773 val = fscanf(fp, "%s", buffer);
774 if (val != 1 || strcmp(buffer, "=") != 0) {
775 status = ERROR_INPUT_PAR;
776 break;
777 }
778 val = fscanf(fp, "%lf", &dbuff);
779 if (val != 1) {
780 status = ERROR_INPUT_PAR;
781 break;
782 }
783 inparam->AMG_quality_bound = dbuff;
784 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
785 };
786 }
787
788 else if (strcmp(buffer, "AMG_aggressive_level") == 0) {
789 val = fscanf(fp, "%s", buffer);
790 if (val != 1 || strcmp(buffer, "=") != 0) {
791 status = ERROR_INPUT_PAR;
792 break;
793 }
794 val = fscanf(fp, "%d", &ibuff);
795 if (val != 1) {
796 status = ERROR_INPUT_PAR;
797 break;
798 }
799 inparam->AMG_aggressive_level = ibuff;
800 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
801 };
802 }
803
804 else if (strcmp(buffer, "AMG_aggressive_path") == 0) {
805 val = fscanf(fp, "%s", buffer);
806 if (val != 1 || strcmp(buffer, "=") != 0) {
807 status = ERROR_INPUT_PAR;
808 break;
809 }
810 val = fscanf(fp, "%d", &ibuff);
811 if (val != 1) {
812 status = ERROR_INPUT_PAR;
813 break;
814 }
815 inparam->AMG_aggressive_path = ibuff;
816 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
817 };
818 }
819
820 else if (strcmp(buffer, "AMG_presmooth_iter") == 0) {
821 val = fscanf(fp, "%s", buffer);
822 if (val != 1 || strcmp(buffer, "=") != 0) {
823 status = ERROR_INPUT_PAR;
824 break;
825 }
826 val = fscanf(fp, "%d", &ibuff);
827 if (val != 1) {
828 status = ERROR_INPUT_PAR;
829 break;
830 }
831 inparam->AMG_presmooth_iter = ibuff;
832 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
833 };
834 }
835
836 else if (strcmp(buffer, "AMG_postsmooth_iter") == 0) {
837 val = fscanf(fp, "%s", buffer);
838 if (val != 1 || strcmp(buffer, "=") != 0) {
839 status = ERROR_INPUT_PAR;
840 break;
841 }
842 val = fscanf(fp, "%d", &ibuff);
843 if (val != 1) {
844 status = ERROR_INPUT_PAR;
845 break;
846 }
847 inparam->AMG_postsmooth_iter = ibuff;
848 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
849 };
850 }
851
852 else if (strcmp(buffer, "AMG_relaxation") == 0) {
853 val = fscanf(fp, "%s", buffer);
854 if (val != 1 || strcmp(buffer, "=") != 0) {
855 status = ERROR_INPUT_PAR;
856 break;
857 }
858 val = fscanf(fp, "%lf", &dbuff);
859 if (val != 1) {
860 status = ERROR_INPUT_PAR;
861 break;
862 }
863 inparam->AMG_relaxation = dbuff;
864 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
865 };
866 }
867
868 else if (strcmp(buffer, "AMG_polynomial_degree") == 0) {
869 val = fscanf(fp, "%s", buffer);
870 if (val != 1 || strcmp(buffer, "=") != 0) {
871 status = ERROR_INPUT_PAR;
872 break;
873 }
874 val = fscanf(fp, "%d", &ibuff);
875 if (val != 1) {
876 status = ERROR_INPUT_PAR;
877 break;
878 }
879 inparam->AMG_polynomial_degree = ibuff;
880 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
881 };
882 }
883
884 else if (strcmp(buffer, "AMG_strong_threshold") == 0) {
885 val = fscanf(fp, "%s", buffer);
886 if (val != 1 || strcmp(buffer, "=") != 0) {
887 status = ERROR_INPUT_PAR;
888 break;
889 }
890 val = fscanf(fp, "%lf", &dbuff);
891 if (val != 1) {
892 status = ERROR_INPUT_PAR;
893 break;
894 }
895 inparam->AMG_strong_threshold = dbuff;
896 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
897 };
898 }
899
900 else if (strcmp(buffer, "AMG_truncation_threshold") == 0) {
901 val = fscanf(fp, "%s", buffer);
902 if (val != 1 || strcmp(buffer, "=") != 0) {
903 status = ERROR_INPUT_PAR;
904 break;
905 }
906 val = fscanf(fp, "%lf", &dbuff);
907 if (val != 1) {
908 status = ERROR_INPUT_PAR;
909 break;
910 }
911 inparam->AMG_truncation_threshold = dbuff;
912 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
913 };
914 }
915
916 else if (strcmp(buffer, "AMG_max_row_sum") == 0) {
917 val = fscanf(fp, "%s", buffer);
918 if (val != 1 || strcmp(buffer, "=") != 0) {
919 status = ERROR_INPUT_PAR;
920 break;
921 }
922 val = fscanf(fp, "%lf", &dbuff);
923 if (val != 1) {
924 status = ERROR_INPUT_PAR;
925 break;
926 }
927 inparam->AMG_max_row_sum = dbuff;
928 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
929 };
930 }
931
932 else if (strcmp(buffer, "AMG_amli_degree") == 0) {
933 val = fscanf(fp, "%s", buffer);
934 if (val != 1 || strcmp(buffer, "=") != 0) {
935 status = ERROR_INPUT_PAR;
936 break;
937 }
938 val = fscanf(fp, "%d", &ibuff);
939 if (val != 1) {
940 status = ERROR_INPUT_PAR;
941 break;
942 }
943 inparam->AMG_amli_degree = ibuff;
944 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
945 };
946 }
947
948 else if (strcmp(buffer, "AMG_nl_amli_krylov_type") == 0) {
949 val = fscanf(fp, "%s", buffer);
950 if (val != 1 || strcmp(buffer, "=") != 0) {
951 status = ERROR_INPUT_PAR;
952 break;
953 }
954 val = fscanf(fp, "%d", &ibuff);
955 if (val != 1) {
956 status = ERROR_INPUT_PAR;
957 break;
958 }
959 inparam->AMG_nl_amli_krylov_type = ibuff;
960 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
961 };
962 }
963
964 else if (strcmp(buffer, "ILU_type") == 0) {
965 val = fscanf(fp, "%s", buffer);
966 if (val != 1 || strcmp(buffer, "=") != 0) {
967 status = ERROR_INPUT_PAR;
968 break;
969 }
970 val = fscanf(fp, "%d", &ibuff);
971 if (val != 1) {
972 status = ERROR_INPUT_PAR;
973 break;
974 }
975 inparam->ILU_type = ibuff;
976 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
977 };
978 }
979
980 else if (strcmp(buffer, "ILU_lfil") == 0) {
981 val = fscanf(fp, "%s", buffer);
982 if (val != 1 || strcmp(buffer, "=") != 0) {
983 status = ERROR_INPUT_PAR;
984 break;
985 }
986 val = fscanf(fp, "%d", &ibuff);
987 if (val != 1) {
988 status = ERROR_INPUT_PAR;
989 break;
990 }
991 inparam->ILU_lfil = ibuff;
992 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
993 };
994 }
995
996 else if (strcmp(buffer, "ILU_droptol") == 0) {
997 val = fscanf(fp, "%s", buffer);
998 if (val != 1 || strcmp(buffer, "=") != 0) {
999 status = ERROR_INPUT_PAR;
1000 break;
1001 }
1002 val = fscanf(fp, "%lf", &dbuff);
1003 if (val != 1) {
1004 status = ERROR_INPUT_PAR;
1005 break;
1006 }
1007 inparam->ILU_droptol = dbuff;
1008 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
1009 };
1010 }
1011
1012 else if (strcmp(buffer, "ILU_relax") == 0) {
1013 val = fscanf(fp, "%s", buffer);
1014 if (val != 1 || strcmp(buffer, "=") != 0) {
1015 status = ERROR_INPUT_PAR;
1016 break;
1017 }
1018 val = fscanf(fp, "%lf", &dbuff);
1019 if (val != 1) {
1020 status = ERROR_INPUT_PAR;
1021 break;
1022 }
1023 inparam->ILU_relax = dbuff;
1024 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
1025 };
1026 }
1027
1028 else if (strcmp(buffer, "ILU_permtol") == 0) {
1029 val = fscanf(fp, "%s", buffer);
1030 if (val != 1 || strcmp(buffer, "=") != 0) {
1031 status = ERROR_INPUT_PAR;
1032 break;
1033 }
1034 val = fscanf(fp, "%lf", &dbuff);
1035 if (val != 1) {
1036 status = ERROR_INPUT_PAR;
1037 break;
1038 }
1039 inparam->ILU_permtol = dbuff;
1040 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
1041 };
1042 }
1043
1044 else if (strcmp(buffer, "SWZ_mmsize") == 0) {
1045 val = fscanf(fp, "%s", buffer);
1046 if (val != 1 || strcmp(buffer, "=") != 0) {
1047 status = ERROR_INPUT_PAR;
1048 break;
1049 }
1050 val = fscanf(fp, "%d", &ibuff);
1051 if (val != 1) {
1052 status = ERROR_INPUT_PAR;
1053 break;
1054 }
1055 inparam->SWZ_mmsize = ibuff;
1056 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
1057 };
1058 }
1059
1060 else if (strcmp(buffer, "SWZ_maxlvl") == 0) {
1061 val = fscanf(fp, "%s", buffer);
1062 if (val != 1 || strcmp(buffer, "=") != 0) {
1063 status = ERROR_INPUT_PAR;
1064 break;
1065 }
1066 val = fscanf(fp, "%d", &ibuff);
1067 if (val != 1) {
1068 status = ERROR_INPUT_PAR;
1069 break;
1070 }
1071 inparam->SWZ_maxlvl = ibuff;
1072 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
1073 };
1074 }
1075
1076 else if (strcmp(buffer, "SWZ_type") == 0) {
1077 val = fscanf(fp, "%s", buffer);
1078 if (val != 1 || strcmp(buffer, "=") != 0) {
1079 status = ERROR_INPUT_PAR;
1080 break;
1081 }
1082 val = fscanf(fp, "%d", &ibuff);
1083 if (val != 1) {
1084 status = ERROR_INPUT_PAR;
1085 break;
1086 }
1087 inparam->SWZ_type = ibuff;
1088 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
1089 };
1090 }
1091
1092 else if (strcmp(buffer, "SWZ_blksolver") == 0) {
1093 val = fscanf(fp, "%s", buffer);
1094 if (val != 1 || strcmp(buffer, "=") != 0) {
1095 status = ERROR_INPUT_PAR;
1096 break;
1097 }
1098 val = fscanf(fp, "%d", &ibuff);
1099 if (val != 1) {
1100 status = ERROR_INPUT_PAR;
1101 break;
1102 }
1103 inparam->SWZ_blksolver = ibuff;
1104 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
1105 };
1106 }
1107
1108 else {
1109 printf("### WARNING: Unknown input keyword %s!\n", buffer);
1110 if (fscanf(fp, "%*[^\n]")) { /* skip rest of line and do nothing */
1111 };
1112 }
1113 }
1114
1115 fclose(fp);
1116
1117 // if meet unexpected input, stop the program
1118 fasp_chkerr(status, __FUNCTION__);
1119
1120 // sanity checks
1121 status = fasp_param_check(inparam);
1122
1123#if DEBUG_MODE > 1
1124 printf("### DEBUG: Reading input status = %d\n", status);
1125#endif
1126
1127 fasp_chkerr(status, __FUNCTION__);
1128}
1129
1130/*---------------------------------*/
1131/*-- End of File --*/
1132/*---------------------------------*/
SHORT fasp_param_check(input_param *inparam)
Simple check on input parameters.
Definition: AuxInput.c:33
void fasp_param_input(const char *fname, input_param *inparam)
Read input parameters from disk file.
Definition: AuxInput.c:86
void fasp_chkerr(const SHORT status, const char *fctname)
Check error status and print out error messages before quit.
Definition: AuxMessage.c:213
void fasp_param_input_init(input_param *iniparam)
Initialize input parameters.
Definition: AuxParam.c:347
Main header file for the FASP project.
#define STRLEN
Definition: fasp.h:77
#define SHORT
FASP integer and floating point numbers.
Definition: fasp.h:71
#define AMLI_CYCLE
Definition: fasp_const.h:181
#define SMOOTHER_CG
Definition: fasp_const.h:194
#define SMOOTHER_SOR
Definition: fasp_const.h:195
#define SMOOTHER_BLKOIL
Definition of specialized smoother types.
Definition: fasp_const.h:205
#define ERROR_OPEN_FILE
Definition: fasp_const.h:22
#define NL_AMLI_CYCLE
Definition: fasp_const.h:182
#define SMOOTHER_JACOBI
Definition: fasp_const.h:190
#define SMOOTHER_SPETEN
Definition: fasp_const.h:206
#define OFF
Definition: fasp_const.h:68
#define SMOOTHER_CPTRGS
Definition: fasp_const.h:208
#define SMOOTHER_GSOR
Definition: fasp_const.h:197
#define FASP_SUCCESS
Definition of return status and error messages.
Definition: fasp_const.h:19
#define SMOOTHER_L1DIAG
Definition: fasp_const.h:200
#define VW_CYCLE
Definition: fasp_const.h:183
#define V_CYCLE
Definition of cycle types.
Definition: fasp_const.h:179
#define WV_CYCLE
Definition: fasp_const.h:184
#define SMOOTHER_CPRGS
Definition: fasp_const.h:207
#define SMOOTHER_SGSOR
Definition: fasp_const.h:198
#define SMOOTHER_GS
Definition: fasp_const.h:191
#define SA_AMG
Definition: fasp_const.h:164
#define W_CYCLE
Definition: fasp_const.h:180
#define CF_ORDER
Definition: fasp_const.h:241
#define SMOOTHER_GSF
Definition: fasp_const.h:192
#define SMOOTHER_SGS
Definition: fasp_const.h:193
#define ERROR_INPUT_PAR
Definition: fasp_const.h:24
#define SMOOTHER_POLY
Definition: fasp_const.h:199
#define SMOOTHER_JACOBIF
Definition of standard smoother types.
Definition: fasp_const.h:189
#define CLASSIC_AMG
Definition of AMG types.
Definition: fasp_const.h:163
#define ON
Definition of switch.
Definition: fasp_const.h:67
#define SMOOTHER_SSOR
Definition: fasp_const.h:196
#define NO_ORDER
Definition of smoothing order.
Definition: fasp_const.h:240
#define UA_AMG
Definition: fasp_const.h:165
Input parameters.
Definition: fasp.h:1125
INT AMG_coarse_dof
Definition: fasp.h:1170
INT ILU_lfil
Definition: fasp.h:1148
REAL ILU_relax
Definition: fasp.h:1150
INT SWZ_mmsize
Definition: fasp.h:1154
SHORT AMG_smooth_order
Definition: fasp.h:1164
REAL itsolver_abstol
Definition: fasp.h:1142
SHORT print_level
Definition: fasp.h:1128
REAL AMG_quality_bound
Definition: fasp.h:1189
INT SWZ_maxlvl
Definition: fasp.h:1155
INT AMG_SWZ_levels
Definition: fasp.h:1177
SHORT AMG_levels
Definition: fasp.h:1161
SHORT AMG_coarsening_type
Definition: fasp.h:1180
SHORT AMG_cycle_type
Definition: fasp.h:1162
INT AMG_pair_number
Definition: fasp.h:1188
REAL AMG_strong_threshold
Definition: fasp.h:1183
REAL AMG_truncation_threshold
Definition: fasp.h:1184
SHORT AMG_polynomial_degree
Definition: fasp.h:1166
SHORT AMG_coarse_solver
Definition: fasp.h:1173
SHORT precond_type
Definition: fasp.h:1139
SHORT AMG_type
Definition: fasp.h:1160
SHORT AMG_smooth_filter
Definition: fasp.h:1195
char workdir[STRLEN]
Definition: fasp.h:1133
SHORT output_type
Definition: fasp.h:1129
REAL AMG_tentative_smooth
Definition: fasp.h:1194
SHORT AMG_smoother
Definition: fasp.h:1163
REAL AMG_strong_coupled
Definition: fasp.h:1192
INT AMG_max_aggregation
Definition: fasp.h:1193
SHORT decoup_type
Definition: fasp.h:1138
SHORT ILU_type
Definition: fasp.h:1147
SHORT AMG_amli_degree
Definition: fasp.h:1175
INT restart
Definition: fasp.h:1144
SHORT AMG_smooth_restriction
Definition: fasp.h:1196
INT SWZ_blksolver
Definition: fasp.h:1157
INT SWZ_type
Definition: fasp.h:1156
REAL ILU_droptol
Definition: fasp.h:1149
INT AMG_aggressive_path
Definition: fasp.h:1187
SHORT AMG_nl_amli_krylov_type
Definition: fasp.h:1176
SHORT AMG_postsmooth_iter
Definition: fasp.h:1168
INT AMG_aggressive_level
Definition: fasp.h:1186
REAL AMG_max_row_sum
Definition: fasp.h:1185
SHORT AMG_presmooth_iter
Definition: fasp.h:1167
INT itsolver_maxit
Definition: fasp.h:1143
REAL AMG_tol
Definition: fasp.h:1169
SHORT stop_type
Definition: fasp.h:1140
INT problem_num
Definition: fasp.h:1134
SHORT AMG_aggregation_norm_type
Definition: fasp.h:1197
SHORT AMG_interpolation_type
Definition: fasp.h:1182
SHORT AMG_ILU_levels
Definition: fasp.h:1172
REAL ILU_permtol
Definition: fasp.h:1151
REAL itsolver_tol
Definition: fasp.h:1141
INT AMG_maxit
Definition: fasp.h:1171
SHORT AMG_coarse_scaling
Definition: fasp.h:1174
REAL AMG_relaxation
Definition: fasp.h:1165
SHORT solver_type
Definition: fasp.h:1137
SHORT AMG_aggregation_type
Definition: fasp.h:1181