예제 #1
0
void runTest(const char* path)
{
	/*
	std::string line;
	g_shell->out() << "echo Hello world\n" << std::flush;
	std::getline(g_shell->in(), line);

	termcolor::set(termcolor::RED);
	std::cout << line << std::endl;
	termcolor::reset();
	*/
	
	std::stringstream cmd;
	std::string binary;
	std::string out, err;
	std::string filename = "/tmp/";
	int rv;

	filename += uniqueName(path);

	binary = stripext(filename);
	
	termcolor::set(termcolor::WHITE, termcolor::BLACK, termcolor::DIM);

	std::cout << "Uploading " << path << "...\n";
	// upload the source code
	g_sftp->upload(path, filename);

	try
	{
		std::cout << "Compiling...\n";
		// compile the code remotely
		cmd << compiler(path) << ' ' << cflags(path) << filename << " -o " << binary;
		rv = g_ssh->runCommand(cmd.str(), out, err);

		if (rv)
			throw compile_error(err);

		std::cout << "Running remotely...\n";
		// run the program remotely
		rv = g_ssh->runCommand(binary, out, err);
		
		if (rv)
			throw nonzero_exit_error(true, out);

		std::cout << "Downloading...\n";
		// download the Mach-O executable
		g_sftp->download(binary, binary);

		std::cout << "Running locally...\n";
		// run the executable via dyld
		std::stringstream locOut;
		pstream* loc = pstream::popen(std::string(DYLD_COMMAND) + " " + binary);

		locOut << loc;
		
		rv = loc->wait();
		
		if (rv)
			throw nonzero_exit_error(false, locOut.str());

		if (locOut.str() != out)
			throw different_output_error(out, locOut.str());
	}
	catch (...)
	{
		// clean up locally
		unlink(binary.c_str());

		try
		{
			// clean up remotely
			g_sftp->unlink(binary);
			g_sftp->unlink(filename);
		}
		catch (...) {}

		throw;
	}
}
예제 #2
0
int main( int argc, char **argv )
{
    int i;

    if ( argc < 2 )
    {
        usage();
        exit( -1 );

    }

    for ( i = 1; i < argc; i ++ )
    {
        if ( strcmp( argv[ i ], "--prefix" ) == 0 )
        {
            printf( "%s\n", PREFIX );
        }
        else if ( strcmp( argv[ i ], "--exec-prefix" ) == 0 )
        {
            printf( "%s\n", EXEC_PREFIX );
        }
        else if ( strcmp( argv[ i ], "--bin-prefix" ) == 0 )
        {
            printf( "%s\n", BIN_PREFIX );
        }
        else if ( strcmp( argv[ i ], "--include-prefix" ) == 0 )
        {
            printf( "%s\n", INCLUDE_PREFIX );
        }
        else if ( strcmp( argv[ i ], "--lib-prefix" ) == 0 )
        {
            printf( "%s\n", LIB_PREFIX );
        }
        else if ( strcmp( argv[ i ], "--version" ) == 0 )
        {
            printf( "%s\n", VERSION );
        }
        else if ( strcmp( argv[ i ], "--libs" ) == 0 )
        {
            printf( "-L%s -lodbc\n", LIB_PREFIX );
        }
        else if ( strcmp( argv[ i ], "--static-libs" ) == 0 )
        {
            printf( "%s/libodbc.a\n", LIB_PREFIX );
        }
        else if ( strcmp( argv[ i ], "--libtool-libs" ) == 0 )
        {
            printf( "%s/libodbc.la\n", LIB_PREFIX );
        }
        else if ( strcmp( argv[ i ], "--cflags" ) == 0 )
        {
            cflags();
        }
        else if ( strcmp( argv[ i ], "--header" ) == 0 )
        {
            cInc();
        }
        else if ( strcmp( argv[ i ], "--odbcversion" ) == 0 )
        {
            printf( "3\n" );
        }
        else if ( strcmp( argv[ i ], "--longodbcversion" ) == 0 )
        {
            printf( "3.52\n" );
        }
        else if ( strcmp( argv[ i ], "--odbcini" ) == 0 )
        {
            printf( "%s/odbc.ini\n", SYSTEM_FILE_PATH );
        }
        else if ( strcmp( argv[ i ], "--odbcinstini" ) == 0 )
        {
            printf( "%s/odbcinst.ini\n", SYSTEM_FILE_PATH );
        }
        else if ( strcmp( argv[ i ], "--ulen" ) == 0 )
        {
            ulen();
        }
        else
        {
            usage();
            exit( -1 );
        }
    }

	exit(0);
}
예제 #3
0
/// Generates the background mesh and computes displacements of its nodes using linear elasticity
void DGhybrid::generate_backmesh_and_compute_displacements()
{
	// make a list of interior points of the quadratic mesh
	
	int ip, ipoin, ib, ilp, idim, ninpoin_q = 0, k = 0, j;

	for(ipoin = 0; ipoin < mq->gnpoin(); ipoin++)
		ninpoin_q += bounflag_q[ipoin];

	ninpoin_q = mq->gnpoin() - ninpoin_q;

	inpoints_q.setup(ninpoin_q, mq->gndim());

	k = 0;
	for(ipoin = 0; ipoin < mq->gnpoin(); ipoin++)
		if(!bounflag_q[ipoin])
		{
			for(idim = 0; idim < mq->gndim(); idim++)
				inpoints_q(k,idim) = mq->gcoords(ipoin,idim);
			k++;
		}
	std::cout << "DGhybrid: generate_backmesh_and_compute_displacements(): No. of interior points to move = " << inpoints_q.rows() << std::endl;

	// setup DGM and get backmesh
	
	dgm.setup(mq->gndim(), &inpoints_q, &backpoints, &motion_b);
	dgm.generateDG();
	bm = dgm.getDelaunayGraph();
	std::cout << "DGhybrid: Back mesh has " << bm.gnpoin() << " points, " << bm.gnelem() << " elements." << std::endl;
	bm.writeGmsh2("testdg.msh");

	// prepare input for linear elasticity problem
	
	motion_b.setup(nbackp,m->gndim());
	motion_b.zeros();

	// cflags contains 1 if the corresponding backmesh point has a Dirichlet BC
	std::vector<int> cflags(nbackp,0);
	
	// get displacements of the boundary points of the quadratic mesh
	k = 0;
	for(ip = 0; ip < mq->gnpoin(); ip++)
	{
		if(bounflag_q[ip] == 1)
		{
			for(idim = 0; idim < mq->gndim(); idim++)
			{
				motion_b(k, idim) = b_motion_q->get(ip,idim);
				cflags[k] = 1;
			}
			k++;
		}
	}

	// setup and solve the elasticity equations to get displacement of the background mesh
	std::cout << "Starting linelast" << std::endl;	
	linm.setup(&bm, lambda, mu);
	linm.assembleStiffnessMatrix();
	linm.assembleLoadVector();
	linm.dirichletBC_points(cflags, motion_b);

	amat::SpMatrix A = linm.stiffnessMatrix();
	amat::Matrix<double> b = linm.loadVector();
	amat::Matrix<double> xb(2*nbackp,1);
	amat::Matrix<double> x(2*nbackp,1);
	xb.zeros();

	// TODO: add a switch to change solver
	x = sparseCG_d(&A, b, xb, tol, maxiter);

	for(int i = 0; i < nbackp; i++)
		for(idim = 0; idim < mq->gndim(); idim++)
			motion_b(i, idim) = x.get(i+idim*nbackp);
}