/*
    DFT++ is a density functional package developed by the research group
    of Professor Tomas Arias

    Copyright 1996-2003 Sohrab Ismail-Beigi

    This file is part of DFT++.

    DFT++ is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    DFT++ is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with DFT++; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

    Please see the file CREDITS for a list of authors.

    For academic users, we request that publications using results obtained with
    this software reference

    "New algebraic formulation of density functional calculation," by Sohrab Ismail-Beigi
    and T.A. Arias, Computer Physics Communications 128:1-2, 1-45 (June 2000).

    and, if using the wavelet basis, further reference

    "Multiresolution analysis of electronic structure: semicardinal and wavelet bases,"
    T.A. Arias, Reviews of Modern Physics 71:1, 267-311 (January 1999).

    and 

    "Robust ab initio calculation of condensed matter: transparent convergence through
    semicardinal multiresolution analysis,'' I.P. Daykov, T.A. Arias, and
    Torkel D. Engeness, Physical Review Letters, 90:21, 216402 (May 2003).

    For your convenience, preprints of the above articles may be obtained from
    http://arXiv.org/abs/cond-mat/9909130, 9805262, and 0204411, respectively.
*/

/* convsets.f -- translated by f2c (version 20010821).
   You must link the resulting object file with the libraries:
	-lf2c -lm   (in that order)
*/

//#include "f2c.h"
// instead of f2c use only what needed
#define FALSE_ (0)

/* Table of constant values */

static double c_b16 = 0.;
static int c__4 = 4;
static int c__3 = 3;
static int c__2 = 2;
static int c__1 = 1;
static int c__0 = 0;
static int c__6 = 6;
static int c__8 = 8;
static int c__10 = 10;
static int c__12 = 12;
static int c__14 = 14;
static int c__15 = 15;
static int c__13 = 13;
static int c__11 = 11;
static int c__9 = 9;

/*     $Id: convsets.cpp,v 1.1.2.5 2003/05/29 18:54:16 ivan Exp $ */
/*     $Log: convsets.cpp,v $
/*     Revision 1.1.2.5  2003/05/29 18:54:16  ivan
/*     Update the PRL reference
/*
/*     Revision 1.1.2.4  2003/05/23 01:49:00  sahak
/*     added the new header
/*
/*     Revision 1.1.2.3  2003/04/03 01:50:49  ivan
/*     minor cosmetic fixes to compile on balboa (Alpha) and fiber (SGI)
/*     with the native compilers
/*
/*     Revision 1.1.2.2  2003/04/02 23:35:14  ivan
/*     Removing C-dependencies from the code. Now it needs only C++ compiler
 */
/*     Revision 1.1.2.1  2003/03/13 18:56:54  muchomas */
/*     Move convsets.f to fortran-source text file convsetsf for use with f2c. */
/*     Put f2c result in convsets.c, so as to eliminate need for fortran compilers. */

/*     Revision 1.1.2.2  2002/10/28 22:07:29  matthew */
/*     Non-orthogonal Laplaciancvs add coeff_d.c!  Works for orthorhombic cells, still in need of debugging fo
r other unit cells. */

/*     Revision 1.1.1.1  2001/04/18 17:15:14  daykov */
/*     starting project */

/*     Revision 1.1  1999/09/14 19:40:30  torkel */
/*     Initial revision */

/*     Revision 1.12  1999/07/04 20:48:04  torkel */
/*     Full O implemented. */

/*     Revision 1.11  1999/07/02 07:04:05  torkel */
/*     the convolution in Osame seems to work for this version. */

/*     Revision 1.10  1999/07/02 03:11:48  torkel */
/*     In the middle of making Osame work */

/*     Revision 1.9  1999/06/23 22:20:05  torkel */
/*     revised version where Obelow is dagger of Oabove for grid without */
/*     >> siblings. */

/*     Revision 1.8  1999/06/21 18:56:14  torkel */
/*     updated version for multilevel operators */

/*     Revision 1.7  1999/06/15 23:24:45  torkel */
/*     debugging, trying to make Obelow work */

/*     Revision 1.6  1999/06/11 12:53:50  torkel */
/*     including convolutions for obelow */

/*     Revision 1.4  1999/04/25 22:32:56  muchomas */
/*     *** empty log message *** */

/*     Revision 1.3  1999/04/25 18:35:39  muchomas */
/*     Contains new routines for same-level operator convolutions */
/*     Working toward more arbitrary length convolution routines */

/*     Revision 1.2  1999/04/20 15:59:37  muchomas */
/*     Fully documented code */

/*     Revision 1.1  1999/04/19 18:12:11  muchomas */
/*     Initial revision */

/*     Revision 1.6  1999/04/17 22:00:09  muchomas */
/*     Working dagger operators, still slow... */

/*     Revision 1.5  1999/04/14 19:48:37  muchomas */
/*     Working transpose transform, but doesn't take input/output arrays -- yet! */

/*     Revision 1.4  1999/04/13 15:11:36  muchomas */
/*     Does ghosts, making compact version, but still in larger array */

/*     Revision 1.3  1999/04/13 14:32:53  muchomas */
/*     Idag that computes only only ghosts, leaving sparse data distribution */

/*     Revision 1.2  1999/04/11 19:53:46  muchomas */
/*     Working forward/inverse xform package */

/*     Revision 1.1  1999/04/10 23:04:29  muchomas */
/*     Initial revision */

/*     Revision 1.3  1999/04/10 22:40:41  muchomas */
/*     Now using log functionality */

/*     Back and forth, linear convolution of sets of points using padding */
/*        for filters of extent +/- 3 (IN PLACE) */

/*     out: input/output array for in place computation */
/*     outm3,outm2,outm1,outp1,outp2,outp3: pointers in output array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int convsets3_(double *out, double *outm3, 
	double *outm2, double *outm1, double *outp1, double *
	outp2, double *outp3, int *area, int *stride, int *n, 
	int *npad, double *tr, double *tf)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int i__, j;
    double t0, t1, t2, t3;
    int out2;

/*     First, make sure pad is zero */
    /* Parameter adjustments */
    --tf;
    --tr;
    --outp3;
    --outp2;
    --outp1;
    --outm1;
    --outm2;
    --outm3;
    --out;

    /* Function Body */
    i__1 = *npad - 1;
    for (i__ = *n; i__ <= i__1; ++i__) {
	out2 = i__ * *stride;
	i__2 = *area + out2;
	for (j = out2 + 1; j <= i__2; ++j) {
	    out[j] = (double)0.;
	}
    }
/*     Reverse phase */
    t0 = tr[1];
    t1 = tr[2];
    t2 = tr[3];
    t3 = tr[4];
    for (i__ = *npad - 1; i__ >= 3; --i__) {
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t0 * out[j] + t1 * outm1[j] + t2 * outm2[j] + t3 * outm3[
		    j];
	}
    }
    out2 = *stride << 1;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t1 * outm1[j] + t2 * outm2[j];
    }
    out2 = *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t1 * outm1[j];
    }
    out2 = 0;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j];
    }
/*     Forward phase (padding now ensures room!) */
    t0 = tf[1];
    t1 = tf[2];
    t2 = tf[3];
    t3 = tf[4];
    i__1 = *n - 1;
    for (i__ = 0; i__ <= i__1; ++i__) {
	out2 = i__ * *stride;
	i__2 = *area + out2;
	for (j = out2 + 1; j <= i__2; ++j) {
	    out[j] = t0 * out[j] + t1 * outp1[j] + t2 * outp2[j] + t3 * outp3[
		    j];
	}
    }
    return 0;
} /* convsets3_ */

/*     Back and forth, linear convolution of sets of points using padding */
/*        for filters of extent +/- 5 (IN PLACE) */

/*     out: input/output array for in place computation */
/*     outm5-outp5,out: pointers in in/output array to */
/*         start of data sets */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int convsets5_(double *out, double *outm5, 
	double *outm4, double *outm3, double *outm2, double *
	outm1, double *outp1, double *outp2, double *outp3, 
	double *outp4, double *outp5, int *area, int *stride, 
	int *n, int *npad, double *tr, double *tf)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int i__, j;
    double t0, t1, t2, t3, t4, t5;
    int out2;

/*     First, make sure pad is zero */
    /* Parameter adjustments */
    --tf;
    --tr;
    --outp5;
    --outp4;
    --outp3;
    --outp2;
    --outp1;
    --outm1;
    --outm2;
    --outm3;
    --outm4;
    --outm5;
    --out;

    /* Function Body */
    i__1 = *npad - 1;
    for (i__ = *n; i__ <= i__1; ++i__) {
	out2 = i__ * *stride;
	i__2 = *area + out2;
	for (j = out2 + 1; j <= i__2; ++j) {
	    out[j] = (double)0.;
	}
    }
/*     Reverse phase */
    t0 = tr[1];
    t1 = tr[2];
    t2 = tr[3];
    t3 = tr[4];
    t4 = tr[5];
    t5 = tr[6];
    for (i__ = *npad - 1; i__ >= 5; --i__) {
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t0 * out[j] + t1 * outm1[j] + t2 * outm2[j] + t3 * outm3[
		    j] + t4 * outm4[j] + t5 * outm5[j];
	}
    }
    out2 = *stride << 2;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t1 * outm1[j] + t2 * outm2[j] + t3 * outm3[j] 
		+ t4 * outm4[j];
    }
    out2 = *stride * 3;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t1 * outm1[j] + t2 * outm2[j] + t3 * outm3[j];
    }
    out2 = *stride << 1;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t1 * outm1[j] + t2 * outm2[j];
    }
    out2 = *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t1 * outm1[j];
    }
    out2 = 0;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j];
    }
/*     Forward phase (padding now ensures room!) */
    t0 = tf[1];
    t1 = tf[2];
    t2 = tf[3];
    t3 = tf[4];
    t4 = tf[5];
    t5 = tf[6];
    i__1 = *n - 1;
    for (i__ = 0; i__ <= i__1; ++i__) {
	out2 = i__ * *stride;
	i__2 = *area + out2;
	for (j = out2 + 1; j <= i__2; ++j) {
	    out[j] = t0 * out[j] + t1 * outp1[j] + t2 * outp2[j] + t3 * outp3[
		    j] + t4 * outp4[j] + t5 * outp5[j];
	}
    }
    return 0;
} /* convsets5_ */

/*     Back and forth, linear convolution of sets of points using padding */
/*        for filters of extent +/- 5 (IN PLACE) */

/*     out: input/output array for in place computation */
/*     outm5-outp5,out: pointers in in/output array to */
/*         start of data sets */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int convsetsper5_(double *out, double *outm5, 
	double *outm4, double *outm3, double *outm2, double *
	outm1, double *outp1, double *outp2, double *outp3, 
	double *outp4, double *outp5, int *area, int *stride, 
	int *n, int *npad, double *tr, double *tf)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int i__, j;
    double t0, t1, t2, t3, t4, t5;
    int out2;

/*     First, make sure pad is zero */
    /* Parameter adjustments */
    --tf;
    --tr;
    --outp5;
    --outp4;
    --outp3;
    --outp2;
    --outp1;
    --outm1;
    --outm2;
    --outm3;
    --outm4;
    --outm5;
    --out;

    /* Function Body */
    i__1 = *npad - 1;
    for (i__ = *n; i__ <= i__1; ++i__) {
	out2 = i__ * *stride;
	i__2 = *area + out2;
	for (j = out2 + 1; j <= i__2; ++j) {
	    out[j] = (double)0.;
	}
    }
/*     Reverse phase */
    t0 = tr[1];
    t1 = tr[2];
    t2 = tr[3];
    t3 = tr[4];
    t4 = tr[5];
    t5 = tr[6];
    i__ = *npad - 1;
    out2 = i__ * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j - (i__ - 4) * *stride] + t1 * out[j - (i__ - 3) * 
		*stride] + t2 * out[j - (i__ - 2) * *stride] + t3 * out[j - (
		i__ - 1) * *stride] + t4 * out[j - i__ * *stride] + t5 * 
		outm5[j];
    }
    i__ = *npad - 2;
    out2 = i__ * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j - (i__ - 3) * *stride] + t1 * out[j - (i__ - 2) * 
		*stride] + t2 * out[j - (i__ - 1) * *stride] + t3 * out[j - 
		i__ * *stride] + t4 * outm4[j] + t5 * outm5[j];
    }
    i__ = *npad - 3;
    out2 = i__ * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j - (i__ - 2) * *stride] + t1 * out[j - (i__ - 1) * 
		*stride] + t2 * out[j - i__ * *stride] + t3 * outm3[j] + t4 * 
		outm4[j] + t5 * outm5[j];
    }
    i__ = *npad - 4;
    out2 = i__ * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j - (i__ - 1) * *stride] + t1 * out[j - i__ * *
		stride] + t2 * outm2[j] + t3 * outm3[j] + t4 * outm4[j] + t5 *
		 outm5[j];
    }
    i__ = *npad - 5;
    out2 = i__ * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j - i__ * *stride] + t1 * outm1[j] + t2 * outm2[j] 
		+ t3 * outm3[j] + t4 * outm4[j] + t5 * outm5[j];
    }
    for (i__ = *npad - 6; i__ >= 5; --i__) {
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t0 * out[j] + t1 * outm1[j] + t2 * outm2[j] + t3 * outm3[
		    j] + t4 * outm4[j] + t5 * outm5[j];
	}
    }
    out2 = *stride << 2;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = out[j + (*npad - 5) * *stride];
/*     &        t0*out(j)+t1*outm1(j)+t2*outm2(j)+t3*outm3(j)+t4*outm4(j) */
    }
    out2 = *stride * 3;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = out[j + (*npad - 5) * *stride];
/*     &        t0*out(j)+t1*outm1(j)+t2*outm2(j)+t3*outm3(j) */
    }
    out2 = *stride << 1;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = out[j + (*npad - 5) * *stride];
/*     &        t0*out(j)+t1*outm1(j)+t2*outm2(j) */
    }
    out2 = *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = out[j + (*npad - 5) * *stride];
/*     &        t0*out(j)+t1*outm1(j) */
    }
    out2 = 0;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = out[j + (*npad - 5) * *stride];
/*     &        t0*out(j) */
    }
/*     Forward phase (padding now ensures room!) */
    t0 = tf[1];
    t1 = tf[2];
    t2 = tf[3];
    t3 = tf[4];
    t4 = tf[5];
    t5 = tf[6];
    i__1 = *n - 1;
    for (i__ = 0; i__ <= i__1; ++i__) {
	out2 = i__ * *stride;
	i__2 = *area + out2;
	for (j = out2 + 1; j <= i__2; ++j) {
	    out[j] = t0 * out[j] + t1 * outp1[j] + t2 * outp2[j] + t3 * outp3[
		    j] + t4 * outp4[j] + t5 * outp5[j];
	}
    }
    return 0;
} /* convsetsper5_ */

/*     Back and forth, linear convolution of sets of points using padding */
/*        for filters of extent +/- 5 (IN PLACE) */

/*     out: input/output array for in place computation */
/*     outm5-outp5,out: pointers in in/output array to */
/*         start of data sets */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int convsetsio5_(double *datout, double *work, 
	double *workm5, double *workm4, double *workm3, 
	double *workm2, double *workm1, double *workp1, 
	double *workp2, double *workp3, double *workp4, 
	double *workp5, int *area, int *stride, int *n, 
	int *npad, int *stridel, double *tr, double *tf)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int work2, i__, j, out2s;
    double t0, t1, t2, t3, t4, t5;
    int jl;

/*     First, make sure pad is zero */
    /* Parameter adjustments */
    --tf;
    --tr;
    --workp5;
    --workp4;
    --workp3;
    --workp2;
    --workp1;
    --workm1;
    --workm2;
    --workm3;
    --workm4;
    --workm5;
    --work;
    --datout;

    /* Function Body */
    i__1 = *npad - 1;
    for (i__ = *n; i__ <= i__1; ++i__) {
	work2 = i__ * *stride;
	i__2 = *area + work2;
	for (j = work2 + 1; j <= i__2; ++j) {
	    work[j] = (double)0.;
	}
    }
/*     Reverse phase */
    t0 = tr[1];
    t1 = tr[2];
    t2 = tr[3];
    t3 = tr[4];
    t4 = tr[5];
    t5 = tr[6];
    for (i__ = *npad - 1; i__ >= 5; --i__) {
	work2 = i__ * *stride;
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    work[j] = t0 * work[j] + t1 * workm1[j] + t2 * workm2[j] + t3 * 
		    workm3[j] + t4 * workm4[j] + t5 * workm5[j];
	}
    }
    work2 = *stride << 2;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = t0 * work[j] + t1 * workm1[j] + t2 * workm2[j] + t3 * 
		workm3[j] + t4 * workm4[j];
    }
    work2 = *stride * 3;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = t0 * work[j] + t1 * workm1[j] + t2 * workm2[j] + t3 * 
		workm3[j];
    }
    work2 = *stride << 1;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = t0 * work[j] + t1 * workm1[j] + t2 * workm2[j];
    }
    work2 = *stride;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = t0 * work[j] + t1 * workm1[j];
    }
    work2 = 0;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = t0 * work[j];
    }
/*     Forward phase (padding now ensures room!) */
    t0 = tf[1];
    t1 = tf[2];
    t2 = tf[3];
    t3 = tf[4];
    t4 = tf[5];
    t5 = tf[6];
    i__1 = *n - 1;
    for (i__ = 0; i__ <= i__1; ++i__) {
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__2 = *area + work2;
	for (j = work2 + 1; j <= i__2; ++j) {
	    jl = j + out2s;
	    datout[jl] = t0 * work[j] + t1 * workp1[j] + t2 * workp2[j] + t3 *
		     workp3[j] + t4 * workp4[j] + t5 * workp5[j];
	}
    }
    return 0;
} /* convsetsio5_ */

/*     Back and forth, linear convolution of sets of points using padding */
/*        for filters of extent +/- 5 (IN PLACE) */

/*     out: input/output array for in place computation */
/*     outm5-outp5,out: pointers in in/output array to */
/*         start of data sets */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int convsetsio5full_(double *datout, double *work, 
	double *workm5, double *workm4, double *workm3, 
	double *workm2, double *workm1, double *workp1, 
	double *workp2, double *workp3, double *workp4, 
	double *workp5, int *area, int *stride, int *n, 
	int *npad, int *stridel, double *filter)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int work2, i__, j, out2s;
    double t0, t1, t2, t3, t4, t5;
    int jl;

/*     First, make sure pad is zero */
    /* Parameter adjustments */
    --filter;
    --workp5;
    --workp4;
    --workp3;
    --workp2;
    --workp1;
    --workm1;
    --workm2;
    --workm3;
    --workm4;
    --workm5;
    --work;
    --datout;

    /* Function Body */
    i__1 = *npad - 1;
    for (i__ = *n; i__ <= i__1; ++i__) {
	work2 = i__ * *stride;
	i__2 = *area + work2;
	for (j = work2 + 1; j <= i__2; ++j) {
	    work[j] = (double)0.;
	}
    }
/*     Reverse phase */
    t0 = filter[1];
    t1 = filter[2];
    t2 = filter[3];
    t3 = filter[4];
    t4 = filter[5];
    t5 = filter[6];
    if (t0 != (double)0.) {
/*     symmetric filter */
	i__ = 0;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = t0 * work[j] + t1 * workp1[j] + t2 * workp2[j] + t3 *
		     workp3[j] + t4 * workp4[j] + t5 * workp5[j];
	}
	i__ = 1;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = t1 * workm1[j] + t0 * work[j] + t1 * workp1[j] + t2 *
		     workp2[j] + t3 * workp3[j] + t4 * workp4[j] + t5 * 
		    workp5[j];
	}
	i__ = 2;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = t2 * workm2[j] + t1 * workm1[j] + t0 * work[j] + t1 *
		     workp1[j] + t2 * workp2[j] + t3 * workp3[j] + t4 * 
		    workp4[j] + t5 * workp5[j];
	}
	i__ = 3;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = t3 * workm3[j] + t2 * workm2[j] + t1 * workm1[j] + 
		    t0 * work[j] + t1 * workp1[j] + t2 * workp2[j] + t3 * 
		    workp3[j] + t4 * workp4[j] + t5 * workp5[j];
	}
	i__ = 4;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = t4 * workm4[j] + t3 * workm3[j] + t2 * workm2[j] + 
		    t1 * workm1[j] + t0 * work[j] + t1 * workp1[j] + t2 * 
		    workp2[j] + t3 * workp3[j] + t4 * workp4[j] + t5 * workp5[
		    j];
	}
	i__1 = *n - 6;
	for (i__ = 5; i__ <= i__1; ++i__) {
	    work2 = i__ * *stride;
	    out2s = i__ * (*stridel - *stride);
	    i__2 = *area + work2;
	    for (j = work2 + 1; j <= i__2; ++j) {
		jl = j + out2s;
		datout[jl] = t5 * workm5[j] + t4 * workm4[j] + t3 * workm3[j] 
			+ t2 * workm2[j] + t1 * workm1[j] + t0 * work[j] + t1 
			* workp1[j] + t2 * workp2[j] + t3 * workp3[j] + t4 * 
			workp4[j] + t5 * workp5[j];
	    }
	}
	i__ = *n - 5;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = t5 * workm5[j] + t4 * workm4[j] + t3 * workm3[j] + 
		    t2 * workm2[j] + t1 * workm1[j] + t0 * work[j] + t1 * 
		    workp1[j] + t2 * workp2[j] + t3 * workp3[j] + t4 * workp4[
		    j];
	}
	i__ = *n - 4;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = t5 * workm5[j] + t4 * workm4[j] + t3 * workm3[j] + 
		    t2 * workm2[j] + t1 * workm1[j] + t0 * work[j] + t1 * 
		    workp1[j] + t2 * workp2[j] + t3 * workp3[j];
	}
	i__ = *n - 3;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = t5 * workm5[j] + t4 * workm4[j] + t3 * workm3[j] + 
		    t2 * workm2[j] + t1 * workm1[j] + t0 * work[j] + t1 * 
		    workp1[j] + t2 * workp2[j];
	}
	i__ = *n - 2;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = t5 * workm5[j] + t4 * workm4[j] + t3 * workm3[j] + 
		    t2 * workm2[j] + t1 * workm1[j] + t0 * work[j] + t1 * 
		    workp1[j];
	}
	i__ = *n - 1;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = t5 * workm5[j] + t4 * workm4[j] + t3 * workm3[j] + 
		    t2 * workm2[j] + t1 * workm1[j] + t0 * work[j];
	}
/*     end of symmetric part */
    } else {
/*     antisymmetric filter */
	i__ = 0;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = t0 * work[j] + t1 * workp1[j] + t2 * workp2[j] + t3 *
		     workp3[j] + t4 * workp4[j] + t5 * workp5[j];
	}
	i__ = 1;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = t1 * (double)-1. * workm1[j] + t0 * work[j] + t1 * 
		    workp1[j] + t2 * workp2[j] + t3 * workp3[j] + t4 * workp4[
		    j] + t5 * workp5[j];
	}
	i__ = 2;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = t2 * (double)-1. * workm2[j] - t1 * workm1[j] + t0 * 
		    work[j] + t1 * workp1[j] + t2 * workp2[j] + t3 * workp3[j]
		     + t4 * workp4[j] + t5 * workp5[j];
	}
	i__ = 3;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = t3 * (double)-1. * workm3[j] - t2 * workm2[j] - t1 * 
		    workm1[j] + t0 * work[j] + t1 * workp1[j] + t2 * workp2[j]
		     + t3 * workp3[j] + t4 * workp4[j] + t5 * workp5[j];
	}
	i__ = 4;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = t4 * (double)-1. * workm4[j] - t3 * workm3[j] - t2 * 
		    workm2[j] - t1 * workm1[j] + t0 * work[j] + t1 * workp1[j]
		     + t2 * workp2[j] + t3 * workp3[j] + t4 * workp4[j] + t5 *
		     workp5[j];
	}
	i__1 = *n - 6;
	for (i__ = 5; i__ <= i__1; ++i__) {
	    work2 = i__ * *stride;
	    out2s = i__ * (*stridel - *stride);
	    i__2 = *area + work2;
	    for (j = work2 + 1; j <= i__2; ++j) {
		jl = j + out2s;
		datout[jl] = t5 * (double)-1. * workm5[j] - t4 * workm4[j] - 
			t3 * workm3[j] - t2 * workm2[j] - t1 * workm1[j] + t0 
			* work[j] + t1 * workp1[j] + t2 * workp2[j] + t3 * 
			workp3[j] + t4 * workp4[j] + t5 * workp5[j];
	    }
	}
	i__ = *n - 5;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = t5 * (double)-1. * workm5[j] - t4 * workm4[j] - t3 * 
		    workm3[j] - t2 * workm2[j] - t1 * workm1[j] + t0 * work[j]
		     + t1 * workp1[j] + t2 * workp2[j] + t3 * workp3[j] + t4 *
		     workp4[j];
	}
	i__ = *n - 4;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = t5 * (double)-1. * workm5[j] - t4 * workm4[j] - t3 * 
		    workm3[j] - t2 * workm2[j] - t1 * workm1[j] + t0 * work[j]
		     + t1 * workp1[j] + t2 * workp2[j] + t3 * workp3[j];
	}
	i__ = *n - 3;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = t5 * (double)-1. * workm5[j] - t4 * workm4[j] - t3 * 
		    workm3[j] - t2 * workm2[j] - t1 * workm1[j] + t0 * work[j]
		     + t1 * workp1[j] + t2 * workp2[j];
	}
	i__ = *n - 2;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = t5 * (double)-1. * workm5[j] - t4 * workm4[j] - t3 * 
		    workm3[j] - t2 * workm2[j] - t1 * workm1[j] + t0 * work[j]
		     + t1 * workp1[j];
	}
	i__ = *n - 1;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = t5 * (double)-1. * workm5[j] - t4 * workm4[j] - t3 * 
		    workm3[j] - t2 * workm2[j] - t1 * workm1[j] + t0 * work[j]
		    ;
	}
/*     end of antisymmetric part */
    }
    return 0;
} /* convsetsio5full_ */

/*     Back and forth, linear convolution of sets of points using padding */
/*        for filters of extent +/- 5 (IN PLACE) */

/*     out: input/output array for in place computation */
/*     outm5-outp5,out: pointers in in/output array to */
/*         start of data sets */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int convsetsioppercum5_(double *datout, double *work,
	 double *workm5, double *workm4, double *workm3, 
	double *workm2, double *workm1, double *workp1, 
	double *workp2, double *workp3, double *workp4, 
	double *workp5, int *area, int *stride, int *n, 
	int *npad, int *stridel, double *tr, double *tf)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int work2, i__, j, out2s;
    double t0, t1, t2, t3, t4, t5;
    int jl;

/*     First, make sure pad is zero */
    /* Parameter adjustments */
    --tf;
    --tr;
    --workp5;
    --workp4;
    --workp3;
    --workp2;
    --workp1;
    --workm1;
    --workm2;
    --workm3;
    --workm4;
    --workm5;
    --work;
    --datout;

    /* Function Body */
    i__1 = *npad - 1;
    for (i__ = *n; i__ <= i__1; ++i__) {
	work2 = i__ * *stride;
	i__2 = *area + work2;
	for (j = work2 + 1; j <= i__2; ++j) {
	    work[j] = (double)0.;
	}
    }
/*     Reverse phase */
    t0 = tr[1];
    t1 = tr[2];
    t2 = tr[3];
    t3 = tr[4];
    t4 = tr[5];
    t5 = tr[6];
    i__ = *npad - 1;
    work2 = i__ * *stride;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = t0 * work[j - (i__ - 4) * *stride] + t1 * work[j - (i__ - 3)
		 * *stride] + t2 * work[j - (i__ - 2) * *stride] + t3 * work[
		j - (i__ - 1) * *stride] + t4 * work[j - i__ * *stride] + t5 *
		 workm5[j];
    }
    i__ = *npad - 2;
    work2 = i__ * *stride;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = t0 * work[j - (i__ - 3) * *stride] + t1 * work[j - (i__ - 2)
		 * *stride] + t2 * work[j - (i__ - 1) * *stride] + t3 * work[
		j - i__ * *stride] + t4 * workm4[j] + t5 * workm5[j];
    }
    i__ = *npad - 3;
    work2 = i__ * *stride;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = t0 * work[j - (i__ - 2) * *stride] + t1 * work[j - (i__ - 1)
		 * *stride] + t2 * work[j - i__ * *stride] + t3 * workm3[j] + 
		t4 * workm4[j] + t5 * workm5[j];
    }
    i__ = *npad - 4;
    work2 = i__ * *stride;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = t0 * work[j - (i__ - 1) * *stride] + t1 * work[j - i__ * *
		stride] + t2 * workm2[j] + t3 * workm3[j] + t4 * workm4[j] + 
		t5 * workm5[j];
    }
    i__ = *npad - 5;
    work2 = i__ * *stride;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = t0 * work[j - i__ * *stride] + t1 * workm1[j] + t2 * workm2[
		j] + t3 * workm3[j] + t4 * workm4[j] + t5 * workm5[j];
    }
    for (i__ = *npad - 6; i__ >= 5; --i__) {
	work2 = i__ * *stride;
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    work[j] = t0 * work[j] + t1 * workm1[j] + t2 * workm2[j] + t3 * 
		    workm3[j] + t4 * workm4[j] + t5 * workm5[j];
	}
    }
    work2 = *stride << 2;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = work[j + (*npad - 5) * *stride];
/*     &        t0*work(j)+t1*workm1(j)+t2*workm2(j)+t3*workm3(j)+t4*workm4(j) */
    }
    work2 = *stride * 3;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = work[j + (*npad - 5) * *stride];
/*     &        t0*work(j)+t1*workm1(j)+t2*workm2(j)+t3*workm3(j) */
    }
    work2 = *stride << 1;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = work[j + (*npad - 5) * *stride];
/*     &        t0*work(j)+t1*workm1(j)+t2*workm2(j) */
    }
    work2 = *stride;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = work[j + (*npad - 5) * *stride];
/*     &        t0*work(j)+t1*workm1(j) */
    }
    work2 = 0;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = work[j + (*npad - 5) * *stride];
/*     &        t0*work(j) */
    }
/*     Forward phase (padding now ensures room!) */
    t0 = tf[1];
    t1 = tf[2];
    t2 = tf[3];
    t3 = tf[4];
    t4 = tf[5];
    t5 = tf[6];
    i__1 = *n - 1;
    for (i__ = 0; i__ <= i__1; ++i__) {
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__2 = *area + work2;
	for (j = work2 + 1; j <= i__2; ++j) {
	    jl = j + out2s;
	    datout[jl] = t0 * work[j] + t1 * workp1[j] + t2 * workp2[j] + t3 *
		     workp3[j] + t4 * workp4[j] + t5 * workp5[j];
	}
    }
    return 0;
} /* convsetsioppercum5_ */

/*     Back and forth, linear convolution of sets of points using padding */
/*        for filters of extent +/- 5 (IN PLACE) */

/*     out: input/output array for in place computation */
/*     outm5-outp5,out: pointers in in/output array to */
/*         start of data sets */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int convsetsiop5_(double *datout, double *work, 
	double *workm5, double *workm4, double *workm3, 
	double *workm2, double *workm1, double *workp1, 
	double *workp2, double *workp3, double *workp4, 
	double *workp5, int *area, int *stride, int *n, 
	int *npad, int *stridel, double *tr, double *tf)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int work2, i__, j, out2s;
    double t0, t1, t2, t3, t4, t5;
    int jl;

/*     First, make sure pad is zero */
    /* Parameter adjustments */
    --tf;
    --tr;
    --workp5;
    --workp4;
    --workp3;
    --workp2;
    --workp1;
    --workm1;
    --workm2;
    --workm3;
    --workm4;
    --workm5;
    --work;
    --datout;

    /* Function Body */
    i__1 = *npad - 1;
    for (i__ = *n; i__ <= i__1; ++i__) {
	work2 = i__ * *stride;
	i__2 = *area + work2;
	for (j = work2 + 1; j <= i__2; ++j) {
	    work[j] = (double)0.;
	}
    }
/*     Reverse phase */
    t0 = tr[1];
    t1 = tr[2];
    t2 = tr[3];
    t3 = tr[4];
    t4 = tr[5];
    t5 = tr[6];
    for (i__ = *npad - 1; i__ >= 5; --i__) {
	work2 = i__ * *stride;
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    work[j] = t0 * work[j] + t1 * workm1[j] + t2 * workm2[j] + t3 * 
		    workm3[j] + t4 * workm4[j] + t5 * workm5[j];
	}
    }
    work2 = *stride << 2;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = t0 * work[j] + t1 * workm1[j] + t2 * workm2[j] + t3 * 
		workm3[j] + t4 * workm4[j];
    }
    work2 = *stride * 3;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = t0 * work[j] + t1 * workm1[j] + t2 * workm2[j] + t3 * 
		workm3[j];
    }
    work2 = *stride << 1;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = t0 * work[j] + t1 * workm1[j] + t2 * workm2[j];
    }
    work2 = *stride;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = t0 * work[j] + t1 * workm1[j];
    }
    work2 = 0;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = t0 * work[j];
    }
/*     Forward phase (padding now ensures room!) */
    t0 = tf[1];
    t1 = tf[2];
    t2 = tf[3];
    t3 = tf[4];
    t4 = tf[5];
    t5 = tf[6];
    i__1 = *n - 1;
    for (i__ = 0; i__ <= i__1; ++i__) {
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__2 = *area + work2;
	for (j = work2 + 1; j <= i__2; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] + t0 * work[j] + t1 * workp1[j] + t2 * 
		    workp2[j] + t3 * workp3[j] + t4 * workp4[j] + t5 * workp5[
		    j];
	}
    }
    return 0;
} /* convsetsiop5_ */

/*     Back and forth, linear convolution of sets of points using padding */
/*        for filters of extent +/- 5 (IN PLACE) */

/*     out: input/output array for in place computation */
/*     outm5-outp5,out: pointers in in/output array to */
/*         start of data sets */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int convsetsiop5full_(double *datout, double *work, 
	double *workm5, double *workm4, double *workm3, 
	double *workm2, double *workm1, double *workp1, 
	double *workp2, double *workp3, double *workp4, 
	double *workp5, int *area, int *stride, int *n, 
	int *npad, int *stridel, double *filter)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int work2, i__, j, out2s;
    double t0, t1, t2, t3, t4, t5;
    int jl;

/*     First, make sure pad is zero */
    /* Parameter adjustments */
    --filter;
    --workp5;
    --workp4;
    --workp3;
    --workp2;
    --workp1;
    --workm1;
    --workm2;
    --workm3;
    --workm4;
    --workm5;
    --work;
    --datout;

    /* Function Body */
    i__1 = *npad - 1;
    for (i__ = *n; i__ <= i__1; ++i__) {
	work2 = i__ * *stride;
	i__2 = *area + work2;
	for (j = work2 + 1; j <= i__2; ++j) {
	    work[j] = (double)0.;
	}
    }
/*     Reverse phase */
    t0 = filter[1];
    t1 = filter[2];
    t2 = filter[3];
    t3 = filter[4];
    t4 = filter[5];
    t5 = filter[6];
    if (t0 != (double)0.) {
/*     symmetric part */
	i__ = 0;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] + t0 * work[j] + t1 * workp1[j] + t2 * 
		    workp2[j] + t3 * workp3[j] + t4 * workp4[j] + t5 * workp5[
		    j];
	}
	i__ = 1;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] + t1 * workm1[j] + t0 * work[j] + t1 * 
		    workp1[j] + t2 * workp2[j] + t3 * workp3[j] + t4 * workp4[
		    j] + t5 * workp5[j];
	}
	i__ = 2;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] + t2 * workm2[j] + t1 * workm1[j] + t0 * 
		    work[j] + t1 * workp1[j] + t2 * workp2[j] + t3 * workp3[j]
		     + t4 * workp4[j] + t5 * workp5[j];
	}
	i__ = 3;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] + t3 * workm3[j] + t2 * workm2[j] + t1 * 
		    workm1[j] + t0 * work[j] + t1 * workp1[j] + t2 * workp2[j]
		     + t3 * workp3[j] + t4 * workp4[j] + t5 * workp5[j];
	}
	i__ = 4;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] + t4 * workm4[j] + t3 * workm3[j] + t2 * 
		    workm2[j] + t1 * workm1[j] + t0 * work[j] + t1 * workp1[j]
		     + t2 * workp2[j] + t3 * workp3[j] + t4 * workp4[j] + t5 *
		     workp5[j];
	}
	i__1 = *n - 6;
	for (i__ = 5; i__ <= i__1; ++i__) {
	    work2 = i__ * *stride;
	    out2s = i__ * (*stridel - *stride);
	    i__2 = *area + work2;
	    for (j = work2 + 1; j <= i__2; ++j) {
		jl = j + out2s;
		datout[jl] = datout[jl] + t5 * workm5[j] + t4 * workm4[j] + 
			t3 * workm3[j] + t2 * workm2[j] + t1 * workm1[j] + t0 
			* work[j] + t1 * workp1[j] + t2 * workp2[j] + t3 * 
			workp3[j] + t4 * workp4[j] + t5 * workp5[j];
	    }
	}
	i__ = *n - 5;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] + t5 * workm5[j] + t4 * workm4[j] + t3 * 
		    workm3[j] + t2 * workm2[j] + t1 * workm1[j] + t0 * work[j]
		     + t1 * workp1[j] + t2 * workp2[j] + t3 * workp3[j] + t4 *
		     workp4[j];
	}
	i__ = *n - 4;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] + t5 * workm5[j] + t4 * workm4[j] + t3 * 
		    workm3[j] + t2 * workm2[j] + t1 * workm1[j] + t0 * work[j]
		     + t1 * workp1[j] + t2 * workp2[j] + t3 * workp3[j];
	}
	i__ = *n - 3;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] + t5 * workm5[j] + t4 * workm4[j] + t3 * 
		    workm3[j] + t2 * workm2[j] + t1 * workm1[j] + t0 * work[j]
		     + t1 * workp1[j] + t2 * workp2[j];
	}
	i__ = *n - 2;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] + t5 * workm5[j] + t4 * workm4[j] + t3 * 
		    workm3[j] + t2 * workm2[j] + t1 * workm1[j] + t0 * work[j]
		     + t1 * workp1[j];
	}
	i__ = *n - 1;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] + t5 * workm5[j] + t4 * workm4[j] + t3 * 
		    workm3[j] + t2 * workm2[j] + t1 * workm1[j] + t0 * work[j]
		    ;
	}
/*     end of symmetric part */
    } else {
/*     antisymmetric part */
	i__ = 0;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] + t0 * work[j] + t1 * workp1[j] + t2 * 
		    workp2[j] + t3 * workp3[j] + t4 * workp4[j] + t5 * workp5[
		    j];
	}
	i__ = 1;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] - t1 * workm1[j] + t0 * work[j] + t1 * 
		    workp1[j] + t2 * workp2[j] + t3 * workp3[j] + t4 * workp4[
		    j] + t5 * workp5[j];
	}
	i__ = 2;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] - t2 * workm2[j] - t1 * workm1[j] + t0 * 
		    work[j] + t1 * workp1[j] + t2 * workp2[j] + t3 * workp3[j]
		     + t4 * workp4[j] + t5 * workp5[j];
	}
	i__ = 3;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] - t3 * workm3[j] - t2 * workm2[j] - t1 * 
		    workm1[j] + t0 * work[j] + t1 * workp1[j] + t2 * workp2[j]
		     + t3 * workp3[j] + t4 * workp4[j] + t5 * workp5[j];
	}
	i__ = 4;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] - t4 * workm4[j] - t3 * workm3[j] - t2 * 
		    workm2[j] - t1 * workm1[j] + t0 * work[j] + t1 * workp1[j]
		     + t2 * workp2[j] + t3 * workp3[j] + t4 * workp4[j] + t5 *
		     workp5[j];
	}
	i__1 = *n - 6;
	for (i__ = 5; i__ <= i__1; ++i__) {
	    work2 = i__ * *stride;
	    out2s = i__ * (*stridel - *stride);
	    i__2 = *area + work2;
	    for (j = work2 + 1; j <= i__2; ++j) {
		jl = j + out2s;
		datout[jl] = datout[jl] - t5 * workm5[j] - t4 * workm4[j] - 
			t3 * workm3[j] - t2 * workm2[j] - t1 * workm1[j] + t0 
			* work[j] + t1 * workp1[j] + t2 * workp2[j] + t3 * 
			workp3[j] + t4 * workp4[j] + t5 * workp5[j];
	    }
	}
	i__ = *n - 5;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] - t5 * workm5[j] - t4 * workm4[j] - t3 * 
		    workm3[j] - t2 * workm2[j] - t1 * workm1[j] + t0 * work[j]
		     + t1 * workp1[j] + t2 * workp2[j] + t3 * workp3[j] + t4 *
		     workp4[j];
	}
	i__ = *n - 4;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] - t5 * workm5[j] - t4 * workm4[j] - t3 * 
		    workm3[j] - t2 * workm2[j] - t1 * workm1[j] + t0 * work[j]
		     + t1 * workp1[j] + t2 * workp2[j] + t3 * workp3[j];
	}
	i__ = *n - 3;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] - t5 * workm5[j] - t4 * workm4[j] - t3 * 
		    workm3[j] - t2 * workm2[j] - t1 * workm1[j] + t0 * work[j]
		     + t1 * workp1[j] + t2 * workp2[j];
	}
	i__ = *n - 2;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] - t5 * workm5[j] - t4 * workm4[j] - t3 * 
		    workm3[j] - t2 * workm2[j] - t1 * workm1[j] + t0 * work[j]
		     + t1 * workp1[j];
	}
	i__ = *n - 1;
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] - t5 * workm5[j] - t4 * workm4[j] - t3 * 
		    workm3[j] - t2 * workm2[j] - t1 * workm1[j] + t0 * work[j]
		    ;
	}
/*     end of antisymmetric part */
    }
    return 0;
} /* convsetsiop5full_ */

/*     Back and forth, linear convolution of sets of points using padding */
/*        for filters of extent +/- 5 (IN PLACE) */

/*     out: input/output array for in place computation */
/*     outm5-outp5,out: pointers in in/output array to */
/*         start of data sets */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int convsetsiopper5_(double *datout, double *work, 
	double *workm5, double *workm4, double *workm3, 
	double *workm2, double *workm1, double *workp1, 
	double *workp2, double *workp3, double *workp4, 
	double *workp5, int *area, int *stride, int *n, 
	int *npad, int *stridel, double *tr, double *tf)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int work2, i__, j, out2s;
    double t0, t1, t2, t3, t4, t5;
    int jl;

/*     First, make sure pad is zero */
    /* Parameter adjustments */
    --tf;
    --tr;
    --workp5;
    --workp4;
    --workp3;
    --workp2;
    --workp1;
    --workm1;
    --workm2;
    --workm3;
    --workm4;
    --workm5;
    --work;
    --datout;

    /* Function Body */
    i__1 = *npad - 1;
    for (i__ = *n; i__ <= i__1; ++i__) {
	work2 = i__ * *stride;
	i__2 = *area + work2;
	for (j = work2 + 1; j <= i__2; ++j) {
	    work[j] = (double)0.;
	}
    }
/*     Reverse phase */
    t0 = tr[1];
    t1 = tr[2];
    t2 = tr[3];
    t3 = tr[4];
    t4 = tr[5];
    t5 = tr[6];
    i__ = *npad - 1;
    work2 = i__ * *stride;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = t0 * work[j - (i__ - 4) * *stride] + t1 * work[j - (i__ - 3)
		 * *stride] + t2 * work[j - (i__ - 2) * *stride] + t3 * work[
		j - (i__ - 1) * *stride] + t4 * work[j - i__ * *stride] + t5 *
		 workm5[j];
    }
    i__ = *npad - 2;
    work2 = i__ * *stride;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = t0 * work[j - (i__ - 3) * *stride] + t1 * work[j - (i__ - 2)
		 * *stride] + t2 * work[j - (i__ - 1) * *stride] + t3 * work[
		j - i__ * *stride] + t4 * workm4[j] + t5 * workm5[j];
    }
    i__ = *npad - 3;
    work2 = i__ * *stride;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = t0 * work[j - (i__ - 2) * *stride] + t1 * work[j - (i__ - 1)
		 * *stride] + t2 * work[j - i__ * *stride] + t3 * workm3[j] + 
		t4 * workm4[j] + t5 * workm5[j];
    }
    i__ = *npad - 4;
    work2 = i__ * *stride;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = t0 * work[j - (i__ - 1) * *stride] + t1 * work[j - i__ * *
		stride] + t2 * workm2[j] + t3 * workm3[j] + t4 * workm4[j] + 
		t5 * workm5[j];
    }
    i__ = *npad - 5;
    work2 = i__ * *stride;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = t0 * work[j - i__ * *stride] + t1 * workm1[j] + t2 * workm2[
		j] + t3 * workm3[j] + t4 * workm4[j] + t5 * workm5[j];
    }
    for (i__ = *npad - 6; i__ >= 5; --i__) {
	work2 = i__ * *stride;
	i__1 = *area + work2;
	for (j = work2 + 1; j <= i__1; ++j) {
	    work[j] = t0 * work[j] + t1 * workm1[j] + t2 * workm2[j] + t3 * 
		    workm3[j] + t4 * workm4[j] + t5 * workm5[j];
	}
    }
    work2 = *stride << 2;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = work[j + (*npad - 5) * *stride];
/*     &        t0*work(j)+t1*workm1(j)+t2*workm2(j)+t3*workm3(j)+t4*workm4(j) */
    }
    work2 = *stride * 3;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = work[j + (*npad - 5) * *stride];
/*     &        t0*work(j)+t1*workm1(j)+t2*workm2(j)+t3*workm3(j) */
    }
    work2 = *stride << 1;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = work[j + (*npad - 5) * *stride];
/*     &        t0*work(j)+t1*workm1(j)+t2*workm2(j) */
    }
    work2 = *stride;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = work[j + (*npad - 5) * *stride];
/*     &        t0*work(j)+t1*workm1(j) */
    }
    work2 = 0;
    i__1 = *area + work2;
    for (j = work2 + 1; j <= i__1; ++j) {
	work[j] = work[j + (*npad - 5) * *stride];
/*     &        t0*work(j) */
    }
/*     Forward phase (padding now ensures room!) */
    t0 = tf[1];
    t1 = tf[2];
    t2 = tf[3];
    t3 = tf[4];
    t4 = tf[5];
    t5 = tf[6];
    i__1 = *n - 1;
    for (i__ = 0; i__ <= i__1; ++i__) {
	work2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__2 = *area + work2;
	for (j = work2 + 1; j <= i__2; ++j) {
	    jl = j + out2s;
	    datout[jl] = datout[jl] + t0 * work[j] + t1 * workp1[j] + t2 * 
		    workp2[j] + t3 * workp3[j] + t4 * workp4[j] + t5 * workp5[
		    j];
	}
    }
    return 0;
} /* convsetsiopper5_ */

/*     Back and forth, linear convolution of sets of points using padding, */
/*     computing data ONLY on ghostpoints (IN PLACE) */

/*     out: input/output array for in place computation */
/*     outm3,outm2,outm1,outp1,outp2,outp3: pointers in output array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int pconvsets3_(double *out, double *outm3, 
	double *outm2, double *outm1, double *outp1, double *
	outp2, double *outp3, int *area, int *stride, int *n, 
	int *npad, double *tr, double *tf)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int i__, j;
    double t0, t1, t2, t3;
    int out2;

/*     First, make sure pad is zero for forward phase. */
/*     For pretty code the last number would be npad-1, but technically */
/*     npad-2 (for extra speed) is all that is needed. */
    /* Parameter adjustments */
    --tf;
    --tr;
    --outp3;
    --outp2;
    --outp1;
    --outm1;
    --outm2;
    --outm3;
    --out;

    /* Function Body */
    i__1 = *npad - 2;
    for (i__ = *n; i__ <= i__1; ++i__) {
	out2 = i__ * *stride;
	i__2 = *area + out2;
	for (j = out2 + 1; j <= i__2; ++j) {
	    out[j] = (double)0.;
	}
    }
/*     Reverse phase */
    t0 = tr[1];
    t1 = tr[2];
    t2 = tr[3];
    t3 = tr[4];
    for (i__ = *n - 1; i__ >= 3; --i__) {
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t0 * out[j] + t1 * outm1[j] + t2 * outm2[j] + t3 * outm3[
		    j];
	}
    }
    out2 = *stride << 1;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t1 * outm1[j] + t2 * outm2[j];
    }
    out2 = *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t1 * outm1[j];
    }
    out2 = 0;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j];
    }
/*     Forward phase (padding now ensures room!) */
    t0 = tf[1];
    t1 = tf[2];
    t2 = tf[3];
    t3 = tf[4];
    i__1 = *n - 1;
    for (i__ = 0; i__ <= i__1; i__ += 2) {
	out2 = i__ * *stride;
	i__2 = *area + out2;
	for (j = out2 + 1; j <= i__2; ++j) {
	    out[j] = t0 * out[j] + t1 * outp1[j] + t2 * outp2[j] + t3 * outp3[
		    j];
	}
    }
    return 0;
} /* pconvsets3_ */

/*     Back and forth, linear convolution of sets of points using padding, */
/*     computing data ONLY on ghostpoints (IN PLACE) */

/*     out: input/output array for in place computation */
/*     outm3,outm2,outm1,outp1,outp2,outp3: pointers in output array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int pconvsetsio3full_(double *out, double *in, 
	double *inm3, double *inm2, double *inm1, double *
	inp1, double *inp2, double *inp3, int *area, int *
	stride, int *n, int *npad, double *filt)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int i__, j;
    double t0, t1, t3;
    int out2;

/*     Forward phase (padding now ensures room!) */
    /* Parameter adjustments */
    --filt;
    --inp3;
    --inp2;
    --inp1;
    --inm1;
    --inm2;
    --inm3;
    --in;
    --out;

    /* Function Body */
    t0 = filt[1];
    t1 = filt[2];
    t3 = filt[4];
    i__ = 0;
    out2 = i__ * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t3 * inp3[j];
    }
    i__ = 2;
    out2 = i__ * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = in[j] + t1 * inp1[j] + t3 * inp3[j];
    }
    i__1 = *n - 6;
    for (i__ = 4; i__ <= i__1; i__ += 2) {
	out2 = i__ * *stride;
	i__2 = *area + out2;
	for (j = out2 + 1; j <= i__2; ++j) {
	    out[j] = t3 * inm3[j] + t1 * inm1[j] + in[j] + t1 * inp1[j] + t3 *
		     inp3[j];
	}
    }
    i__ = *n - 4;
    out2 = i__ * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t3 * inm3[j] + t1 * inm1[j] + in[j];
    }
    i__ = *n - 2;
    out2 = i__ * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t3 * inm3[j];
    }
    return 0;
} /* pconvsetsio3full_ */

/*     Back and forth, linear convolution of sets of points using padding, */
/*     computing data ONLY on ghostpoints (IN PLACE) */

/*     out: input/output array for in place computation */
/*     outm3,outm2,outm1,outp1,outp2,outp3: pointers in output array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int pconvsetsio8full_(double *out, double *in, 
	double *inm8, double *inm7, double *inm6, double *
	inm5, double *inm4, double *inm3, double *inm2, 
	double *inm1, double *inp1, double *inp2, double *
	inp3, double *inp4, double *inp5, double *inp6, 
	double *inp7, double *inp8, int *area, int *stride, 
	int *n, int *npad, double *filt)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int i__, j;
    double t0, t1, t2, t3, t4, t5, t6, t7, t8;
    int out2;

/*     Forward phase (padding now ensures room!) */
    /* Parameter adjustments */
    --filt;
    --inp8;
    --inp7;
    --inp6;
    --inp5;
    --inp4;
    --inp3;
    --inp2;
    --inp1;
    --inm1;
    --inm2;
    --inm3;
    --inm4;
    --inm5;
    --inm6;
    --inm7;
    --inm8;
    --in;
    --out;

    /* Function Body */
    t0 = filt[1];
    t1 = filt[2];
    t2 = filt[3];
    t3 = filt[4];
    t4 = filt[5];
    t5 = filt[6];
    t6 = filt[7];
    t7 = filt[8];
    t8 = filt[9];
    if (t0 != (double)0.) {
/*     symmetric part */
	i__ = 0;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t8 * inp8[j];
	}
	i__ = 2;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t6 * inp6[j] + t7 * inp7[j] + t8 * inp8[j];
	}
	i__ = 4;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t4 * inp4[j] + t5 * inp5[j] + t6 * inp6[j] + t7 * inp7[j]
		     + t8 * inp8[j];
	}
	i__ = 6;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t2 * inp2[j] + t3 * inp3[j] + t4 * inp4[j] + t5 * inp5[j]
		     + t6 * inp6[j] + t7 * inp7[j] + t8 * inp8[j];
	}
	i__ = 8;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t0 * in[j] + t1 * inp1[j] + t2 * inp2[j] + t3 * inp3[j] 
		    + t4 * inp4[j] + t5 * inp5[j] + t6 * inp6[j] + t7 * inp7[
		    j] + t8 * inp8[j];
	}
	i__ = 10;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t2 * inm2[j] + t1 * inm1[j] + t0 * in[j] + t1 * inp1[j] 
		    + t2 * inp2[j] + t3 * inp3[j] + t4 * inp4[j] + t5 * inp5[
		    j] + t6 * inp6[j] + t7 * inp7[j] + t8 * inp8[j];
	}
	i__ = 12;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t4 * inm4[j] + t3 * inm3[j] + t2 * inm2[j] + t1 * inm1[j]
		     + t0 * in[j] + t1 * inp1[j] + t2 * inp2[j] + t3 * inp3[j]
		     + t4 * inp4[j] + t5 * inp5[j] + t6 * inp6[j] + t7 * inp7[
		    j] + t8 * inp8[j];
	}
	i__ = 14;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t6 * inm6[j] + t5 * inm5[j] + t4 * inm4[j] + t3 * inm3[j]
		     + t2 * inm2[j] + t1 * inm1[j] + t0 * in[j] + t1 * inp1[j]
		     + t2 * inp2[j] + t3 * inp3[j] + t4 * inp4[j] + t5 * inp5[
		    j] + t6 * inp6[j] + t7 * inp7[j] + t8 * inp8[j];
	}
	i__1 = *n - 18;
	for (i__ = 16; i__ <= i__1; i__ += 2) {
	    out2 = i__ * *stride;
	    i__2 = *area + out2;
	    for (j = out2 + 1; j <= i__2; ++j) {
		out[j] = t8 * inm8[j] + t7 * inm7[j] + t6 * inm6[j] + t5 * 
			inm5[j] + t4 * inm4[j] + t3 * inm3[j] + t2 * inm2[j] 
			+ t1 * inm1[j] + t0 * in[j] + t1 * inp1[j] + t2 * 
			inp2[j] + t3 * inp3[j] + t4 * inp4[j] + t5 * inp5[j] 
			+ t6 * inp6[j] + t7 * inp7[j] + t8 * inp8[j];
	    }
	}
	i__ = *n - 16;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t7 * inp7[j] + t6 * inp6[j] + t5 * inp5[j] + t4 * inp4[j]
		     + t3 * inp3[j] + t2 * inp2[j] + t1 * inp1[j] + t0 * in[j]
		     + t1 * inm1[j] + t2 * inm2[j] + t3 * inm3[j] + t4 * inm4[
		    j] + t5 * inm5[j] + t6 * inm6[j] + t7 * inm7[j] + t8 * 
		    inm8[j];
	}
	i__ = *n - 14;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t5 * inp5[j] + t4 * inp4[j] + t3 * inp3[j] + t2 * inp2[j]
		     + t1 * inp1[j] + t0 * in[j] + t1 * inm1[j] + t2 * inm2[j]
		     + t3 * inm3[j] + t4 * inm4[j] + t5 * inm5[j] + t6 * inm6[
		    j] + t7 * inm7[j] + t8 * inm8[j];
	}
	i__ = *n - 12;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t3 * inp3[j] + t2 * inp2[j] + t1 * inp1[j] + t0 * in[j] 
		    + t1 * inm1[j] + t2 * inm2[j] + t3 * inm3[j] + t4 * inm4[
		    j] + t5 * inm5[j] + t6 * inm6[j] + t7 * inm7[j] + t8 * 
		    inm8[j];
	}
	i__ = *n - 10;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t1 * inp1[j] + t0 * in[j] + t1 * inm1[j] + t2 * inm2[j] 
		    + t3 * inm3[j] + t4 * inm4[j] + t5 * inm5[j] + t6 * inm6[
		    j] + t7 * inm7[j] + t8 * inm8[j];
	}
	i__ = *n - 8;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t1 * inm1[j] + t2 * inm2[j] + t3 * inm3[j] + t4 * inm4[j]
		     + t5 * inm5[j] + t6 * inm6[j] + t7 * inm7[j] + t8 * inm8[
		    j];
	}
	i__ = *n - 6;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t3 * inm3[j] + t4 * inm4[j] + t5 * inm5[j] + t6 * inm6[j]
		     + t7 * inm7[j] + t8 * inm8[j];
	}
	i__ = *n - 4;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t5 * inm5[j] + t6 * inm6[j] + t7 * inm7[j] + t8 * inm8[j]
		    ;
	}
	i__ = *n - 2;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t7 * inm7[j] + t8 * inm8[j];
	}
/*     end of symmetric part */
    } else {
/*     antisymmetric part */
	i__ = 0;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t8 * inp8[j];
	}
	i__ = 2;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t6 * inp6[j] + t7 * inp7[j] + t8 * inp8[j];
	}
	i__ = 4;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t4 * inp4[j] + t5 * inp5[j] + t6 * inp6[j] + t7 * inp7[j]
		     + t8 * inp8[j];
	}
	i__ = 6;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t2 * inp2[j] + t3 * inp3[j] + t4 * inp4[j] + t5 * inp5[j]
		     + t6 * inp6[j] + t7 * inp7[j] + t8 * inp8[j];
	}
	i__ = 8;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t0 * in[j] + t1 * inp1[j] + t2 * inp2[j] + t3 * inp3[j] 
		    + t4 * inp4[j] + t5 * inp5[j] + t6 * inp6[j] + t7 * inp7[
		    j] + t8 * inp8[j];
	}
	i__ = 10;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t2 * (double)-1. * inm2[j] - t1 * inm1[j] + t0 * in[j] + 
		    t1 * inp1[j] + t2 * inp2[j] + t3 * inp3[j] + t4 * inp4[j] 
		    + t5 * inp5[j] + t6 * inp6[j] + t7 * inp7[j] + t8 * inp8[
		    j];
	}
	i__ = 12;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t4 * (double)-1. * inm4[j] - t3 * inm3[j] - t2 * inm2[j] 
		    - t1 * inm1[j] + t0 * in[j] + t1 * inp1[j] + t2 * inp2[j] 
		    + t3 * inp3[j] + t4 * inp4[j] + t5 * inp5[j] + t6 * inp6[
		    j] + t7 * inp7[j] + t8 * inp8[j];
	}
	i__ = 14;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t6 * (double)-1. * inm6[j] - t5 * inm5[j] - t4 * inm4[j] 
		    - t3 * inm3[j] - t2 * inm2[j] - t1 * inm1[j] + t0 * in[j] 
		    + t1 * inp1[j] + t2 * inp2[j] + t3 * inp3[j] + t4 * inp4[
		    j] + t5 * inp5[j] + t6 * inp6[j] + t7 * inp7[j] + t8 * 
		    inp8[j];
	}
	i__1 = *n - 18;
	for (i__ = 16; i__ <= i__1; i__ += 2) {
	    out2 = i__ * *stride;
	    i__2 = *area + out2;
	    for (j = out2 + 1; j <= i__2; ++j) {
		out[j] = t8 * (double)-1. * inm8[j] - t7 * inm7[j] - t6 * inm6[
			j] - t5 * inm5[j] - t4 * inm4[j] - t3 * inm3[j] - t2 *
			 inm2[j] - t1 * inm1[j] + t0 * in[j] + t1 * inp1[j] + 
			t2 * inp2[j] + t3 * inp3[j] + t4 * inp4[j] + t5 * 
			inp5[j] + t6 * inp6[j] + t7 * inp7[j] + t8 * inp8[j];
	    }
	}
	i__ = *n - 16;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t7 * inp7[j] + t6 * inp6[j] + t5 * inp5[j] + t4 * inp4[j]
		     + t3 * inp3[j] + t2 * inp2[j] + t1 * inp1[j] + t0 * in[j]
		     - t1 * inm1[j] - t2 * inm2[j] - t3 * inm3[j] - t4 * inm4[
		    j] - t5 * inm5[j] - t6 * inm6[j] - t7 * inm7[j] - t8 * 
		    inm8[j];
	}
	i__ = *n - 14;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t5 * inp5[j] + t4 * inp4[j] + t3 * inp3[j] + t2 * inp2[j]
		     + t1 * inp1[j] + t0 * in[j] - t1 * inm1[j] - t2 * inm2[j]
		     - t3 * inm3[j] - t4 * inm4[j] - t5 * inm5[j] - t6 * inm6[
		    j] - t7 * inm7[j] - t8 * inm8[j];
	}
	i__ = *n - 12;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t3 * inp3[j] + t2 * inp2[j] + t1 * inp1[j] + t0 * in[j] 
		    - t1 * inm1[j] - t2 * inm2[j] - t3 * inm3[j] - t4 * inm4[
		    j] - t5 * inm5[j] - t6 * inm6[j] - t7 * inm7[j] - t8 * 
		    inm8[j];
	}
	i__ = *n - 10;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t1 * inp1[j] + t0 * in[j] - t1 * inm1[j] - t2 * inm2[j] 
		    - t3 * inm3[j] - t4 * inm4[j] - t5 * inm5[j] - t6 * inm6[
		    j] - t7 * inm7[j] - t8 * inm8[j];
	}
	i__ = *n - 8;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t1 * (double)-1. * inm1[j] - t2 * inm2[j] - t3 * inm3[j] 
		    - t4 * inm4[j] - t5 * inm5[j] - t6 * inm6[j] - t7 * inm7[
		    j] - t8 * inm8[j];
	}
	i__ = *n - 6;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t3 * (double)-1. * inm3[j] - t4 * inm4[j] - t5 * inm5[j] 
		    - t6 * inm6[j] - t7 * inm7[j] - t8 * inm8[j];
	}
	i__ = *n - 4;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t5 * (double)-1. * inm5[j] - t6 * inm6[j] - t7 * inm7[j] 
		    - t8 * inm8[j];
	}
	i__ = *n - 2;
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t7 * (double)-1. * inm7[j] - t8 * inm8[j];
	}
/*     end of antisymmetric part */
    }
    return 0;
} /* pconvsetsio8full_ */

/*     Back and forth, linear convolution of sets of points using padding, */
/*     computing data ONLY on ghostpoints (IN PLACE) */

/*     out: input/output array for in place computation */
/*     outm3,outm2,outm1,outp1,outp2,outp3: pointers in output array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int pconvsets3new_(double *outx, double *out, 
	double *outm3, double *outm2, double *outm1, double *
	outp1, double *outp2, double *outp3, int *area, int *
	stride, int *n, int *npad, double *tr, double *tf)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int i__, j;
    double t0, t1, t2, t3;
    int out2;

/*     First, make sure pad is zero for forward phase. */
/*     For pretty code the last number would be npad-1, but technically */
/*     npad-2 (for extra speed) is all that is needed. */
    /* Parameter adjustments */
    --tf;
    --tr;
    --outp3;
    --outp2;
    --outp1;
    --outm1;
    --outm2;
    --outm3;
    --out;
    --outx;

    /* Function Body */
    i__1 = *npad - 2;
    for (i__ = *n; i__ <= i__1; ++i__) {
	out2 = i__ * *stride;
	i__2 = *area + out2;
	for (j = out2 + 1; j <= i__2; ++j) {
	    out[j] = (double)0.;
	}
    }
/*     Reverse phase */
    t0 = tr[1];
    t1 = tr[2];
    t2 = tr[3];
    t3 = tr[4];
    for (i__ = *n - 1; i__ >= 3; --i__) {
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t0 * out[j] + t1 * outm1[j] + t2 * outm2[j] + t3 * outm3[
		    j];
	}
    }
    out2 = *stride << 1;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t1 * outm1[j] + t2 * outm2[j];
    }
    out2 = *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t1 * outm1[j];
    }
    out2 = 0;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j];
    }
/*     Forward phase (padding now ensures room!) */
    t0 = tf[1];
    t1 = tf[2];
    t2 = tf[3];
    t3 = tf[4];
    i__1 = *n - 1;
    for (i__ = 0; i__ <= i__1; i__ += 2) {
	out2 = i__ * *stride;
	i__2 = *area + out2;
	for (j = out2 + 1; j <= i__2; ++j) {
	    outx[j] = t0 * out[j] + t1 * outp1[j] + t2 * outp2[j] + t3 * 
		    outp3[j];
	}
    }
    return 0;
} /* pconvsets3new_ */

/*     Back and forth, linear convolution of sets of points using padding, */
/*     computing data ONLY on ghostpoints (IN PLACE) */

/*     out: input/output array for in place computation */
/*     outm3,outm2,outm1,outp1,outp2,outp3: pointers in output array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int pconvsets8_(double *out, double *outm8, 
	double *outm7, double *outm6, double *outm5, double *
	outm4, double *outm3, double *outm2, double *outm1, 
	double *outp1, double *outp2, double *outp3, double *
	outp4, double *outp5, double *outp6, double *outp7, 
	double *outp8, int *area, int *stride, int *n, 
	int *npad, double *tr, double *tf)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int i__, j;
    double t0, t1, t2, t3, t4, t5, t6, t7, t8;
    int out2;

/*     First, make sure pad is zero for forward phase. */
/*     For pretty code the last number would be npad-1, but technically */
/*     npad-2 (for extra speed) is all that is needed. */
    /* Parameter adjustments */
    --tf;
    --tr;
    --outp8;
    --outp7;
    --outp6;
    --outp5;
    --outp4;
    --outp3;
    --outp2;
    --outp1;
    --outm1;
    --outm2;
    --outm3;
    --outm4;
    --outm5;
    --outm6;
    --outm7;
    --outm8;
    --out;

    /* Function Body */
    i__1 = *npad - 2;
    for (i__ = *n; i__ <= i__1; ++i__) {
	out2 = i__ * *stride;
	i__2 = *area + out2;
	for (j = out2 + 1; j <= i__2; ++j) {
	    out[j] = (double)0.;
	}
    }
/*     Reverse phase */
    t0 = tr[1];
    t1 = tr[2];
    t2 = tr[3];
    t3 = tr[4];
    t4 = tr[5];
    t5 = tr[6];
    t6 = tr[7];
    t7 = tr[8];
    t8 = tr[9];
    for (i__ = *n - 1; i__ >= 8; --i__) {
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t0 * out[j] + t1 * outm1[j] + t2 * outm2[j] + t3 * outm3[
		    j] + t4 * outm4[j] + t5 * outm5[j] + t6 * outm6[j] + t7 * 
		    outm7[j] + t8 * outm8[j];
	}
    }
    out2 = *stride * 7;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t1 * outm1[j] + t2 * outm2[j] + t3 * outm3[j] 
		+ t4 * outm4[j] + t5 * outm5[j] + t6 * outm6[j] + t7 * outm7[
		j];
    }
    out2 = *stride * 6;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t1 * outm1[j] + t2 * outm2[j] + t3 * outm3[j] 
		+ t4 * outm4[j] + t5 * outm5[j] + t6 * outm6[j];
    }
    out2 = *stride * 5;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t1 * outm1[j] + t2 * outm2[j] + t3 * outm3[j] 
		+ t4 * outm4[j] + t5 * outm5[j];
    }
    out2 = *stride << 2;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t1 * outm1[j] + t2 * outm2[j] + t3 * outm3[j] 
		+ t4 * outm4[j];
    }
    out2 = *stride * 3;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t1 * outm1[j] + t2 * outm2[j] + t3 * outm3[j];
    }
    out2 = *stride << 1;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t1 * outm1[j] + t2 * outm2[j];
    }
    out2 = *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t1 * outm1[j];
    }
    out2 = 0;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j];
    }
/*     Forward phase (padding now ensures room!) */
    t0 = tf[1];
    t1 = tf[2];
    t2 = tf[3];
    t3 = tf[4];
    t4 = tf[5];
    t5 = tf[6];
    t6 = tf[7];
    t7 = tf[8];
    t8 = tf[9];
    i__1 = *n - 1;
    for (i__ = 0; i__ <= i__1; i__ += 2) {
	out2 = i__ * *stride;
	i__2 = *area + out2;
	for (j = out2 + 1; j <= i__2; ++j) {
	    out[j] = t0 * out[j] + t1 * outp1[j] + t2 * outp2[j] + t3 * outp3[
		    j] + t4 * outp4[j] + t5 * outp5[j] + t6 * outp6[j] + t7 * 
		    outp7[j] + t8 * outp8[j];
	}
    }
    return 0;
} /* pconvsets8_ */

/*     Back and forth, linear convolution of sets of points using padding */
/*     computing data ONLY on ghostpoints, AND folding in input of a */
/*     different data set (IN PLACE) */

/*     out: input/output array for in place computation */
/*     outm3,outm2,outm1,outp1,outp2,outp3: pointers in output array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     in: input/output array for in place computation */
/*     inm3,inm2,inm1,inp1,inp2,inp3: pointers in input array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     area: total size of out sets */
/*     stride: separation between out data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     stridel: separation between in data sets (stride=&in-&inm1) */
/*     fptl, lptl: first and last data components actually present in input */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/*     eflag: mod(,2) of present line (tells if special ghost handling needed) */
/*     zcflag: =1 means we can count on zero ghosts and need special handling */
/* Subroutine */ int pconvsetsi3old_(double *out, double *outm3, 
	double *outm2, double *outm1, double *outp1, double *
	outp2, double *outp3, double *in, double *inm3, 
	double *inm2, double *inm1, double *inp1, double *
	inp2, double *inp3, int *area, int *stride, int *n, 
	int *npad, int *stridel, int *fptl, int *lptl, 
	double *tr, double *tf, int *eflag, int *zcflag)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    extern /* Subroutine */ int lineioo3_(double *, double *, 
	    double *, double *, double *, int *, int *, 
	    int *, int *, int *, int *, double *, 
	    double *, double *, double *);
    int i__, j;
    extern /* Subroutine */ int zeroline3_(double *, double *, 
	    double *, double *, double *, int *, int *, 
	    int *, int *, int *, int *, double *, 
	    double *, double *, double *);
    double t0, t1, t2, t3;
    extern /* Subroutine */ int lineio3_(double *, double *, 
	    double *, double *, double *, int *, int *, 
	    int *, int *, int *, int *, double *, 
	    double *, double *, double *), lineioe3_(double *,
	     double *, double *, double *, double *, int *
	    , int *, int *, int *, int *, int *, 
	    double *, double *, double *, double *);
    int out2;

/*     Reverse phase */
    /* Parameter adjustments */
    --tf;
    --tr;
    --inp3;
    --inp2;
    --inp1;
    --inm1;
    --inm2;
    --inm3;
    --in;
    --outp3;
    --outp2;
    --outp1;
    --outm1;
    --outm2;
    --outm3;
    --out;

    /* Function Body */
    t0 = tr[1];
    t1 = tr[2];
    t2 = tr[3];
    t3 = tr[4];
/*     First, make sure pad is zero for forward phase. */
/*     For pretty code the last number would be npad-1, but technically */
/*     npad-2 (for extra speed) is all that is needed. */
    i__1 = *npad - 2;
    for (i__ = *n; i__ <= i__1; ++i__) {
	zeroline3_(&out[1], &in[1], &inm1[1], &inm2[1], &inm3[1], &i__, 
		stridel, stride, fptl, lptl, area, &t0, &t1, &t2, &t3);
    }
    i__1 = *n - 1;
    zeroline3_(&out[1], &in[1], &inm1[1], &inm2[1], &inm3[1], &i__1, stridel, 
	    stride, fptl, lptl, area, &t0, &t1, &t2, &t3);
    if (*eflag == 0 && *zcflag == 1) {
/*     For Idag (zcflag=1) we are coming from real space, and so can't */
/*     depend on the ghostpoints being zero.  Thus, on the even planes (eflag), */
/*     we must skip over the data in the appropriate lines for the even */
/*     points.  This is what the line??[eo] routines do. */
/*     For the UNUSED lines below, we point to "inm3" to avoid seg faults */
/*     because we know "inm3" will always be in range (unless the box is */
/*     ridiculously small).  Although multiplied by zero, the code still */
/*     accesses the dummy data! */
	i__1 = *n - 2;
	lineioe3_(&out[1], &inm3[1], &inm3[1], &inm3[1], &inm3[1], &i__1, 
		stridel, stride, fptl, lptl, area, &c_b16, &c_b16, &c_b16, &
		t3);
	i__1 = *n - 3;
	lineioo3_(&out[1], &inm3[1], &inm3[1], &inm2[1], &inm3[1], &i__1, 
		stridel, stride, fptl, lptl, area, &c_b16, &c_b16, &t2, &t3);
	i__1 = *n - 4;
	lineioe3_(&out[1], &inm3[1], &inm1[1], &inm2[1], &inm3[1], &i__1, 
		stridel, stride, fptl, lptl, area, &c_b16, &t1, &t2, &t3);
	for (i__ = *n - 5; i__ >= 5; --i__) {
	    if (i__ % 2 == 0) {
		lineioe3_(&out[1], &in[1], &inm1[1], &inm2[1], &inm3[1], &i__,
			 stridel, stride, fptl, lptl, area, &t0, &t1, &t2, &
			t3);
	    } else {
		lineioo3_(&out[1], &in[1], &inm1[1], &inm2[1], &inm3[1], &i__,
			 stridel, stride, fptl, lptl, area, &t0, &t1, &t2, &
			t3);
	    }
	}
	lineioe3_(&out[1], &in[1], &inm1[1], &inm2[1], &in[1], &c__4, stridel,
		 stride, fptl, lptl, area, &t0, &t1, &t2, &c_b16);
	lineioo3_(&out[1], &in[1], &inm1[1], &in[1], &in[1], &c__3, stridel, 
		stride, fptl, lptl, area, &t0, &t1, &c_b16, &c_b16);
	lineioe3_(&out[1], &in[1], &in[1], &in[1], &in[1], &c__2, stridel, 
		stride, fptl, lptl, area, &t0, &c_b16, &c_b16, &c_b16);
    } else {
/*     For the UNUSED lines below, we point to "inm3" to avoid seg faults */
/*     because we know "inm3" will always be in range (unless the box is */
/*     ridiculously small).  Although multiplied by zero, the code still */
/*     accesses the dummy data! */
	i__1 = *n - 2;
	lineio3_(&out[1], &inm3[1], &inm3[1], &inm3[1], &inm3[1], &i__1, 
		stridel, stride, fptl, lptl, area, &c_b16, &c_b16, &c_b16, &
		t3);
	i__1 = *n - 3;
	lineio3_(&out[1], &inm3[1], &inm3[1], &inm2[1], &inm3[1], &i__1, 
		stridel, stride, fptl, lptl, area, &c_b16, &c_b16, &t2, &t3);
	i__1 = *n - 4;
	lineio3_(&out[1], &inm3[1], &inm1[1], &inm2[1], &inm3[1], &i__1, 
		stridel, stride, fptl, lptl, area, &c_b16, &t1, &t2, &t3);
	for (i__ = *n - 5; i__ >= 5; --i__) {
	    lineio3_(&out[1], &in[1], &inm1[1], &inm2[1], &inm3[1], &i__, 
		    stridel, stride, fptl, lptl, area, &t0, &t1, &t2, &t3);
	}
/*     For the UNUSED lines below, we must point to "in" to avoid seg */
/*     faults.  On this end of the convolution, we know that "in" will */
/*     always be in range. */
	lineio3_(&out[1], &in[1], &inm1[1], &inm2[1], &in[1], &c__4, stridel, 
		stride, fptl, lptl, area, &t0, &t1, &t2, &c_b16);
	lineio3_(&out[1], &in[1], &inm1[1], &in[1], &in[1], &c__3, stridel, 
		stride, fptl, lptl, area, &t0, &t1, &c_b16, &c_b16);
	lineio3_(&out[1], &in[1], &in[1], &in[1], &in[1], &c__2, stridel, 
		stride, fptl, lptl, area, &t0, &c_b16, &c_b16, &c_b16);
    }
    zeroline3_(&out[1], &in[1], &inm1[1], &inm2[1], &inm3[1], &c__1, stridel, 
	    stride, fptl, lptl, area, &t0, &t1, &t2, &t3);
    zeroline3_(&out[1], &in[1], &inm1[1], &inm2[1], &inm3[1], &c__0, stridel, 
	    stride, fptl, lptl, area, &t0, &t1, &t2, &t3);
/*     Forward phase (padding now ensures room!) */
    t0 = tf[1];
    t1 = tf[2];
    t2 = tf[3];
    t3 = tf[4];
    i__1 = *n - 1;
    for (i__ = 0; i__ <= i__1; i__ += 2) {
	out2 = i__ * *stride;
	i__2 = *area + out2;
	for (j = out2 + 1; j <= i__2; ++j) {
	    out[j] = t0 * out[j] + t1 * outp1[j] + t2 * outp2[j] + t3 * outp3[
		    j];
	}
    }
    return 0;
} /* pconvsetsi3old_ */

/*     Back and forth, linear convolution of sets of points using padding */
/*     computing data ONLY on ghostpoints, AND folding in input of a */
/*     different data set (IN PLACE) */

/*     out: input/output array for in place computation */
/*     outm3,outm2,outm1,outp1,outp2,outp3: pointers in output array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     in: input/output array for in place computation */
/*     inm3,inm2,inm1,inp1,inp2,inp3: pointers in input array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     area: total size of out sets */
/*     stride: separation between out data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     stridel: separation between in data sets (stride=&in-&inm1) */
/*     fptl, lptl: first and last data components actually present in input */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/*     eflag: mod(,2) of present line (tells if special ghost handling needed) */
/*     zcflag: =1 means we can count on zero ghosts and need special handling */
/* Subroutine */ int pconvsetsi3new_(double *out, double *in, 
	double *inm3, double *inm2, double *inm1, double *
	inp1, double *inp2, double *inp3, int *area, int *
	stride, int *n, int *npad, int *stridel, int *fptl, 
	int *lptl, double *filt, int *eflag, int *zcflag)
{
    /* System generated locals */
    int i__1;

    /* Local variables */
    int i__;
    extern /* Subroutine */ int zeroline3_(double *, double *, 
	    double *, double *, double *, int *, int *, 
	    int *, int *, int *, int *, double *, 
	    double *, double *, double *);
    double t0, t1, t2, t3;
    extern /* Subroutine */ int lineio3fullacc_(double *, double *, 
	    double *, double *, double *, double *, 
	    double *, double *, int *, int *, int *, 
	    int *, int *, int *, double *, double *, 
	    double *, double *, double *, double *, 
	    double *), lineio3full_(double *, double *, 
	    double *, double *, double *, double *, 
	    double *, double *, int *, int *, int *, 
	    int *, int *, int *, double *, double *, 
	    double *, double *, double *, double *, 
	    double *);

/*     Filter coefficients */
    /* Parameter adjustments */
    --filt;
    --inp3;
    --inp2;
    --inp1;
    --inm1;
    --inm2;
    --inm3;
    --in;
    --out;

    /* Function Body */
    t0 = filt[1];
    t1 = filt[2];
    t2 = filt[3];
    t3 = filt[4];
    i__1 = *npad - 2;
    for (i__ = 0; i__ <= i__1; ++i__) {
	zeroline3_(&out[1], &in[1], &inm1[1], &inm2[1], &inm3[1], &i__, 
		stridel, stride, fptl, lptl, area, &t0, &t1, &t2, &t3);
    }
/*     For the UNUSED lines below, we point to "inm3" or "inp3" to avoid */
/*     seg faults because we know "inm3" or "inp3" will always be in range */
/*     (unless the box is ridiculously small).  Although multiplied */
/*     by zero, the code still accesses the dummy data! */
    if (*eflag == 0 && *zcflag == 1) {
	lineio3full_(&out[1], &inp3[1], &inp3[1], &inp3[1], &inp3[1], &inp3[1]
		, &inp3[1], &inp3[1], &c__0, stridel, stride, fptl, lptl, 
		area, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &t3);
	lineio3full_(&out[1], &inp3[1], &inp3[1], &inp3[1], &in[1], &inp1[1], 
		&inp2[1], &inp3[1], &c__2, stridel, stride, fptl, lptl, area, 
		&c_b16, &c_b16, &c_b16, &t0, &t1, &t2, &t3);
	lineio3full_(&out[1], &inp3[1], &inp3[1], &inm1[1], &in[1], &inp1[1], 
		&inp2[1], &inp3[1], &c__4, stridel, stride, fptl, lptl, area, 
		&c_b16, &t2, &t1, &t0, &t1, &t2, &t3);
	i__1 = *n - 8;
	for (i__ = 6; i__ <= i__1; i__ += 2) {
	    lineio3full_(&out[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[
		    1], &inp2[1], &inp3[1], &i__, stridel, stride, fptl, lptl,
		     area, &t3, &t2, &t1, &t0, &t1, &t2, &t3);
	}
	i__1 = *n - 6;
	lineio3full_(&out[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], 
		&inm3[1], &inm3[1], &i__1, stridel, stride, fptl, lptl, area, 
		&t3, &t2, &t1, &t0, &t1, &c_b16, &c_b16);
	i__1 = *n - 4;
	lineio3full_(&out[1], &inm3[1], &inm2[1], &inm1[1], &inm3[1], &inm3[1]
		, &inm3[1], &inm3[1], &i__1, stridel, stride, fptl, lptl, 
		area, &t3, &t2, &t1, &c_b16, &c_b16, &c_b16, &c_b16);
	i__1 = *n - 2;
	lineio3full_(&out[1], &inm3[1], &inm3[1], &inm3[1], &inm3[1], &inm3[1]
		, &inm3[1], &inm3[1], &i__1, stridel, stride, fptl, lptl, 
		area, &t3, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16);
    } else {
	lineio3fullacc_(&out[1], &inp3[1], &inp3[1], &inp3[1], &inp3[1], &
		inp3[1], &inp3[1], &inp3[1], &c__0, stridel, stride, fptl, 
		lptl, area, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		t3);
	lineio3fullacc_(&out[1], &inp3[1], &inp3[1], &inp3[1], &in[1], &inp1[
		1], &inp2[1], &inp3[1], &c__2, stridel, stride, fptl, lptl, 
		area, &c_b16, &c_b16, &c_b16, &t0, &t1, &t2, &t3);
	lineio3fullacc_(&out[1], &inp3[1], &inp3[1], &inm1[1], &in[1], &inp1[
		1], &inp2[1], &inp3[1], &c__4, stridel, stride, fptl, lptl, 
		area, &c_b16, &t2, &t1, &t0, &t1, &t2, &t3);
	i__1 = *n - 8;
	for (i__ = 6; i__ <= i__1; i__ += 2) {
	    lineio3fullacc_(&out[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &
		    inp1[1], &inp2[1], &inp3[1], &i__, stridel, stride, fptl, 
		    lptl, area, &t3, &t2, &t1, &t0, &t1, &t2, &t3);
	}
	i__1 = *n - 6;
	lineio3fullacc_(&out[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[
		1], &inm3[1], &inm3[1], &i__1, stridel, stride, fptl, lptl, 
		area, &t3, &t2, &t1, &t0, &t1, &c_b16, &c_b16);
	i__1 = *n - 4;
	lineio3fullacc_(&out[1], &inm3[1], &inm2[1], &inm1[1], &inm3[1], &
		inm3[1], &inm3[1], &inm3[1], &i__1, stridel, stride, fptl, 
		lptl, area, &t3, &t2, &t1, &c_b16, &c_b16, &c_b16, &c_b16);
	i__1 = *n - 2;
	lineio3fullacc_(&out[1], &inm3[1], &inm3[1], &inm3[1], &inm3[1], &
		inm3[1], &inm3[1], &inm3[1], &i__1, stridel, stride, fptl, 
		lptl, area, &t3, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		c_b16);
    }
    return 0;
} /* pconvsetsi3new_ */

/*     Back and forth, linear convolution of sets of points using padding */
/*     computing data ONLY on ghostpoints, AND folding in input of a */
/*     different data set (IN PLACE) */

/*     out: input/output array for in place computation */
/*     outm3,outm2,outm1,outp1,outp2,outp3: pointers in output array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     in: input/output array for in place computation */
/*     inm3,inm2,inm1,inp1,inp2,inp3: pointers in input array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     area: total size of out sets */
/*     stride: separation between out data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     stridel: separation between in data sets (stride=&in-&inm1) */
/*     fptl, lptl: first and last data components actually present in input */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/*     eflag: mod(,2) of present line (tells if special ghost handling needed) */
/*     zcflag: =1 means we can count on zero ghosts and need special handling */
/* Subroutine */ int pconvsetsi8new_(double *out, double *in, 
	double *inm8, double *inm7, double *inm6, double *
	inm5, double *inm4, double *inm3, double *inm2, 
	double *inm1, double *inp1, double *inp2, double *
	inp3, double *inp4, double *inp5, double *inp6, 
	double *inp7, double *inp8, int *area, int *stride, 
	int *n, int *npad, int *stridel, int *fptl, int *
	lptl, double *filt, int *eflag, int *zcflag)
{
    /* System generated locals */
    int i__1;
    double d__1, d__2, d__3, d__4, d__5, d__6, d__7, d__8;

    /* Local variables */
    int i__;
    double t0, t1, t2, t3, t4, t5, t6, t7, t8;
    extern /* Subroutine */ int lineio8fullacc_(double *, double *, 
	    double *, double *, double *, double *, 
	    double *, double *, double *, double *, 
	    double *, double *, double *, double *, 
	    double *, double *, double *, double *, int *,
	     int *, int *, int *, int *, int *, 
	    double *, double *, double *, double *, 
	    double *, double *, double *, double *, 
	    double *, double *, double *, double *, 
	    double *, double *, double *, double *, 
	    double *), lineio8full_(double *, double *, 
	    double *, double *, double *, double *, 
	    double *, double *, double *, double *, 
	    double *, double *, double *, double *, 
	    double *, double *, double *, double *, int *,
	     int *, int *, int *, int *, int *, 
	    double *, double *, double *, double *, 
	    double *, double *, double *, double *, 
	    double *, double *, double *, double *, 
	    double *, double *, double *, double *, 
	    double *);

/*     Filter coefficients */
    /* Parameter adjustments */
    --filt;
    --inp8;
    --inp7;
    --inp6;
    --inp5;
    --inp4;
    --inp3;
    --inp2;
    --inp1;
    --inm1;
    --inm2;
    --inm3;
    --inm4;
    --inm5;
    --inm6;
    --inm7;
    --inm8;
    --in;
    --out;

    /* Function Body */
    t0 = filt[1];
    t1 = filt[2];
    t2 = filt[3];
    t3 = filt[4];
    t4 = filt[5];
    t5 = filt[6];
    t6 = filt[7];
    t7 = filt[8];
    t8 = filt[9];
/*     For the UNUSED lines below, we point to "inm3" or "inp3" to avoid */
/*     seg faults because we know "inm3" or "inp3" will always be in range */
/*     (unless the box is ridiculously small).  Although multiplied */
/*     by zero, the code still accesses the dummy data! */
    if (t0 != (double)0.) {
/*     symmetric filter */
	if (FALSE_) {
/*      if (eflag.eq.0 .and. zcflag.eq.1) then */
	    lineio8full_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1],
		     &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[
		    1], &inp8[1], &c__0, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &t3);
	    lineio8full_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1],
		     &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp6[1], &inp7[
		    1], &inp8[1], &c__2, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    t6, &t7, &t8);
	    lineio8full_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1],
		     &inp8[1], &inp8[1], &inp4[1], &inp5[1], &inp6[1], &inp7[
		    1], &inp8[1], &c__4, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &t4, &t5, &t6, &t7,
		     &t8);
	    lineio8full_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1],
		     &inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[
		    1], &inp8[1], &c__6, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    lineio8full_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inp8[1], &inp8[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[1],
		     &inp8[1], &c__8, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &t0, &t1, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    lineio8full_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[1],
		     &inp8[1], &c__10, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &t2, &t1, &
		    t0, &t1, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    lineio8full_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[1],
		     &inp8[1], &c__12, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &t4, &t3, &t2, &t1, &t0, &
		    t1, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    lineio8full_(&out[1], &inp8[1], &inp8[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[1],
		     &inp8[1], &c__14, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &t6, &t5, &t4, &t3, &t2, &t1, &t0, &t1, &
		    t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    i__1 = *n - 18;
	    for (i__ = 16; i__ <= i__1; i__ += 2) {
		lineio8full_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], 
			&inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[
			1], &inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], 
			&inp7[1], &inp8[1], &i__, stridel, stride, fptl, lptl,
			 area, &t8, &t7, &t6, &t5, &t4, &t3, &t2, &t1, &t0, &
			t1, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    }
	    i__1 = *n - 16;
	    lineio8full_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[1],
		     &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &t8, 
		    &t7, &t6, &t5, &t4, &t3, &t2, &t1, &t0, &t1, &t2, &t3, &
		    t4, &t5, &t6, &t7, &c_b16);
	    i__1 = *n - 14;
	    lineio8full_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inm8[1], &inm8[1],
		     &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &t8, 
		    &t7, &t6, &t5, &t4, &t3, &t2, &t1, &t0, &t1, &t2, &t3, &
		    t4, &t5, &c_b16, &c_b16, &c_b16);
	    i__1 = *n - 12;
	    lineio8full_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1],
		     &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &t8, 
		    &t7, &t6, &t5, &t4, &t3, &t2, &t1, &t0, &t1, &t2, &t3, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16);
	    i__1 = *n - 10;
	    lineio8full_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1],
		     &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &t8, 
		    &t7, &t6, &t5, &t4, &t3, &t2, &t1, &t0, &t1, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16);
	    i__1 = *n - 8;
	    lineio8full_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &inm8[1], &inm8[1],
		     &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[
		    1], &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &
		    t8, &t7, &t6, &t5, &t4, &t3, &t2, &t1, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16);
	    i__1 = *n - 6;
	    lineio8full_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1],
		     &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[
		    1], &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &
		    t8, &t7, &t6, &t5, &t4, &t3, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16);
	    i__1 = *n - 4;
	    lineio8full_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1],
		     &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[
		    1], &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &
		    t8, &t7, &t6, &t5, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16,
		     &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16);
	    i__1 = *n - 2;
	    lineio8full_(&out[1], &inm8[1], &inm7[1], &inm8[1], &inm8[1], &
		    inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1],
		     &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[
		    1], &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &
		    t8, &t7, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16);
	} else {
	    lineio8fullacc_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1],
		     &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[
		    1], &inp8[1], &c__0, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &t8);
	    lineio8fullacc_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1],
		     &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp6[1], &inp7[
		    1], &inp8[1], &c__2, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    t6, &t7, &t8);
	    lineio8fullacc_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1],
		     &inp8[1], &inp8[1], &inp4[1], &inp5[1], &inp6[1], &inp7[
		    1], &inp8[1], &c__4, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &t4, &t5, &t6, &t7,
		     &t8);
	    lineio8fullacc_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1],
		     &inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[
		    1], &inp8[1], &c__6, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    lineio8fullacc_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inp8[1], &inp8[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[1],
		     &inp8[1], &c__8, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &t0, &t1, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    lineio8fullacc_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[1],
		     &inp8[1], &c__10, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &t2, &t1, &
		    t0, &t1, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    lineio8fullacc_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[1],
		     &inp8[1], &c__12, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &t4, &t3, &t2, &t1, &t0, &
		    t1, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    lineio8fullacc_(&out[1], &inp8[1], &inp8[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[1],
		     &inp8[1], &c__14, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &t6, &t5, &t4, &t3, &t2, &t1, &t0, &t1, &
		    t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    i__1 = *n - 18;
	    for (i__ = 16; i__ <= i__1; i__ += 2) {
		lineio8fullacc_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[
			1], &inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &
			inp1[1], &inp2[1], &inp3[1], &inp4[1], &inp5[1], &
			inp6[1], &inp7[1], &inp8[1], &i__, stridel, stride, 
			fptl, lptl, area, &t8, &t7, &t6, &t5, &t4, &t3, &t2, &
			t1, &t0, &t1, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    }
	    i__1 = *n - 16;
	    lineio8fullacc_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[1],
		     &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &t8, 
		    &t7, &t6, &t5, &t4, &t3, &t2, &t1, &t0, &t1, &t2, &t3, &
		    t4, &t5, &t6, &t7, &c_b16);
	    i__1 = *n - 14;
	    lineio8fullacc_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inm8[1], &inm8[1],
		     &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &t8, 
		    &t7, &t6, &t5, &t4, &t3, &t2, &t1, &t0, &t1, &t2, &t3, &
		    t4, &t5, &c_b16, &c_b16, &c_b16);
	    i__1 = *n - 12;
	    lineio8fullacc_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1],
		     &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &t8, 
		    &t7, &t6, &t5, &t4, &t3, &t2, &t1, &t0, &t1, &t2, &t3, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16);
	    i__1 = *n - 10;
	    lineio8fullacc_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1],
		     &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &t8, 
		    &t7, &t6, &t5, &t4, &t3, &t2, &t1, &t0, &t1, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16);
	    i__1 = *n - 8;
	    lineio8fullacc_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &inm8[1], &inm8[1],
		     &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[
		    1], &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &
		    t8, &t7, &t6, &t5, &t4, &t3, &t2, &t1, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16);
	    i__1 = *n - 6;
	    lineio8fullacc_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1],
		     &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[
		    1], &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &
		    t8, &t7, &t6, &t5, &t4, &t3, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16);
	    i__1 = *n - 4;
	    lineio8fullacc_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1],
		     &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[
		    1], &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &
		    t8, &t7, &t6, &t5, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16,
		     &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16);
	    i__1 = *n - 2;
	    lineio8fullacc_(&out[1], &inm8[1], &inm7[1], &inm8[1], &inm8[1], &
		    inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1],
		     &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[
		    1], &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &
		    t8, &t7, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16);
	}
/*     end of symmetric part */
    } else {
/*     antisymmetric filter */
	if (FALSE_) {
/*      if (eflag.eq.0 .and. zcflag.eq.1) then */
	    lineio8full_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1],
		     &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[
		    1], &inp8[1], &c__0, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &t3);
	    lineio8full_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1],
		     &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp6[1], &inp7[
		    1], &inp8[1], &c__2, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    t6, &t7, &t8);
	    lineio8full_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1],
		     &inp8[1], &inp8[1], &inp4[1], &inp5[1], &inp6[1], &inp7[
		    1], &inp8[1], &c__4, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &t4, &t5, &t6, &t7,
		     &t8);
	    lineio8full_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1],
		     &inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[
		    1], &inp8[1], &c__6, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    lineio8full_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inp8[1], &inp8[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[1],
		     &inp8[1], &c__8, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &t0, &t1, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    lineio8full_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[1],
		     &inp8[1], &c__10, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &t2, &t1, &
		    t0, &t1, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    lineio8full_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[1],
		     &inp8[1], &c__12, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &t4, &t3, &t2, &t1, &t0, &
		    t1, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    lineio8full_(&out[1], &inp8[1], &inp8[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[1],
		     &inp8[1], &c__14, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &t6, &t5, &t4, &t3, &t2, &t1, &t0, &t1, &
		    t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    i__1 = *n - 18;
	    for (i__ = 16; i__ <= i__1; i__ += 2) {
		lineio8full_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], 
			&inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[
			1], &inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], 
			&inp7[1], &inp8[1], &i__, stridel, stride, fptl, lptl,
			 area, &t8, &t7, &t6, &t5, &t4, &t3, &t2, &t1, &t0, &
			t1, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    }
	    i__1 = *n - 16;
	    lineio8full_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[1],
		     &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &t8, 
		    &t7, &t6, &t5, &t4, &t3, &t2, &t1, &t0, &t1, &t2, &t3, &
		    t4, &t5, &t6, &t7, &c_b16);
	    i__1 = *n - 14;
	    lineio8full_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inm8[1], &inm8[1],
		     &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &t8, 
		    &t7, &t6, &t5, &t4, &t3, &t2, &t1, &t0, &t1, &t2, &t3, &
		    t4, &t5, &c_b16, &c_b16, &c_b16);
	    i__1 = *n - 12;
	    lineio8full_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1],
		     &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &t8, 
		    &t7, &t6, &t5, &t4, &t3, &t2, &t1, &t0, &t1, &t2, &t3, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16);
	    i__1 = *n - 10;
	    lineio8full_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1],
		     &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &t8, 
		    &t7, &t6, &t5, &t4, &t3, &t2, &t1, &t0, &t1, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16);
	    i__1 = *n - 8;
	    lineio8full_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &inm8[1], &inm8[1],
		     &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[
		    1], &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &
		    t8, &t7, &t6, &t5, &t4, &t3, &t2, &t1, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16);
	    i__1 = *n - 6;
	    lineio8full_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1],
		     &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[
		    1], &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &
		    t8, &t7, &t6, &t5, &t4, &t3, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16);
	    i__1 = *n - 4;
	    lineio8full_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1],
		     &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[
		    1], &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &
		    t8, &t7, &t6, &t5, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16,
		     &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16);
	    i__1 = *n - 2;
	    lineio8full_(&out[1], &inm8[1], &inm7[1], &inm8[1], &inm8[1], &
		    inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1],
		     &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[
		    1], &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &
		    t8, &t7, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16);
/*     Is any of the above code ever called?  Is 2 ever greater than 3? */
	} else {
	    lineio8fullacc_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1],
		     &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[
		    1], &inp8[1], &c__0, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &t8);
	    lineio8fullacc_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1],
		     &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp6[1], &inp7[
		    1], &inp8[1], &c__2, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    t6, &t7, &t8);
	    lineio8fullacc_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1],
		     &inp8[1], &inp8[1], &inp4[1], &inp5[1], &inp6[1], &inp7[
		    1], &inp8[1], &c__4, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &t4, &t5, &t6, &t7,
		     &t8);
	    lineio8fullacc_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1],
		     &inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[
		    1], &inp8[1], &c__6, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    lineio8fullacc_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inp8[1], &inp8[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[1],
		     &inp8[1], &c__8, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &t0, &t1, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    d__1 = t2 * (double)-1.;
	    d__2 = t1 * (double)-1.;
	    lineio8fullacc_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inp8[1], &inp8[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[1],
		     &inp8[1], &c__10, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &d__1, &
		    d__2, &t0, &t1, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    d__1 = t4 * (double)-1.;
	    d__2 = t3 * (double)-1.;
	    d__3 = t2 * (double)-1.;
	    d__4 = t1 * (double)-1.;
	    lineio8fullacc_(&out[1], &inp8[1], &inp8[1], &inp8[1], &inp8[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[1],
		     &inp8[1], &c__12, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &c_b16, &c_b16, &d__1, &d__2, &d__3, &d__4,
		     &t0, &t1, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    d__1 = t6 * (double)-1.;
	    d__2 = t5 * (double)-1.;
	    d__3 = t4 * (double)-1.;
	    d__4 = t3 * (double)-1.;
	    d__5 = t2 * (double)-1.;
	    d__6 = t1 * (double)-1.;
	    lineio8fullacc_(&out[1], &inp8[1], &inp8[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[1],
		     &inp8[1], &c__14, stridel, stride, fptl, lptl, area, &
		    c_b16, &c_b16, &d__1, &d__2, &d__3, &d__4, &d__5, &d__6, &
		    t0, &t1, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
	    i__1 = *n - 18;
	    for (i__ = 16; i__ <= i__1; i__ += 2) {
		d__1 = t8 * (double)-1.;
		d__2 = t7 * (double)-1.;
		d__3 = t6 * (double)-1.;
		d__4 = t5 * (double)-1.;
		d__5 = t4 * (double)-1.;
		d__6 = t3 * (double)-1.;
		d__7 = t2 * (double)-1.;
		d__8 = t1 * (double)-1.;
		lineio8fullacc_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[
			1], &inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &
			inp1[1], &inp2[1], &inp3[1], &inp4[1], &inp5[1], &
			inp6[1], &inp7[1], &inp8[1], &i__, stridel, stride, 
			fptl, lptl, area, &d__1, &d__2, &d__3, &d__4, &d__5, &
			d__6, &d__7, &d__8, &t0, &t1, &t2, &t3, &t4, &t5, &t6,
			 &t7, &t8);
	    }
	    i__1 = *n - 16;
	    d__1 = t8 * (double)-1.;
	    d__2 = t7 * (double)-1.;
	    d__3 = t6 * (double)-1.;
	    d__4 = t5 * (double)-1.;
	    d__5 = t4 * (double)-1.;
	    d__6 = t3 * (double)-1.;
	    d__7 = t2 * (double)-1.;
	    d__8 = t1 * (double)-1.;
	    lineio8fullacc_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inp6[1], &inp7[1],
		     &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &
		    d__1, &d__2, &d__3, &d__4, &d__5, &d__6, &d__7, &d__8, &
		    t0, &t1, &t2, &t3, &t4, &t5, &t6, &t7, &c_b16);
	    i__1 = *n - 14;
	    d__1 = t8 * (double)-1.;
	    d__2 = t7 * (double)-1.;
	    d__3 = t6 * (double)-1.;
	    d__4 = t5 * (double)-1.;
	    d__5 = t4 * (double)-1.;
	    d__6 = t3 * (double)-1.;
	    d__7 = t2 * (double)-1.;
	    d__8 = t1 * (double)-1.;
	    lineio8fullacc_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inp4[1], &inp5[1], &inm8[1], &inm8[1],
		     &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &
		    d__1, &d__2, &d__3, &d__4, &d__5, &d__6, &d__7, &d__8, &
		    t0, &t1, &t2, &t3, &t4, &t5, &c_b16, &c_b16, &c_b16);
	    i__1 = *n - 12;
	    d__1 = t8 * (double)-1.;
	    d__2 = t7 * (double)-1.;
	    d__3 = t6 * (double)-1.;
	    d__4 = t5 * (double)-1.;
	    d__5 = t4 * (double)-1.;
	    d__6 = t3 * (double)-1.;
	    d__7 = t2 * (double)-1.;
	    d__8 = t1 * (double)-1.;
	    lineio8fullacc_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inp2[1], &inp3[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1],
		     &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &
		    d__1, &d__2, &d__3, &d__4, &d__5, &d__6, &d__7, &d__8, &
		    t0, &t1, &t2, &t3, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16)
		    ;
	    i__1 = *n - 10;
	    d__1 = t8 * (double)-1.;
	    d__2 = t7 * (double)-1.;
	    d__3 = t6 * (double)-1.;
	    d__4 = t5 * (double)-1.;
	    d__5 = t4 * (double)-1.;
	    d__6 = t3 * (double)-1.;
	    d__7 = t2 * (double)-1.;
	    d__8 = t1 * (double)-1.;
	    lineio8fullacc_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &in[1], &inp1[1], &
		    inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1],
		     &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &
		    d__1, &d__2, &d__3, &d__4, &d__5, &d__6, &d__7, &d__8, &
		    t0, &t1, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16);
	    i__1 = *n - 8;
	    d__1 = t8 * (double)-1.;
	    d__2 = t7 * (double)-1.;
	    d__3 = t6 * (double)-1.;
	    d__4 = t5 * (double)-1.;
	    d__5 = t4 * (double)-1.;
	    d__6 = t3 * (double)-1.;
	    d__7 = t2 * (double)-1.;
	    d__8 = t1 * (double)-1.;
	    lineio8fullacc_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm2[1], &inm1[1], &inm8[1], &inm8[1],
		     &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[
		    1], &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &
		    d__1, &d__2, &d__3, &d__4, &d__5, &d__6, &d__7, &d__8, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16);
	    i__1 = *n - 6;
	    d__1 = t8 * (double)-1.;
	    d__2 = t7 * (double)-1.;
	    d__3 = t6 * (double)-1.;
	    d__4 = t5 * (double)-1.;
	    d__5 = t4 * (double)-1.;
	    d__6 = t3 * (double)-1.;
	    lineio8fullacc_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm4[1], &inm3[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1],
		     &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[
		    1], &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &
		    d__1, &d__2, &d__3, &d__4, &d__5, &d__6, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16);
	    i__1 = *n - 4;
	    d__1 = t8 * (double)-1.;
	    d__2 = t7 * (double)-1.;
	    d__3 = t6 * (double)-1.;
	    d__4 = t5 * (double)-1.;
	    lineio8fullacc_(&out[1], &inm8[1], &inm7[1], &inm6[1], &inm5[1], &
		    inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1],
		     &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[
		    1], &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &
		    d__1, &d__2, &d__3, &d__4, &c_b16, &c_b16, &c_b16, &c_b16,
		     &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16);
	    i__1 = *n - 2;
	    d__1 = t8 * (double)-1.;
	    d__2 = t7 * (double)-1.;
	    lineio8fullacc_(&out[1], &inm8[1], &inm7[1], &inm8[1], &inm8[1], &
		    inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1],
		     &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[
		    1], &inm8[1], &i__1, stridel, stride, fptl, lptl, area, &
		    d__1, &d__2, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
		    c_b16, &c_b16, &c_b16);
	}
/*     end of antisymmetric part */
    }
    return 0;
} /* pconvsetsi8new_ */

/*     Back and forth, linear convolution of sets of points using padding */
/*     computing data ONLY on ghostpoints, AND folding in input of a */
/*     different data set (IN PLACE) */

/*     out: input/output array for in place computation */
/*     outm3,outm2,outm1,outp1,outp2,outp3: pointers in output array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     in: input/output array for in place computation */
/*     inm3,inm2,inm1,inp1,inp2,inp3: pointers in input array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     area: total size of out sets */
/*     stride: separation between out data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     stridel: separation between in data sets (stride=&in-&inm1) */
/*     fptl, lptl: first and last data components actually present in input */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/*     eflag: mod(,2) of present line (tells if special ghost handling needed) */
/*     zcflag: =1 means we can count on zero ghosts and need special handling */
/* Subroutine */ int pconvsetsi8_(double *out, double *outm8, 
	double *outm7, double *outm6, double *outm5, double *
	outm4, double *outm3, double *outm2, double *outm1, 
	double *outp1, double *outp2, double *outp3, double *
	outp4, double *outp5, double *outp6, double *outp7, 
	double *outp8, double *in, double *inm8, double *inm7,
	 double *inm6, double *inm5, double *inm4, double *
	inm3, double *inm2, double *inm1, double *inp1, 
	double *inp2, double *inp3, double *inp4, double *
	inp5, double *inp6, double *inp7, double *inp8, int *
	area, int *stride, int *n, int *npad, int *stridel, 
	int *fptl, int *lptl, double *tr, double *tf, int 
	*eflag, int *zcflag)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int i__, j;
    extern /* Subroutine */ int zeroline8_(double *, double *, 
	    double *, double *, double *, double *, 
	    double *, double *, double *, double *, int *,
	     int *, int *, int *, int *, int *, 
	    double *, double *, double *, double *, 
	    double *, double *, double *, double *, 
	    double *);
    double t0, t1, t2, t3, t4, t5, t6, t7, t8;
    extern /* Subroutine */ int lineio8_(double *, double *, 
	    double *, double *, double *, double *, 
	    double *, double *, double *, double *, int *,
	     int *, int *, int *, int *, int *, 
	    double *, double *, double *, double *, 
	    double *, double *, double *, double *, 
	    double *);
    int out2;

/*     Reverse phase */
    /* Parameter adjustments */
    --tf;
    --tr;
    --inp8;
    --inp7;
    --inp6;
    --inp5;
    --inp4;
    --inp3;
    --inp2;
    --inp1;
    --inm1;
    --inm2;
    --inm3;
    --inm4;
    --inm5;
    --inm6;
    --inm7;
    --inm8;
    --in;
    --outp8;
    --outp7;
    --outp6;
    --outp5;
    --outp4;
    --outp3;
    --outp2;
    --outp1;
    --outm1;
    --outm2;
    --outm3;
    --outm4;
    --outm5;
    --outm6;
    --outm7;
    --outm8;
    --out;

    /* Function Body */
    t0 = tr[1];
    t1 = tr[2];
    t2 = tr[3];
    t3 = tr[4];
    t4 = tr[5];
    t5 = tr[6];
    t6 = tr[7];
    t7 = tr[8];
    t8 = tr[9];
/*     First, make sure pad is zero for forward phase. */
/*     For pretty code the last number would be npad-1, but technically */
/*     npad-2 (for extra speed) is all that is needed. */
    i__1 = *npad - 2;
    for (i__ = *n; i__ <= i__1; ++i__) {
	zeroline8_(&out[1], &in[1], &inm1[1], &inm2[1], &inm3[1], &inm4[1], &
		inm5[1], &inm6[1], &inm7[1], &inm8[1], &i__, stridel, stride, 
		fptl, lptl, area, &t0, &t1, &t2, &t3, &t4, &t5, &t6, &t7, &t8)
		;
    }
/*      call zeroline8(out,in,inm1,inm2,inm3, */
/*     $     inm4,inm5,inm6,inm7,inm8,n-1, */
/*     $     stridel,stride,fptl,lptl,area, */
/*     $     t0,t1,t2,t3,t4,t5,t6,t7,t8) */
/*      CALL flush(6) */
/*     For the UNUSED lines below, we point to "inm8" to avoid seg faults */
/*     because we know "inm8" will always be in range (unless the box is */
/*     ridiculously small).  Although multiplied by zero, the code still */
/*     accesses the dummy data! */
    i__1 = *n - 1;
    lineio8_(&out[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[
	    1], &inm8[1], &inm8[1], &inm8[1], &i__1, stridel, stride, fptl, 
	    lptl, area, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
	    c_b16, &c_b16, &t8);
    i__1 = *n - 2;
    lineio8_(&out[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[
	    1], &inm8[1], &inm7[1], &inm8[1], &i__1, stridel, stride, fptl, 
	    lptl, area, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &
	    c_b16, &t7, &t8);
    i__1 = *n - 3;
    lineio8_(&out[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[
	    1], &inm6[1], &inm7[1], &inm8[1], &i__1, stridel, stride, fptl, 
	    lptl, area, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &t6, &
	    t7, &t8);
    i__1 = *n - 4;
    lineio8_(&out[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm5[
	    1], &inm6[1], &inm7[1], &inm8[1], &i__1, stridel, stride, fptl, 
	    lptl, area, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &t5, &t6, &t7,
	     &t8);
    i__1 = *n - 5;
    lineio8_(&out[1], &inm8[1], &inm8[1], &inm8[1], &inm8[1], &inm4[1], &inm5[
	    1], &inm6[1], &inm7[1], &inm8[1], &i__1, stridel, stride, fptl, 
	    lptl, area, &c_b16, &c_b16, &c_b16, &c_b16, &t4, &t5, &t6, &t7, &
	    t8);
    i__1 = *n - 6;
    lineio8_(&out[1], &inm8[1], &inm8[1], &inm8[1], &inm3[1], &inm4[1], &inm5[
	    1], &inm6[1], &inm7[1], &inm8[1], &i__1, stridel, stride, fptl, 
	    lptl, area, &c_b16, &c_b16, &c_b16, &t3, &t4, &t5, &t6, &t7, &t8);
    i__1 = *n - 7;
    lineio8_(&out[1], &inm8[1], &inm8[1], &inm2[1], &inm3[1], &inm4[1], &inm5[
	    1], &inm6[1], &inm7[1], &inm8[1], &i__1, stridel, stride, fptl, 
	    lptl, area, &c_b16, &c_b16, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
    i__1 = *n - 8;
    lineio8_(&out[1], &inm8[1], &inm1[1], &inm2[1], &inm3[1], &inm4[1], &inm5[
	    1], &inm6[1], &inm7[1], &inm8[1], &i__1, stridel, stride, fptl, 
	    lptl, area, &c_b16, &t1, &t2, &t3, &t4, &t5, &t6, &t7, &t8);
    for (i__ = *n - 9; i__ >= 16; --i__) {
	lineio8_(&out[1], &in[1], &inm1[1], &inm2[1], &inm3[1], &inm4[1], &
		inm5[1], &inm6[1], &inm7[1], &inm8[1], &i__, stridel, stride, 
		fptl, lptl, area, &t0, &t1, &t2, &t3, &t4, &t5, &t6, &t7, &t8)
		;
    }
/*     For the UNUSED lines below, we must point to "in" to avoid seg */
/*     faults.  On this end of the convolution, we know that "in" will */
/*     always be in range. */
    lineio8_(&out[1], &in[1], &inm1[1], &inm2[1], &inm3[1], &inm4[1], &inm5[1]
	    , &inm6[1], &inm7[1], &in[1], &c__15, stridel, stride, fptl, lptl,
	     area, &t0, &t1, &t2, &t3, &t4, &t5, &t6, &t7, &c_b16);
    lineio8_(&out[1], &in[1], &inm1[1], &inm2[1], &inm3[1], &inm4[1], &inm5[1]
	    , &inm6[1], &in[1], &in[1], &c__14, stridel, stride, fptl, lptl, 
	    area, &t0, &t1, &t2, &t3, &t4, &t5, &t6, &c_b16, &c_b16);
    lineio8_(&out[1], &in[1], &inm1[1], &inm2[1], &inm3[1], &inm4[1], &inm5[1]
	    , &in[1], &in[1], &in[1], &c__13, stridel, stride, fptl, lptl, 
	    area, &t0, &t1, &t2, &t3, &t4, &t5, &c_b16, &c_b16, &c_b16);
    lineio8_(&out[1], &in[1], &inm1[1], &inm2[1], &inm3[1], &inm4[1], &in[1], 
	    &in[1], &in[1], &in[1], &c__12, stridel, stride, fptl, lptl, area,
	     &t0, &t1, &t2, &t3, &t4, &c_b16, &c_b16, &c_b16, &c_b16);
    lineio8_(&out[1], &in[1], &inm1[1], &inm2[1], &inm3[1], &in[1], &in[1], &
	    in[1], &in[1], &in[1], &c__11, stridel, stride, fptl, lptl, area, 
	    &t0, &t1, &t2, &t3, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16);
    lineio8_(&out[1], &in[1], &inm1[1], &inm2[1], &in[1], &in[1], &in[1], &in[
	    1], &in[1], &in[1], &c__10, stridel, stride, fptl, lptl, area, &
	    t0, &t1, &t2, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16);
    lineio8_(&out[1], &in[1], &inm1[1], &in[1], &in[1], &in[1], &in[1], &in[1]
	    , &in[1], &in[1], &c__9, stridel, stride, fptl, lptl, area, &t0, &
	    t1, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16);
    lineio8_(&out[1], &in[1], &in[1], &in[1], &in[1], &in[1], &in[1], &in[1], 
	    &in[1], &in[1], &c__8, stridel, stride, fptl, lptl, area, &t0, &
	    c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16, &c_b16);
    for (i__ = 7; i__ >= 0; --i__) {
	zeroline8_(&out[1], &in[1], &inm1[1], &inm2[1], &inm3[1], &inm4[1], &
		inm5[1], &inm6[1], &inm7[1], &inm8[1], &i__, stridel, stride, 
		fptl, lptl, area, &t0, &t1, &t2, &t3, &t4, &t5, &t6, &t7, &t8)
		;
    }
/*     Forward phase (padding now ensures room!) */
    t0 = tf[1];
    t1 = tf[2];
    t2 = tf[3];
    t3 = tf[4];
    t4 = tf[5];
    t5 = tf[6];
    t6 = tf[7];
    t7 = tf[8];
    t8 = tf[9];
    i__1 = *n - 1;
    for (i__ = 0; i__ <= i__1; i__ += 2) {
	out2 = i__ * *stride;
	i__2 = *area + out2;
	for (j = out2 + 1; j <= i__2; ++j) {
	    out[j] = t0 * out[j] + t1 * outp1[j] + t2 * outp2[j] + t3 * outp3[
		    j] + t4 * outp4[j] + t5 * outp5[j] + t6 * outp6[j] + t7 * 
		    outp7[j] + t8 * outp8[j];
	}
    }
    return 0;
} /* pconvsetsi8_ */

/*     Computes convolution for a single data set ("line") during reverse */
/*     phases (INPUT/OUTPUT) */

/*     out: output set */
/*     in,inm1,inm2,inm3: input set */
/*     i: index of line to be done */
/*     stridel: stride of input */
/*     stride: stride of output */
/*     fptl: first point of input actually used */
/*     lptl: last point of input actually used */
/*     area: full area to be generated */
/*     t0,t1,t2,t3: filter coefficients */
/* Subroutine */ int lineio3_(double *out, double *in, double *
	inm1, double *inm2, double *inm3, int *i__, int *
	stridel, int *stride, int *fptl, int *lptl, int *area,
	 double *t0, double *t1, double *t2, double *t3)
{
    /* System generated locals */
    int i__1;

    /* Local variables */
    int dout2, j, out2;

    /* Parameter adjustments */
    --inm3;
    --inm2;
    --inm1;
    --in;
    --out;

    /* Function Body */
    out2 = *i__ * *stridel;
    dout2 = *i__ * (*stride - *stridel);
/*     Zero out data before fptl */
    i__1 = *fptl + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j + dout2] = (double)0.;
    }
/*     Do the line for "active" points */
    i__1 = *lptl + 1 + out2;
    for (j = *fptl + 1 + out2; j <= i__1; ++j) {
	out[j + dout2] = *t0 * in[j] + *t1 * inm1[j] + *t2 * inm2[j] + *t3 * 
		inm3[j];
    }
/*     Zero out data after lptl */
    i__1 = *area + out2;
    for (j = *lptl + 1 + out2 + 1; j <= i__1; ++j) {
	out[j + dout2] = (double)0.;
    }
    return 0;
} /* lineio3_ */

/*     Computes convolution for a single data set ("line") during reverse */
/*     phases (INPUT/OUTPUT) */

/*     out: output set */
/*     in,inm1,inm2,inm3: input set */
/*     i: index of line to be done */
/*     stridel: stride of input */
/*     stride: stride of output */
/*     fptl: first point of input actually used */
/*     lptl: last point of input actually used */
/*     area: full area to be generated */
/*     t0,t1,t2,t3: filter coefficients */
/* Subroutine */ int lineio3full_(double *out, double *inm3, 
	double *inm2, double *inm1, double *in, double *inp1, 
	double *inp2, double *inp3, int *i__, int *stridel, 
	int *stride, int *fptl, int *lptl, int *area, 
	double *tl3, double *tl2, double *tl1, double *t0, 
	double *tr1, double *tr2, double *tr3)
{
    /* System generated locals */
    int i__1;

    /* Local variables */
    int dout2, j, out2;

    /* Parameter adjustments */
    --inp3;
    --inp2;
    --inp1;
    --in;
    --inm1;
    --inm2;
    --inm3;
    --out;

    /* Function Body */
    out2 = *i__ * *stridel;
    dout2 = *i__ * (*stride - *stridel);
    i__1 = *lptl + out2 + 1;
    for (j = out2 + 3; j <= i__1; j += 2) {
/*      do j=1+out2+1,lptl+out2+1 */
	out[j + dout2] = *tr3 * inp3[j] + *tr1 * inp1[j] + *tl1 * inm1[j] + *
		tl3 * inm3[j];
	out[j + dout2 + 1] = *tr3 * inp3[j + 1] + *tr1 * inp1[j + 1] + *t0 * 
		in[j + 1] + *tl1 * inm1[j + 1] + *tl3 * inm3[j + 1];
    }
/*     Zero out data after lptl */
    i__1 = *area + out2;
    for (j = *lptl + 1 + out2 + 1; j <= i__1; ++j) {
	out[j + dout2] = (double)0.;
    }
    return 0;
} /* lineio3full_ */

/*     Computes convolution for a single data set ("line") during reverse */
/*     phases (INPUT/OUTPUT) */

/*     out: output set */
/*     in,inm1,inm2,inm3: input set */
/*     i: index of line to be done */
/*     stridel: stride of input */
/*     stride: stride of output */
/*     fptl: first point of input actually used */
/*     lptl: last point of input actually used */
/*     area: full area to be generated */
/*     t0,t1,t2,t3: filter coefficients */
/* Subroutine */ int lineio8full_(double *out, double *inm8, 
	double *inm7, double *inm6, double *inm5, double *
	inm4, double *inm3, double *inm2, double *inm1, 
	double *in, double *inp1, double *inp2, double *inp3, 
	double *inp4, double *inp5, double *inp6, double *
	inp7, double *inp8, int *i__, int *stridel, int *
	stride, int *fptl, int *lptl, int *area, double *tl8, 
	double *tl7, double *tl6, double *tl5, double *tl4, 
	double *tl3, double *tl2, double *tl1, double *t0, 
	double *tr1, double *tr2, double *tr3, double *tr4, 
	double *tr5, double *tr6, double *tr7, double *tr8)
{
    /* System generated locals */
    int i__1;

    /* Local variables */
    int dout2, j, out2;

    /* Parameter adjustments */
    --inp8;
    --inp7;
    --inp6;
    --inp5;
    --inp4;
    --inp3;
    --inp2;
    --inp1;
    --in;
    --inm1;
    --inm2;
    --inm3;
    --inm4;
    --inm5;
    --inm6;
    --inm7;
    --inm8;
    --out;

    /* Function Body */
    out2 = *i__ * *stridel;
    dout2 = *i__ * (*stride - *stridel);
    i__1 = *lptl + out2 + 1;
    for (j = out2 + 3; j <= i__1; j += 2) {
	out[j + dout2] = *tr8 * inp8[j] + *tr7 * inp7[j] + *tr6 * inp6[j] + *
		tr5 * inp5[j] + *tr4 * inp4[j] + *tr3 * inp3[j] + *tr2 * inp2[
		j] + *tr1 * inp1[j] + *tl1 * inm1[j] + *tl2 * inm2[j] + *tl3 *
		 inm3[j] + *tl3 * inm3[j] + *tl4 * inm4[j] + *tl5 * inm4[j] + 
		*tl6 * inm6[j] + *tl7 * inm7[j] + *tl8 * inm8[j];
	out[j + dout2 + 1] = *tr8 * inp8[j + 1] + *tr7 * inp7[j + 1] + *tr6 * 
		inp6[j + 1] + *tr5 * inp5[j + 1] + *tr4 * inp4[j + 1] + *tr3 *
		 inp3[j + 1] + *tr2 * inp2[j + 1] + *tr1 * inp1[j + 1] + *tl1 
		* inm1[j + 1] + *tl2 * inm2[j + 1] + *tl3 * inm3[j + 1] + *
		tl3 * inm3[j + 1] + *tl4 * inm4[j + 1] + *tl5 * inm4[j + 1] + 
		*tl6 * inm6[j + 1] + *tl7 * inm7[j + 1] + *tl8 * inm8[j + 1];
    }
/*     Zero out data after lptl */
    i__1 = *area + out2;
    for (j = *lptl + 1 + out2 + 1; j <= i__1; ++j) {
	out[j + dout2] = (double)0.;
    }
    return 0;
} /* lineio8full_ */

/*     Computes convolution for a single data set ("line") during reverse */
/*     phases (INPUT/OUTPUT) */

/*     out: output set */
/*     in,inm1,inm2,inm3: input set */
/*     i: index of line to be done */
/*     stridel: stride of input */
/*     stride: stride of output */
/*     fptl: first point of input actually used */
/*     lptl: last point of input actually used */
/*     area: full area to be generated */
/*     t0,t1,t2,t3: filter coefficients */
/* Subroutine */ int lineio3fullacc_(double *out, double *inm3, 
	double *inm2, double *inm1, double *in, double *inp1, 
	double *inp2, double *inp3, int *i__, int *stridel, 
	int *stride, int *fptl, int *lptl, int *area, 
	double *tl3, double *tl2, double *tl1, double *t0, 
	double *tr1, double *tr2, double *tr3)
{
    /* System generated locals */
    int i__1;

    /* Local variables */
    int dout2, j, out2;

    /* Parameter adjustments */
    --inp3;
    --inp2;
    --inp1;
    --in;
    --inm1;
    --inm2;
    --inm3;
    --out;

    /* Function Body */
    out2 = *i__ * *stridel;
    dout2 = *i__ * (*stride - *stridel);
    i__1 = *lptl + out2 + 1;
    for (j = out2 + 1 + *fptl; j <= i__1; ++j) {
/*      do j=1+out2+1,lptl+out2+1 */
	out[j + dout2] = *tr3 * inp3[j] + *tr1 * inp1[j] + *t0 * in[j] + *tl1 
		* inm1[j] + *tl3 * inm3[j];
    }
/*     Zero out data after lptl */
    i__1 = *area + out2;
    for (j = *lptl + 1 + out2 + 1; j <= i__1; ++j) {
	out[j + dout2] = (double)0.;
    }
    return 0;
} /* lineio3fullacc_ */

/*     Computes convolution for a single data set ("line") during reverse */
/*     phases (INPUT/OUTPUT) */

/*     out: output set */
/*     in,inm1,inm2,inm3: input set */
/*     i: index of line to be done */
/*     stridel: stride of input */
/*     stride: stride of output */
/*     fptl: first point of input actually used */
/*     lptl: last point of input actually used */
/*     area: full area to be generated */
/*     t0,t1,t2,t3: filter coefficients */
/* Subroutine */ int lineio8fullacc_(double *out, double *inm8, 
	double *inm7, double *inm6, double *inm5, double *
	inm4, double *inm3, double *inm2, double *inm1, 
	double *in, double *inp1, double *inp2, double *inp3, 
	double *inp4, double *inp5, double *inp6, double *
	inp7, double *inp8, int *i__, int *stridel, int *
	stride, int *fptl, int *lptl, int *area, double *tl8, 
	double *tl7, double *tl6, double *tl5, double *tl4, 
	double *tl3, double *tl2, double *tl1, double *t0, 
	double *tr1, double *tr2, double *tr3, double *tr4, 
	double *tr5, double *tr6, double *tr7, double *tr8)
{
    /* System generated locals */
    int i__1;

    /* Local variables */
    int dout2, j, out2;

    /* Parameter adjustments */
    --inp8;
    --inp7;
    --inp6;
    --inp5;
    --inp4;
    --inp3;
    --inp2;
    --inp1;
    --in;
    --inm1;
    --inm2;
    --inm3;
    --inm4;
    --inm5;
    --inm6;
    --inm7;
    --inm8;
    --out;

    /* Function Body */
    out2 = *i__ * *stridel;
    dout2 = *i__ * (*stride - *stridel);
/*     Zero out data before fptl */
    i__1 = *fptl + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j + dout2] = (double)0.;
    }
    i__1 = *lptl + out2 + 1;
    for (j = out2 + 1 + *fptl; j <= i__1; ++j) {
/*      do j=1+out2+2,lptl+out2+1 */
/*      do j=1+out2+1,lptl+out2+1 */
	out[j + dout2] = *tr8 * inp8[j] + *tr7 * inp7[j] + *tr6 * inp6[j] + *
		tr5 * inp5[j] + *tr4 * inp4[j] + *tr3 * inp3[j] + *tr2 * inp2[
		j] + *tr1 * inp1[j] + *t0 * in[j] + *tl1 * inm1[j] + *tl2 * 
		inm2[j] + *tl3 * inm3[j] + *tl4 * inm4[j] + *tl5 * inm5[j] + *
		tl6 * inm6[j] + *tl7 * inm7[j] + *tl8 * inm8[j];
    }
/*     Zero out data after lptl */
    i__1 = *area + out2;
    for (j = *lptl + 1 + out2 + 1; j <= i__1; ++j) {
	out[j + dout2] = (double)0.;
    }
    return 0;
} /* lineio8fullacc_ */

/*     Computes convolution for a single data set ("line") during reverse */
/*     phases (INPUT/OUTPUT) */

/*     out: output set */
/*     in,inm1,inm2,inm3,inm4,inm5,inm6,inm7,inm8: input set */
/*     i: index of line to be done */
/*     stridel: stride of input */
/*     stride: stride of output */
/*     fptl: first point of input actually used */
/*     lptl: last point of input actually used */
/*     area: full area to be generated */
/*     t0,t1,t2,t3,t4,t5,t6,t7,t8: filter coefficients */
/* Subroutine */ int lineio8_(double *out, double *in, double *
	inm1, double *inm2, double *inm3, double *inm4, 
	double *inm5, double *inm6, double *inm7, double *
	inm8, int *i__, int *stridel, int *stride, int *fptl, 
	int *lptl, int *area, double *t0, double *t1, 
	double *t2, double *t3, double *t4, double *t5, 
	double *t6, double *t7, double *t8)
{
    /* System generated locals */
    int i__1;

    /* Local variables */
    int dout2, j, out2;

    /* Parameter adjustments */
    --inm8;
    --inm7;
    --inm6;
    --inm5;
    --inm4;
    --inm3;
    --inm2;
    --inm1;
    --in;
    --out;

    /* Function Body */
    out2 = *i__ * *stridel;
    dout2 = *i__ * (*stride - *stridel);
/*     Zero out data before fptl */
    i__1 = *fptl + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j + dout2] = (double)0.;
    }
/*     Do the line for "active" points */
    i__1 = *lptl + 1 + out2;
    for (j = *fptl + 1 + out2; j <= i__1; ++j) {
	out[j + dout2] = *t0 * in[j] + *t1 * inm1[j] + *t2 * inm2[j] + *t3 * 
		inm3[j] + *t4 * inm4[j] + *t5 * inm5[j] + *t6 * inm6[j] + *t7 
		* inm7[j] + *t8 * inm8[j];
    }
/*     Zero out data after lptl */
    i__1 = *area + out2;
    for (j = *lptl + 1 + out2 + 1; j <= i__1; ++j) {
	out[j + dout2] = (double)0.;
    }
    return 0;
} /* lineio8_ */

/*     Zeros an output line (OUTPUT) */
/*     consistent calling sequence with lineio */

/*     out: output set */
/*     in,inm1,inm2,inm3: input set */
/*     i: index of line to be done */
/*     stridel: stride of input */
/*     stride: stride of output */
/*     fptl: first point of input actually used */
/*     lptl: last point of input actually used */
/*     area: full area to be generated */
/*     t0,t1,t2,t3: filter coefficients */
/* Subroutine */ int zeroline3_(double *out, double *in, double *
	inm1, double *inm2, double *inm3, int *i__, int *
	stridel, int *stride, int *fptl, int *lptl, int *area,
	 double *t0, double *t1, double *t2, double *t3)
{
    /* System generated locals */
    int i__1;

    /* Local variables */
    int j, out2;

    /* Parameter adjustments */
    --inm3;
    --inm2;
    --inm1;
    --in;
    --out;

    /* Function Body */
    out2 = *i__ * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = (double)0.;
    }
    return 0;
} /* zeroline3_ */

/*     Zeros an output line (OUTPUT) */
/*     consistent calling sequence with lineio */

/*     out: output set */
/*     i: index of line to be done */
/*     stride: stride of output */
/*     area: full area to be generated */
/* Subroutine */ int zeroline8_(double *out, double *in, double *
	inm1, double *inm2, double *inm3, double *inm4, 
	double *inm5, double *inm6, double *inm7, double *
	inm8, int *i__, int *stridel, int *stride, int *fptl, 
	int *lptl, int *area, double *t0, double *t1, 
	double *t2, double *t3, double *t4, double *t5, 
	double *t6, double *t7, double *t8)
{
    /* System generated locals */
    int i__1;

    /* Local variables */
    int j, out2;

    /* Parameter adjustments */
    --inm8;
    --inm7;
    --inm6;
    --inm5;
    --inm4;
    --inm3;
    --inm2;
    --inm1;
    --in;
    --out;

    /* Function Body */
    out2 = *i__ * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = (double)0.;
    }
    return 0;
} /* zeroline8_ */

/*     Computes convolution for a single "even" data set ("line") during */
/*     reverse phases (INPUT/OUTPUT) */

/*     out: output set */
/*     in,inm1,inm2,inm3: input set */
/*     i: index of line to be done */
/*     stridel: stride of input */
/*     stride: stride of output */
/*     fptl: first point of input actually used */
/*     lptl: last point of input actually used */
/*     area: full area to be generated */
/*     t0,t1,t2,t3: filter coefficients */
/* Subroutine */ int lineioe3_(double *out, double *in, double *
	inm1, double *inm2, double *inm3, int *i__, int *
	stridel, int *stride, int *fptl, int *lptl, int *area,
	 double *t0, double *t1, double *t2, double *t3)
{
    /* System generated locals */
    int i__1;

    /* Local variables */
    int dout2, j, out2;

    /* Parameter adjustments */
    --inm3;
    --inm2;
    --inm1;
    --in;
    --out;

    /* Function Body */
    out2 = *i__ * *stridel;
    dout2 = *i__ * (*stride - *stridel);
/*     Zero out data before fptl */
    i__1 = *fptl + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j + dout2] = (double)0.;
    }
/*     Do the line for "active" points: */
/*     Ignore any even input data on even input lines! */
    i__1 = *lptl + 1 + out2;
    for (j = *fptl + 1 + out2; j <= i__1; j += 2) {
	out[j + dout2] = *t1 * inm1[j] + *t3 * inm3[j];
	out[j + 1 + dout2] = *t0 * in[j + 1] + *t1 * inm1[j + 1] + *t2 * inm2[
		j + 1] + *t3 * inm3[j + 1];
    }
/*     Zero out data after lptl */
    i__1 = *area + out2;
    for (j = *lptl + 1 + out2 + 1; j <= i__1; ++j) {
	out[j + dout2] = (double)0.;
    }
    return 0;
} /* lineioe3_ */

/*     Computes convolution for a single "even" data set ("line") during */
/*     reverse phases (INPUT/OUTPUT) */

/*     out: output set */
/*     in,inm1,inm2,inm3,inm4,inm5,inm6,inm7,inm8: input set */
/*     i: index of line to be done */
/*     stridel: stride of input */
/*     stride: stride of output */
/*     fptl: first point of input actually used */
/*     lptl: last point of input actually used */
/*     area: full area to be generated */
/*     t0,t1,t2,t3,t4,t5,t6,t7,t8: filter coefficients */
/* Subroutine */ int lineioe8_(double *out, double *in, double *
	inm1, double *inm2, double *inm3, double *inm4, 
	double *inm5, double *inm6, double *inm7, double *
	inm8, int *i__, int *stridel, int *stride, int *fptl, 
	int *lptl, int *area, double *t0, double *t1, 
	double *t2, double *t3, double *t4, double *t5, 
	double *t6, double *t7, double *t8)
{
    /* System generated locals */
    int i__1;

    /* Local variables */
    int dout2, j, out2;

    /* Parameter adjustments */
    --inm8;
    --inm7;
    --inm6;
    --inm5;
    --inm4;
    --inm3;
    --inm2;
    --inm1;
    --in;
    --out;

    /* Function Body */
    out2 = *i__ * *stridel;
    dout2 = *i__ * (*stride - *stridel);
/*     Zero out data before fptl */
    i__1 = *fptl + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j + dout2] = (double)0.;
    }
/*     Do the line for "active" points: */
/*     Ignore any even input data on even input lines! */
    i__1 = *lptl + 1 + out2;
    for (j = *fptl + 1 + out2; j <= i__1; j += 2) {
	out[j + dout2] = *t1 * inm1[j] + *t3 * inm3[j];
	out[j + 1 + dout2] = *t0 * in[j + 1] + *t1 * inm1[j + 1] + *t2 * inm2[
		j + 1] + *t3 * inm3[j + 1] + *t4 * inm4[j + 1] + *t5 * inm5[j 
		+ 1] + *t6 * inm6[j + 1] + *t7 * inm7[j + 1] + *t8 * inm8[j + 
		1];
    }
/*     Zero out data after lptl */
    i__1 = *area + out2;
    for (j = *lptl + 1 + out2 + 1; j <= i__1; ++j) {
	out[j + dout2] = (double)0.;
    }
    return 0;
} /* lineioe8_ */

/*     Computes convolution for a single "odd" data set ("line") during */
/*     reverse phases (INPUT/OUTPUT) */

/*     out: output set */
/*     in,inm1,inm2,inm3: input set */
/*     i: index of line to be done */
/*     stridel: stride of input */
/*     stride: stride of output */
/*     fptl: first point of input actually used */
/*     lptl: last point of input actually used */
/*     area: full area to be generated */
/*     t0,t1,t2,t3: filter coefficients */
/* Subroutine */ int lineioo3_(double *out, double *in, double *
	inm1, double *inm2, double *inm3, int *i__, int *
	stridel, int *stride, int *fptl, int *lptl, int *area,
	 double *t0, double *t1, double *t2, double *t3)
{
    /* System generated locals */
    int i__1;

    /* Local variables */
    int dout2, j, out2;

    /* Parameter adjustments */
    --inm3;
    --inm2;
    --inm1;
    --in;
    --out;

    /* Function Body */
    out2 = *i__ * *stridel;
    dout2 = *i__ * (*stride - *stridel);
/*     Zero out data before fptl */
    i__1 = *fptl + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j + dout2] = (double)0.;
    }
/*     Do the line for "active" points: */
/*     Ignore any even input data on even input lines! */
    i__1 = *lptl + 1 + out2;
    for (j = *fptl + 1 + out2; j <= i__1; j += 2) {
	out[j + dout2] = *t0 * in[j] + *t2 * inm2[j];
	out[j + 1 + dout2] = *t0 * in[j + 1] + *t1 * inm1[j + 1] + *t2 * inm2[
		j + 1] + *t3 * inm3[j + 1];
    }
/*     Zero out data after lptl */
    i__1 = *area + out2;
    for (j = *lptl + 1 + out2 + 1; j <= i__1; ++j) {
	out[j + dout2] = (double)0.;
    }
    return 0;
} /* lineioo3_ */

/*     Computes convolution for a single "odd" data set ("line") during */
/*     reverse phases (INPUT/OUTPUT) */

/*     out: output set */
/*     in,inm1,inm2,inm3,inm4,inm5,inm6,inm7,inm8: input set */
/*     i: index of line to be done */
/*     stridel: stride of input */
/*     stride: stride of output */
/*     fptl: first point of input actually used */
/*     lptl: last point of input actually used */
/*     area: full area to be generated */
/*     t0,t1,t2,t3,t4,t5,t6,t7,t8: filter coefficients */
/* Subroutine */ int lineioo8_(double *out, double *in, double *
	inm1, double *inm2, double *inm3, double *inm4, 
	double *inm5, double *inm6, double *inm7, double *
	inm8, int *i__, int *stridel, int *stride, int *fptl, 
	int *lptl, int *area, double *t0, double *t1, 
	double *t2, double *t3, double *t4, double *t5, 
	double *t6, double *t7, double *t8)
{
    /* System generated locals */
    int i__1;

    /* Local variables */
    int dout2, j, out2;

    /* Parameter adjustments */
    --inm8;
    --inm7;
    --inm6;
    --inm5;
    --inm4;
    --inm3;
    --inm2;
    --inm1;
    --in;
    --out;

    /* Function Body */
    out2 = *i__ * *stridel;
    dout2 = *i__ * (*stride - *stridel);
/*     Zero out data before fptl */
    i__1 = *fptl + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j + dout2] = (double)0.;
    }
/*     Do the line for "active" points: */
/*     Ignore any even input data on even input lines! */
    i__1 = *lptl + 1 + out2;
    for (j = *fptl + 1 + out2; j <= i__1; j += 2) {
	out[j + dout2] = *t0 * in[j] + *t2 * inm2[j];
	out[j + 1 + dout2] = *t0 * in[j + 1] + *t1 * inm1[j + 1] + *t2 * inm2[
		j + 1] + *t3 * inm3[j + 1] + *t4 * inm4[j + 1] + *t5 * inm5[j 
		+ 1] + *t6 * inm6[j + 1] + *t8 * inm8[j + 1];
    }
/*     Zero out data after lptl */
    i__1 = *area + out2;
    for (j = *lptl + 1 + out2 + 1; j <= i__1; ++j) {
	out[j + dout2] = (double)0.;
    }
    return 0;
} /* lineioo8_ */

/*     Back and forth, linear convolution of sets of points for +/- 3 */
/*     onvolutions  using padding, and ignoring input data on non-ghost */
/*     points (IN PLACE) */

/*     out: input/output array for in place computation */
/*     outm3,outm2,outm1,outp1,outp2,outp3: pointers in output array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int convsetsp3_(double *out, double *in, double *
	inm3, double *inm2, double *inm1, double *inp1, 
	double *inp2, double *inp3, int *area, int *stride, 
	int *n, int *npad, double *tr, double *tf)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int i__, j;
    double t0, t1, t3;
    int out2;

/*     Forward phase (padding now ensures room!) */
/*     No change here relative to convsets */
    /* Parameter adjustments */
    --tf;
    --tr;
    --inp3;
    --inp2;
    --inp1;
    --inm1;
    --inm2;
    --inm3;
    --in;
    --out;

    /* Function Body */
    t0 = tf[1];
    t1 = tf[2];
    t3 = tf[4];
    i__1 = *n - 5;
    for (i__ = 3; i__ <= i__1; i__ += 2) {
	out2 = i__ * *stride;
	i__2 = *area + out2;
	for (j = out2 + 1; j <= i__2; ++j) {
	    out[j] = t3 * inm3[j] + t1 * inm1[j] + t1 * inp1[j] + t3 * inp3[j]
		    ;
	}
    }
    i__1 = *n - 5;
    for (i__ = 2; i__ <= i__1; i__ += 2) {
	out2 = i__ * *stride;
	i__2 = *area + out2;
	for (j = out2 + 1; j <= i__2; ++j) {
	    out[j] = in[j];
	}
    }
    return 0;
} /* convsetsp3_ */

/*     Back and forth, linear convolution of sets of points for +/- 8 */
/*     onvolutions  using padding, and ignoring input data on non-ghost */
/*     points (IN PLACE) */

/*     out: input/output array for in place computation */
/*     outm3,outm2,outm1,outp1,outp2,outp3: pointers in output array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int convsetsp8_(double *out, double *outm8, 
	double *outm7, double *outm6, double *outm5, double *
	outm4, double *outm3, double *outm2, double *outm1, 
	double *outp1, double *outp2, double *outp3, double *
	outp4, double *outp5, double *outp6, double *outp7, 
	double *outp8, int *area, int *stride, int *n, 
	int *npad, double *tr, double *tf)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int i__, j;
    double t0, t1, t2, t3, t4, t5, t6, t7, t8;
    int out2;

/*     Reverse direction */
/*     Relative to convsets, we wiped out the non-ghost references */
    /* Parameter adjustments */
    --tf;
    --tr;
    --outp8;
    --outp7;
    --outp6;
    --outp5;
    --outp4;
    --outp3;
    --outp2;
    --outp1;
    --outm1;
    --outm2;
    --outm3;
    --outm4;
    --outm5;
    --outm6;
    --outm7;
    --outm8;
    --out;

    /* Function Body */
    t0 = tr[1];
    t1 = tr[2];
    t2 = tr[3];
    t3 = tr[4];
    t4 = tr[5];
    t5 = tr[6];
    t6 = tr[7];
    t7 = tr[8];
    t8 = tr[9];
/*     Pad region */
/*      out2=(npad-1)*stride */
/*      do j=1+out2,area+out2 */
/*         out(j)=0. */
/*      enddo */
/*      out2=(npad-2)*stride */
/*      do j=1+out2,area+out2 */
/*         out(j)=t8*outm8(j) */
/*      enddo */
/*      out2=(npad-3)*stride */
/*      do j=1+out2,area+out2 */
/*         out(j)=t7*outm7(j) */
/*      enddo */
/*      out2=(npad-4)*stride */
/*      do j=1+out2,area+out2 */
/*         out(j)=t6*outm6(j)+t8*outm8(j) */
/*      enddo */
/*      out2=(npad-5)*stride */
/*      do j=1+out2,area+out2 */
/*         out(j)=t5*outm5(j)+t7*outm7(j) */
/*      enddo */
/*      out2=(npad-6)*stride */
/*      do j=1+out2,area+out2 */
/*         out(j)=t4*outm4(j)+t6*outm6(j)+t8*outm8(j) */
/*      enddo */
/*      out2=(npad-7)*stride */
/*      do j=1+out2,area+out2 */
/*         out(j)=t3*outm3(j)+t5*outm5(j)+t7*outm7(j) */
/*     enddo */
/*      out2=(npad-8)*stride */
/*      do j=1+out2,area+out2 */
/*         out(j)=t2*outm2(j)+t4*outm4(j)+t6*outm6(j)+t8*outm8(j) */
/*      enddo */
/*     Main reverse phase exploiting zeros! */
    for (i__ = *n - 1; i__ >= 8; i__ += -2) {
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t1 * outm1[j] + t3 * outm3[j] + t5 * outm5[j] + t7 * 
		    outm7[j];
	}
	out2 = (i__ - 1) * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t0 * out[j] + t2 * outm2[j] + t4 * outm4[j] + t6 * outm6[
		    j] + t8 * outm8[j];
	}
    }
/*     Fence posting */
/*      out2=7*stride */
/*      do j=1+out2,area+out2 */
/*         out(j)=t1*outm1(j)+t3*outm3(j)+t5*outm5(j)+t7*outm7(j) */
/*      enddo */
/*      out2=6*stride */
/*      do j=1+out2,area+out2 */
/*         out(j)=t0*out(j)+t2*outm2(j)+t4*outm4(j)+t6*outm6(j) */
/*      enddo */
/*      out2=5*stride */
/*      do j=1+out2,area+out2 */
/*         out(j)=t1*outm1(j)+t3*outm3(j)+t5*outm5(j) */
/*      enddo */
/*      out2=4*stride */
/*      do j=1+out2,area+out2 */
/*         out(j)=t0*out(j)+t2*outm2(j)+t4*outm4(j) */
/*      enddo */
/*      out2=3*stride */
/*      do j=1+out2,area+out2 */
/*         out(j)=t1*outm1(j)+t3*outm3(j) */
/*      enddo */
/*      out2=2*stride */
/*      do j=1+out2,area+out2 */
/*         out(j)=t0*out(j)+t2*outm2(j) */
/*      enddo */
/*      out2=1*stride */
/*      do j=1+out2,area+out2 */
/*         out(j)=t1*outm1(j) */
/*      enddo */
/*      out2=0*stride */
/*      do j=1+out2,area+out2 */
/*         out(j)=t0*out(j) */
/*      enddo */
/*     Forward phase (padding now ensures room!) */
/*     No change here relative to convsets */
    t0 = tf[1];
    t1 = tf[2];
    t2 = tf[3];
    t3 = tf[4];
    t4 = tf[5];
    t5 = tf[6];
    t6 = tf[7];
    t7 = tf[8];
    t8 = tf[9];
/* Need to verify that this is OK..... */
/*      do i=0,n-1 */
    i__1 = *n - 8;
    for (i__ = 8; i__ <= i__1; ++i__) {
	out2 = i__ * *stride;
	i__2 = *area + out2;
	for (j = out2 + 1; j <= i__2; ++j) {
	    out[j] = t0 * out[j] + t1 * outp1[j] + t2 * outp2[j] + t3 * outp3[
		    j] + t4 * outp4[j] + t5 * outp5[j] + t6 * outp6[j] + t7 * 
		    outp7[j] + t8 * outp8[j];
	}
    }
    return 0;
} /* convsetsp8_ */

/*     Back and forth, linear convolution of sets of points for +/- 3 */
/*     onvolutions  using padding, and ignoring input data on non-ghost */
/*     points (IN PLACE) */

/*     out: input/output array for in place computation */
/*     outm3,outm2,outm1,outp1,outp2,outp3: pointers in output array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int convsetsp8full_(double *out, double *in, 
	double *inm8, double *inm7, double *inm6, double *
	inm5, double *inm4, double *inm3, double *inm2, 
	double *inm1, double *inp1, double *inp2, double *
	inp3, double *inp4, double *inp5, double *inp6, 
	double *inp7, double *inp8, int *area, int *stride, 
	int *n, int *npad, double *filter)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int i__, j;
    double t0, t1, t2, t3, t4, t5, t6, t7, t8;
    int out2;

/*     Forward phase (padding now ensures room!) */
/*     No change here relative to convsets */
    /* Parameter adjustments */
    --filter;
    --inp8;
    --inp7;
    --inp6;
    --inp5;
    --inp4;
    --inp3;
    --inp2;
    --inp1;
    --inm1;
    --inm2;
    --inm3;
    --inm4;
    --inm5;
    --inm6;
    --inm7;
    --inm8;
    --in;
    --out;

    /* Function Body */
    t0 = filter[1];
    t1 = filter[2];
    t2 = filter[3];
    t3 = filter[4];
    t4 = filter[5];
    t5 = filter[6];
    t6 = filter[7];
    t7 = filter[8];
    t8 = filter[9];
    if (t0 != (double)0.) {
/*     symmetric filter */
/*     thin func */
	i__1 = *n - 8;
	for (i__ = 9; i__ <= i__1; i__ += 2) {
	    out2 = i__ * *stride;
	    i__2 = *area + out2;
	    for (j = out2 + 1; j <= i__2; ++j) {
		out[j] = t7 * inm7[j] + t5 * inm5[j] + t3 * inm3[j] + t1 * 
			inm1[j] + t1 * inp1[j] + t3 * inp3[j] + t5 * inp5[j] 
			+ t7 * inp7[j];
	    }
	}
/*     fat func */
	i__1 = *n - 8;
	for (i__ = 8; i__ <= i__1; i__ += 2) {
	    out2 = i__ * *stride;
	    i__2 = *area + out2;
	    for (j = out2 + 1; j <= i__2; ++j) {
		out[j] = t8 * inm8[j] + t6 * inm6[j] + t4 * inm4[j] + t2 * 
			inm2[j] + t0 * in[j] + t2 * inp2[j] + t4 * inp4[j] + 
			t6 * inp6[j] + t8 * inp8[j];
	    }
	}
/*     end of symmetric part */
    } else {
/*     antisymmetric filter */
/*     thin func */
	i__1 = *n - 8;
	for (i__ = 9; i__ <= i__1; i__ += 2) {
	    out2 = i__ * *stride;
	    i__2 = *area + out2;
	    for (j = out2 + 1; j <= i__2; ++j) {
		out[j] = t7 * (double)-1. * inm7[j] - t5 * inm5[j] - t3 * inm3[
			j] - t1 * inm1[j] + t1 * inp1[j] + t3 * inp3[j] + t5 *
			 inp5[j] + t7 * inp7[j];
	    }
	}
/*     fat func */
	i__1 = *n - 8;
	for (i__ = 8; i__ <= i__1; i__ += 2) {
	    out2 = i__ * *stride;
	    i__2 = *area + out2;
	    for (j = out2 + 1; j <= i__2; ++j) {
		out[j] = t8 * (double)-1. * inm8[j] - t6 * inm6[j] - t4 * inm4[
			j] - t2 * inm2[j] + t0 * in[j] + t2 * inp2[j] + t4 * 
			inp4[j] + t6 * inp6[j] + t8 * inp8[j];
	    }
	}
/*     end of antisymmetric part */
    }
    return 0;
} /* convsetsp8full_ */

/*     Back and forth, linear convolution of sets of points using padding, */
/*     ignoring input data on non-ghost points (IN/OUT) */

/*     lower: output array */
/*     outm3,outm2,outm1,outp1,outp2,outp3: pointers to input work array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     stridel: stride on output */
/*     fptl,lptl: first,last actual points in output set */
/*     fsetl,lsetl: first,last actual sets in output */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int convsetspo3_(double *lower, double *out, 
	double *outm3, double *outm2, double *outm1, double *
	outp1, double *outp2, double *outp3, int *area, int *
	stride, int *n, int *npad, int *stridel, int *fptl, 
	int *lptl, int *fsetl, int *lsetl, double *tr, 
	double *tf)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int i__, j, out2s;
    double t0, t1, t2, t3;
    int jl, out2;

/*     Reverse direction */
/*     No change here relative to convsetsp */
    /* Parameter adjustments */
    --tf;
    --tr;
    --outp3;
    --outp2;
    --outp1;
    --outm1;
    --outm2;
    --outm3;
    --out;
    --lower;

    /* Function Body */
    t0 = tr[1];
    t1 = tr[2];
    t2 = tr[3];
    t3 = tr[4];
/*     Pad region */
    out2 = (*npad - 1) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = (double)0.;
    }
    out2 = (*npad - 2) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t3 * outm3[j];
    }
    out2 = (*npad - 3) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t2 * outm2[j];
    }
/*     Main reverse phase exploiting zeros! */
    for (i__ = *n - 1; i__ >= 3; i__ += -2) {
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t1 * outm1[j] + t3 * outm3[j];
	}
	out2 = (i__ - 1) * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t0 * out[j] + t2 * outm2[j];
	}
    }
/*     Fence posting */
    out2 = *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t1 * outm1[j];
    }
    out2 = 0;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j];
    }
/*     Forward phase (padding now ensures room!) */
/*     Relative to convsetsp, output now places into lower instead */
    t0 = tf[1];
    t1 = tf[2];
    t2 = tf[3];
    t3 = tf[4];
    i__1 = *lsetl;
    for (i__ = *fsetl; i__ <= i__1; ++i__) {
	out2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__2 = out2 + 1 + *lptl;
	for (j = out2 + 1 + *fptl; j <= i__2; ++j) {
	    jl = j + out2s;
/* $$$            out(j)= */
/* $$$     $           t0*out(j)+t1*outp1(j)+t2*outp2(j)+t3*outp3(j) */
	    lower[jl] = t0 * out[j] + t1 * outp1[j] + t2 * outp2[j] + t3 * 
		    outp3[j];
	}
    }
    return 0;
} /* convsetspo3_ */

/*     lower: output array */
/*     outm3,outm2,outm1,outp1,outp2,outp3: pointers to input work array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     stridel: stride on output */
/*     fptl,lptl: first,last actual points in output set */
/*     fsetl,lsetl: first,last actual sets in output */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int convsetspoadd3_(double *lower, double *addon, 
	double *out, double *outm3, double *outm2, double *
	outm1, double *outp1, double *outp2, double *outp3, 
	int *area, int *stride, int *n, int *npad, int *
	stridel, int *fptl, int *lptl, int *fsetl, int *lsetl,
	 double *tr, double *tf)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int i__, j, out2s;
    double t0, t1, t2, t3;
    int jl, out2;

/*     Reverse direction */
/*     No change here relative to convsetsp */
    /* Parameter adjustments */
    --tf;
    --tr;
    --outp3;
    --outp2;
    --outp1;
    --outm1;
    --outm2;
    --outm3;
    --out;
    --addon;
    --lower;

    /* Function Body */
    t0 = tr[1];
    t1 = tr[2];
    t2 = tr[3];
    t3 = tr[4];
/*     Pad region */
    out2 = (*npad - 1) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = (double)0.;
    }
    out2 = (*npad - 2) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t3 * outm3[j];
    }
    out2 = (*npad - 3) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t2 * outm2[j];
    }
/*     Main reverse phase exploiting zeros! */
    for (i__ = *n - 1; i__ >= 3; i__ += -2) {
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t1 * outm1[j] + t3 * outm3[j];
	}
	out2 = (i__ - 1) * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t0 * out[j] + t2 * outm2[j];
	}
    }
/*     Fence posting */
    out2 = *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t1 * outm1[j];
    }
    out2 = 0;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j];
    }
/*     Forward phase (padding now ensures room!) */
/*     Relative to convsetsp, output now places into lower instead */
    t0 = tf[1];
    t1 = tf[2];
    t2 = tf[3];
    t3 = tf[4];
    i__1 = *lsetl;
    for (i__ = *fsetl; i__ <= i__1; ++i__) {
	out2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__2 = out2 + 1 + *lptl;
	for (j = out2 + 1 + *fptl; j <= i__2; ++j) {
	    jl = j + out2s;
/* $$$            out(j)= */
/* $$$     $           t0*out(j)+t1*outp1(j)+t2*outp2(j)+t3*outp3(j) */
	    lower[jl] = addon[jl] + t0 * out[j] + t1 * outp1[j] + t2 * outp2[
		    j] + t3 * outp3[j];
	}
    }
    return 0;
} /* convsetspoadd3_ */

/*     Back and forth, linear convolution of sets of points for +/- 3 */
/*      filters using padding, ignoring input data on non-ghost points */
/*      (IN/+=OUT) */

/*     lower: output array for accumulation */
/*     outm3,outm2,outm1,outp1,outp2,outp3: pointers to input work array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     stridel: stride on output */
/*     fptl,lptl: first,last actual points in output set */
/*     fsetl,lsetl: first,last actual sets in output */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int convsetspop3_(double *lower, double *out, 
	double *outm3, double *outm2, double *outm1, double *
	outp1, double *outp2, double *outp3, int *area, int *
	stride, int *n, int *npad, int *stridel, int *fptl, 
	int *lptl, int *fsetl, int *lsetl, double *filt)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int i__, j, out2s;
    double t0, t1, t3;
    int jl, out2;

/*     Forward phase (padding now ensures room!) */
/*     Relative to convsetspo, only change is accumulation into lower */
    /* Parameter adjustments */
    --filt;
    --outp3;
    --outp2;
    --outp1;
    --outm1;
    --outm2;
    --outm3;
    --out;
    --lower;

    /* Function Body */
    t0 = filt[1];
    t1 = filt[2];
    t3 = filt[4];
    i__1 = *lsetl;
    for (i__ = *fsetl + 1; i__ <= i__1; i__ += 2) {
	out2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__2 = out2 + 1 + *lptl;
	for (j = out2 + 1 + *fptl; j <= i__2; ++j) {
	    jl = j + out2s;
	    lower[jl] = lower[jl] + t3 * outm3[j] + t1 * outm1[j] + t1 * 
		    outp1[j] + t3 * outp3[j];
	}
    }
    i__1 = *lsetl;
    for (i__ = *fsetl; i__ <= i__1; i__ += 2) {
	out2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__2 = out2 + 1 + *lptl;
	for (j = out2 + 1 + *fptl; j <= i__2; ++j) {
	    jl = j + out2s;
	    lower[jl] += out[j];
	}
    }
    return 0;
} /* convsetspop3_ */

/*     Back and forth, linear convolution of sets of points for +/- 3 */
/*      filters using padding, ignoring input data on non-ghost points */
/*      (IN/+=OUT) */

/*     lower: output array for accumulation */
/*     outm3,outm2,outm1,outp1,outp2,outp3: pointers to input work array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     stridel: stride on output */
/*     fptl,lptl: first,last actual points in output set */
/*     fsetl,lsetl: first,last actual sets in output */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int convsetspom3_(double *lower, double *out, 
	double *outm3, double *outm2, double *outm1, double *
	outp1, double *outp2, double *outp3, int *area, int *
	stride, int *n, int *npad, int *stridel, int *fptl, 
	int *lptl, int *fsetl, int *lsetl, double *filt)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int i__, j, out2s;
    double t0, t1, t3;
    int jl, out2;

/*     Forward phase (padding now ensures room!) */
/*     Relative to convsetspo, only change is accumulation into lower */
    /* Parameter adjustments */
    --filt;
    --outp3;
    --outp2;
    --outp1;
    --outm1;
    --outm2;
    --outm3;
    --out;
    --lower;

    /* Function Body */
    t0 = filt[1];
    t1 = filt[2];
    t3 = filt[4];
    i__1 = *lsetl;
    for (i__ = *fsetl + 1; i__ <= i__1; i__ += 2) {
	out2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__2 = out2 + 1 + *lptl;
	for (j = out2 + 1 + *fptl; j <= i__2; ++j) {
	    jl = j + out2s;
	    lower[jl] = lower[jl] - t3 * outm3[j] - t1 * outm1[j] - t1 * 
		    outp1[j] - t3 * outp3[j];
	}
    }
    i__1 = *lsetl;
    for (i__ = *fsetl; i__ <= i__1; i__ += 2) {
	out2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__2 = out2 + 1 + *lptl;
	for (j = out2 + 1 + *fptl; j <= i__2; ++j) {
	    jl = j + out2s;
	    lower[jl] -= out[j];
	}
    }
    return 0;
} /* convsetspom3_ */

/*     Back and forth, linear convolution of sets of points for +/- 8 */
/*      filters using padding, ignoring input data on non-ghost points */
/*      (IN/+=OUT) */

/*     lower: output array for accumulation */
/*     outm3,outm2,outm1,outp1,outp2,outp3: pointers to input work array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     stridel: stride on output */
/*     fptl,lptl: first,last actual points in output set */
/*     fsetl,lsetl: first,last actual sets in output */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int convsetspop8_(double *lower, double *out, 
	double *outm8, double *outm7, double *outm6, double *
	outm5, double *outm4, double *outm3, double *outm2, 
	double *outm1, double *outp1, double *outp2, double *
	outp3, double *outp4, double *outp5, double *outp6, 
	double *outp7, double *outp8, int *area, int *stride, 
	int *n, int *npad, int *stridel, int *fptl, int *
	lptl, int *fsetl, int *lsetl, double *tr, double *tf)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int i__, j, out2s;
    double t0, t1, t2, t3, t4, t5, t6, t7, t8;
    int jl, out2;

/*     Reverse direction */
/*     Relative to convsets, we wiped out the non-ghost references */
    /* Parameter adjustments */
    --tf;
    --tr;
    --outp8;
    --outp7;
    --outp6;
    --outp5;
    --outp4;
    --outp3;
    --outp2;
    --outp1;
    --outm1;
    --outm2;
    --outm3;
    --outm4;
    --outm5;
    --outm6;
    --outm7;
    --outm8;
    --out;
    --lower;

    /* Function Body */
    t0 = tr[1];
    t1 = tr[2];
    t2 = tr[3];
    t3 = tr[4];
    t4 = tr[5];
    t5 = tr[6];
    t6 = tr[7];
    t7 = tr[8];
    t8 = tr[9];
/*     Pad region */
    out2 = (*npad - 1) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = (double)0.;
    }
    out2 = (*npad - 2) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t8 * outm8[j];
    }
    out2 = (*npad - 3) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t7 * outm7[j];
    }
    out2 = (*npad - 4) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t6 * outm6[j] + t8 * outm8[j];
    }
    out2 = (*npad - 5) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t5 * outm5[j] + t7 * outm7[j];
    }
    out2 = (*npad - 6) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t4 * outm4[j] + t6 * outm6[j] + t8 * outm8[j];
    }
    out2 = (*npad - 7) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t3 * outm3[j] + t5 * outm5[j] + t7 * outm7[j];
    }
    out2 = (*npad - 8) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t2 * outm2[j] + t4 * outm4[j] + t6 * outm6[j] + t8 * outm8[j]
		;
    }
/*     Main reverse phase exploiting zeros! */
    for (i__ = *n - 1; i__ >= 8; i__ += -2) {
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t7 * outm7[j] + t5 * outm5[j] + t3 * outm3[j] + t1 * 
		    outm1[j];
	}
	out2 = (i__ - 1) * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t0 * out[j] + t2 * outm2[j] + t4 * outm4[j] + t6 * outm6[
		    j] + t8 * outm8[j];
	}
    }
/*     Fence posting */
    out2 = *stride * 7;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t1 * outm1[j] + t3 * outm3[j] + t5 * outm5[j] + t7 * outm7[j]
		;
    }
    out2 = *stride * 6;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t2 * outm2[j] + t4 * outm4[j] + t6 * outm6[j];
    }
    out2 = *stride * 5;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t1 * outm1[j] + t3 * outm3[j] + t5 * outm5[j];
    }
    out2 = *stride << 2;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t2 * outm2[j] + t4 * outm4[j];
    }
    out2 = *stride * 3;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t1 * outm1[j] + t3 * outm3[j];
    }
    out2 = *stride << 1;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t2 * outm2[j];
    }
    out2 = *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t1 * outm1[j];
    }
    out2 = 0;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j];
    }
/*     Forward phase (padding now ensures room!) */
/*     No change here relative to convsets */
    t0 = tf[1];
    t1 = tf[2];
    t2 = tf[3];
    t3 = tf[4];
    t4 = tf[5];
    t5 = tf[6];
    t6 = tf[7];
    t7 = tf[8];
    t8 = tf[9];
    i__1 = *lsetl;
    for (i__ = *fsetl; i__ <= i__1; ++i__) {
	out2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__2 = out2 + 1 + *lptl;
	for (j = out2 + 1 + *fptl; j <= i__2; ++j) {
	    jl = j + out2s;
/* $$$            out(j)= */
/* $$$     $           t0*out(j)+t1*outp1(j)+t2*outp2(j)+t3*outp3(j) */
	    lower[jl] = lower[jl] + t0 * out[j] + t1 * outp1[j] + t2 * outp2[
		    j] + t3 * outp3[j] + t4 * outp4[j] + t5 * outp5[j] + t6 * 
		    outp6[j] + t7 * outp7[j] + t8 * outp8[j];
	}
    }
    return 0;
} /* convsetspop8_ */

/*     Back and forth, linear convolution of sets of points for +/- 3 */
/*      filters using padding, ignoring input data on non-ghost points */
/*      (IN/+=OUT) */

/*     lower: output array for accumulation */
/*     outm3,outm2,outm1,outp1,outp2,outp3: pointers to input work array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     stridel: stride on output */
/*     fptl,lptl: first,last actual points in output set */
/*     fsetl,lsetl: first,last actual sets in output */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int convsetspop8full_(double *lower, double *out, 
	double *outm8, double *outm7, double *outm6, double *
	outm5, double *outm4, double *outm3, double *outm2, 
	double *outm1, double *outp1, double *outp2, double *
	outp3, double *outp4, double *outp5, double *outp6, 
	double *outp7, double *outp8, int *area, int *stride, 
	int *n, int *npad, int *stridel, int *fptl, int *
	lptl, int *fsetl, int *lsetl, double *filt)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int i__, j, out2s;
    double t0, t1, t2, t3, t4, t5, t6, t7, t8;
    int jl, out2;

/*     Forward phase (padding now ensures room!) */
/*     Relative to convsetspo, only change is accumulation into lower */
    /* Parameter adjustments */
    --filt;
    --outp8;
    --outp7;
    --outp6;
    --outp5;
    --outp4;
    --outp3;
    --outp2;
    --outp1;
    --outm1;
    --outm2;
    --outm3;
    --outm4;
    --outm5;
    --outm6;
    --outm7;
    --outm8;
    --out;
    --lower;

    /* Function Body */
    t0 = filt[1];
    t1 = filt[2];
    t2 = filt[3];
    t3 = filt[4];
    t4 = filt[5];
    t5 = filt[6];
    t6 = filt[7];
    t7 = filt[8];
    t8 = filt[9];
    if (t0 != (double)0.) {
/*     symmetric filter */
	i__1 = *lsetl;
	for (i__ = *fsetl + 1; i__ <= i__1; i__ += 2) {
	    out2 = i__ * *stride;
	    out2s = i__ * (*stridel - *stride);
	    i__2 = out2 + 1 + *lptl;
	    for (j = out2 + 1 + *fptl; j <= i__2; ++j) {
		jl = j + out2s;
		lower[jl] = lower[jl] + t7 * outm7[j] + t5 * outm5[j] + t3 * 
			outm3[j] + t1 * outm1[j] + t1 * outp1[j] + t3 * outp3[
			j] + t5 * outp5[j] + t7 * outp7[j];
	    }
	}
	i__1 = *lsetl;
	for (i__ = *fsetl; i__ <= i__1; i__ += 2) {
	    out2 = i__ * *stride;
	    out2s = i__ * (*stridel - *stride);
	    i__2 = out2 + 1 + *lptl;
	    for (j = out2 + 1 + *fptl; j <= i__2; ++j) {
		jl = j + out2s;
		lower[jl] = lower[jl] + t8 * outm8[j] + t6 * outm6[j] + t4 * 
			outm4[j] + t2 * outm2[j] + t0 * out[j] + t2 * outp2[j]
			 + t4 * outp4[j] + t6 * outp6[j] + t8 * outp8[j];
	    }
	}
/*     end of symmetric part */
    } else {
/*     antisymmetric filter */
	i__1 = *lsetl;
	for (i__ = *fsetl + 1; i__ <= i__1; i__ += 2) {
	    out2 = i__ * *stride;
	    out2s = i__ * (*stridel - *stride);
	    i__2 = out2 + 1 + *lptl;
	    for (j = out2 + 1 + *fptl; j <= i__2; ++j) {
		jl = j + out2s;
		lower[jl] = lower[jl] - t7 * outm7[j] - t5 * outm5[j] - t3 * 
			outm3[j] - t1 * outm1[j] + t1 * outp1[j] + t3 * outp3[
			j] + t5 * outp5[j] + t7 * outp7[j];
	    }
	}
	i__1 = *lsetl;
	for (i__ = *fsetl; i__ <= i__1; i__ += 2) {
	    out2 = i__ * *stride;
	    out2s = i__ * (*stridel - *stride);
	    i__2 = out2 + 1 + *lptl;
	    for (j = out2 + 1 + *fptl; j <= i__2; ++j) {
		jl = j + out2s;
		lower[jl] = lower[jl] - t8 * outm8[j] - t6 * outm6[j] - t4 * 
			outm4[j] - t2 * outm2[j] + t0 * out[j] + t2 * outp2[j]
			 + t4 * outp4[j] + t6 * outp6[j] + t8 * outp8[j];
	    }
	}
/*     end of antisymmetric part */
    }
    return 0;
} /* convsetspop8full_ */

/*     Back and forth, linear convolution of sets of points for +/- 3 */
/*      filters using padding, ignoring input data on non-ghost points */
/*      (IN/+=OUT) */

/*     lower: output array for accumulation */
/*     outm3,outm2,outm1,outp1,outp2,outp3: pointers to input work array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     stridel: stride on output */
/*     fptl,lptl: first,last actual points in output set */
/*     fsetl,lsetl: first,last actual sets in output */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int convsetspo8full_(double *lower, double *out, 
	double *outm8, double *outm7, double *outm6, double *
	outm5, double *outm4, double *outm3, double *outm2, 
	double *outm1, double *outp1, double *outp2, double *
	outp3, double *outp4, double *outp5, double *outp6, 
	double *outp7, double *outp8, int *area, int *stride, 
	int *n, int *npad, int *stridel, int *fptl, int *
	lptl, int *fsetl, int *lsetl, double *filt)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int i__, j, out2s;
    double t0, t1, t2, t3, t4, t5, t6, t7, t8;
    int jl, out2;

/*     Forward phase (padding now ensures room!) */
/*     Relative to convsetspo, only change is accumulation into lower */
    /* Parameter adjustments */
    --filt;
    --outp8;
    --outp7;
    --outp6;
    --outp5;
    --outp4;
    --outp3;
    --outp2;
    --outp1;
    --outm1;
    --outm2;
    --outm3;
    --outm4;
    --outm5;
    --outm6;
    --outm7;
    --outm8;
    --out;
    --lower;

    /* Function Body */
    t0 = filt[1];
    t1 = filt[2];
    t2 = filt[3];
    t3 = filt[4];
    t4 = filt[5];
    t5 = filt[6];
    t6 = filt[7];
    t7 = filt[8];
    t8 = filt[9];
    if (t0 != (double)0.) {
/*     symmetric filter */
	i__1 = *lsetl;
	for (i__ = *fsetl + 1; i__ <= i__1; i__ += 2) {
	    out2 = i__ * *stride;
	    out2s = i__ * (*stridel - *stride);
	    i__2 = out2 + 1 + *lptl;
	    for (j = out2 + 1 + *fptl; j <= i__2; ++j) {
		jl = j + out2s;
		lower[jl] = t7 * outm7[j] + t5 * outm5[j] + t3 * outm3[j] + 
			t1 * outm1[j] + t1 * outp1[j] + t3 * outp3[j] + t5 * 
			outp5[j] + t7 * outp7[j];
	    }
	}
	i__1 = *lsetl;
	for (i__ = *fsetl; i__ <= i__1; i__ += 2) {
	    out2 = i__ * *stride;
	    out2s = i__ * (*stridel - *stride);
	    i__2 = out2 + 1 + *lptl;
	    for (j = out2 + 1 + *fptl; j <= i__2; ++j) {
		jl = j + out2s;
		lower[jl] = t8 * outm8[j] + t6 * outm6[j] + t4 * outm4[j] + 
			t2 * outm2[j] + t0 * out[j] + t2 * outp2[j] + t4 * 
			outp4[j] + t6 * outp6[j] + t8 * outp8[j];
	    }
	}
/*     end of symmetric part */
    } else {
/*     antisymmetric filter */
	i__1 = *lsetl;
	for (i__ = *fsetl + 1; i__ <= i__1; i__ += 2) {
	    out2 = i__ * *stride;
	    out2s = i__ * (*stridel - *stride);
	    i__2 = out2 + 1 + *lptl;
	    for (j = out2 + 1 + *fptl; j <= i__2; ++j) {
		jl = j + out2s;
		lower[jl] = t7 * (double)-1. * outm7[j] - t5 * outm5[j] - t3 * 
			outm3[j] - t1 * outm1[j] + t1 * outp1[j] + t3 * outp3[
			j] + t5 * outp5[j] + t7 * outp7[j];
	    }
	}
	i__1 = *lsetl;
	for (i__ = *fsetl; i__ <= i__1; i__ += 2) {
	    out2 = i__ * *stride;
	    out2s = i__ * (*stridel - *stride);
	    i__2 = out2 + 1 + *lptl;
	    for (j = out2 + 1 + *fptl; j <= i__2; ++j) {
		jl = j + out2s;
		lower[jl] = t8 * (double)-1. * outm8[j] - t6 * outm6[j] - t4 * 
			outm4[j] - t2 * outm2[j] + t0 * out[j] + t2 * outp2[j]
			 + t4 * outp4[j] + t6 * outp6[j] + t8 * outp8[j];
	    }
	}
/*     end of antisymmetric part */
    }
    return 0;
} /* convsetspo8full_ */

/*     Back and forth, linear convolution of sets of points for +/- 8 */
/*      filters using padding, ignoring input data on non-ghost points */
/*      (IN/+=OUT) */

/*     lower: output array for accumulation */
/*     outm3,outm2,outm1,outp1,outp2,outp3: pointers to input work array to */
/*         start of data sets, 3 previous, 2 previous, 1 previous, 1 forward, */
/*         2 forward, 3 forward */
/*     area: total size of each set */
/*     stride: separation between data sets (stride=&out-&outm1) */
/*     n: actual number of data sets being convolved */
/*     npad: size of padded region needed for "leakage" of foward filters */
/*     stridel: stride on output */
/*     fptl,lptl: first,last actual points in output set */
/*     fsetl,lsetl: first,last actual sets in output */
/*     tr: reverse-time filter coefficients */
/*     tf: forward-time filter coefficients */
/* Subroutine */ int convsetspo8_(double *lower, double *out, 
	double *outm8, double *outm7, double *outm6, double *
	outm5, double *outm4, double *outm3, double *outm2, 
	double *outm1, double *outp1, double *outp2, double *
	outp3, double *outp4, double *outp5, double *outp6, 
	double *outp7, double *outp8, int *area, int *stride, 
	int *n, int *npad, int *stridel, int *fptl, int *
	lptl, int *fsetl, int *lsetl, double *tr, double *tf)
{
    /* System generated locals */
    int i__1, i__2;

    /* Local variables */
    int i__, j, out2s;
    double t0, t1, t2, t3, t4, t5, t6, t7, t8;
    int jl, out2;

/*     Reverse direction */
/*     Relative to convsets, we wiped out the non-ghost references */
    /* Parameter adjustments */
    --tf;
    --tr;
    --outp8;
    --outp7;
    --outp6;
    --outp5;
    --outp4;
    --outp3;
    --outp2;
    --outp1;
    --outm1;
    --outm2;
    --outm3;
    --outm4;
    --outm5;
    --outm6;
    --outm7;
    --outm8;
    --out;
    --lower;

    /* Function Body */
    t0 = tr[1];
    t1 = tr[2];
    t2 = tr[3];
    t3 = tr[4];
    t4 = tr[5];
    t5 = tr[6];
    t6 = tr[7];
    t7 = tr[8];
    t8 = tr[9];
/*     Pad region */
    out2 = (*npad - 1) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = (double)0.;
    }
    out2 = (*npad - 2) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t8 * outm8[j];
    }
    out2 = (*npad - 3) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t7 * outm7[j];
    }
    out2 = (*npad - 4) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t6 * outm6[j] + t8 * outm8[j];
    }
    out2 = (*npad - 5) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t5 * outm5[j] + t7 * outm7[j];
    }
    out2 = (*npad - 6) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t4 * outm4[j] + t6 * outm6[j] + t8 * outm8[j];
    }
    out2 = (*npad - 7) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t3 * outm3[j] + t5 * outm5[j] + t7 * outm7[j];
    }
    out2 = (*npad - 8) * *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t2 * outm2[j] + t4 * outm4[j] + t6 * outm6[j] + t8 * outm8[j]
		;
    }
/*     Main reverse phase exploiting zeros! */
    for (i__ = *n - 1; i__ >= 8; i__ += -2) {
	out2 = i__ * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t7 * outm7[j] + t5 * outm5[j] + t3 * outm3[j] + t1 * 
		    outm1[j];
	}
	out2 = (i__ - 1) * *stride;
	i__1 = *area + out2;
	for (j = out2 + 1; j <= i__1; ++j) {
	    out[j] = t0 * out[j] + t2 * outm2[j] + t4 * outm4[j] + t6 * outm6[
		    j] + t8 * outm8[j];
	}
    }
/*     Fence posting */
    out2 = *stride * 7;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t1 * outm1[j] + t3 * outm3[j] + t5 * outm5[j] + t7 * outm7[j]
		;
    }
    out2 = *stride * 6;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t2 * outm2[j] + t4 * outm4[j] + t6 * outm6[j];
    }
    out2 = *stride * 5;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t1 * outm1[j] + t3 * outm3[j] + t5 * outm5[j];
    }
    out2 = *stride << 2;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t2 * outm2[j] + t4 * outm4[j];
    }
    out2 = *stride * 3;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t1 * outm1[j] + t3 * outm3[j];
    }
    out2 = *stride << 1;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j] + t2 * outm2[j];
    }
    out2 = *stride;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t1 * outm1[j];
    }
    out2 = 0;
    i__1 = *area + out2;
    for (j = out2 + 1; j <= i__1; ++j) {
	out[j] = t0 * out[j];
    }
/*     Forward phase (padding now ensures room!) */
/*     No change here relative to convsets */
    t0 = tf[1];
    t1 = tf[2];
    t2 = tf[3];
    t3 = tf[4];
    t4 = tf[5];
    t5 = tf[6];
    t6 = tf[7];
    t7 = tf[8];
    t8 = tf[9];
    i__1 = *lsetl;
    for (i__ = *fsetl; i__ <= i__1; ++i__) {
	out2 = i__ * *stride;
	out2s = i__ * (*stridel - *stride);
	i__2 = out2 + 1 + *lptl;
	for (j = out2 + 1 + *fptl; j <= i__2; ++j) {
	    jl = j + out2s;
/* $$$            out(j)= */
/* $$$     $           t0*out(j)+t1*outp1(j)+t2*outp2(j)+t3*outp3(j) */
	    lower[jl] = t0 * out[j] + t1 * outp1[j] + t2 * outp2[j] + t3 * 
		    outp3[j] + t4 * outp4[j] + t5 * outp5[j] + t6 * outp6[j] 
		    + t7 * outp7[j] + t8 * outp8[j];
	}
    }
    return 0;
} /* convsetspo8_ */


