Local(FloatHiPtr) J; /* current set of Jacobian vals */ Local(FloatHiPtr) H; /* current set of Hessian vals */ Local(FloatHiPtr) D3; /* current set of third-order dervals */ Local(FloatHiPtr) D4; /* current set of forth-order dervals */ Local(Int2) Der2num; /* number of 2nd order derivatives */ Local(Int2) Der3num; /* number of 3nd order derivatives */ Local(Int2) Der4num; /* number of 4nd order derivatives */ Local(void) CopyToX(Vector x); Local(void) CopyToP(Vector x); /**************************************************************************/ /* Returns Jacobian matrix of RHS using symbolic derivatives */ Local(void) SymJac(Vector x, Matrix Jac) { int i,j,nactive; CopyToX(x); CopyToP(x); J=stagenData->Der1(X,P,&zero); nactive=staFunc->GetVectorDim(x)-nphase; for (i=0; ik) Swap(j,k); if (j>l) Swap(j,l); if (k>l) Swap(k,l); return Der3Elem(i,j,k,l); } #define Der4Elem(i,j,k,l,m) (*(D4+Der4num*(i)+ind4_(j,k,l,m))) #define Swap(a,b) {t=a; a=b; b=t;} /* Returns forth order derivatives */ Local(FloatHi) D4Elem(int i, int j, int k, int l, int m) { int t; /* ensure j<=k<=l<=m */ if (j>k) Swap(j,k); if (j>l) Swap(j,l); if (j>m) Swap(j,m); if (k>l) Swap(k,l); if (k>m) Swap(k,m); if (l>m) Swap(l,m); return Der4Elem(i,j,k,l,m); } #undef Swap