Index: /issm/trunk/src/c/objects/Node.cpp
===================================================================
--- /issm/trunk/src/c/objects/Node.cpp	(revision 94)
+++ /issm/trunk/src/c/objects/Node.cpp	(revision 95)
@@ -16,10 +16,10 @@
 #include "./ParameterInputs.h"
 #include "../shared/shared.h"
-
-		
+#include "../include/typedefs.h"
+
 Node::Node(){
 	return;
 }
-Node::Node(int node_id,int node_partitionborder,int node_numdofs, double node_x[3],int node_onbed,int node_onsurface){
+Node::Node(int node_id,int node_partitionborder,int node_numdofs, double node_x[3],int node_onbed,int node_onsurface,int node_upper_node_id){
 
 	int i;
@@ -42,4 +42,9 @@
 	}
 
+	/*Initialize upper node:*/
+	upper_node_id=node_upper_node_id;
+	upper_node=NULL;
+	upper_node_offset=UNDEF;
+
 	return;
 }
@@ -61,4 +66,6 @@
 	printf("   onbed: %i\n",onbed);
 	printf("   onsurface: %i\n",onsurface);
+	printf("   upper_node_id=%i\n",upper_node_id);
+	printf("   upper_node_offset=%i\n",upper_node_offset);
 	printf("   doflist:|");
 	for(i=0;i<numberofdofs;i++){
@@ -74,4 +81,5 @@
 	}
 	printf("\n");
+	if(upper_node)printf("   upper_node pointer: %p\n",upper_node);
 
 	return;
@@ -105,4 +113,7 @@
 	memcpy(marshalled_dataset,&fset,sizeof(fset));marshalled_dataset+=sizeof(fset);
 	memcpy(marshalled_dataset,&sset,sizeof(sset));marshalled_dataset+=sizeof(sset);
+	memcpy(marshalled_dataset,&upper_node_id,sizeof(upper_node_id));marshalled_dataset+=sizeof(upper_node_id);
+	memcpy(marshalled_dataset,&upper_node,sizeof(upper_node));marshalled_dataset+=sizeof(upper_node);
+	memcpy(marshalled_dataset,&upper_node_offset,sizeof(upper_node_offset));marshalled_dataset+=sizeof(upper_node_offset);
 
 	*pmarshalled_dataset=marshalled_dataset;
@@ -124,4 +135,7 @@
 		sizeof(fset)+
 		sizeof(sset)+
+		sizeof(upper_node_id)+
+		sizeof(upper_node)+
+		sizeof(upper_node_offset)+
 		sizeof(int); //sizeof(int) for enum type
 }
@@ -154,4 +168,10 @@
 	memcpy(&fset,marshalled_dataset,sizeof(fset));marshalled_dataset+=sizeof(fset);
 	memcpy(&sset,marshalled_dataset,sizeof(sset));marshalled_dataset+=sizeof(sset);
+	memcpy(&upper_node_id,marshalled_dataset,sizeof(upper_node_id));marshalled_dataset+=sizeof(upper_node_id);
+	memcpy(&upper_node,marshalled_dataset,sizeof(upper_node));marshalled_dataset+=sizeof(upper_node);
+	memcpy(&upper_node_offset,marshalled_dataset,sizeof(upper_node_offset));marshalled_dataset+=sizeof(upper_node_offset);
+	
+	/*upper node is not pointing to correct object anymore: */
+	upper_node=NULL;
 
 	/*return: */
@@ -417,2 +437,36 @@
 
 }
+
+#undef __FUNCT__ 
+#define __FUNCT__ "Node::Configure"
+void  Node::Configure(void* pnodes){
+
+	DataSet* nodes=NULL;
+
+	/*Recover pointers :*/
+	nodes=(DataSet*)pnodes;
+
+	/*Link this node with its upper node: */
+	ResolvePointers((Object**)&upper_node,&upper_node_id,&upper_node_offset,1,nodes);
+	
+}
+
+#undef __FUNCT__ 
+#define __FUNCT__ "Node::GetUpperNode"
+Node* Node::GetUpperNode(){
+	return upper_node;
+}
+		
+int   Node::IsOnBed(){
+	return onbed;
+}
+
+int   Node::IsOnSurface(){
+	return onsurface;
+}
+		
+void  Node::FreezeDof(int dof){
+	
+	DofInSSet(dof-1); //with 0 displacement for this dof.
+
+}
Index: /issm/trunk/src/c/objects/Node.h
===================================================================
--- /issm/trunk/src/c/objects/Node.h	(revision 94)
+++ /issm/trunk/src/c/objects/Node.h	(revision 95)
@@ -31,4 +31,8 @@
 		int     sset[MAXDOFSPERNODE];
 
+		int   upper_node_id;
+		Node* upper_node;
+		int   upper_node_offset;
+
 		/*data that is post processed : */
 		int doflist[MAXDOFSPERNODE];
@@ -37,5 +41,5 @@
 
 		Node();
-		Node(int node_id,int node_partitionborder,int node_numdofs, double node_x[3],int node_onbed,int node_onsurface);
+		Node(int node_id,int node_partitionborder,int node_numdofs, double node_x[3],int node_onbed,int node_onsurface,int upper_node_id);
 		~Node();
 
@@ -68,4 +72,9 @@
 		Object* copy();
 		void  UpdateFromInputs(ParameterInputs* inputs);
+		void  Configure(void* pnodes);
+		Node* GetUpperNode();
+		int   IsOnBed();
+		int   IsOnSurface();
+		void  FreezeDof(int dof);
 
 };
