66 setUsageHelp(
"USAGE: %s [options] <input-file> <result-output-file>\n\n where input may be either in plain or gzipped DIMACS.\n");
70 fpu_control_t oldcw, newcw;
71 _FPU_GETCW(oldcw); newcw = (oldcw & ~_FPU_EXTENDED) | _FPU_DOUBLE; _FPU_SETCW(newcw);
72 printf(
"WARNING: for repeatability, setting FPU to use double precision\n");
76 IntOption verb (
"MAIN",
"verb",
"Verbosity level (0=silent, 1=some, 2=more).", 1,
IntRange(0, 2));
77 BoolOption pre (
"MAIN",
"pre",
"Completely turn on/off any preprocessing.",
true);
78 StringOption dimacs (
"MAIN",
"dimacs",
"If given, stop after preprocessing and write the result to this file.");
86 double initial_time = cpuTime();
88 if (!pre) S.eliminate(
true);
122 printf(
"Reading from standard input... Use '--help' for help.\n");
128 printf(
"ERROR! Could not open file: %s\n", argc == 1 ?
"<stdin>" : argv[1]),
exit(1);
130 if (S.verbosity > 0){
131 printf(
"============================[ Problem Statistics ]=============================\n");
136 FILE* res = (argc >= 3) ? fopen(argv[2],
"wb") : NULL;
138 if (S.verbosity > 0){
139 printf(
"| Number of variables: %12d |\n", S.nVars());
140 printf(
"| Number of clauses: %12d |\n", S.nClauses()); }
142 double parsed_time = cpuTime();
144 printf(
"| Parse time: %12.2f s |\n", parsed_time - initial_time);
152 double simplified_time = cpuTime();
153 if (S.verbosity > 0){
154 printf(
"| Simplification time: %12.2f s |\n", simplified_time - parsed_time);
158 if (res != NULL) fprintf(res,
"UNSAT\n"), fclose(res);
159 if (S.verbosity > 0){
160 printf(
"===============================================================================\n");
161 printf(
"Solved by simplification\n");
164 printf(
"UNSATISFIABLE\n");
170 printf(
"==============================[ Writing DIMACS ]===============================\n");
171 S.toDimacs((
const char*)dimacs);
178 lbool ret = S.solveLimited(dummy);
180 if (S.verbosity > 0){
183 printf(ret ==
l_True ?
"SATISFIABLE\n" : ret ==
l_False ?
"UNSATISFIABLE\n" :
"INDETERMINATE\n");
186 fprintf(res,
"SAT\n");
187 for (
int i = 0; i < S.nVars(); i++)
189 fprintf(res,
"%s%s%d", (i==0)?
"":
" ", (S.model[i]==
l_True)?
"":
"-", i+1);
190 fprintf(res,
" 0\n");
192 fprintf(res,
"UNSAT\n");
194 fprintf(res,
"INDET\n");
204 printf(
"===============================================================================\n");
205 printf(
"INDETERMINATE\n");
void printStats(Solver &solver)
int MainSimp(int argc, char **argv)