/**CFile**************************************************************** FileName [msatSolverIo.c] PackageName [A C version of SAT solver MINISAT, originally developed in C++ by Niklas Een and Niklas Sorensson, Chalmers University of Technology, Sweden: http://www.cs.chalmers.se/~een/Satzoo.] Synopsis [Input/output of CNFs.] Author [Alan Mishchenko ] Affiliation [UC Berkeley] Date [Ver. 1.0. Started - January 1, 2004.] Revision [$Id: msatSolverIo.c,v 1.0 2004/01/01 1:00:00 alanmi Exp $] ***********************************************************************/ #include "msatInt.h" ABC_NAMESPACE_IMPL_START //////////////////////////////////////////////////////////////////////// /// DECLARATIONS /// //////////////////////////////////////////////////////////////////////// static char * Msat_TimeStamp(); //////////////////////////////////////////////////////////////////////// /// FUNCTION DEFINITIONS /// //////////////////////////////////////////////////////////////////////// /**Function************************************************************* Synopsis [] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ void Msat_SolverPrintAssignment( Msat_Solver_t * p ) { int i; printf( "Current assignments are: \n" ); for ( i = 0; i < p->nVars; i++ ) printf( "%d", i % 10 ); printf( "\n" ); for ( i = 0; i < p->nVars; i++ ) if ( p->pAssigns[i] == MSAT_VAR_UNASSIGNED ) printf( "." ); else { assert( i == MSAT_LIT2VAR(p->pAssigns[i]) ); if ( MSAT_LITSIGN(p->pAssigns[i]) ) printf( "0" ); else printf( "1" ); } printf( "\n" ); } /**Function************************************************************* Synopsis [] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ void Msat_SolverPrintClauses( Msat_Solver_t * p ) { Msat_Clause_t ** pClauses; int nClauses, i; printf( "Original clauses: \n" ); nClauses = Msat_ClauseVecReadSize( p->vClauses ); pClauses = Msat_ClauseVecReadArray( p->vClauses ); for ( i = 0; i < nClauses; i++ ) { printf( "%3d: ", i ); Msat_ClausePrint( pClauses[i] ); } printf( "Learned clauses: \n" ); nClauses = Msat_ClauseVecReadSize( p->vLearned ); pClauses = Msat_ClauseVecReadArray( p->vLearned ); for ( i = 0; i < nClauses; i++ ) { printf( "%3d: ", i ); Msat_ClausePrint( pClauses[i] ); } printf( "Variable activity: \n" ); for ( i = 0; i < p->nVars; i++ ) printf( "%3d : %.4f\n", i, p->pdActivity[i] ); } /**Function************************************************************* Synopsis [] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ void Msat_SolverWriteDimacs( Msat_Solver_t * p, char * pFileName ) { FILE * pFile; Msat_Clause_t ** pClauses; int nClauses, i; nClauses = Msat_ClauseVecReadSize(p->vClauses) + Msat_ClauseVecReadSize(p->vLearned); for ( i = 0; i < p->nVars; i++ ) nClauses += ( p->pLevel[i] == 0 ); pFile = fopen( pFileName, "wb" ); fprintf( pFile, "c Produced by Msat_SolverWriteDimacs() on %s\n", Msat_TimeStamp() ); fprintf( pFile, "p cnf %d %d\n", p->nVars, nClauses ); nClauses = Msat_ClauseVecReadSize( p->vClauses ); pClauses = Msat_ClauseVecReadArray( p->vClauses ); for ( i = 0; i < nClauses; i++ ) Msat_ClauseWriteDimacs( pFile, pClauses[i], 1 ); nClauses = Msat_ClauseVecReadSize( p->vLearned ); pClauses = Msat_ClauseVecReadArray( p->vLearned ); for ( i = 0; i < nClauses; i++ ) Msat_ClauseWriteDimacs( pFile, pClauses[i], 1 ); // write zero-level assertions for ( i = 0; i < p->nVars; i++ ) if ( p->pLevel[i] == 0 ) fprintf( pFile, "%s%d 0\n", ((p->pAssigns[i]&1)? "-": ""), i + 1 ); fprintf( pFile, "\n" ); fclose( pFile ); } /**Function************************************************************* Synopsis [Returns the time stamp.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ char * Msat_TimeStamp() { static char Buffer[100]; time_t ltime; char * TimeStamp; // get the current time time( <ime ); TimeStamp = asctime( localtime( <ime ) ); TimeStamp[ strlen(TimeStamp) - 1 ] = 0; strcpy( Buffer, TimeStamp ); return Buffer; } //////////////////////////////////////////////////////////////////////// /// END OF FILE /// //////////////////////////////////////////////////////////////////////// ABC_NAMESPACE_IMPL_END