Index: /issm/trunk-jpl/src/c/classes/Elements/TetraRef.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/TetraRef.cpp	(revision 17404)
+++ /issm/trunk-jpl/src/c/classes/Elements/TetraRef.cpp	(revision 17405)
@@ -18,4 +18,5 @@
 #define NUMNODESP0  1
 #define NUMNODESP1  4
+#define NUMNODESP2  10
 
 /*Object constructors and destructor*/
@@ -63,4 +64,27 @@
 
 	switch(element_type){
+		case P0Enum:
+			basis[0]=1.;
+			return;
+		case P1Enum: case P1DGEnum:
+			basis[0]=gauss->coord1;
+			basis[1]=gauss->coord2;
+			basis[2]=gauss->coord3;
+			basis[3]=gauss->coord4;
+			return;
+		case P2Enum:
+			/*Vertices*/
+			basis[0]=gauss->coord1*(2.*gauss->coord1-1.);
+			basis[1]=gauss->coord2*(2.*gauss->coord2-1.);
+			basis[2]=gauss->coord3*(2.*gauss->coord3-1.);
+			basis[3]=gauss->coord4*(2.*gauss->coord4-1.);
+			/*Edges*/
+			basis[4]=4.*gauss->coord2*gauss->coord3;
+			basis[5]=4.*gauss->coord1*gauss->coord3;
+			basis[6]=4.*gauss->coord1*gauss->coord2;
+			basis[7]=4.*gauss->coord2*gauss->coord4;
+			basis[8]=4.*gauss->coord3*gauss->coord4;
+			basis[9]=4.*gauss->coord1*gauss->coord4;
+			return;
 		default:
 			_error_("Element type "<<EnumToStringx(element_type)<<" not supported yet");
@@ -105,5 +129,4 @@
 	/*Clean up*/
 	xDelete<IssmDouble>(dbasis_ref);
-
 }
 /*}}}*/
@@ -125,4 +148,68 @@
 
 	switch(finiteelement){
+		case P0Enum:
+			/*Nodal function 1*/
+			dbasis[NUMNODESP0*0+0] = 0.;
+			dbasis[NUMNODESP0*1+0] = 0.;
+			dbasis[NUMNODESP0*2+0] = 0.;
+			return;
+		case P1Enum: case P1DGEnum:
+			dbasis[NUMNODESP1*0+0] = -1.;
+			dbasis[NUMNODESP1*1+0] = -1.;
+			dbasis[NUMNODESP1*2+0] = -1.;
+
+			dbasis[NUMNODESP1*0+1] = 1.;
+			dbasis[NUMNODESP1*1+1] = 0.;
+			dbasis[NUMNODESP1*2+1] = 0.;
+
+			dbasis[NUMNODESP1*0+2] = 0.;
+			dbasis[NUMNODESP1*1+2] = 1.;
+			dbasis[NUMNODESP1*2+2] = 0.;
+
+			dbasis[NUMNODESP1*0+3] = 0.;
+			dbasis[NUMNODESP1*1+3] = 0.;
+			dbasis[NUMNODESP1*2+3] = 1.;
+			return;
+		case P2Enum:
+			dbasis[NUMNODESP2*0+0] = -4.*gauss->coord1+1.;
+			dbasis[NUMNODESP2*1+0] = -4.*gauss->coord1+1.;
+			dbasis[NUMNODESP2*2+0] = -4.*gauss->coord1+1.;
+
+			dbasis[NUMNODESP2*0+1] = 4.*gauss->coord2-1.;
+			dbasis[NUMNODESP2*1+1] = 0.;
+			dbasis[NUMNODESP2*2+1] = 0.;
+
+			dbasis[NUMNODESP2*0+2] = 0.;
+			dbasis[NUMNODESP2*1+2] = 4.*gauss->coord3-1.;
+			dbasis[NUMNODESP2*2+2] = 0.;
+
+			dbasis[NUMNODESP2*0+3] = 0.;
+			dbasis[NUMNODESP2*1+3] = 0.;
+			dbasis[NUMNODESP2*2+3] = 4.*gauss->coord4-1.;
+
+			dbasis[NUMNODESP2*0+4] = 4.*gauss->coord3;
+			dbasis[NUMNODESP2*1+4] = 4.*gauss->coord2;
+			dbasis[NUMNODESP2*2+4] = 0.;
+
+			dbasis[NUMNODESP2*0+5] = -4.*gauss->coord3;
+			dbasis[NUMNODESP2*1+5] = 4.*(gauss->coord1-gauss->coord3);
+			dbasis[NUMNODESP2*2+5] = -4.*gauss->coord3;
+
+			dbasis[NUMNODESP2*0+6] = 4.*(gauss->coord1-gauss->coord2);
+			dbasis[NUMNODESP2*1+6] = -4.*gauss->coord2;
+			dbasis[NUMNODESP2*2+6] = -4.*gauss->coord2;
+
+			dbasis[NUMNODESP2*0+7] = 4.*gauss->coord4;
+			dbasis[NUMNODESP2*1+7] = 0.;
+			dbasis[NUMNODESP2*2+7] = 4.*gauss->coord2;
+
+			dbasis[NUMNODESP2*0+8] = 0.;
+			dbasis[NUMNODESP2*1+8] = 4.*gauss->coord4;
+			dbasis[NUMNODESP2*2+8] = 4.*gauss->coord3;
+
+			dbasis[NUMNODESP2*0+9] = -4.*gauss->coord4;
+			dbasis[NUMNODESP2*1+9] = -4.*gauss->coord4;
+			dbasis[NUMNODESP2*2+9] = 4.*(gauss->coord1-gauss->coord4);
+			return;
 		default:
 			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
@@ -199,4 +286,19 @@
 	 * J is assumed to have been allocated of size 1*/
 
+	IssmDouble x1=xyz_list[3*0+0];
+	IssmDouble x2=xyz_list[3*1+0];
+	IssmDouble x3=xyz_list[3*2+0];
+	IssmDouble x4=xyz_list[3*3+0];
+
+	IssmDouble y1=xyz_list[3*0+1];
+	IssmDouble y2=xyz_list[3*1+1];
+	IssmDouble y3=xyz_list[3*2+1];
+	IssmDouble y4=xyz_list[3*3+1];
+
+	IssmDouble z1=xyz_list[3*0+2];
+	IssmDouble z2=xyz_list[3*1+2];
+	IssmDouble z3=xyz_list[3*2+2];
+	IssmDouble z4=xyz_list[3*3+2];
+
 	_error_("Not implemented yet");
 }
@@ -240,7 +342,8 @@
 
 	switch(finiteelement){
-		case P0Enum:                return NUMNODESP0;
-		case P1Enum:                return NUMNODESP1;
-		case P1DGEnum:              return NUMNODESP1;
+		case P0Enum:   return NUMNODESP0;
+		case P1Enum:   return NUMNODESP1;
+		case P1DGEnum: return NUMNODESP1;
+		case P2Enum:   return NUMNODESP2;
 		default: _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
 	}
Index: /issm/trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 17404)
+++ /issm/trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 17405)
@@ -46,5 +46,5 @@
 	file_line= what_line;
 	/*When error messages are not shown properly, uncomment the following line*/
-	//this->Report();
+	this->Report();
 
 }/*}}}*/
