//#if __GNUG__ >= 2 //# pragma implementation //#endif #include "SA_Initializer.h" #include "SA_SeqSolver.h" #ifdef MPI #include "SA_ClusteringSolver.h" #include "SA_MIRSolver.h" #include "mpi.h" #endif #include "util_salib.h" #include //#include #include //#include "parrandom.h" // Zufallszahlgenerator #define USE_SIGNAL 1 SA_Solver * running_solver = NULL; //Pointer auf die bei Signal zu loeschende Instanz int nsignals = 0; // number of caught signals void (*old_sighandler)(int); // alte Funktion fuer Signal void SigintAction(int); // bei SIGINT void SigIntAction(int signumber) { // SigIntAction wieder als Reaktion auf SIGINT setzen void (*current_sighandler)(int); current_sighandler = signal(SIGINT,SigIntAction); std::cout<< "Signal No: "<< signumber << " caught!\n"; std::cout<< "allready caught "<HillClimber(); running_solver->WriteSolution(); delete running_solver; std::cout << "Solver deleted!" << std::endl; std::cout << std::flush; if (old_sighandler != NULL) { old_sighandler(signumber); } break; case 2 : std::cout << "Going down!" << std::endl; running_solver->WriteSolution(); delete running_solver; std::cout << "Solver deleted!" << std::endl; std::cout << std::flush; if (old_sighandler != NULL) { old_sighandler(signumber); } break; case 3 : std::cout << "Aborting, no solution written!!!" << std::endl << std::flush; break; } exit(0); }; //---- SA_Initializer --------------------------------------------------------- SA_Initializer::SA_Initializer() {//debug(SA_Initializer::SA_Initializer , myrank); ConfigFileName = new char[80]; strcpy(ConfigFileName,"SA.cfg"); //Default-wert std::cerr << "parSA source code information:" << std::endl; std::cerr << "Version: " << SRC_VERS_N << std::endl; std::cerr << "Revision: " << SRC_REV_N << std::endl << std::endl; #ifdef LAST_TASK std::cerr << "task: " << LAST_TASK << std::endl; #endif std::cerr << "last update: " << SRC_REV_DATE << std::endl; } SA_Initializer::~SA_Initializer() {//debug(SA_Initializer::~SA_Initializer , myrank); delete [] ConfigFileName; } // \****************************************************** // Methode ReadConfigFile - Liest die Konfigurations- // datei, liefert den gewaehlten Solver zurueck // \****************************************************** SA_Solver * SA_Initializer::ReadConfigFile(int argc, char **argv, SA_Problem & probl) { //debug(SA_Initializer::ReadConfigFile , myrank); std::cout << "argc " << argc << std::endl; for(int j=0; j> text; if ( strcmp(text,"{") != 0) { std::cout << "Config file does not begin with {!\n"; return NULL; } while ( config >> text && ( strcmp(text,"}") != 0 )) { if (strcmp(text, "SA_Solver") == 0) { config >> text; if ( strcmp(text, "SA_SeqSolver") == 0) { // To eliminate the MPI switches form the parameters we have to call MPI_Init #ifdef MPI MPI_Init(&argc, &argv); #endif solv = new SA_SeqSolver(probl); } #ifdef MPI else if ( strcmp(text, "SA_ClusteringSolver") == 0) { solv = new SA_ClusteringSolver(&argc,&argv,probl); } else if ( strcmp(text, "SA_MIRSolver") == 0) { solv = new SA_MIRSolver(&argc,&argv,probl); } #endif else { std::cout <<"Unkonwn Solver "<ReadConfig(config) ) { std::cout <<"ReadConfing for Solver failed!\n"; delete solv; return NULL; } } else { std::cout <<"In SA_Initializer::ReadConfigFile: unrecognized keyword \""<