Vector2d s_func( double &xi, double &eta, const Vector4d &x, const Vector4d &y) { double xip = 1 + xi; double xim = 1 - xi; double etap = 1 + eta; double etam = 1 - eta; Vector4d shp; shp(0) = xim * etam / 4.0; shp(1) = xip * etam / 4.0; shp(2) = xim * etap / 4.0; shp(3) = xip * etap / 4.0; Vector2d map; map.setZero(); for (size_t i=0; i<4; i++) { map(0) += shp(i) * x(i); map(1) += shp(i) * y(i); } return map; }
MatrixXd Triangle<ConcreteShape>::computeGradient(const Ref<const VectorXd>& field) { Vector2d phyGrad; Vector2d refGrad; for(int i=0;i<mNumIntPnt;i++) { refGrad.setZero(2); for(int j=0;j<mNumIntPnt;j++) { refGrad(0) += mGradientPhi_dr(j,i) * field(j); refGrad(1) += mGradientPhi_ds(j,i) * field(j); } phyGrad = (mInvJac) * refGrad; mGradWork(i,0) = phyGrad(0); mGradWork(i,1) = phyGrad(1); } return mGradWork; }
void reset_collision () { impulse.setZero(); collided = false; contacted = false; }