#include #include #define MxVAR 8 #define MxDG2 8 #define MxDG3 5 #define MxSR1 5 #define MxSR2 5 #define MxSR3 5 #define NELM2 45 /* nelm2[MxDG2-1] */ #define NELM3 55 /* nelm3[MxDG3-1] */ static double a[MxVAR+1][MxVAR+1+MxSR1]; static double b[NELM2][NELM2+MxSR2], c[NELM3][NELM3+MxSR3]; static double uu[MxDG2*2+1], vv[MxDG2*2+1]; static double xx[MxDG3*2+1], yy[MxDG3*2+1], zz[MxDG3*2+1]; static int kf1=-1, kf2=-1, kf3=-1; static int nv1, nd2, nd3, ns1, ns2, ns3, ne2, ne3; int sm1opn(int nvar, int nsrc) { int i1, i2; if (kf1 > 0) { fprintf(stderr, "sm1opn: illegal call sequence\n"); return(-1); } if ((nvar<1) || (nsrc<1)) { fprintf(stderr, "sm1opn: erroneous argument\n"); return(-2); } if ((nvar>MxVAR) || (nsrc>MxSR1)) { fprintf(stderr, "sm1opn: too many variables\n"); return(-2); } nv1 = nvar+1; ns1 = nsrc; for (i1=0; i1<(MxVAR+1); i1++) { for (i2=0; i2<(MxVAR+1+MxSR1); i2++) a[i1][i2] = 0.; } kf1 = 1; return(0); } int sm1ex(double var[], double src[]) { int i1, i2; if (kf1 < 1) { fprintf(stderr, "sm1ex: illegal call sequence\n"); return(-1); } a[0][0] += 1.; for (i2=1; i2 0) { fprintf(stderr, "sm2opn: illegal sequence\n"); return(-1); } if ((ndeg<1) || (nsrc<1)) { fprintf(stderr, "sm2opn: erroneous argument\n"); return(-2); } if (ndeg > MxDG2) { fprintf(stderr, "sm2opn: too large degree\n"); return(-2); } if (nsrc > MxSR2) { fprintf(stderr, "sm2opn: too many variables\n"); return(-2); } nd2 = ndeg; ns2 = nsrc; ne2 = nelm2[nd2-1]; for (i1=0; i1 0) { fprintf(stderr, "sm3opn: illegal sequence\n"); return(-1); } if ((ndeg<1) || (nsrc<1)) { fprintf(stderr, "sm3opn: erroneous argument\n"); return(-2); } if (ndeg > MxDG3) { fprintf(stderr, "sm3opn: too large degree\n"); return(-2); } if (nsrc > MxSR3) { fprintf(stderr, "sm3opn: too many variables\n"); return(-2); } nd3 = ndeg; ns3 = nsrc; ne3 = nelm3[nd3-1]; for (i1=0; i1