@Override
 public void assignElement(Element e) {
   if (funIndex >= 0 && funIndex <= 1) {
     ((ScalarShapeFunction) sf.get(1)).assignElement(e);
   } else if (funIndex >= 2 && funIndex <= 3) {
     ((ScalarShapeFunction) sf.get(2)).assignElement(e);
   }
 }
    public SFLinearLocal1DVector(int funID) {
      this.dim = 2;
      this.funIndex = funID - 1;

      varNames.add("r");
      innerVarNames = new ObjList<String>("x");

      if (funIndex >= 0 && funIndex <= 1) {
        sf.set(1, new SFLinearLocal1D(funIndex + 1));
        sf.set(2, new SFConstant0(innerVarNames));
      } else if (funIndex >= 2 && funIndex <= 3) {
        sf.set(1, new SFConstant0(innerVarNames));
        sf.set(2, new SFLinearLocal1D(funIndex - 1));
      }
    }
 @Override
 public Function get(int index) {
   return sf.get(index);
 }
 public String toString() {
   return sf.toString();
 }
 @Override
 public Function dot(Vector b) {
   return sf.dot(b);
 }