Index: /issm/trunk-jpl/src/jl/solve/modules.jl
===================================================================
--- /issm/trunk-jpl/src/jl/solve/modules.jl	(revision 26717)
+++ /issm/trunk-jpl/src/jl/solve/modules.jl	(revision 26718)
@@ -216,4 +216,8 @@
 		AddToGlobal!(pe,pf)
 	end
+
+	Assemble!(Kff)
+	Assemble!(Kfs)
+	Assemble!(pf)
 	
 	return Kff, Kfs, pf
Index: /issm/trunk-jpl/src/jl/solve/toolkits.jl
===================================================================
--- /issm/trunk-jpl/src/jl/solve/toolkits.jl	(revision 26717)
+++ /issm/trunk-jpl/src/jl/solve/toolkits.jl	(revision 26718)
@@ -5,8 +5,13 @@
 #Matrix
 mutable struct IssmMatrix #{{{
+	M::Int64
+	N::Int64
+	rows::Vector{Int64}
+	cols::Vector{Int64}
+	vals::Vector{Float64}
 	matrix::SparseMatrixCSC{Float64,Int64}
 end #}}}
 function IssmMatrix(M::Int64,N::Int64)#{{{
-	return IssmMatrix(spzeros(M,N))
+	return IssmMatrix(M, N, Vector{Int64}(undef,0), Vector{Int64}(undef,0), Vector{Float64}(undef,0), spzeros(0,0))
 end#}}}
 function AddValues!(matrix::IssmMatrix,m::Int64,midx::Vector{Int64},n::Int64,nidx::Vector{Int64},values::Matrix{Float64})#{{{
@@ -17,5 +22,7 @@
 		for j in 1:n
 			if(nidx[j]==-1) continue end
-			matrix.matrix[midx[i],nidx[j]] += values[i,j]
+			push!(matrix.rows, midx[i])
+			push!(matrix.cols, nidx[j])
+			push!(matrix.vals, values[i,j])
 		end
 	end
@@ -25,4 +32,9 @@
 
 	return size(matrix.matrix)
+
+end#}}}
+function Assemble!(matrix::IssmMatrix)#{{{
+
+	matrix.matrix = sparse(matrix.rows, matrix.cols, matrix.vals, matrix.M, matrix.N)
 
 end#}}}
@@ -75,4 +87,9 @@
 
 end#}}}
+function Assemble!(vector::IssmVector)#{{{
+
+	#Nothing to do for this toolkit
+
+end#}}}
 function Norm(x::IssmVector,type::Int64)#{{{
 
