Index: /issm/trunk/src/m/classes/@inputfield/display.m
===================================================================
--- /issm/trunk/src/m/classes/@inputfield/display.m	(revision 271)
+++ /issm/trunk/src/m/classes/@inputfield/display.m	(revision 271)
@@ -0,0 +1,35 @@
+function display(inputfield)
+%DISPLAY - displays the fields of an inputfield object
+%
+%   echo function for 'inputfield' class
+
+STRING=0;
+INTEGER=1;
+DOUBLE=2;
+DOUBLEVEC=3;
+
+if isempty(inputfield.name),
+	%do nothing
+	return;
+end
+
+%disp(sprintf('\n%s = \n',inputfieldname(1)));
+
+switch inputfield.type, 
+	case STRING,
+		disp(sprintf('   %s(string): %s',inputfield.name,inputfield.string));
+	case INTEGER,
+		disp(sprintf('   %s(integer): %i',inputfield.name,inputfield.integer));
+	case DOUBLE,
+		disp(sprintf('   %s(double): %i',inputfield.name,inputfield.double));
+	case DOUBLEVEC,
+		disp(sprintf('   %s(vector): ndof %i numberofnodes %i ',inputfield.name,inputfield.ndof,inputfield.numberofnodes));
+		for i=1:inputfield.numberofnodes,
+			string='                  ';
+			for j=1:inputfield.ndof,
+				string=[string ' ' num2str(inputfield.vector((i-1)*inputfield.ndof+j))];
+			end
+			disp(string);
+		end
+end
+
Index: /issm/trunk/src/m/classes/@inputfield/get.m
===================================================================
--- /issm/trunk/src/m/classes/@inputfield/get.m	(revision 271)
+++ /issm/trunk/src/m/classes/@inputfield/get.m	(revision 271)
@@ -0,0 +1,47 @@
+function field=get(inputfield,varargin)
+%GET - returns field from inputfield 
+%      usage:  
+%          field=get(inputfield);
+%          field=get(inputfield,doflist); %dof flag list for doublevec vectors. 
+%
+%          ex: velocity=get(inputfield)
+%          or: velocity=get(inputfield,[1 1 0]); %get only vx and vy
+%          or: velocity=get(inputfield,[1 1 1]); %get vx,vy and vz
+%
+
+
+STRING=0;
+INTEGER=1;
+DOUBLE=2;
+DOUBLEVEC=3;
+
+field=[]; %in case nothing is returned
+if inputfield.type==STRING,
+	field=inputfield.string;
+end
+
+if inputfield.type==INTEGER,
+	field=inputfield.integer;
+end
+
+if inputfield.type==DOUBLE,
+	field=inputfield.double;
+end
+
+if inputfield.type==DOUBLEVEC,
+	if nargin==1,
+		field=inputfield.double;
+	else
+		doflist=varargin{1};
+		numdofs=numel(find(doflist));
+		field=zeros(numdofs*inputfield.numberofnodes,1);
+
+		count=0;
+		for i=1:length(doflist),
+			if doflist(i),
+				count=count+1;
+				field(count:numdofs:end)=inputfield.vector(i:inputfield.ndof:end);
+			end
+		end
+	end
+end
Index: /issm/trunk/src/m/classes/@inputfield/getname.m
===================================================================
--- /issm/trunk/src/m/classes/@inputfield/getname.m	(revision 271)
+++ /issm/trunk/src/m/classes/@inputfield/getname.m	(revision 271)
@@ -0,0 +1,6 @@
+function name=getname(inputfield)
+%GETNAME - returns name of an inputfield
+%
+
+name=inputfield.name;
+
Index: /issm/trunk/src/m/classes/@inputfield/inputfield.m
===================================================================
--- /issm/trunk/src/m/classes/@inputfield/inputfield.m	(revision 271)
+++ /issm/trunk/src/m/classes/@inputfield/inputfield.m	(revision 271)
@@ -0,0 +1,135 @@
+function inputfield = inputfield(varargin)
+%INPUTS - contructor for inputfield objects
+%
+%   Usage:
+%      inputfield = inputfield()
+%      inputfield = inputfield(name,field,field_type)
+
+STRING=0;
+INTEGER=1;
+DOUBLE=2;
+DOUBLEVEC=3;
+
+switch nargin
+case 0
+	inputfield.name='';
+	inputfield.type=DOUBLE;
+
+	%placeholders:
+	inputfield.string='';
+	inputfield.integer=NaN;
+	inputfield.double=NaN;
+	inputfield.vector=[];
+	inputfield.ndof=NaN;
+	inputfield.numberofnodes=NaN;
+	
+	inputfield=class(inputfield,'inputfield');
+	
+
+case  3
+	name=varargin{1};
+	field=varargin{2};
+	field_type=varargin{3};
+
+	if ~ischar(name),
+		error('in inputfield(name,field,field_type) constructor call, name is a string');
+	end
+
+	if ~ischar(field_type),
+		error('in inputfield(name,field,field_type) constructor call, field_type is a string: ''string'',''integer'',''double'' or ''doublevec'' ');
+	end
+
+	inputfield.name='';
+	inputfield.type=DOUBLE;
+
+	%placeholders:
+	inputfield.string='';
+	inputfield.integer=NaN;
+	inputfield.double=NaN;
+	inputfield.vector=[];
+	inputfield.ndof=NaN;
+	inputfield.numberofnodes=NaN;
+
+	%fill fields
+	inputfield.name=name;
+	if strcmpi(field_type,'string'),
+		inputfield.type=STRING;
+		inputfield.string=field;
+	end
+
+	if strcmpi(field_type,'integer'),
+		inputfield.type=INTEGER;
+		inputfield.integer=field;
+	end
+
+	if strcmpi(field_type,'double'),
+		inputfield.type=DOUBLE;
+		inputfield.double=field;
+	end
+
+	if strcmpi(field_type,'doublevec'),
+		inputfield.type=DOUBLEVEC;
+		inputfield.vector=field;
+		inputfield.ndof=1;
+		inputfield.numberofnodes=length(inputfield.vector);
+	end
+	inputfield=class(inputfield,'inputfield');
+
+case  5
+	name=varargin{1};
+	field=varargin{2};
+	field_type=varargin{3};
+	ndof=varargin{4};
+	numberofnodes=varargin{5};
+
+	if ~ischar(name),
+		error('in inputfield(name,field,field_type) constructor call, name is a string');
+	end
+
+	if ~ischar(field_type),
+		error('in inputfield(name,field,field_type) constructor call, field_type is a string: ''string'',''integer'',''double'' or ''doublevec'' ');
+	end
+
+	inputfield.name='';
+	inputfield.type=DOUBLE;
+
+	%placeholders:
+	inputfield.string='';
+	inputfield.integer=NaN;
+	inputfield.double=NaN;
+	inputfield.vector=[];
+	inputfield.ndof=NaN;
+	inputfield.numberofnodes=NaN;
+
+	%fill fields
+	inputfield.name=name;
+	if strcmpi(field_type,'string'),
+		inputfield.type=STRING;
+		inputfield.string=field;
+	end
+
+	if strcmpi(field_type,'integer'),
+		inputfield.type=INTEGER;
+		inputfield.integer=field;
+	end
+
+	if strcmpi(field_type,'double'),
+		inputfield.type=DOUBLE;
+		inputfield.double=field;
+	end
+
+	if strcmpi(field_type,'doublevec'),
+		inputfield.type=DOUBLEVEC;
+		inputfield.vector=field;
+		inputfield.ndof=ndof;
+		inputfield.numberofnodes=numberofnodes;
+		if (inputfield.ndof*inputfield.numberofnodes)~=length(inputfield.vector),
+			error(['length of vector ''',inputfield.name,''' should be ndof*numberofnodes=' num2str(ndof*numberofnodes)]);
+		end
+	end
+	inputfield=class(inputfield,'inputfield');
+
+
+otherwise
+	error('inputfield constructor error message: 0 of 1 argument only in inputfield.');
+end
Index: /issm/trunk/src/m/classes/@inputlist/add.m
===================================================================
--- /issm/trunk/src/m/classes/@inputlist/add.m	(revision 271)
+++ /issm/trunk/src/m/classes/@inputlist/add.m	(revision 271)
@@ -0,0 +1,34 @@
+function inputlist = add(inputlist,field_name,field,field_type,varargin)
+%ADD - add an input to parameter inputs
+%
+%   Usage:
+%      inputlist = add(inputlist,field_name,field,field_type)
+
+found=0;
+
+if length(inputlist)==0,
+	inputlist
+	inputlist(end+1).input=inputfield(field_name,field,field_type,varargin);
+else
+	for i=1:length(inputlist),
+
+		if strcmpi(field_name,getname(inputlist(i).input)),
+			%replace this field by new field
+			inputlist(i).input=inputfield(field_name,field,field_type,varargin{:});
+			found=1;
+			break;
+		end
+	end
+
+
+	%did we find the input name?
+	if found,
+		%we are done
+	else
+		%add at the end
+		inputlist(end+1).input=inputfield(field_name,field,field_type,varargin{:});
+	end
+end
+if ~isa(inputlist,'inputlist'),
+	inputlist=class(inputlist,'inputlist');
+end
Index: /issm/trunk/src/m/classes/@inputlist/display.m
===================================================================
--- /issm/trunk/src/m/classes/@inputlist/display.m	(revision 271)
+++ /issm/trunk/src/m/classes/@inputlist/display.m	(revision 271)
@@ -0,0 +1,13 @@
+function display(inputlist)
+%DISPLAY - displays the fields of an inputlist object
+%
+%   echo function for 'inputlist' class
+disp('parameter inputlist echo');
+
+if length(inputlist)==0,
+	disp('   empty');
+else
+	for i=1:length(inputlist), 
+		inputlist(i).input
+	end
+end
Index: /issm/trunk/src/m/classes/@inputlist/get.m
===================================================================
--- /issm/trunk/src/m/classes/@inputlist/get.m	(revision 271)
+++ /issm/trunk/src/m/classes/@inputlist/get.m	(revision 271)
@@ -0,0 +1,21 @@
+function field = get(inputlist,field_name,varargin)
+%ADD - get a parameter input with name "field_name". 
+%
+%   Usage:
+%      inputlist = get(inputlist,field_name,varargin)
+%      optional argument: list of dofs being kept.
+%      ex: 
+%              inputlist=get(inputlist,'velocity',[1 1 0]); %only keep vx,vy
+%              inputlist=get(inputlist,'velocity',[1 1 1]); %keep vx,vy,vz
+
+field=[]; %in case we find nothing
+
+for i=1:length(inputlist),
+
+	if strcmpi(field_name,getname(inputlist(i).input)),
+
+		%found the field, call the get method
+		field=get(inputlist(i).input,varargin{:});
+		return;
+	end
+end
Index: /issm/trunk/src/m/classes/@inputlist/inputlist.m
===================================================================
--- /issm/trunk/src/m/classes/@inputlist/inputlist.m	(revision 271)
+++ /issm/trunk/src/m/classes/@inputlist/inputlist.m	(revision 271)
@@ -0,0 +1,21 @@
+function inputlist = inputlist(varargin)
+%INPUTS - contructor for inputlist objects
+%
+%   Usage:
+%      inputlist = inputlist(varargin)
+
+switch nargin
+case 0
+	inputlist.input=inputfield;
+	inputlist=class(inputlist,'inputlist');
+				
+case 1
+	%If single argument of class inputlist, we have a copy constructor. 
+	if (isa(varargin{1},'inputlist'))
+		inputlist = varargin{1};
+	else
+		error('inputlist constructor error message: copy constructor called on a non ''inputlist'' class object');
+	end 
+otherwise
+	error('inputlist constructor error message: 0 of 1 argument only in input.');
+end
