示例#1
0
文件: h2b.c 项目: gwowen/seismicunix
int
main(int argc, char **argv)
{
	float fz[BUFSIZ];
	int iz=0,jz,nz=0;
	unsigned int z[BUFSIZ];
	char line[BUFSIZ],*lp, *outpar;
	FILE *infp=stdin,*outfp=stdout, *outparfp;

	unsigned int *uz = &(z[0]);

	/* Hook up getpar */
	initargs(argc, argv);
	requestdoc(1);

	/* Prevent floats from dumping on screen */
	switch(filestat(STDOUT)) {
	case BADFILETYPE:
		warn("stdout is illegal filetype");
		pagedoc();
	break;
	case TTY:
		warn("stdout can't be tty");
		pagedoc();
	break;
	default: /* rest are OK */
	break;
	}


	/* Get parameters and do set up */
	if (!getparstring("outpar", &outpar))  outpar = "/dev/tty" ;
	outparfp = efopen(outpar, "w");

	while (fgets(line,BUFSIZ,infp)!=NULL) {

		/* set pointer to beginning of line */
		lp = line;

		/* read hex digits from input line */
		for(iz=0;sscanf(lp,"%2x",&uz[iz])==1;iz++,nz++,lp+=2);

		/* convert to floats */
		for(jz=0;jz<iz;jz++)
			fz[jz] = 255-z[jz];

		/* write floats */
		fwrite(fz,sizeof(float),iz,outfp);
	}

	/* Make par file */
	fprintf(outparfp, "total number of values=%d\n",nz);

	return(CWP_Exit());
}
示例#2
0
void requestdoc(int flag)
{
        switch(flag) {
        case 1:
                if (xargc == 1 && isatty(STDIN)) pagedoc();
        break;
        case 0:
                if (xargc == 1 && isatty(STDIN) && isatty(STDOUT)) pagedoc();
        break;
        default:
                if (xargc <= flag) pagedoc();
        break;
        }
        return;
}
示例#3
0
int
main(int argc, char **argv)
{

    int i=0;		/* counter */
    int verbose=0;		/* verbose flag =1 chatty, =0 silent */
    int stepmax=0;		/* maximum number of steps */

    double t=0.0;		/* time */
    double h=.001;		/* time increment */
    double tol=0.0;		/* time increment */

    double y[3]= {0.0};	/* dependent variable of ODE system */

    rke_variables p;	/* variable used by RKE routines */

    FILE *out_file=stdout;	/* pointer to file that we write out to */

    cwp_String mode="x";	/* output mode of program */
    int imode=SXY;		/* integer flag for mode */


    /* Hook up getpar */
    initargs(argc, argv);
    requestdoc(0);

    switch(filestat(STDOUT)) { /* Prevent floats from dumping on screen */
    case BADFILETYPE:
        warn("stdout is illegal filetype");
        pagedoc();
        break;
    case TTY:
        warn("stdout can't be tty");
        pagedoc();
        break;
    default:			   /* rest are OK */
        break;

    }

    /* Get parameters */
    if (!getparint("stepmax", &stepmax))	stepmax = 500;
    if (!getparint("verbose", &verbose))	verbose = 0;

    if (!getpardouble("y0", &y[0]))		y[0]=10;
    if (!getpardouble("h", &h))		h = .01;
    if (!getpardouble("tol", &tol))		tol = RKE_ERR_BIAS_INIT;

    /* Get output mode, recall imode initialized to the default FABS */
    getparstring("mode", &mode);
    if      (STREQ(mode, "yz"))    imode = SYZ;
    else if (STREQ(mode, "xz"))    imode = SXZ;
    else if (STREQ(mode, "x"))    imode = SX;
    else if (STREQ(mode, "y"))    imode = SY;
    else if (STREQ(mode, "z"))    imode = SZ;
    else if (!STREQ(mode, "xy"))
        err("unknown operation=\"%s\", see self-doc", mode);

    /* initialize Runge-Kutta-England routines */
    p = (rke_variables)
        rke_init(1, verhulst_equation);

    /* set tolerance */
    p->error_bias=tol;

    for (i=0; i<stepmax; ++i) {
        register int j;
        register int number=3;
        float yout[3]= {0,0,0};
        double aimed_t;
        t=i*h;
        aimed_t=t+h;
        if (verbose) {
            warn("using %3d accepted and %3d rejected steps",
                 p->accepted_steps, p->rejected_steps);
            if (verbose) warn("error tolerance = %10.24f",p->error_bias);
        }

        /* convert doubles in y to floats in yout and write out */
        for(j=0; j<number; ++j) yout[j] = (float) y[j];

        /* write out according to the mode */
        {
            float tmpout[2]= {0,0};
            switch(imode) {

            case SXY: /* write out xy pairs */
                tmpout[0]=yout[0];
                tmpout[1]=yout[1];
                efwrite(tmpout,sizeof(float),2,out_file);
                break;
            case SYZ: /* write out yz pairs */
                tmpout[0]=yout[1];
                tmpout[1]=yout[2];
                efwrite(tmpout,sizeof(float),2,out_file);
                break;
            case SXZ: /* write out xz pairs */
                tmpout[0]=yout[0];
                tmpout[1]=yout[2];
                efwrite(tmpout,sizeof(float),2,out_file);
                break;
            case SXYZ: /* write out xyz triplet */
                efwrite(yout,sizeof(float),3,out_file);
                break;
            case SX: /* write out x only */
                tmpout[0] = yout[0];
                efwrite(tmpout,sizeof(float),1,out_file);
                break;
            case SY: /* write out y only */
                tmpout[0] = yout[1];
                efwrite(tmpout,sizeof(float),1,out_file);
                break;
            case SZ: /* write out z only */
                tmpout[0] = yout[2];
                efwrite(tmpout,sizeof(float),1,out_file);
                break;
            default:  /* defensive programming */
                err("mysterious operation=\"%s\"", mode);
            } /* end scope of imode */
        }


        /* run the Runge-Kutta-England solver */
        rke_solve (p, &t, y, aimed_t);
    }

    /* end the session with rke */
    rke_term(p);

    return EXIT_SUCCESS;
}