Index: /issm/trunk-jpl/src/m/classes/qmu.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/qmu.py	(revision 23432)
+++ /issm/trunk-jpl/src/m/classes/qmu.py	(revision 23433)
@@ -8,4 +8,5 @@
 from WriteData import WriteData
 from helpers import *
+from dakota_method import *
 
 class qmu(object):
@@ -22,5 +23,5 @@
 		self.responses                   = OrderedStruct()
 		self.method                      = OrderedDict()
-		self.params                      = OrderedDict()
+		self.params                      = OrderedStruct()
 		self.results                     = OrderedDict()
 		self.partition                   = float('NaN')
@@ -43,35 +44,43 @@
 
 		s+="%s\n" % fielddisplay(self,'isdakota','is qmu analysis activated?')
+		maxlen = 0
+		s+="         variables:  (arrays of each variable class)\n"
+
+		# OrderedStruct's iterator returns individual name/array-of-functions pairs
 		for variable in self.variables:
-			s+="         variables%s:  (arrays of each variable class)\n" % len(variable)
-			fnames=vars(variable)
-			maxlen=0
-			for fname in fnames:
-				maxlen=max(maxlen,len(fname))
+			fname=variable[0]
+			maxlen=max(maxlen,len(fname))
+			size = np.shape(variable[1])
+			a = size[0]
+			b = 1 if len(size) < 2 else size[1]
+			s+="            %-*s:    [%ix%i]    '%s'\n" %  (maxlen+1,fname,a,b,type(variable[1][0]))
 
-			for fname in fnames:
-				s+="'            %-*s:    [%ix%i]    '%s'\n" % \
-						(maxlen+1,fname,size(getattr(variable,fname)),type(getattr(variable,fname)))
+		s+="         responses:  (arrays of each response class)\n"
+		for response in self.responses:
+			fname=response[0]
+			maxlen=max(maxlen,len(fname))
+			size = np.shape(response[1])
+			a = size[0]
+			b = 1 if len(size) < 2 else size[1]
+			s+="            %-*s:    [%ix%i]    '%s'\n" %  (maxlen+1,fname,a,b,type(response[1][0]))
 
-		for response in self.responses:
-			s+="         responses%s:  (arrays of each response class)\n" % len(responses)
-			fnames=vars(response)
-			maxlen=0
-			for fname in fnames:
-				maxlen=max(maxlen,len(fname))
+		s+="%s\n" % fielddisplay(self,'numberofresponses','number of responses')
 
-			for fname in fnames:
-				s+="            %-*s:    [%ix%i]    '%s'\n" % \
-						(maxlen+1,fname,size(getattr(response,fname)),type(getattr(response,fname)))
+		if type(self.method) != OrderedDict:
+			self.method = [self.method]
+		# self.method must be iterable
+		for method in self.method:
+			if isinstance(method,dakota_method):
+				s+="            method :    '%s'\n" % (method.method)
 
-		s+="%s\n" % fielddisplay(self,'numberofresponses','number of responses') 
-
-		for method in self.method:
-			if isinstance(method,'dakota_method'):
-				s+="            method%s :    '%s'\n" % \
-						(len(method),method.method)
-
-		for param in self.params:
-			s+="         params%s:  (array of method-independent parameters)\n" % len(param)
+		# params could be have a number of forms (mainly 1 struct or many)
+		if type(self.params) == OrderedStruct:
+			params = [self.params]
+		else:
+			params = np.hstack(np.atleast_1d(np.array(self.params)))
+		for param in params:
+			print type(param)
+			print param
+			s+="         params:  (array of method-independent parameters)\n"
 			fnames=vars(param)
 			maxlen=0
@@ -80,9 +89,10 @@
 
 			for fname in fnames:
-				s+="            %-*s: %s\n" % \
-						(maxlen+1,fname,any2str(getattr(param,fname)))
+				s+="            %-*s: %s\n" %  (maxlen+1,fname,str(getattr(param,fname)))
 
-		for result in self.results:
-			s+="         results%s:  (information from dakota files)\n" % len(self.result)
+		# results could be have a number of forms (mainly 1 struct or many)
+		results = np.hstack(np.atleast_1d(np.array(self.results)))
+		for result in results:
+			s+="         results:  (information from dakota files)\n"
 			fnames=vars(result)
 			maxlen=0
@@ -91,6 +101,9 @@
 
 			for fname in fnames:
-				s+="            %-*s:    [%ix%i]    '%s'\n" % \
-						(maxlen+1,fname,size(getattr(result,fname)),type(getattr(result,fname)))
+				size = np.shape(response[1])
+				a = size[0]
+				b = 0 if len(size) < 2 else size[1]
+				size = np.shape(getattr(result,fname))
+				s+="            %-*s:    [%ix%i]    '%s'\n" % (maxlen+1,fname,a,b,type(getattr(result,fname)))
 
 		s+="%s\n" % fielddisplay(self,'partition','user provided mesh partitioning, defaults to metis if not specified') 
