Ejemplo n.º 1
0
void sf_out(sf_file out        /* output file */, 
	    int axis           /* join axis */,
	    const char *iname  /* name of the input file */)
/*< prepare output >*/
{
    char *oname, cmdline[SF_CMDLEN];
    int ndim;
    off_t n[SF_MAX_DIM];
    sf_file inp;
    FILE *ofile=NULL;

    ofile = sf_tempfile(&oname,"w+b");
    fclose(ofile);

    snprintf(cmdline,SF_CMDLEN,"%s %s --dryrun=y < %s > %s",
	     command,splitcommand,iname,oname);
    sf_system(cmdline);
    
    inp = sf_input(oname);
    ndim = sf_largefiledims (inp,n);
    
    if (axis > ndim) axis=ndim;

    snprintf(nkey,5,"n%d",axis);
    axis--;
    sizes(inp,axis,ndim,n,&size1,&size2);
    
    sf_setformat(out,sf_histstring(inp,"data_format"));
    sf_fileflush(out,inp);
    
    sf_setform(out,SF_NATIVE);
    sf_rm(oname,true,false,false);
}
Ejemplo n.º 2
0
void sf_join(sf_file out /* output file */, 
	     int job     /* job number */)
/*< join outputs >*/
{
    int i, chunk;
    off_t i2, left, nbuf;
    char *iname, *oname;
    sf_file in;

    iname = inames[job];
    oname = onames[job];

    in = sf_input(oname);
    sf_histint(in,nkey,&chunk);
    sf_setform(in,SF_NATIVE);
	    
    for (i2=0; i2 < size2; i2++) {
	nbuf=BUFSIZ;
	for (left=chunk*size1; left > 0; left -= nbuf) {
	    if (nbuf > left) nbuf=left;
		    
	    sf_charread(buffer,nbuf,in);
	    sf_charwrite(buffer,nbuf,out);
	}
    }

    sf_fileclose(in);

    sf_rm(iname,true,false,false);
    sf_rm(oname,true,false,false);

    for (i=0; i < inpargc; i++) {
	iname = inpnames[job][i];
	sf_rm(iname,true,false,false);
    }
}
Ejemplo n.º 3
0
Archivo: rm.c Proyecto: 1014511134/src
int main (int argc, char *argv[])
{
    int i;
    char *arg;
    bool force = false, verb = false, inquire = false;
   
    sf_init(argc,argv);

    for (i=1; i < argc; i++) {
	arg = argv[i];
	if ('-' == arg[0]) { /* it is an option */
	    if (NULL != strchr(arg,'f')) force = true;
	    if (NULL != strchr(arg,'v')) verb = true;
	    if (NULL != strchr(arg,'i')) inquire = true;
	} else { /* it is a file */
	    sf_rm(arg, force, verb, inquire);
	}
    }

    exit (0);
}
Ejemplo n.º 4
0
Archivo: omp.c Proyecto: 1014511134/src
int main(int argc, char* argv[])
{
    int axis, axis2, rank, nodes, node, ndim, jobs;
    off_t n[SF_MAX_DIM];
    char *iname=NULL, **cmdline;
    FILE *tmp;
    sf_file inp, out, inp2;

#pragma omp parallel
    {
	nodes = omp_get_num_threads();
	if (1 >= nodes) 
	    nodes = omp_get_num_procs(); 
    }

    /* master node */
    sf_init(argc,argv);

    inp = sf_input("in");
    out = sf_output("out");

    ndim = sf_largefiledims (inp,n);
    if (!sf_getint("split",&axis)) axis=ndim;
    /* axis to split */

    tmp = sf_tempfile(&iname,"w+b");
    fclose(tmp);

    inp2 = sf_output(iname);
    sf_cp(inp,inp2);
    sf_fileclose(inp2);

    inp2 = sf_input(iname);

    cmdline = sf_split(inp2,axis,nodes+1,&jobs,ndim,n,argc,argv);  
    sf_warning("Running %d threads",jobs);

#pragma omp parallel
    {
	omp_set_num_threads(jobs);
    }

#pragma omp parallel private(rank) shared(cmdline)
    {
	rank = omp_get_thread_num();
	if (rank < jobs) {
	    fprintf(stderr,"CPU %d: %s\n",rank,cmdline[rank]); 
	    sf_system(cmdline[rank]);
	}
    }
    
    if (!sf_getint("join",&axis2)) axis2=axis;
    /* axis to join (0 means add) */
    
    sf_out(out,axis2,iname);
    sf_rm(iname,true,false,false);

    if (axis2 > 0) {
	for (node=0; node < jobs; node++) {
	    sf_join(out,node);
	}
    } else {
	sf_add(out,jobs);
    }

    exit(0);
}
Ejemplo n.º 5
0
void sf_add(sf_file out, int jobs)
/*< add outputs >*/
{
    int *ibuf=NULL, job, i;
    float *fbuf=NULL;
    char buffout[BUFSIZ];
    sf_complex *cbuf=NULL;
    sf_datatype type;
    size_t nbuf=BUFSIZ;
    off_t nsiz;
    char *oname;
    sf_file *ins;

    type = sf_gettype(out);

    switch(type) {
	case SF_FLOAT:
	    fbuf = (float*) buffout;
	    nbuf /= sizeof(float);
	    for (i=0; i < nbuf; i++) {
		fbuf[i] = 0.0f;
	    }
	    break;
	default:
	    sf_error("wrong type");
	    break;
    }

    ins = (sf_file*) sf_alloc(jobs,sizeof(sf_file));

    for (job=0; job < jobs; job++) {
	oname = onames[job];
	ins[job] = sf_input(oname);
    }

    for (nsiz = size2; nsiz > 0; nsiz -= nbuf) {
	if (nbuf > nsiz) nbuf=nsiz;

	for (job=0; job < jobs; job++) {
	    switch(type) {
		case SF_FLOAT:
		    sf_floatread((float*) buffer,nbuf,ins[job]);
		    for (i=0; i < nbuf; i++) {
			if (job) {
			    fbuf[i] += ((float*) buffer)[i];
			} else {
			    fbuf[i] = ((float*) buffer)[i];
			}
		    }
		    break;
		default:
		    sf_error("wrong type");
		    break;  
	    }
	}

	switch(type) {
	    case SF_FLOAT:
		sf_floatwrite(fbuf,nbuf,out);
		break;
	    case SF_COMPLEX:
		sf_complexwrite(cbuf,nbuf,out);
		break;
	    case SF_INT:
		sf_intwrite(ibuf,nbuf,out);
		break;
	    default:
		sf_error("wrong type");
		break;
	}
    }

    for (job=0; job < jobs; job++) {
	sf_fileclose(ins[job]);
	sf_rm(inames[job],true,false,false);
	sf_rm(onames[job],true,false,false);
	for (i=0; i < inpargc; i++) {
	    oname = inpnames[job][i];
	    sf_rm(oname,true,false,false);
	}
    }

    free(ins);
}