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; }
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); }