Index: /issm/trunk/src/c/Makefile.am
===================================================================
--- /issm/trunk/src/c/Makefile.am	(revision 3722)
+++ /issm/trunk/src/c/Makefile.am	(revision 3723)
@@ -152,4 +152,6 @@
 					./shared/Numerics/OptFunc.cpp\
 					./shared/Numerics/extrema.cpp\
+					./shared/Numerics/SplitSolutionVector.h\
+					./shared/Numerics/SplitSolutionVector.cpp\
 					./shared/Exceptions/exceptions.h\
 					./shared/Exceptions/Exceptions.cpp\
@@ -575,4 +577,6 @@
 					./shared/Numerics/OptFunc.cpp\
 					./shared/Numerics/extrema.cpp\
+					./shared/Numerics/SplitSolutionVector.h\
+					./shared/Numerics/SplitSolutionVector.cpp\
 					./shared/Exceptions/exceptions.h\
 					./shared/Exceptions/Exceptions.cpp\
Index: /issm/trunk/src/c/shared/Numerics/SplitSolutionVector.cpp
===================================================================
--- /issm/trunk/src/c/shared/Numerics/SplitSolutionVector.cpp	(revision 3723)
+++ /issm/trunk/src/c/shared/Numerics/SplitSolutionVector.cpp	(revision 3723)
@@ -0,0 +1,42 @@
+#include "./SplitSolutionVector.h"
+
+SplitSolutionVector(Vec u_g,int numberofnodes,int numberofdofs,...){
+	/*http://www.dreamincode.net/forums/topic/79104-variadic-functions-or-how-printf-works */
+
+	/*Intermediary*/
+	va_list outputlist;
+	double* u_g_serial=NULL;
+	int     i,count;
+
+	/*Serialize vector and allocate once for all*/
+	VecToMPISerial(&u_g_serial,u_g);
+
+	/* va_start() takes the arg list type we just declared, as well
+	as the last argument in this function's definition, ie. 'int numberofdofs'*/
+	va_start(outputlist,numberofdofs);
+
+	/*Loop over the arguments*/
+	count=0;
+	while (count<numberofdofs){
+		/* va_arg() takes the arg list from above, and the type
+		the argument is supposed to be and then (hopefully) returns it*/
+		pvector=va_arg(outputlist,double**);
+
+		//continue if the pointer is NULL (output not requested)
+		if (pvector==NULL) continue;
+
+		/*Dynamically allocate single dof vector*/
+		vector=NULL;
+		vector=(double*)xmalloc(numberofnodes*sizeof(double));
+
+		/*Fill vector*/
+		for (i=0;i<numberofnodes;i++) vector[i]=u_g_serial[i*numberofdofs+count];
+
+		/*Assign vector*/
+		*pvector=vector;
+
+		/*update counter*/
+		count++;
+	}
+	va_end (outputlist);
+}
Index: /issm/trunk/src/c/shared/Numerics/SplitSolutionVector.h
===================================================================
--- /issm/trunk/src/c/shared/Numerics/SplitSolutionVector.h	(revision 3723)
+++ /issm/trunk/src/c/shared/Numerics/SplitSolutionVector.h	(revision 3723)
@@ -0,0 +1,11 @@
+#include <stdarg.h>
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "../../shared/shared.h"
+#include "../../include/macros.h"
+
+SplitSolutionVector(Vec u_g,int numberofnodes,int numberofdofs,...);
