Index: /issm/trunk-jpl/src/m/consistency/checkfield.py
===================================================================
--- /issm/trunk-jpl/src/m/consistency/checkfield.py	(revision 23760)
+++ /issm/trunk-jpl/src/m/consistency/checkfield.py	(revision 23761)
@@ -17,5 +17,5 @@
 	   Available options:
 	      - NaN: 1 if check that there is no NaN
-	      - size: [lines cols], NaN for non checked dimensions
+	      - size: [lines cols], NaN for non checked dimensions, or 'universal' for any input type (nodal, element, time series, etc)
 	      - >:  greater than provided value
 	      - >=: greater or equal to provided value
@@ -63,5 +63,5 @@
 	if options.exist('empty'):
 		if not field:
-			md = md.checkmessage(options.getfieldvalue('message',\
+			md = md.checkmessage(options.getfieldvalue('message',
 				"field '%s' is empty" % fieldname))
 
@@ -69,29 +69,73 @@
 	if options.exist('size'):
 		fieldsize=options.getfieldvalue('size')
-		if len(fieldsize) == 1:
-			if np.isnan(fieldsize[0]):
-				pass
-			elif np.ndim(field)==1:
-				if not np.size(field)==fieldsize[0]:
-					md = md.checkmessage(options.getfieldvalue('message',"field {} size should be {}".format(fieldname,fieldsize[0])))
+		if type(fieldsize) == str:
+			if m.strcmp(fieldsize,'universal'):
+
+				#Check that vector size will not be confusing for ModelProcessorx
+				if (md.mesh.numberofvertices==md.mesh.numberofelements):
+					raise RuntimeError('number of vertices is the same as number of elements')
+				elif (md.mesh.numberofvertices+1==md.mesh.numberofelements):
+					raise RuntimeError('number of vertices +1 is the same as number of elements')
+				elif (md.mesh.numberofvertices==md.mesh.numberofelements+1):
+					raise RuntimeError('number of vertices is the same as number of elements +1')
+				
+				#Uniform field
+				if (np.size(field,0)==1):
+					if (np.shape(field,1)!=1):
+						md = md.checkmessage(options.getfieldvalue('message',"field '{}' is not supported".format(fieldname)))
+
+				#vertex oriented input, only one column allowed
+				elif (np.shape(field,0)==md.mesh.numberofvertices):
+					if (np.shape(field,1)!=1):
+						md = md.checkmessage(options.getfieldvalue('message',"field '{}' is not supported".format(fieldname)))
+
+				#element oriented input, one or more column (patch) is ok 
+				elif (np.shape(field,0)==md.mesh.numberofelements):
+					pass
+					#nothing to do here (either constant per element, or defined on nodes)
+
+				#vertex time series
+				elif (np.shape(field,0)==md.mesh.numberofvertices+1):
+					if (np.shape(field,1)<=1):
+						md = md.checkmessage(options.getfieldvalue('message',"field '{}' is not supported".format(fieldname)))
+
+				#element time series
+				elif (np.shape(field,0)==md.mesh.numberofelements+1):
+					if (np.shape(field,1)<=1):
+						md = md.checkmessage(options.getfieldvalue('message',"field '{}' is not supported".format(fieldname)))
+
+				#else not supported
+				else:
+					md = md.checkmessage(options.getfieldvalue('message',"field '{}' is not supported".format(fieldname)))
+
 			else:
-				try:
-					exec("md.{}=np.squeeze(field)".format(fieldname))
-					print(('{} had been squeezed if it was a matrix with only one column'.format(fieldname)))
-				except IndexError:
-					md = md.checkmessage(options.getfieldvalue('message',"field {} should have {} dimension".format(fieldname,len(fieldsize))))
-		elif len(fieldsize) == 2:
-			if   np.isnan(fieldsize[0]):
-				if not np.size(field,1)==fieldsize[1]:
-					md = md.checkmessage(options.getfieldvalue('message',"field '%s' should have %d columns" % (fieldname,fieldsize[1])))
-			elif np.isnan(fieldsize[1]):
-				if not np.size(field,0)==fieldsize[0]:
-					md = md.checkmessage(options.getfieldvalue('message',"field '%s' should have %d lines" % (fieldname,fieldsize[0])))
-			elif fieldsize[1]==1:
-				if (not np.size(field,0)==fieldsize[0]):
-					md = md.checkmessage(options.getfieldvalue('message',"field '%s' size should be %d x %d" % (fieldname,fieldsize[0],fieldsize[1])))
-			else:
-				if (not np.size(field,0)==fieldsize[0]) or (not np.size(field,1)==fieldsize[1]):
-					md = md.checkmessage(options.getfieldvalue('message',"field '%s' size should be %d x %d" % (fieldname,fieldsize[0],fieldsize[1])))
+				raise RuntimeError("fieldsize '{}' not supported yet".format(fieldsize))
+
+		else:
+			if len(fieldsize) == 1:
+				if np.isnan(fieldsize[0]):
+					pass
+				elif np.ndim(field)==1:
+					if not np.size(field)==fieldsize[0]:
+						md = md.checkmessage(options.getfieldvalue('message',"field {} size should be {}".format(fieldname,fieldsize[0])))
+				else:
+					try:
+						exec("md.{}=np.squeeze(field)".format(fieldname))
+						print(("{} had been squeezed if it was a matrix with only one column".format(fieldname)))
+					except IndexError:
+						md = md.checkmessage(options.getfieldvalue('message',"field {} should have {} dimension".format(fieldname,len(fieldsize))))
+			elif len(fieldsize) == 2:
+				if   np.isnan(fieldsize[0]):
+					if not np.size(field,1)==fieldsize[1]:
+						md = md.checkmessage(options.getfieldvalue('message',"field '%s' should have %d columns" % (fieldname,fieldsize[1])))
+				elif np.isnan(fieldsize[1]):
+					if not np.size(field,0)==fieldsize[0]:
+						md = md.checkmessage(options.getfieldvalue('message',"field '%s' should have %d lines" % (fieldname,fieldsize[0])))
+				elif fieldsize[1]==1:
+					if (not np.size(field,0)==fieldsize[0]):
+						md = md.checkmessage(options.getfieldvalue('message',"field '%s' size should be %d x %d" % (fieldname,fieldsize[0],fieldsize[1])))
+				else:
+					if (not np.size(field,0)==fieldsize[0]) or (not np.size(field,1)==fieldsize[1]):
+						md = md.checkmessage(options.getfieldvalue('message',"field '%s' size should be %d x %d" % (fieldname,fieldsize[0],fieldsize[1])))
 
 	#Check numel
