int lagev1d int  evflag,
int  pdflag,
int  dof,
double *  M,
int  n,
double  e,
int  i,
double  u,
double *  res
 

Definition at line 363 of file vecmatop.cpp.

References DMFLAG_PERIOD.

00364 {
00365   int is[4];
00366   if(dmflag==DMFLAG_PERIOD) {
00367          for(int k=0; k<4; k++) is[k]=(i+k-1 + m) % m;
00368   } else {
00369          assert(i>=1 && i<=m-3);
00370          for(int k=0; k<4; k++) is[k]=(i+k-1);
00371   }
00372   DblNumMat M(dof,m,false,data); //assert(M.n()==n && M.m()==res.m()); //double dof = M.m();  //int cnt = 0;
00373   //---------------------------
00374   if(evflag & EVFLAG_VL) {
00375          double scl = 1.0;
00376          double us[4]; iC( lagcoef(EVFLAG_VL, u, us) );
00377          for(int d=0; d<dof; d++)               res[d] = 0;
00378          for(int d=0; d<dof; d++) 
00379                 for(int a=0; a<4; a++) {
00380                   res[d] += us[a] * M(d,is[a]);
00381                 }
00382          for(int d=0; d<dof; d++)               res[d] *= scl; //scaling
00383          res+=dof; //cnt ++;
00384   }
00385   //---------------------------
00386   if(evflag & EVFLAG_FD) {
00387          double scl = double(m) / e;
00388          double us[4]; iC( lagcoef(EVFLAG_FD, u, us) );
00389          for(int d=0; d<dof; d++)               res[d] = 0;
00390          for(int d=0; d<dof; d++)
00391                 for(int a=0; a<4; a++) {
00392                   res[d] += us[a] * M(d,is[a]);
00393                 }
00394          for(int d=0; d<dof; d++)               res[d] *= scl; //scaling
00395          res+=dof; //cnt ++;
00396   }
00397   //---------------------------
00398   if(evflag & EVFLAG_SD) {
00399          double scl = double(m*m)/(e*e);
00400          double us[4]; iC( lagcoef(EVFLAG_SD, u, us) );
00401          for(int d=0; d<dof; d++)               res[d] = 0;
00402          for(int d=0; d<dof; d++)
00403                 for(int a=0; a<4; a++) {
00404                   res[d] += us[a] * M(d,is[a]);
00405                 }
00406          for(int d=0; d<dof; d++)               res[d] *= scl; //scaling
00407          res+=dof; //cnt ++;
00408   }
00409   return 0;
00410 }


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