int spev2d int  evflag,
int  dmflag,
int  dof,
double *  data,
int *  mn,
double *  ef,
int *  ij,
double *  uv,
double *  res
 

Definition at line 231 of file vecmatop.cpp.

References DMFLAG_PERIOD.

00232 {
00233   int m = mn[0];  int n = mn[1];
00234   double e = ef[0];  double f = ef[1];
00235   int i = ij[0];  int j = ij[1];
00236   double u = uv[0];  double v = uv[1];
00237   
00238   int is[4]; int js[4];
00239   if(dmflag==DMFLAG_PERIOD) {
00240          for(int k=0; k<4; k++) is[k]=(i+k-1 + m) % m;
00241          for(int k=0; k<4; k++) js[k]=(j+k-1 + n) % n;
00242   } else {
00243          assert(i>=1 && i<=m-3);
00244          for(int k=0; k<4; k++) is[k]=(i+k-1);
00245          assert(j>=1 && j<=n-3);
00246          for(int k=0; k<4; k++) js[k]=(j+k-1);
00247   }
00248   DblNumMat M(dof,m*n,false,data);
00249   double scl;
00250   double us[4], vs[4];
00251   //---------------------------
00252   if(evflag & EVFLAG_VL) {
00253          scl = 1.0;
00254          iC( spcoef(EVFLAG_VL, u, us) );
00255          iC( spcoef(EVFLAG_VL, v, vs) );
00256          for(int d=0; d<dof; d++)               res[d] = 0;
00257          for(int a=0; a<4; a++)
00258                 for(int b=0; b<4; b++) {
00259                   double coef = us[a]*vs[b]; 
00260                   for(int d=0; d<dof; d++)
00261                          res[d] += coef * M(d, is[a]+js[b]*m);
00262                 }
00263          for(int d=0; d<dof; d++)               res[d] *= scl;
00264          res+=dof;
00265   }
00266   //---------------------------
00267   if(evflag & EVFLAG_FD) {
00268          scl = double(m)/e;
00269          iC( spcoef(EVFLAG_FD, u, us) );
00270          iC( spcoef(EVFLAG_VL, v, vs) );
00271          for(int d=0; d<dof; d++)               res[d] = 0;
00272          for(int a=0; a<4; a++)
00273                 for(int b=0; b<4; b++) {
00274                   double coef = us[a]*vs[b];
00275                   for(int d=0; d<dof; d++)
00276                          res[d] += coef * M(d, is[a]+js[b]*m);
00277                 }
00278          for(int d=0; d<dof; d++)               res[d] *= scl;
00279          res+=dof;
00280          //...
00281          scl = double(n)/f;
00282          iC( spcoef(EVFLAG_VL, u, us) );
00283          iC( spcoef(EVFLAG_FD, v, vs) );
00284          for(int d=0; d<dof; d++)               res[d] = 0;
00285          for(int a=0; a<4; a++)
00286                 for(int b=0; b<4; b++) {
00287                   double coef = us[a]*vs[b]; 
00288                   for(int d=0; d<dof; d++)
00289                          res[d] += coef * M(d, is[a]+js[b]*m);
00290                 }
00291          for(int d=0; d<dof; d++)               res[d] *= scl;
00292          res+=dof;
00293   }
00294   //---------------------------
00295   if(evflag & EVFLAG_SD) {
00296          scl = double(m*m)/(e*e);
00297          iC( spcoef(EVFLAG_SD, u, us) );
00298          iC( spcoef(EVFLAG_VL, v, vs) );
00299          for(int d=0; d<dof; d++)               res[d] = 0;
00300          for(int a=0; a<4; a++)
00301                 for(int b=0; b<4; b++) {
00302                   double coef = us[a]*vs[b]; 
00303                   for(int d=0; d<dof; d++)
00304                          res[d] += coef * M(d, is[a]+js[b]*m);
00305                 }
00306          for(int d=0; d<dof; d++)               res[d] *= scl;
00307          res+=dof;
00308          //...
00309          scl = double(m*n)/(e*f);
00310          iC( spcoef(EVFLAG_FD, u, us) );
00311          iC( spcoef(EVFLAG_FD, v, vs) );
00312          for(int d=0; d<dof; d++)               res[d] = 0;
00313          for(int a=0; a<4; a++)
00314                 for(int b=0; b<4; b++) {
00315                   double coef = us[a]*vs[b]; 
00316                   for(int d=0; d<dof; d++)
00317                          res[d] += coef * M(d, is[a]+js[b]*m);
00318                 }
00319          for(int d=0; d<dof; d++)               res[d] *= scl;
00320          res+=dof;
00321          //...
00322          scl = double(n*n)/(f*f);
00323          iC( spcoef(EVFLAG_VL, u, us) );
00324          iC( spcoef(EVFLAG_SD, v, vs) );
00325          for(int d=0; d<dof; d++)               res[d] = 0;
00326          for(int a=0; a<4; a++)
00327                 for(int b=0; b<4; b++) {
00328                   double coef = us[a]*vs[b]; 
00329                   for(int d=0; d<dof; d++)
00330                          res[d] += coef * M(d, is[a]+js[b]*m);
00331                 }
00332          for(int d=0; d<dof; d++)               res[d] *= scl;
00333          res+=dof;
00334   }
00335   return 0;
00336 }


Generated on Sun Dec 4 18:13:13 2005 for common by  doxygen 1.4.5