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

Definition at line 412 of file vecmatop.cpp.

References DMFLAG_PERIOD.

00413 {
00414   int m = mn[0];  int n = mn[1];
00415   double e = ef[0];  double f = ef[1];
00416   int i = ij[0];  int j = ij[1];
00417   double u = uv[0];  double v = uv[1];
00418   
00419   int is[4]; int js[4];
00420   if(dmflag==DMFLAG_PERIOD) {
00421          for(int k=0; k<4; k++) is[k]=(i+k-1 + m) % m;
00422          for(int k=0; k<4; k++) js[k]=(j+k-1 + n) % n;
00423   } else {
00424          assert(i>=1 && i<=m-3);
00425          for(int k=0; k<4; k++) is[k]=(i+k-1);
00426          assert(j>=1 && j<=n-3);
00427          for(int k=0; k<4; k++) js[k]=(j+k-1);
00428   }
00429   DblNumMat M(dof,m*n,false,data);
00430   double scl; 
00431   double us[4], vs[4];
00432   //---------------------------
00433   if(evflag & EVFLAG_VL) {
00434          scl = 1.0;
00435          iC( lagcoef(EVFLAG_VL, u, us) );
00436          iC( lagcoef(EVFLAG_VL, v, vs) );
00437          for(int d=0; d<dof; d++)               res[d] = 0;
00438          for(int a=0; a<4; a++)
00439                 for(int b=0; b<4; b++) {
00440                   double coef = us[a]*vs[b]; 
00441                   for(int d=0; d<dof; d++)
00442                          res[d] += coef * M(d, is[a]+js[b]*m);
00443                 }
00444          for(int d=0; d<dof; d++)               res[d] *= scl;
00445          res+=dof;
00446   }
00447   //---------------------------
00448   if(evflag & EVFLAG_FD) {
00449          scl = double(m)/e;
00450          iC( lagcoef(EVFLAG_FD, u, us) );
00451          iC( lagcoef(EVFLAG_VL, v, vs) );
00452          for(int d=0; d<dof; d++)               res[d] = 0;
00453          for(int a=0; a<4; a++)
00454                 for(int b=0; b<4; b++) {
00455                   double coef = us[a]*vs[b];
00456                   for(int d=0; d<dof; d++)
00457                          res[d] += coef * M(d, is[a]+js[b]*m);
00458                 }
00459          for(int d=0; d<dof; d++)               res[d] *= scl;
00460          res+=dof;
00461          //...
00462          scl = double(n)/f;
00463          iC( lagcoef(EVFLAG_VL, u, us) );
00464          iC( lagcoef(EVFLAG_FD, v, vs) );
00465          for(int d=0; d<dof; d++)               res[d] = 0;
00466          for(int a=0; a<4; a++)
00467                 for(int b=0; b<4; b++) {
00468                   double coef = us[a]*vs[b]; 
00469                   for(int d=0; d<dof; d++)
00470                          res[d] += coef * M(d, is[a]+js[b]*m);
00471                 }
00472          for(int d=0; d<dof; d++)               res[d] *= scl;
00473          res+=dof;
00474   }
00475   //---------------------------
00476   if(evflag & EVFLAG_SD) {
00477          scl = double(m*m)/(e*e);
00478          iC( lagcoef(EVFLAG_SD, u, us) );
00479          iC( lagcoef(EVFLAG_VL, v, vs) );
00480          for(int d=0; d<dof; d++)               res[d] = 0;
00481          for(int a=0; a<4; a++)
00482                 for(int b=0; b<4; b++) {
00483                   double coef = us[a]*vs[b]; 
00484                   for(int d=0; d<dof; d++)
00485                          res[d] += coef * M(d, is[a]+js[b]*m);
00486                 }
00487          for(int d=0; d<dof; d++)               res[d] *= scl;
00488          res+=dof;
00489          //...
00490          scl = double(m*n)/(e*f);
00491          iC( lagcoef(EVFLAG_FD, u, us) );
00492          iC( lagcoef(EVFLAG_FD, v, vs) );
00493          for(int d=0; d<dof; d++)               res[d] = 0;
00494          for(int a=0; a<4; a++)
00495                 for(int b=0; b<4; b++) {
00496                   double coef = us[a]*vs[b]; 
00497                   for(int d=0; d<dof; d++)
00498                          res[d] += coef * M(d, is[a]+js[b]*m);
00499                 }
00500          for(int d=0; d<dof; d++)               res[d] *= scl;
00501          res+=dof;
00502          //...
00503          scl = double(n*n)/(f*f);
00504          iC( lagcoef(EVFLAG_VL, u, us) );
00505          iC( lagcoef(EVFLAG_SD, v, vs) );
00506          for(int d=0; d<dof; d++)               res[d] = 0;
00507          for(int a=0; a<4; a++)
00508                 for(int b=0; b<4; b++) {
00509                   double coef = us[a]*vs[b]; 
00510                   for(int d=0; d<dof; d++)
00511                          res[d] += coef * M(d, is[a]+js[b]*m);
00512                 }
00513          for(int d=0; d<dof; d++)               res[d] *= scl;
00514          res+=dof;
00515   }
00516   return 0;
00517 }


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