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; } }
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); }
/// 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); }