/**CFile**************************************************************** FileName [satTrace.c] SystemName [ABC: Logic synthesis and verification system.] PackageName [SAT sat_solver.] Synopsis [Records the trace of SAT solving in the CNF form.] Author [Alan Mishchenko] Affiliation [UC Berkeley] Date [Ver. 1.0. Started - June 20, 2005.] Revision [$Id: satTrace.c,v 1.4 2005/09/16 22:55:03 casem Exp $] ***********************************************************************/ #include "satSolver.h" ABC_NAMESPACE_IMPL_START /* The trace of SAT solving contains the original clause of the problem along with the learned clauses derived during SAT solving. The first line of the resulting file contains 3 numbers instead of 2: c */ //////////////////////////////////////////////////////////////////////// /// DECLARATIONS /// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// /// FUNCTION DEFINITIONS /// //////////////////////////////////////////////////////////////////////// /**Function************************************************************* Synopsis [Start the trace recording.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ void Sat_SolverTraceStart( sat_solver * pSat, char * pName ) { assert( pSat->pFile == NULL ); pSat->pFile = fopen( pName, "w" ); fprintf( pSat->pFile, " \n" ); pSat->nClauses = 0; pSat->nRoots = 0; } /**Function************************************************************* Synopsis [Stops the trace recording.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ void Sat_SolverTraceStop( sat_solver * pSat ) { if ( pSat->pFile == NULL ) return; rewind( pSat->pFile ); fprintf( pSat->pFile, "p %d %d %d", sat_solver_nvars(pSat), pSat->nClauses, pSat->nRoots ); fclose( pSat->pFile ); pSat->pFile = NULL; } /**Function************************************************************* Synopsis [Writes one clause into the trace file.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ void Sat_SolverTraceWrite( sat_solver * pSat, int * pBeg, int * pEnd, int fRoot ) { if ( pSat->pFile == NULL ) return; pSat->nClauses++; pSat->nRoots += fRoot; for ( ; pBeg < pEnd ; pBeg++ ) fprintf( pSat->pFile, " %d", lit_print(*pBeg) ); fprintf( pSat->pFile, " 0\n" ); } //////////////////////////////////////////////////////////////////////// /// END OF FILE /// //////////////////////////////////////////////////////////////////////// ABC_NAMESPACE_IMPL_END