Exemple #1
0
static void interpolate (void)
/* ------------------------------------------------------------------------- *
 * Interpolate from the GLL mesh to an evenly-spaced mesh.
 * ------------------------------------------------------------------------- */
{
  register int k, m, nplane_new;
  const int    nplane_old = nr * ns * nel;
  const double *imr, *itmr, *ims, *itms;
  double       *mesh_x, *mesh_y;
  double       **newplane = (double**) malloc (nz * sizeof (double*));

  switch (np) {
  case 0:              /* interpolation turned off */
    return;
    break;
    
  case 1:              /* no size specified ... use (NR|NS) */
    np = MAX (nr, ns);
    break;

  default:             /* size specified on the command line */
    break;
  }
  
  nplane_new = np * np * nel;

  /* -- Compute interpolation matrices. */

  proj (&imr, &itmr, nr, GLJ, 0.0, 0.0, np, TRZ, 0.0, 0.0);
  proj (&ims, &itms, ns, GLJ, 0.0, 0.0, np, TRZ, 0.0, 0.0);

  /* -- Interpolate the mesh. */

  mesh_x = do_interp (imr, itmr, ims, itms, x);
  mesh_y = do_interp (imr, itmr, ims, itms, y);

  free (x); x = mesh_x;
  free (y); y = mesh_y;

  /* -- Interpolate data plane-by-plane. */

  for (k = 0; k < nfields; k++) {

    for (m = 0; m < nz; m++)
      newplane[m] = do_interp (imr, itmr, ims, itms, data[k] + m * nplane_old);

    free (data[k]);
    data[k] = (double*) malloc (nplane_new * nzp * sizeof (double));

    for (m = 0; m < nz; m++) {
      dcopy (nplane_new, newplane[m], 1, data[k] + m * nplane_new, 1);
      free  (newplane[m]);
    }
  }

  nr = ns = np;
}
Exemple #2
0
int distort_rpt(int *current_buf,int initial_phase,int *obufpos,int *current_pos_in_buf,int *cnt,
	int cyclecnt,int *lastcycle_len,int *lastcycle_start,int *previous_cycle_crossed_bufs,dataptr dz)
{
	int exit_status;
	register int i = *current_pos_in_buf;
	register int n;
	int cycleno_in_group_at_bufcros = -1;
	float *inbuf  = dz->sampbuf[*current_buf];
	int incycles_end, incycles_start = i, jump_cyclecnt;
	for(n=0;n<cyclecnt;n++) {
		switch(initial_phase) {
		case(1):
			while(inbuf[i]>=0.0) {
				if(++i >= dz->ssampsread) {
					if((exit_status = change_buff(&inbuf,&cycleno_in_group_at_bufcros,current_buf,dz))!=CONTINUE)
						return(exit_status);
					cycleno_in_group_at_bufcros = n;
					i = 0;
				}
			}
			while(inbuf[i]<=0.0) {
				if(++i >= dz->ssampsread) {
					if((exit_status = change_buff(&inbuf,&cycleno_in_group_at_bufcros,current_buf,dz))!=CONTINUE)
						return(exit_status);
					cycleno_in_group_at_bufcros = n;
					i = 0;
				}
			}
			break;
		case(-1):
			while(inbuf[i]<=0.0) {
				if(++i >= dz->ssampsread) {
					if((exit_status = change_buff(&inbuf,&cycleno_in_group_at_bufcros,current_buf,dz))!=CONTINUE)
						return(exit_status);
					cycleno_in_group_at_bufcros = n;
					i = 0;
				}
			}
			while(inbuf[i]>=0.0) {
				if(++i >= dz->ssampsread) {
					if((exit_status = change_buff(&inbuf,&cycleno_in_group_at_bufcros,current_buf,dz))!=CONTINUE)
						return(exit_status);
					cycleno_in_group_at_bufcros = n;
					i = 0;
				}
			}
			break;
		}
	}
	incycles_end = i;
	switch(dz->process) {
	case(DISTORT_INTP):
		if(cycleno_in_group_at_bufcros >= 0)
			exit_status = do_interp_bufcros(*current_buf,incycles_start,incycles_end,lastcycle_len,
										*lastcycle_start,previous_cycle_crossed_bufs,obufpos,dz);
		else
			exit_status = do_interp(*current_buf,incycles_start,incycles_end,lastcycle_len,
										*lastcycle_start,previous_cycle_crossed_bufs,obufpos,dz);
		*lastcycle_start = *current_pos_in_buf;
		break;
	case(DISTORT_RPT):
	case(DISTORT_RPT2):
		if(cycleno_in_group_at_bufcros >= 0)
			exit_status = do_repeat_bufcros(*current_buf,incycles_start,incycles_end,obufpos,dz);
		else
			exit_status = do_repeat(*current_buf,incycles_start,incycles_end,obufpos,dz);
		break;
	default:
		sprintf(errstr,"Unknown case in distort_rpt()\n");
		return(PROGRAM_ERROR);
	}
	if(dz->process == DISTORT_RPT2) {
		jump_cyclecnt = (dz->iparam[DISTRPT_MULTIPLY] - 1) * cyclecnt;
		for(n=0;n<jump_cyclecnt;n++) {
			switch(initial_phase) {
			case(1):
				while(inbuf[i]>=0) {
					if(++i >= dz->ssampsread) {
						if((exit_status = change_buff(&inbuf,&cycleno_in_group_at_bufcros,current_buf,dz))!=CONTINUE)
							return(exit_status);
						cycleno_in_group_at_bufcros = n;
						i = 0;
					}
				}
				while(inbuf[i]<=0) {
					if(++i >= dz->ssampsread) {
						if((exit_status = change_buff(&inbuf,&cycleno_in_group_at_bufcros,current_buf,dz))!=CONTINUE)
							return(exit_status);
						cycleno_in_group_at_bufcros = n;
						i = 0;
					}
				}
				break;
			case(-1):
				while(inbuf[i]<=0) {
					if(++i >= dz->ssampsread) {
						if((exit_status = change_buff(&inbuf,&cycleno_in_group_at_bufcros,current_buf,dz))!=CONTINUE)
							return(exit_status);
						cycleno_in_group_at_bufcros = n;
						i = 0;
					}
				}
				while(inbuf[i]>=0) {
					if(++i >= dz->ssampsread) {
						if((exit_status = change_buff(&inbuf,&cycleno_in_group_at_bufcros,current_buf,dz))!=CONTINUE)
							return(exit_status);
						cycleno_in_group_at_bufcros = n;
						i = 0;
					}
				}
				break;
			}
		}
	}
	if(exit_status<0)
		return(exit_status);
	*current_pos_in_buf = i;
	(*cnt)++;
	return(CONTINUE);
}