int main ( int argc, char *argv[] ) { /*********************************************************************** * Local variables ***********************************************************************/ int ierr = 0; // Flag errors char *error = NULL; // Error message string double t1, t2, t3, t4, t5; // Variables to track runtime /* File in/out handling variables */ char *inputFile = NULL, *outputFile = NULL; FILE *fp_in = NULL, *fp_out = NULL; input_data input_vars; // Struct to store input variables input_data_init ( &input_vars ); // Set variables to initial values para_data para_vars; // Struct to store parallel variables para_data_init ( ¶_vars ); // Set variables to initial values time_data time_vars; // Struct to store time variables time_data_init ( &time_vars ); // Set variables to initial values geom_data geom_vars; // Struct to store geometry variables geom_data_init ( &geom_vars ); // Set variables to initial values sn_data sn_vars; // Struct to store sn variables sn_data_init ( &sn_vars ); // Set variables to initial values data_data data_vars; // Struct to store data variables data_data_init ( &data_vars ); // Set variables to initial values control_data control_vars; // Struct to store control variables control_data_init ( &control_vars ); // Set variables to initial values mms_data mms_vars; // Struct to store mms variables mms_data_init ( &mms_vars ); // Set variables to initial values solvar_data solvar_vars; // Struct to store solvar variables solvar_data_init ( &solvar_vars ); // Set variables to initial values sweep_data sweep_vars; // Struct to store sweep variables sweep_data_init ( &sweep_vars ); // Set variables to initial values dim_sweep_data dim_sweep_vars; /*********************************************************************** * Perform calls that set up the parallel environment in MPI and * OpenMP. Also starts the timer. Update parallel setup time. ***********************************************************************/ /* Initialize the parallel environment */ pinit ( argc, argv, ¶_vars, &t1, &ierr ); t2 = wtime(); // Get the MPI walltime /* Calc parallel setup time */ time_vars.tparset = time_vars.tparset + t2 - t1; /*********************************************************************** * Read the command line arguments to get i/o file names. * Open the two files. ***********************************************************************/ ierr = cmdarg ( argc, argv, &inputFile, &outputFile, &error, para_vars.iproc, para_vars.root ); bcast_i_scalar ( &ierr, para_vars.comm_snap, para_vars.root, para_vars.nproc ); /* Ensure arguments are valid */ if ( ierr != 0 ) { print_error ( NULL, error, para_vars.iproc, para_vars.root ); FREE ( inputFile ); FREE ( outputFile ); FREE ( error ); stop_run ( 0, 0, 0, ¶_vars, &sn_vars, &data_vars, &mms_vars, &geom_vars, &solvar_vars, &control_vars ); } /* Open the input file to read in initial values */ ierr = open_file ( &fp_in, inputFile, "r", &error, para_vars.iproc, para_vars.root ); bcast_i_scalar ( &ierr, para_vars.comm_snap, para_vars.root, para_vars.nproc); /* Ensure input file is found */ if ( ierr != 0 ) { print_error ( NULL, error, para_vars.iproc, para_vars.root ); FREE ( inputFile ); FREE ( outputFile ); FREE ( error ); stop_run ( 0, 0, 0, ¶_vars, &sn_vars, &data_vars, &mms_vars, &geom_vars, &solvar_vars, &control_vars ); } /* Open the output file to write results and error messages */ ierr = open_file ( &fp_out, outputFile, "w", &error, para_vars.iproc, para_vars.root ); bcast_i_scalar ( &ierr, para_vars.comm_snap, para_vars.root, para_vars.nproc ); /* Ensure output file can be created */ if ( ierr != 0 ) { print_error ( NULL, error, para_vars.iproc, para_vars.root ); FREE ( inputFile ); FREE ( outputFile ); FREE ( error ); stop_run ( 0, 0, 0, ¶_vars, &sn_vars, &data_vars, &mms_vars, &geom_vars, &solvar_vars, &control_vars ); } /*********************************************************************** * Write code version and execution time to output. ***********************************************************************/ if ( para_vars.iproc == para_vars.root ) version_print ( fp_out ); /*********************************************************************** * Read input ***********************************************************************/ ierr = read_input ( fp_in, fp_out, &input_vars, ¶_vars, &time_vars ); ierr = close_file ( fp_in, inputFile, &error, para_vars.iproc, para_vars.root ); FREE ( inputFile ); bcast_i_scalar ( &ierr, para_vars.comm_snap, para_vars.root, para_vars.nproc ); if ( ierr != 0 ) { print_error ( fp_out, error, para_vars.iproc, para_vars.root ); FREE ( outputFile ); FREE ( error ); stop_run ( 0, 0, 0, ¶_vars, &sn_vars, &data_vars, &mms_vars, &geom_vars, &solvar_vars, &control_vars ); } /*********************************************************************** * Get nthreads for each proc. Print the warning about resetting * nthreads if necessary. Don't stop run. Set up the SDD MPI topology. ***********************************************************************/ t3 = wtime(); pinit_omp ( para_vars.comm_snap, &input_vars.nthreads, input_vars.nnested, ¶_vars.do_nested, &ierr, &error ); if ( ierr != 0 ) print_error ( NULL, error, para_vars.iproc, para_vars.root ); pcomm_set ( input_vars.npey, input_vars.npez, ¶_vars, &ierr ); t4 = wtime(); time_vars.tparset = time_vars.tparset + t4 - t3; /*********************************************************************** * Setup problem ***********************************************************************/ setup ( &input_vars, ¶_vars, &time_vars, &geom_vars, &sn_vars, &data_vars, &solvar_vars, &control_vars, &mms_vars, fp_out, &ierr, &error ); /*********************************************************************** * Call for the problem solution ***********************************************************************/ translv ( &input_vars, ¶_vars, &time_vars, &geom_vars, &sn_vars, &data_vars, &control_vars, &solvar_vars, &mms_vars, &sweep_vars, &dim_sweep_vars, fp_out, &ierr, &error ); /*********************************************************************** * Output the results. Print the timing summary ***********************************************************************/ output ( &input_vars, ¶_vars, &time_vars, &geom_vars, &data_vars, &sn_vars, &control_vars, &mms_vars, &solvar_vars, &sweep_vars, fp_out, &ierr, &error ); if ( para_vars.iproc == para_vars.root ) time_summ ( fp_out, &time_vars ); /*********************************************************************** * Final cleanup: deallocate, close output file, end the program ***********************************************************************/ dealloc_input ( 3, &sn_vars, &data_vars, &mms_vars ); dealloc_solve ( 3, &geom_vars, &solvar_vars, &control_vars ); t5 = wtime(); time_vars.tsnap = t5 - t1; if ( para_vars.iproc == para_vars.root ) { fprintf ( fp_out, " Total Execution time" " %.4E\n\n", time_vars.tsnap ); fprintf ( fp_out, " Grind Time (nanoseconds)" " %.4E\n\n", time_vars.tgrind ); fprintf ( fp_out, "****************************************" "****************************************\n" ); } ierr = close_file ( fp_out, outputFile, &error, para_vars.iproc, para_vars.root ); FREE ( outputFile ); bcast_i_scalar ( &ierr, para_vars.comm_snap, para_vars.root, para_vars.nproc ); if ( ierr != 0 ) { print_error ( 0, error, para_vars.iproc, para_vars.root ); FREE ( error ); stop_run ( 0, 0, 0, ¶_vars, &sn_vars, &data_vars, &mms_vars, &geom_vars, &solvar_vars, &control_vars ); } if ( control_vars.otrdone ) { FREE ( error ); stop_run ( 0, 0, 1, ¶_vars, &sn_vars, &data_vars, &mms_vars, &geom_vars, &solvar_vars, &control_vars ); } else { FREE ( error ); stop_run ( 0, 0, 2, ¶_vars, &sn_vars, &data_vars, &mms_vars, &geom_vars, &solvar_vars, &control_vars ); } return 0; }
/** txt main **/ void txt_main(int argc, char *argv[]) { char c; struct input_data *id = input_data_init(); struct output_data *od = output_data_init(); char ignoreLinesStartingWith = '#'; char secondInputFileName[1024] = ""; char str[1000000] = ""; char key[1024] = ""; double value = DBL_MIN; int alsoPrintOtherColumns = 0; int deleteColumns = 0; int n = 0; while ((c = getopt(argc, argv, "s:m:n:i:j:q:k:vAHD")) != -1) { switch (c) { case 'A': alsoPrintOtherColumns = 1; break; case 'D': deleteColumns = 1; break; case 'm': id->mode = atoi(optarg); break; case 'n': n = atoi(optarg); break; case 'q': strcpy(id->inputFilePrefix, optarg); break; case 'i': strcpy(id->inputFileName, optarg); break; case 'j': strcpy(secondInputFileName, optarg); break; case 's': strcpy(str, optarg); value = atof(str); break; case 'k': strcpy(key, optarg); ignoreLinesStartingWith = key[0]; break; case 'H': od->outputOrientation = OUTPUT_ORIENTATION_HORIZONTAL; break; case 'v': id->verbose = 1; break; default: //abort(); txt_main_Usage(argc, argv, id); printf("\tInvalid option. Please see usage above.\n\n"); exit(0); } } if (id->mode == 0) { txt_main_Usage(argc,argv,id); exit(1); } if (strlen(id->inputFileName)==0) { txt_main_Usage(argc,argv,id); printf ("\tMissing input file (-i). Please see usage above!\n\n"); exit(1); } if ((id->mode == MODE_TXT_COUNT_ENTRY)) { int n,m; n = txt_MODE_TXT_COUNT_ENTRY(id, id->inputFileName, ignoreLinesStartingWith); if (strlen(secondInputFileName) > 0) { m = txt_MODE_TXT_COUNT_ENTRY(id, secondInputFileName, ignoreLinesStartingWith); printf ("\ndiff\tinput_file_name_1\tnumber_of_lines_1\tinput_file_name_2\tnumber_of_lines_2"); printf ("\n%d\t%s\t%d\t%s\t%d", m-n,id->inputFileName, n, secondInputFileName, m); printf ("\n"); } else { printf ("\ninput_file_name\tnumber_of_lines"); if (strstr(id->inputFileName,"/dev/stdin")) { printf ("\n%s\t%d", id->inputFilePrefix, n); } else { printf ("\n%s\t%d", id->inputFileName, n); } printf ("\n"); } } else if (id->mode == MODE_TXT_EXTRACT_COLUMN_FROM_FILE) { if (strlen(key) == 0) { txt_main_Usage(argc,argv,id); printf ("\tMissing columns to be extracted (-k). Please see usage above!\n\n"); exit(1); } if (deleteColumns == 0) txt_MODE_TXT_EXTRACT_COLUMN_FROM_FILE(id, id->inputFileName, key,value, alsoPrintOtherColumns); else txt_MODE_TXT_DELETE_COLUMN_FROM_FILE(id, id->inputFileName, key); } else if (id->mode == MODE_TXT_EXTRACT_ROW_FROM_FILE) { txt_MODE_TXT_DELETE_ROW_FROM_FILE(id, id->inputFileName, secondInputFileName, n, deleteColumns); } }
/** tabix main **/ void tabix_main(int argc, char *argv[]) { char c; struct input_data *id = input_data_init(); struct output_data *od = output_data_init(); struct my_tabix *tabix = tabix_init(); tabix->considerMisMatchedALT = 0; int chrColumn = -1, posColumn = -1; // assume input file will be in VCF format vcf_setInputFileToVCFformat(id); while ((c = getopt(argc, argv, "F:m:i:d:q:n:s:b:vNR")) != -1) { switch (c) { case 'F': tabix->inputFileFormat = atoi(optarg); break; case 'R': tabix->considerMisMatchedALT = 1; break; case 'm': id->mode = atoi(optarg); break; case 'd': strcpy(tabix->inputFileName, optarg); break; case 'q': strcpy(tabix->inputFilePrefix, optarg); break; case 'N': tabix->includeDataFromDatabase = 1; break; case 'i': strcpy(id->inputFileName, optarg); break; case 'n': id->columnOffSet = atoi(optarg); break; case 's': chrColumn = atoi(optarg); break; case 'b': posColumn = atoi(optarg); break; case 'v': id->verbose = 1; break; default: //abort(); tabix_main_Usage(argc, argv, id); printf("\tInvalid option. Please see usage above\n\n"); exit(0); } } if (id->mode == 0) { tabix_main_Usage(argc,argv,id); exit(1); } if (strlen(id->inputFileName)==0) { tabix_main_Usage(argc,argv,id); printf ("\tMissing input file (-i). Please see usage above!\n\n"); exit(1); } else if ((strlen(tabix->inputFileName)==0) || (strlen(tabix->inputFilePrefix)==0)) { tabix_main_Usage(argc,argv,id); printf ("\tMissing database file (-d) or database file prefix (-q). Please see usage above!\n\n"); exit(1); } if (id->mode == MODE_TABIX_ANNOTATE_VCF_WITH_BED) { tabix_MODE_TABIX_ANNOTATE_VCF_WITH_BED(id,od,tabix); } else if (id->mode == MODE_TABIX_ANNOTATE_VCF_WITH_PILEUP) { tabix_MODE_TABIX_ANNOTATE_VCF_WITH_PILEUP(id,od,tabix); } else if (id->mode == MODE_TABIX_ANNOTATE_VCF_WITH_VCF) { tabix_MODE_TABIX_ANNOTATE_VCF_WITH_VCF(id,od,tabix); } else if (id->mode == MODE_TABIX_ANNOTATE_TXT_WITH_BED) { id->chrColumnNumber = 1; id->startColumnNumber = 2; id->endColumnNumber = 3; tabix_MODE_TABIX_ANNOTATE_TXT_WITH_BED(id,od,tabix,chrColumn,posColumn); } }