15#include "fasp_functs.h"
97 if (fname == NULL)
return;
99 fp = fopen(fname,
"r");
107 val = fscanf(fp,
"%s", buffer);
108 if (val == EOF)
break;
113 if (buffer[0] ==
'[' || buffer[0] ==
'%' || buffer[0] ==
'|') {
114 if (fscanf(fp,
"%*[^\n]")) {
120 if (strcmp(buffer,
"workdir") == 0) {
121 val = fscanf(fp,
"%s", buffer);
122 if (val != 1 || strcmp(buffer,
"=") != 0) {
126 val = fscanf(fp,
"%s", sbuff);
132 if (fscanf(fp,
"%*[^\n]")) {
136 else if (strcmp(buffer,
"problem_num") == 0) {
137 val = fscanf(fp,
"%s", buffer);
138 if (val != 1 || strcmp(buffer,
"=") != 0) {
142 val = fscanf(fp,
"%d", &ibuff);
148 if (fscanf(fp,
"%*[^\n]")) {
152 else if (strcmp(buffer,
"print_level") == 0) {
153 val = fscanf(fp,
"%s", buffer);
154 if (val != 1 || strcmp(buffer,
"=") != 0) {
158 val = fscanf(fp,
"%d", &ibuff);
164 if (fscanf(fp,
"%*[^\n]")) {
168 else if (strcmp(buffer,
"output_type") == 0) {
169 val = fscanf(fp,
"%s", buffer);
170 if (val != 1 || strcmp(buffer,
"=") != 0) {
174 val = fscanf(fp,
"%d", &ibuff);
180 if (fscanf(fp,
"%*[^\n]")) {
184 else if (strcmp(buffer,
"solver_type") == 0) {
185 val = fscanf(fp,
"%s", buffer);
186 if (val != 1 || strcmp(buffer,
"=") != 0) {
190 val = fscanf(fp,
"%d", &ibuff);
196 if (fscanf(fp,
"%*[^\n]")) {
200 else if (strcmp(buffer,
"stop_type") == 0) {
201 val = fscanf(fp,
"%s", buffer);
202 if (val != 1 || strcmp(buffer,
"=") != 0) {
206 val = fscanf(fp,
"%d", &ibuff);
212 if (fscanf(fp,
"%*[^\n]")) {
216 else if (strcmp(buffer,
"decoup_type") == 0) {
217 val = fscanf(fp,
"%s", buffer);
218 if (val != 1 || strcmp(buffer,
"=") != 0) {
222 val = fscanf(fp,
"%d", &ibuff);
228 if (fscanf(fp,
"%*[^\n]")) {
232 else if (strcmp(buffer,
"precond_type") == 0) {
233 val = fscanf(fp,
"%s", buffer);
234 if (val != 1 || strcmp(buffer,
"=") != 0) {
238 val = fscanf(fp,
"%d", &ibuff);
244 if (fscanf(fp,
"%*[^\n]")) {
248 else if (strcmp(buffer,
"itsolver_tol") == 0) {
249 val = fscanf(fp,
"%s", buffer);
250 if (val != 1 || strcmp(buffer,
"=") != 0) {
254 val = fscanf(fp,
"%lf", &dbuff);
260 if (fscanf(fp,
"%*[^\n]")) {
264 else if (strcmp(buffer,
"itsolver_abstol") == 0) {
265 val = fscanf(fp,
"%s", buffer);
266 if (val != 1 || strcmp(buffer,
"=") != 0) {
270 val = fscanf(fp,
"%lf", &dbuff);
276 if (fscanf(fp,
"%*[^\n]")) {
280 else if (strcmp(buffer,
"itsolver_maxit") == 0) {
281 val = fscanf(fp,
"%s", buffer);
282 if (val != 1 || strcmp(buffer,
"=") != 0) {
286 val = fscanf(fp,
"%d", &ibuff);
292 if (fscanf(fp,
"%*[^\n]")) {
296 else if (strcmp(buffer,
"AMG_ILU_levels") == 0) {
297 val = fscanf(fp,
"%s", buffer);
298 if (val != 1 || strcmp(buffer,
"=") != 0) {
302 val = fscanf(fp,
"%d", &ibuff);
308 if (fscanf(fp,
"%*[^\n]")) {
312 else if (strcmp(buffer,
"AMG_SWZ_levels") == 0) {
313 val = fscanf(fp,
"%s", buffer);
314 if (val != 1 || strcmp(buffer,
"=") != 0) {
318 val = fscanf(fp,
"%d", &ibuff);
324 if (fscanf(fp,
"%*[^\n]")) {
328 else if (strcmp(buffer,
"itsolver_restart") == 0) {
329 val = fscanf(fp,
"%s", buffer);
330 if (val != 1 || strcmp(buffer,
"=") != 0) {
334 val = fscanf(fp,
"%d", &ibuff);
340 if (fscanf(fp,
"%*[^\n]")) {
344 else if (strcmp(buffer,
"AMG_type") == 0) {
345 val = fscanf(fp,
"%s", buffer);
346 if (val != 1 || strcmp(buffer,
"=") != 0) {
350 val = fscanf(fp,
"%s", buffer);
356 if ((strcmp(buffer,
"C") == 0) || (strcmp(buffer,
"c") == 0))
358 else if ((strcmp(buffer,
"SA") == 0) || (strcmp(buffer,
"sa") == 0))
360 else if ((strcmp(buffer,
"UA") == 0) || (strcmp(buffer,
"ua") == 0))
366 if (fscanf(fp,
"%*[^\n]")) {
370 else if (strcmp(buffer,
"AMG_strong_coupled") == 0) {
371 val = fscanf(fp,
"%s", buffer);
372 if (val != 1 || strcmp(buffer,
"=") != 0) {
376 val = fscanf(fp,
"%lf", &dbuff);
382 if (fscanf(fp,
"%*[^\n]")) {
386 else if (strcmp(buffer,
"AMG_max_aggregation") == 0) {
387 val = fscanf(fp,
"%s", buffer);
388 if (val != 1 || strcmp(buffer,
"=") != 0) {
392 val = fscanf(fp,
"%d", &ibuff);
398 if (fscanf(fp,
"%*[^\n]")) {
402 else if (strcmp(buffer,
"AMG_tentative_smooth") == 0) {
403 val = fscanf(fp,
"%s", buffer);
404 if (val != 1 || strcmp(buffer,
"=") != 0) {
408 val = fscanf(fp,
"%lf", &dbuff);
414 if (fscanf(fp,
"%*[^\n]")) {
418 else if (strcmp(buffer,
"AMG_smooth_filter") == 0) {
419 val = fscanf(fp,
"%s", buffer);
420 if (val != 1 || strcmp(buffer,
"=") != 0) {
424 val = fscanf(fp,
"%s", buffer);
430 if ((strcmp(buffer,
"ON") == 0) || (strcmp(buffer,
"on") == 0) ||
431 (strcmp(buffer,
"On") == 0) || (strcmp(buffer,
"oN") == 0)) {
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)) {
442 if (fscanf(fp,
"%*[^\n]")) {
446 else if (strcmp(buffer,
"AMG_smooth_restriction") == 0) {
447 val = fscanf(fp,
"%s", buffer);
448 if (val != 1 || strcmp(buffer,
"=") != 0) {
452 val = fscanf(fp,
"%s", buffer);
458 if ((strcmp(buffer,
"ON") == 0) || (strcmp(buffer,
"on") == 0) ||
459 (strcmp(buffer,
"On") == 0) || (strcmp(buffer,
"oN") == 0)) {
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)) {
470 if (fscanf(fp,
"%*[^\n]")) {
474 else if (strcmp(buffer,
"AMG_coarse_solver") == 0) {
475 val = fscanf(fp,
"%s", buffer);
476 if (val != 1 || strcmp(buffer,
"=") != 0) {
480 val = fscanf(fp,
"%d", &ibuff);
486 if (fscanf(fp,
"%*[^\n]")) {
490 else if (strcmp(buffer,
"AMG_coarse_scaling") == 0) {
491 val = fscanf(fp,
"%s", buffer);
492 if (val != 1 || strcmp(buffer,
"=") != 0) {
496 val = fscanf(fp,
"%s", buffer);
502 if ((strcmp(buffer,
"ON") == 0) || (strcmp(buffer,
"on") == 0) ||
503 (strcmp(buffer,
"On") == 0) || (strcmp(buffer,
"oN") == 0)) {
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)) {
514 if (fscanf(fp,
"%*[^\n]")) {
518 else if (strcmp(buffer,
"AMG_levels") == 0) {
519 val = fscanf(fp,
"%s", buffer);
520 if (val != 1 || strcmp(buffer,
"=") != 0) {
524 val = fscanf(fp,
"%d", &ibuff);
530 if (fscanf(fp,
"%*[^\n]")) {
534 else if (strcmp(buffer,
"AMG_tol") == 0) {
535 val = fscanf(fp,
"%s", buffer);
536 if (val != 1 || strcmp(buffer,
"=") != 0) {
540 val = fscanf(fp,
"%lf", &dbuff);
546 if (fscanf(fp,
"%*[^\n]")) {
550 else if (strcmp(buffer,
"AMG_maxit") == 0) {
551 val = fscanf(fp,
"%s", buffer);
552 if (val != 1 || strcmp(buffer,
"=") != 0) {
556 val = fscanf(fp,
"%d", &ibuff);
562 if (fscanf(fp,
"%*[^\n]")) {
566 else if (strcmp(buffer,
"AMG_coarse_dof") == 0) {
567 val = fscanf(fp,
"%s", buffer);
568 if (val != 1 || strcmp(buffer,
"=") != 0) {
572 val = fscanf(fp,
"%d", &ibuff);
578 if (fscanf(fp,
"%*[^\n]")) {
582 else if (strcmp(buffer,
"AMG_cycle_type") == 0) {
583 val = fscanf(fp,
"%s", buffer);
584 if (val != 1 || strcmp(buffer,
"=") != 0) {
588 val = fscanf(fp,
"%s", buffer);
594 if ((strcmp(buffer,
"V") == 0) || (strcmp(buffer,
"v") == 0))
596 else if ((strcmp(buffer,
"W") == 0) || (strcmp(buffer,
"w") == 0))
598 else if ((strcmp(buffer,
"A") == 0) || (strcmp(buffer,
"a") == 0))
600 else if ((strcmp(buffer,
"NA") == 0) || (strcmp(buffer,
"na") == 0))
602 else if ((strcmp(buffer,
"VW") == 0) || (strcmp(buffer,
"vw") == 0))
604 else if ((strcmp(buffer,
"WV") == 0) || (strcmp(buffer,
"wv") == 0))
610 if (fscanf(fp,
"%*[^\n]")) {
614 else if (strcmp(buffer,
"AMG_smoother") == 0) {
615 val = fscanf(fp,
"%s", buffer);
616 if (val != 1 || strcmp(buffer,
"=") != 0) {
620 val = fscanf(fp,
"%s", buffer);
627 if ((strcmp(buffer,
"JACOBI") == 0) || (strcmp(buffer,
"jacobi") == 0))
629 else if ((strcmp(buffer,
"JACOBIF") == 0) ||
630 (strcmp(buffer,
"jacobif") == 0))
632 else if ((strcmp(buffer,
"GS") == 0) || (strcmp(buffer,
"gs") == 0))
634 else if ((strcmp(buffer,
"GSF") == 0) || (strcmp(buffer,
"gsf") == 0))
636 else if ((strcmp(buffer,
"SGS") == 0) || (strcmp(buffer,
"sgs") == 0))
638 else if ((strcmp(buffer,
"CG") == 0) || (strcmp(buffer,
"cg") == 0))
640 else if ((strcmp(buffer,
"SOR") == 0) || (strcmp(buffer,
"sor") == 0))
642 else if ((strcmp(buffer,
"SSOR") == 0) || (strcmp(buffer,
"ssor") == 0))
644 else if ((strcmp(buffer,
"GSOR") == 0) || (strcmp(buffer,
"gsor") == 0))
646 else if ((strcmp(buffer,
"SGSOR") == 0) || (strcmp(buffer,
"sgsor") == 0))
648 else if ((strcmp(buffer,
"POLY") == 0) || (strcmp(buffer,
"poly") == 0))
650 else if ((strcmp(buffer,
"L1DIAG") == 0) || (strcmp(buffer,
"l1diag") == 0))
652 else if ((strcmp(buffer,
"BLKOIL") == 0) || (strcmp(buffer,
"blkoil") == 0))
654 else if ((strcmp(buffer,
"SPETEN") == 0) || (strcmp(buffer,
"speten") == 0))
656 else if ((strcmp(buffer,
"CPRGS") == 0) || (strcmp(buffer,
"cprgs") == 0))
658 else if ((strcmp(buffer,
"CPTRGS") == 0) || (strcmp(buffer,
"cptrgs") == 0))
664 if (fscanf(fp,
"%*[^\n]")) {
668 else if (strcmp(buffer,
"AMG_smooth_order") == 0) {
669 val = fscanf(fp,
"%s", buffer);
670 if (val != 1 || strcmp(buffer,
"=") != 0) {
674 val = fscanf(fp,
"%s", buffer);
680 if ((strcmp(buffer,
"NO") == 0) || (strcmp(buffer,
"no") == 0))
682 else if ((strcmp(buffer,
"CF") == 0) || (strcmp(buffer,
"cf") == 0))
688 if (fscanf(fp,
"%*[^\n]")) {
692 else if (strcmp(buffer,
"AMG_coarsening_type") == 0) {
693 val = fscanf(fp,
"%s", buffer);
694 if (val != 1 || strcmp(buffer,
"=") != 0) {
698 val = fscanf(fp,
"%d", &ibuff);
704 if (fscanf(fp,
"%*[^\n]")) {
708 else if (strcmp(buffer,
"AMG_interpolation_type") == 0) {
709 val = fscanf(fp,
"%s", buffer);
710 if (val != 1 || strcmp(buffer,
"=") != 0) {
714 val = fscanf(fp,
"%d", &ibuff);
720 if (fscanf(fp,
"%*[^\n]")) {
724 else if (strcmp(buffer,
"AMG_aggregation_type") == 0) {
725 val = fscanf(fp,
"%s", buffer);
726 if (val != 1 || strcmp(buffer,
"=") != 0) {
730 val = fscanf(fp,
"%d", &ibuff);
736 if (fscanf(fp,
"%*[^\n]")) {
740 else if (strcmp(buffer,
"AMG_aggregation_norm_type") == 0) {
741 val = fscanf(fp,
"%s", buffer);
742 if (val != 1 || strcmp(buffer,
"=") != 0) {
746 val = fscanf(fp,
"%d", &ibuff);
752 if (fscanf(fp,
"%*[^\n]")) {
756 else if (strcmp(buffer,
"AMG_pair_number") == 0) {
757 val = fscanf(fp,
"%s", buffer);
758 if (val != 1 || strcmp(buffer,
"=") != 0) {
762 val = fscanf(fp,
"%d", &ibuff);
768 if (fscanf(fp,
"%*[^\n]")) {
772 else if (strcmp(buffer,
"AMG_quality_bound") == 0) {
773 val = fscanf(fp,
"%s", buffer);
774 if (val != 1 || strcmp(buffer,
"=") != 0) {
778 val = fscanf(fp,
"%lf", &dbuff);
784 if (fscanf(fp,
"%*[^\n]")) {
788 else if (strcmp(buffer,
"AMG_aggressive_level") == 0) {
789 val = fscanf(fp,
"%s", buffer);
790 if (val != 1 || strcmp(buffer,
"=") != 0) {
794 val = fscanf(fp,
"%d", &ibuff);
800 if (fscanf(fp,
"%*[^\n]")) {
804 else if (strcmp(buffer,
"AMG_aggressive_path") == 0) {
805 val = fscanf(fp,
"%s", buffer);
806 if (val != 1 || strcmp(buffer,
"=") != 0) {
810 val = fscanf(fp,
"%d", &ibuff);
816 if (fscanf(fp,
"%*[^\n]")) {
820 else if (strcmp(buffer,
"AMG_presmooth_iter") == 0) {
821 val = fscanf(fp,
"%s", buffer);
822 if (val != 1 || strcmp(buffer,
"=") != 0) {
826 val = fscanf(fp,
"%d", &ibuff);
832 if (fscanf(fp,
"%*[^\n]")) {
836 else if (strcmp(buffer,
"AMG_postsmooth_iter") == 0) {
837 val = fscanf(fp,
"%s", buffer);
838 if (val != 1 || strcmp(buffer,
"=") != 0) {
842 val = fscanf(fp,
"%d", &ibuff);
848 if (fscanf(fp,
"%*[^\n]")) {
852 else if (strcmp(buffer,
"AMG_relaxation") == 0) {
853 val = fscanf(fp,
"%s", buffer);
854 if (val != 1 || strcmp(buffer,
"=") != 0) {
858 val = fscanf(fp,
"%lf", &dbuff);
864 if (fscanf(fp,
"%*[^\n]")) {
868 else if (strcmp(buffer,
"AMG_polynomial_degree") == 0) {
869 val = fscanf(fp,
"%s", buffer);
870 if (val != 1 || strcmp(buffer,
"=") != 0) {
874 val = fscanf(fp,
"%d", &ibuff);
880 if (fscanf(fp,
"%*[^\n]")) {
884 else if (strcmp(buffer,
"AMG_strong_threshold") == 0) {
885 val = fscanf(fp,
"%s", buffer);
886 if (val != 1 || strcmp(buffer,
"=") != 0) {
890 val = fscanf(fp,
"%lf", &dbuff);
896 if (fscanf(fp,
"%*[^\n]")) {
900 else if (strcmp(buffer,
"AMG_truncation_threshold") == 0) {
901 val = fscanf(fp,
"%s", buffer);
902 if (val != 1 || strcmp(buffer,
"=") != 0) {
906 val = fscanf(fp,
"%lf", &dbuff);
912 if (fscanf(fp,
"%*[^\n]")) {
916 else if (strcmp(buffer,
"AMG_max_row_sum") == 0) {
917 val = fscanf(fp,
"%s", buffer);
918 if (val != 1 || strcmp(buffer,
"=") != 0) {
922 val = fscanf(fp,
"%lf", &dbuff);
928 if (fscanf(fp,
"%*[^\n]")) {
932 else if (strcmp(buffer,
"AMG_amli_degree") == 0) {
933 val = fscanf(fp,
"%s", buffer);
934 if (val != 1 || strcmp(buffer,
"=") != 0) {
938 val = fscanf(fp,
"%d", &ibuff);
944 if (fscanf(fp,
"%*[^\n]")) {
948 else if (strcmp(buffer,
"AMG_nl_amli_krylov_type") == 0) {
949 val = fscanf(fp,
"%s", buffer);
950 if (val != 1 || strcmp(buffer,
"=") != 0) {
954 val = fscanf(fp,
"%d", &ibuff);
960 if (fscanf(fp,
"%*[^\n]")) {
964 else if (strcmp(buffer,
"ILU_type") == 0) {
965 val = fscanf(fp,
"%s", buffer);
966 if (val != 1 || strcmp(buffer,
"=") != 0) {
970 val = fscanf(fp,
"%d", &ibuff);
976 if (fscanf(fp,
"%*[^\n]")) {
980 else if (strcmp(buffer,
"ILU_lfil") == 0) {
981 val = fscanf(fp,
"%s", buffer);
982 if (val != 1 || strcmp(buffer,
"=") != 0) {
986 val = fscanf(fp,
"%d", &ibuff);
992 if (fscanf(fp,
"%*[^\n]")) {
996 else if (strcmp(buffer,
"ILU_droptol") == 0) {
997 val = fscanf(fp,
"%s", buffer);
998 if (val != 1 || strcmp(buffer,
"=") != 0) {
1002 val = fscanf(fp,
"%lf", &dbuff);
1008 if (fscanf(fp,
"%*[^\n]")) {
1012 else if (strcmp(buffer,
"ILU_relax") == 0) {
1013 val = fscanf(fp,
"%s", buffer);
1014 if (val != 1 || strcmp(buffer,
"=") != 0) {
1018 val = fscanf(fp,
"%lf", &dbuff);
1024 if (fscanf(fp,
"%*[^\n]")) {
1028 else if (strcmp(buffer,
"ILU_permtol") == 0) {
1029 val = fscanf(fp,
"%s", buffer);
1030 if (val != 1 || strcmp(buffer,
"=") != 0) {
1034 val = fscanf(fp,
"%lf", &dbuff);
1040 if (fscanf(fp,
"%*[^\n]")) {
1044 else if (strcmp(buffer,
"SWZ_mmsize") == 0) {
1045 val = fscanf(fp,
"%s", buffer);
1046 if (val != 1 || strcmp(buffer,
"=") != 0) {
1050 val = fscanf(fp,
"%d", &ibuff);
1056 if (fscanf(fp,
"%*[^\n]")) {
1060 else if (strcmp(buffer,
"SWZ_maxlvl") == 0) {
1061 val = fscanf(fp,
"%s", buffer);
1062 if (val != 1 || strcmp(buffer,
"=") != 0) {
1066 val = fscanf(fp,
"%d", &ibuff);
1072 if (fscanf(fp,
"%*[^\n]")) {
1076 else if (strcmp(buffer,
"SWZ_type") == 0) {
1077 val = fscanf(fp,
"%s", buffer);
1078 if (val != 1 || strcmp(buffer,
"=") != 0) {
1082 val = fscanf(fp,
"%d", &ibuff);
1088 if (fscanf(fp,
"%*[^\n]")) {
1092 else if (strcmp(buffer,
"SWZ_blksolver") == 0) {
1093 val = fscanf(fp,
"%s", buffer);
1094 if (val != 1 || strcmp(buffer,
"=") != 0) {
1098 val = fscanf(fp,
"%d", &ibuff);
1104 if (fscanf(fp,
"%*[^\n]")) {
1109 printf(
"### WARNING: Unknown input keyword %s!\n", buffer);
1110 if (fscanf(fp,
"%*[^\n]")) {
1124 printf(
"### DEBUG: Reading input status = %d\n", status);
void fasp_chkerr(const SHORT status, const char *fctname)
Check error status and print out error messages before quit.
void fasp_param_input_init(input_param *iniparam)
Initialize input parameters.
Main header file for the FASP project.
#define SHORT
FASP integer and floating point numbers.
#define SMOOTHER_BLKOIL
Definition of specialized smoother types.
#define FASP_SUCCESS
Definition of return status and error messages.
#define V_CYCLE
Definition of cycle types.
#define SMOOTHER_JACOBIF
Definition of standard smoother types.
#define CLASSIC_AMG
Definition of AMG types.
#define ON
Definition of switch.
#define NO_ORDER
Definition of smoothing order.