15#include "fasp_functs.h"
124 if (fname==NULL)
return;
126 fp = fopen(fname,
"r");
134 val = fscanf(fp,
"%s",buffer);
137 if (buffer[0]==
'[' || buffer[0]==
'%' || buffer[0]==
'|') {
138 if (fscanf(fp,
"%*[^\n]")) { };
143 if (strcmp(buffer,
"workdir")==0) {
144 val = fscanf(fp,
"%s",buffer);
145 if (val!=1 || strcmp(buffer,
"=")!=0) {
148 val = fscanf(fp,
"%s",sbuff);
151 if (fscanf(fp,
"%*[^\n]")) { };
154 else if (strcmp(buffer,
"problem_num")==0) {
155 val = fscanf(fp,
"%s",buffer);
156 if (val!=1 || strcmp(buffer,
"=")!=0) {
159 val = fscanf(fp,
"%d",&ibuff);
162 if (fscanf(fp,
"%*[^\n]")) { };
165 else if (strcmp(buffer,
"print_level")==0) {
166 val = fscanf(fp,
"%s",buffer);
167 if (val!=1 || strcmp(buffer,
"=")!=0) {
170 val = fscanf(fp,
"%d",&ibuff);
173 if (fscanf(fp,
"%*[^\n]")) { };
176 else if (strcmp(buffer,
"output_type")==0) {
177 val = fscanf(fp,
"%s",buffer);
178 if (val!=1 || strcmp(buffer,
"=")!=0) {
181 val = fscanf(fp,
"%d",&ibuff);
184 if (fscanf(fp,
"%*[^\n]")) { };
187 else if (strcmp(buffer,
"solver_type")==0) {
188 val = fscanf(fp,
"%s",buffer);
189 if (val!=1 || strcmp(buffer,
"=")!=0) {
192 val = fscanf(fp,
"%d",&ibuff);
195 if (fscanf(fp,
"%*[^\n]")) { };
198 else if (strcmp(buffer,
"stop_type")==0) {
199 val = fscanf(fp,
"%s",buffer);
200 if (val!=1 || strcmp(buffer,
"=")!=0) {
203 val = fscanf(fp,
"%d",&ibuff);
206 if (fscanf(fp,
"%*[^\n]")) { };
209 else if (strcmp(buffer,
"decoup_type")==0) {
210 val = fscanf(fp,
"%s",buffer);
211 if (val!=1 || strcmp(buffer,
"=")!=0) {
214 val = fscanf(fp,
"%d",&ibuff);
217 if (fscanf(fp,
"%*[^\n]")) { };
220 else if (strcmp(buffer,
"precond_type")==0) {
221 val = fscanf(fp,
"%s",buffer);
222 if (val!=1 || strcmp(buffer,
"=")!=0) {
225 val = fscanf(fp,
"%d",&ibuff);
228 if (fscanf(fp,
"%*[^\n]")) { };
231 else if (strcmp(buffer,
"itsolver_tol")==0) {
232 val = fscanf(fp,
"%s",buffer);
233 if (val!=1 || strcmp(buffer,
"=")!=0) {
236 val = fscanf(fp,
"%lf",&dbuff);
239 if (fscanf(fp,
"%*[^\n]")) { };
242 else if (strcmp(buffer,
"itsolver_maxit")==0) {
243 val = fscanf(fp,
"%s",buffer);
244 if (val!=1 || strcmp(buffer,
"=")!=0) {
247 val = fscanf(fp,
"%d",&ibuff);
250 if (fscanf(fp,
"%*[^\n]")) { };
253 else if (strcmp(buffer,
"AMG_ILU_levels")==0) {
254 val = fscanf(fp,
"%s",buffer);
255 if (val!=1 || strcmp(buffer,
"=")!=0) {
258 val = fscanf(fp,
"%d",&ibuff);
261 if (fscanf(fp,
"%*[^\n]")) { };
264 else if (strcmp(buffer,
"AMG_SWZ_levels")==0) {
265 val = fscanf(fp,
"%s",buffer);
266 if (val!=1 || strcmp(buffer,
"=")!=0) {
269 val = fscanf(fp,
"%d",&ibuff);
272 if (fscanf(fp,
"%*[^\n]")) { };
275 else if (strcmp(buffer,
"itsolver_restart")==0) {
276 val = fscanf(fp,
"%s",buffer);
277 if (val!=1 || strcmp(buffer,
"=")!=0) {
280 val = fscanf(fp,
"%d",&ibuff);
283 if (fscanf(fp,
"%*[^\n]")) { };
286 else if (strcmp(buffer,
"AMG_type")==0) {
287 val = fscanf(fp,
"%s",buffer);
288 if (val!=1 || strcmp(buffer,
"=")!=0) {
291 val = fscanf(fp,
"%s",buffer);
294 if ((strcmp(buffer,
"C")==0)||(strcmp(buffer,
"c")==0))
296 else if ((strcmp(buffer,
"SA")==0)||(strcmp(buffer,
"sa")==0))
298 else if ((strcmp(buffer,
"UA")==0)||(strcmp(buffer,
"ua")==0))
302 if (fscanf(fp,
"%*[^\n]")) { };
305 else if (strcmp(buffer,
"AMG_strong_coupled")==0) {
306 val = fscanf(fp,
"%s",buffer);
307 if (val!=1 || strcmp(buffer,
"=")!=0) {
310 val = fscanf(fp,
"%lf",&dbuff);
313 if (fscanf(fp,
"%*[^\n]")) { };
316 else if (strcmp(buffer,
"AMG_max_aggregation")==0) {
317 val = fscanf(fp,
"%s",buffer);
318 if (val!=1 || strcmp(buffer,
"=")!=0) {
321 val = fscanf(fp,
"%d",&ibuff);
324 if (fscanf(fp,
"%*[^\n]")) { };
327 else if (strcmp(buffer,
"AMG_tentative_smooth")==0) {
328 val = fscanf(fp,
"%s",buffer);
329 if (val!=1 || strcmp(buffer,
"=")!=0) {
332 val = fscanf(fp,
"%lf",&dbuff);
335 if (fscanf(fp,
"%*[^\n]")) { };
338 else if (strcmp(buffer,
"AMG_smooth_filter")==0) {
339 val = fscanf(fp,
"%s",buffer);
340 if (val!=1 || strcmp(buffer,
"=")!=0) {
343 val = fscanf(fp,
"%s",buffer);
346 if ((strcmp(buffer,
"ON")==0)||(strcmp(buffer,
"on")==0)||
347 (strcmp(buffer,
"On")==0)||(strcmp(buffer,
"oN")==0)) {
350 else if ((strcmp(buffer,
"OFF")==0)||(strcmp(buffer,
"off")==0)||
351 (strcmp(buffer,
"ofF")==0)||(strcmp(buffer,
"oFf")==0)||
352 (strcmp(buffer,
"Off")==0)||(strcmp(buffer,
"oFF")==0)||
353 (strcmp(buffer,
"OfF")==0)||(strcmp(buffer,
"OFf")==0)) {
358 if (fscanf(fp,
"%*[^\n]")) { };
361 else if (strcmp(buffer,
"AMG_smooth_restriction")==0) {
362 val = fscanf(fp,
"%s",buffer);
363 if (val!=1 || strcmp(buffer,
"=")!=0) {
366 val = fscanf(fp,
"%s",buffer);
369 if ((strcmp(buffer,
"ON")==0)||(strcmp(buffer,
"on")==0)||
370 (strcmp(buffer,
"On")==0)||(strcmp(buffer,
"oN")==0)) {
373 else if ((strcmp(buffer,
"OFF")==0)||(strcmp(buffer,
"off")==0)||
374 (strcmp(buffer,
"ofF")==0)||(strcmp(buffer,
"oFf")==0)||
375 (strcmp(buffer,
"Off")==0)||(strcmp(buffer,
"oFF")==0)||
376 (strcmp(buffer,
"OfF")==0)||(strcmp(buffer,
"OFf")==0)) {
381 if (fscanf(fp,
"%*[^\n]")) { };
384 else if (strcmp(buffer,
"AMG_coarse_solver")==0) {
385 val = fscanf(fp,
"%s",buffer);
386 if (val!=1 || strcmp(buffer,
"=")!=0) {
389 val = fscanf(fp,
"%d",&ibuff);
392 if (fscanf(fp,
"%*[^\n]")) { };
395 else if (strcmp(buffer,
"AMG_coarse_scaling")==0) {
396 val = fscanf(fp,
"%s",buffer);
397 if (val!=1 || strcmp(buffer,
"=")!=0) {
400 val = fscanf(fp,
"%s",buffer);
403 if ((strcmp(buffer,
"ON")==0)||(strcmp(buffer,
"on")==0)||
404 (strcmp(buffer,
"On")==0)||(strcmp(buffer,
"oN")==0)) {
407 else if ((strcmp(buffer,
"OFF")==0)||(strcmp(buffer,
"off")==0)||
408 (strcmp(buffer,
"ofF")==0)||(strcmp(buffer,
"oFf")==0)||
409 (strcmp(buffer,
"Off")==0)||(strcmp(buffer,
"oFF")==0)||
410 (strcmp(buffer,
"OfF")==0)||(strcmp(buffer,
"OFf")==0)) {
415 if (fscanf(fp,
"%*[^\n]")) { };
418 else if (strcmp(buffer,
"AMG_levels")==0) {
419 val = fscanf(fp,
"%s",buffer);
420 if (val!=1 || strcmp(buffer,
"=")!=0) {
423 val = fscanf(fp,
"%d",&ibuff);
426 if (fscanf(fp,
"%*[^\n]")) { };
429 else if (strcmp(buffer,
"AMG_tol")==0) {
430 val = fscanf(fp,
"%s",buffer);
431 if (val!=1 || strcmp(buffer,
"=")!=0) {
434 val = fscanf(fp,
"%lf",&dbuff);
437 if (fscanf(fp,
"%*[^\n]")) { };
440 else if (strcmp(buffer,
"AMG_maxit")==0) {
441 val = fscanf(fp,
"%s",buffer);
442 if (val!=1 || strcmp(buffer,
"=")!=0) {
445 val = fscanf(fp,
"%d",&ibuff);
448 if (fscanf(fp,
"%*[^\n]")) { };
451 else if (strcmp(buffer,
"AMG_coarse_dof")==0) {
452 val = fscanf(fp,
"%s",buffer);
453 if (val!=1 || strcmp(buffer,
"=")!=0) {
456 val = fscanf(fp,
"%d",&ibuff);
459 if (fscanf(fp,
"%*[^\n]")) { };
462 else if (strcmp(buffer,
"AMG_cycle_type")==0) {
463 val = fscanf(fp,
"%s",buffer);
464 if (val!=1 || strcmp(buffer,
"=")!=0) {
467 val = fscanf(fp,
"%s",buffer);
470 if ((strcmp(buffer,
"V")==0)||(strcmp(buffer,
"v")==0))
472 else if ((strcmp(buffer,
"W")==0)||(strcmp(buffer,
"w")==0))
474 else if ((strcmp(buffer,
"A")==0)||(strcmp(buffer,
"a")==0))
476 else if ((strcmp(buffer,
"NA")==0)||(strcmp(buffer,
"na")==0))
478 else if ((strcmp(buffer,
"VW")==0)||(strcmp(buffer,
"vw")==0))
480 else if ((strcmp(buffer,
"WV")==0)||(strcmp(buffer,
"wv")==0))
484 if (fscanf(fp,
"%*[^\n]")) { };
487 else if (strcmp(buffer,
"AMG_smoother")==0) {
488 val = fscanf(fp,
"%s",buffer);
489 if (val!=1 || strcmp(buffer,
"=")!=0) {
492 val = fscanf(fp,
"%s",buffer);
495 if ((strcmp(buffer,
"JACOBI")==0)||(strcmp(buffer,
"jacobi")==0))
497 else if ((strcmp(buffer,
"GS")==0)||(strcmp(buffer,
"gs")==0))
499 else if ((strcmp(buffer,
"SGS")==0)||(strcmp(buffer,
"sgs")==0))
501 else if ((strcmp(buffer,
"CG")==0)||(strcmp(buffer,
"cg")==0))
503 else if ((strcmp(buffer,
"SOR")==0)||(strcmp(buffer,
"sor")==0))
505 else if ((strcmp(buffer,
"SSOR")==0)||(strcmp(buffer,
"ssor")==0))
507 else if ((strcmp(buffer,
"GSOR")==0)||(strcmp(buffer,
"gsor")==0))
509 else if ((strcmp(buffer,
"SGSOR")==0)||(strcmp(buffer,
"sgsor")==0))
511 else if ((strcmp(buffer,
"POLY")==0)||(strcmp(buffer,
"poly")==0))
513 else if ((strcmp(buffer,
"L1DIAG")==0)||(strcmp(buffer,
"l1diag")==0))
515 else if ((strcmp(buffer,
"BLKOIL")==0)||(strcmp(buffer,
"blkoil")==0))
517 else if ((strcmp(buffer,
"SPETEN")==0)||(strcmp(buffer,
"speten")==0))
521 if (fscanf(fp,
"%*[^\n]")) { };
524 else if (strcmp(buffer,
"AMG_smooth_order")==0) {
525 val = fscanf(fp,
"%s",buffer);
526 if (val!=1 || strcmp(buffer,
"=")!=0) {
529 val = fscanf(fp,
"%s",buffer);
532 if ((strcmp(buffer,
"NO")==0)||(strcmp(buffer,
"no")==0))
534 else if ((strcmp(buffer,
"CF")==0)||(strcmp(buffer,
"cf")==0))
538 if (fscanf(fp,
"%*[^\n]")) { };
541 else if (strcmp(buffer,
"AMG_coarsening_type")==0) {
542 val = fscanf(fp,
"%s",buffer);
543 if (val!=1 || strcmp(buffer,
"=")!=0) {
546 val = fscanf(fp,
"%d",&ibuff);
549 if (fscanf(fp,
"%*[^\n]")) { };
552 else if (strcmp(buffer,
"AMG_interpolation_type")==0) {
553 val = fscanf(fp,
"%s",buffer);
554 if (val!=1 || strcmp(buffer,
"=")!=0) {
557 val = fscanf(fp,
"%d",&ibuff);
560 if (fscanf(fp,
"%*[^\n]")) { };
563 else if (strcmp(buffer,
"AMG_aggregation_type")==0) {
564 val = fscanf(fp,
"%s",buffer);
565 if (val!=1 || strcmp(buffer,
"=")!=0) {
568 val = fscanf(fp,
"%d",&ibuff);
571 if (fscanf(fp,
"%*[^\n]")) { };
574 else if (strcmp(buffer,
"AMG_pair_number")==0) {
575 val = fscanf(fp,
"%s",buffer);
576 if (val!=1 || strcmp(buffer,
"=")!=0) {
579 val = fscanf(fp,
"%d",&ibuff);
582 if (fscanf(fp,
"%*[^\n]")) { };
585 else if (strcmp(buffer,
"AMG_quality_bound")==0) {
586 val = fscanf(fp,
"%s",buffer);
587 if (val!=1 || strcmp(buffer,
"=")!=0) {
590 val = fscanf(fp,
"%lf",&dbuff);
593 if (fscanf(fp,
"%*[^\n]")) { };
596 else if (strcmp(buffer,
"AMG_aggressive_level")==0) {
597 val = fscanf(fp,
"%s",buffer);
598 if (val!=1 || strcmp(buffer,
"=")!=0) {
601 val = fscanf(fp,
"%d",&ibuff);
604 if (fscanf(fp,
"%*[^\n]")) { };
607 else if (strcmp(buffer,
"AMG_aggressive_path")==0) {
608 val = fscanf(fp,
"%s",buffer);
609 if (val!=1 || strcmp(buffer,
"=")!=0) {
612 val = fscanf(fp,
"%d",&ibuff);
615 if (fscanf(fp,
"%*[^\n]")) { };
618 else if (strcmp(buffer,
"AMG_presmooth_iter")==0) {
619 val = fscanf(fp,
"%s",buffer);
620 if (val!=1 || strcmp(buffer,
"=")!=0) {
623 val = fscanf(fp,
"%d",&ibuff);
626 if (fscanf(fp,
"%*[^\n]")) { };
629 else if (strcmp(buffer,
"AMG_postsmooth_iter")==0) {
630 val = fscanf(fp,
"%s",buffer);
631 if (val!=1 || strcmp(buffer,
"=")!=0) {
634 val = fscanf(fp,
"%d",&ibuff);
637 if (fscanf(fp,
"%*[^\n]")) { };
640 else if (strcmp(buffer,
"AMG_relaxation")==0) {
641 val = fscanf(fp,
"%s",buffer);
642 if (val!=1 || strcmp(buffer,
"=")!=0) {
645 val = fscanf(fp,
"%lf",&dbuff);
648 if (fscanf(fp,
"%*[^\n]")) { };
651 else if (strcmp(buffer,
"AMG_polynomial_degree")==0) {
652 val = fscanf(fp,
"%s",buffer);
653 if (val!=1 || strcmp(buffer,
"=")!=0) {
656 val = fscanf(fp,
"%d",&ibuff);
659 if (fscanf(fp,
"%*[^\n]")) { };
662 else if (strcmp(buffer,
"AMG_strong_threshold")==0) {
663 val = fscanf(fp,
"%s",buffer);
664 if (val!=1 || strcmp(buffer,
"=")!=0) {
667 val = fscanf(fp,
"%lf",&dbuff);
670 if (fscanf(fp,
"%*[^\n]")) { };
673 else if (strcmp(buffer,
"AMG_truncation_threshold")==0) {
674 val = fscanf(fp,
"%s",buffer);
675 if (val!=1 || strcmp(buffer,
"=")!=0) {
678 val = fscanf(fp,
"%lf",&dbuff);
681 if (fscanf(fp,
"%*[^\n]")) { };
684 else if (strcmp(buffer,
"AMG_max_row_sum")==0) {
685 val = fscanf(fp,
"%s",buffer);
686 if (val!=1 || strcmp(buffer,
"=")!=0) {
689 val = fscanf(fp,
"%lf",&dbuff);
692 if (fscanf(fp,
"%*[^\n]")) { };
695 else if (strcmp(buffer,
"AMG_amli_degree")==0) {
696 val = fscanf(fp,
"%s",buffer);
697 if (val!=1 || strcmp(buffer,
"=")!=0) {
700 val = fscanf(fp,
"%d",&ibuff);
703 if (fscanf(fp,
"%*[^\n]")) { };
706 else if (strcmp(buffer,
"AMG_nl_amli_krylov_type")==0) {
707 val = fscanf(fp,
"%s",buffer);
708 if (val!=1 || strcmp(buffer,
"=")!=0) {
711 val = fscanf(fp,
"%d",&ibuff);
714 if (fscanf(fp,
"%*[^\n]")) { };
717 else if (strcmp(buffer,
"ILU_type")==0) {
718 val = fscanf(fp,
"%s",buffer);
719 if (val!=1 || strcmp(buffer,
"=")!=0) {
722 val = fscanf(fp,
"%d",&ibuff);
725 if (fscanf(fp,
"%*[^\n]")) { };
728 else if (strcmp(buffer,
"ILU_lfil")==0) {
729 val = fscanf(fp,
"%s",buffer);
730 if (val!=1 || strcmp(buffer,
"=")!=0) {
733 val = fscanf(fp,
"%d",&ibuff);
736 if (fscanf(fp,
"%*[^\n]")) { };
739 else if (strcmp(buffer,
"ILU_droptol")==0) {
740 val = fscanf(fp,
"%s",buffer);
741 if (val!=1 || strcmp(buffer,
"=")!=0) {
744 val = fscanf(fp,
"%lf",&dbuff);
747 if (fscanf(fp,
"%*[^\n]")) { };
750 else if (strcmp(buffer,
"ILU_relax")==0) {
751 val = fscanf(fp,
"%s",buffer);
752 if (val!=1 || strcmp(buffer,
"=")!=0) {
755 val = fscanf(fp,
"%lf",&dbuff);
758 if (fscanf(fp,
"%*[^\n]")) { };
761 else if (strcmp(buffer,
"ILU_permtol")==0) {
762 val = fscanf(fp,
"%s",buffer);
763 if (val!=1 || strcmp(buffer,
"=")!=0) {
766 val = fscanf(fp,
"%lf",&dbuff);
769 if (fscanf(fp,
"%*[^\n]")) { };
772 else if (strcmp(buffer,
"SWZ_mmsize")==0) {
773 val = fscanf(fp,
"%s",buffer);
774 if (val!=1 || strcmp(buffer,
"=")!=0) {
777 val = fscanf(fp,
"%d",&ibuff);
780 if (fscanf(fp,
"%*[^\n]")) { };
783 else if (strcmp(buffer,
"SWZ_maxlvl")==0) {
784 val = fscanf(fp,
"%s",buffer);
785 if (val!=1 || strcmp(buffer,
"=")!=0) {
788 val = fscanf(fp,
"%d",&ibuff);
791 if (fscanf(fp,
"%*[^\n]")) { };
794 else if (strcmp(buffer,
"SWZ_type")==0) {
795 val = fscanf(fp,
"%s",buffer);
796 if (val!=1 || strcmp(buffer,
"=")!=0) {
799 val = fscanf(fp,
"%d",&ibuff);
802 if (fscanf(fp,
"%*[^\n]")) { };
805 else if (strcmp(buffer,
"SWZ_blksolver")==0) {
806 val = fscanf(fp,
"%s",buffer);
807 if (val!=1 || strcmp(buffer,
"=")!=0) {
810 val = fscanf(fp,
"%d",&ibuff);
813 if (fscanf(fp,
"%*[^\n]")) { };
817 printf(
"### WARNING: Unknown input keyword %s!\n", buffer);
818 if (fscanf(fp,
"%*[^\n]")) { };
831 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 SMOOTHER_JACOBI
Definition of standard smoother types.
#define FASP_SUCCESS
Definition of return status and error messages.
#define V_CYCLE
Definition of cycle types.
#define CLASSIC_AMG
Definition of AMG types.
#define ON
Definition of switch.
#define NO_ORDER
Definition of smoothing order.