Index: /issm/trunk-jpl/src/jl/solve.jl
===================================================================
--- /issm/trunk-jpl/src/jl/solve.jl	(revision 26627)
+++ /issm/trunk-jpl/src/jl/solve.jl	(revision 26628)
@@ -135,4 +135,24 @@
 	svalues::Vector{Float64}
 end# }}}
+function Base.show(io::IO, this::Node)# {{{
+
+	println(io,"Node:")
+	println(io,"   id:  ",this.id)
+	println(io,"   sid: ",this.sid)
+	println(io,"   indexingupdate: ",this.indexingupdate)
+	println(io,"   gsize: ",this.gsize)
+	println(io,"   gdoflist: ",this.gdoflist)
+	println(io,"   fdoflist: ",this.fdoflist)
+	println(io,"   sdoflist: ",this.sdoflist)
+	println(io,"   svalues: ",this.svalues)
+end# }}}
+function ApplyConstraint(node::Node,dof::Int8,value::Float64) #{{{
+
+	node.indexingupdate = true
+	node.fdoflist[dof]  = -1
+	node.sdoflist[dof]  = +1
+	node.svalues[dof]   = value
+
+end# }}}
 struct Constraint #{{{
 	id::Int64
@@ -140,4 +160,13 @@
 	dof::Int8
 	value::Float64
+end# }}}
+function ConstrainNode(constraint::Constraint,nodes::Vector{Node},parameters::Parameters) #{{{
+
+	#Chase through nodes and find the node to which this SpcStatic apply
+	node = nodes[constraint.nodeid]
+
+	#Apply Constraint
+	ApplyConstraint(node,constraint.dof,constraint.value)
+
 end# }}}
 mutable struct Vertex#{{{
@@ -254,4 +283,9 @@
 	ConfigureObjectx(elements,nodes,vertices,parameters,inputs)
 
+	#Constrain and Number nodes
+	SpcNodesx(nodes,constraints,parameters)
+	NodesDofx(nodes,parameters)
+   error("STOP")
+
 	#Build FemModel
 	return FemModel(elements,vertices,nodes,parameters,inputs,constraints)
@@ -265,9 +299,15 @@
 	tempinputs   = Inputs(-1,-1,Dict{IssmEnum,Input}())
 	tempvertices = Vector{Vertex}(undef,3)
-	tempnodes    = Vector{Node}(undef,0)
+	tempnodes    = Vector{Node}(undef,3)
 
 	count = 0
 	for i in 1:md.mesh.numberofelements
-		push!(elements,Tria(i,count,md.mesh.elements[i,:],tempvertices,Vector{Int64}(undef,0),tempnodes,tempparams,tempinputs))
+
+		#Assume Linear Elements for now
+		vertexids = md.mesh.elements[i,:]
+		nodeids   = md.mesh.elements[i,:]
+
+		#Call constructor and add to dataset elements
+		push!(elements,Tria(i,count,vertexids,tempvertices,nodeids,tempnodes,tempparams,tempinputs))
 	end
 
@@ -307,4 +347,15 @@
 	end
 
+end# }}}
+function SpcNodesx(nodes::Vector{Node},constraints::Vector{Constraint},parameters::Parameters) #{{{
+
+	for i in 1:length(constraints)
+		ConstrainNode(constraints[i],nodes,parameters)
+	end
+
+end# }}}
+function NodesDofx(nodes::Vector{Node}, parameters::Parameters) #{{{
+
+	error("not implemented yet")
 
 end# }}}
@@ -321,5 +372,5 @@
 	numdof = 2
 	for i in 1:md.mesh.numberofvertices
-		push!(nodes,Node(i,i,true,numdof,Vector{Int64}(undef,numdof), Vector{Int64}(undef,numdof), Vector{Int64}(undef,numdof), zeros(numdof)))
+		push!(nodes,Node(i,i,true,numdof,-ones(Int64,numdof), ones(Int64,numdof), -ones(Int64,numdof), zeros(numdof)))
 	end
 end#}}}
@@ -426,4 +477,9 @@
    end
 
+	#Configure nodes (assuming P1 finite elements)
+	for i in 1:3
+		element.nodes[i] = nodes[element.nodeids[i]]
+	end
+
 	#Point to real datasets
 	element.parameters = parameters
