Пример #1
0
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 ( &para_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, &para_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, &para_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, &para_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, &para_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, &para_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, &para_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,
                &para_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, &para_vars, &ierr );

    t4 = wtime();

    time_vars.tparset = time_vars.tparset + t4 - t3;

/***********************************************************************
 * Setup problem
 ***********************************************************************/
    setup ( &input_vars, &para_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, &para_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, &para_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, &para_vars, &sn_vars, &data_vars, &mms_vars,
                   &geom_vars, &solvar_vars, &control_vars );
    }


    if ( control_vars.otrdone )
    {
        FREE ( error );

        stop_run ( 0, 0, 1, &para_vars, &sn_vars, &data_vars, &mms_vars,
                   &geom_vars, &solvar_vars, &control_vars );
    }
    else
    {
        FREE ( error );

        stop_run ( 0, 0, 2, &para_vars, &sn_vars, &data_vars, &mms_vars,
                   &geom_vars, &solvar_vars, &control_vars );
    }

    return 0;
}
Пример #2
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);
	}
}
Пример #3
0
/**
	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);
	}
}