Esempio n. 1
0
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;

}
Esempio n. 2
0
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;
}
Esempio n. 3
0
 void reset_collision () {
     impulse.setZero();
     collided = false;
     contacted = false;
 }