Index: /issm/trunk/src/m/classes/@model/display.m
===================================================================
--- /issm/trunk/src/m/classes/@model/display.m	(revision 1251)
+++ /issm/trunk/src/m/classes/@model/display.m	(revision 1252)
@@ -5,16 +5,19 @@
 	
 disp(sprintf('\n%s = \n',inputname(1)));
+disp(sprintf('%s%s%s','   Diagnostic solution parameters: type ''',inputname(1),'.diagnostic'' to display'));
+disp(sprintf('%s%s%s','   Thermal solution parameters: type ''',inputname(1),'.thermal'' to display'));
+disp(sprintf('%s%s%s','   Prognostic solution parameters: type ''',inputname(1),'.prognostic'' to display'));
+disp(sprintf('%s%s%s','   Transient solution parameters: type ''',inputname(1),'.transient'' to display'));
+disp(sprintf('%s%s%s','   Control solution parameters: type ''',inputname(1),'.control'' to display'));
+disp(sprintf('%s%s%s','   Mesh2grid solution parameters: type ''',inputname(1),'.mesh2grid'' to display'));
 disp(sprintf('%s%s%s','   Mesh: type ''',inputname(1),'.mesh'' to display'));
 disp(sprintf('%s%s%s','   Boundary conditions: type ''',inputname(1),'.bc'' to display'));
-
-if(a.numrifts)disp(sprintf('      rifts: %i',a.numrifts));end
-
 disp(sprintf('%s%s%s','   Observations: type ''',inputname(1),'.obs'' to display'));
 disp(sprintf('%s%s%s','   Materials: type ''',inputname(1),'.mat'' to display'));
 disp(sprintf('%s%s%s','   Parameters: type ''',inputname(1),'.par'' to display'));
-disp(sprintf('%s%s%s','   Solution parameters: type ''',inputname(1),'.solpar'' to display'));
 disp(sprintf('%s%s%s','   Results: type ''',inputname(1),'.res'' to display'));
 disp(sprintf('%s%s%s','   ExpPar: type ''',inputname(1),'.exppar'' to display'));
 disp(sprintf('%s%s%s','   Qmu: type ''',inputname(1),'.qmu'' to display'));
+if(a.numrifts)disp(sprintf('      rifts: %i',a.numrifts));end
 
 %Diverse
@@ -51,14 +54,2 @@
 	disp(sprintf('      repository: %s',a.repository));
 end
-
-
-end
-
-function struct_display(structure,offset)
-disp(sprintf('%s',[offset '1x' num2str(size(structure,2)) ' struct array with fields:']));
-structure_fields=fields(structure);
-for i=1:length(structure_fields),
-	disp(sprintf('%s',[offset '   ' structure_fields{i}]));
-end
-
-end
Index: /issm/trunk/src/m/classes/@model/subsref.m
===================================================================
--- /issm/trunk/src/m/classes/@model/subsref.m	(revision 1251)
+++ /issm/trunk/src/m/classes/@model/subsref.m	(revision 1252)
@@ -11,10 +11,14 @@
 	index1=index(1);
 	if(strcmp(index1.subs,'res')), displayresults(md);return; end
-	if(strcmp(index1.subs,'solpar')), displaysolutionparameters(md);return; end
+	if(strcmp(index1.subs,'parallel')), displayparallel(md);return; end
+	if(strcmp(index1.subs,'diagnostic')), displaydiagnostic(md);return; end
+	if(strcmp(index1.subs,'prognostic')), displayprognostic(md);return; end
+	if(strcmp(index1.subs,'thermal')), displaythermal(md);return; end
+	if(strcmp(index1.subs,'transient')), displaytransient(md);return; end
+	if(strcmp(index1.subs,'control')), displaycontrol(md);return; end
+	if(strcmp(index1.subs,'mesh2grid')), displaymesh2grid(md);return; end
 	if(strcmp(index1.subs,'bc')), displaybc(md);return; end
 	if(strcmp(index1.subs,'mesh')), displaymesh(md);return; end
 	if(strcmp(index1.subs,'par')), displayparameters(md);return; end
-	if(strcmp(index1.subs,'parallel')), displayparallel(md);return; end
-	if(strcmp(index1.subs,'control')), displaycontrol(md);return; end
 	if(strcmp(index1.subs,'exppar')), displayexppar(md);return; end
 	if(strcmp(index1.subs,'obs')), displayobservations(md);return; end
Index: /issm/trunk/src/m/classes/public/display/displaybc.m
===================================================================
--- /issm/trunk/src/m/classes/public/display/displaybc.m	(revision 1251)
+++ /issm/trunk/src/m/classes/public/display/displaybc.m	(revision 1252)
@@ -12,26 +12,24 @@
 
 disp(sprintf('\n      geography:'));
-disp(sprintf('         gridonboundary: (%i)',length(md.gridonboundary)));
-disp(sprintf('         elementoniceshelf: (%i)',length(md.elementoniceshelf)));
-disp(sprintf('         gridoniceshelf: (%i)',length(md.gridoniceshelf)));
-disp(sprintf('         elementonicesheet: (%i)',length(md.elementonicesheet)));
-disp(sprintf('         gridonicesheet: (%i)',length(md.gridonicesheet)));
+fielddisplay(md,'         ','gridonboundary','grid on boundary flags list');
+fielddisplay(md,'         ','elementoniceshelf','element on ice shelf flags list');
+fielddisplay(md,'         ','gridoniceshelf','grid on ice shelf flags list');
+fielddisplay(md,'         ','elementonicesheet','element on ice sheet flags list');
+fielddisplay(md,'         ','gridonicesheet','grid on ice sheet flags list');
 
 disp(sprintf('\n      diagnostic:'));
-disp(sprintf('         gridondirichlet_diag: (%i)',length(md.gridondirichlet_diag)));
-disp(sprintf('         dirichletvalues_diag [m/a]: (%i,%i)',length(md.dirichletvalues_diag),2));
-disp(sprintf('         segmentonneumann_diag: (%i)',length(md.segmentonneumann_diag)));
-disp(sprintf('         neumannvalues_diag [N]: (%i)',length(md.neumannvalues_diag)));
+fielddisplay(md,'         ','gridondirichlet_diag','grid on dirichlet flags list');
+fielddisplay(md,'         ','dirichletvalues_diag','values of the dirichlet [m/a]');
+fielddisplay(md,'         ','segmentonneumann_diag','segments on ice front list');
+fielddisplay(md,'         ','neumannvalues_diag','values of the Neumann [N]');
 
 disp(sprintf('\n      prognostic:'));
-disp(sprintf('         gridondirichlet_prog: (%i)',length(md.gridondirichlet_prog)));
-disp(sprintf('         dirichletvalues_prog [m/a]: (%i)',length(md.dirichletvalues_prog)));
-disp(sprintf('         segmentonneumann_prog (flux): (%i)',length(md.segmentonneumann_prog)));
-disp(sprintf('         neumannvalues_prog [N]: (%i)',length(md.neumannvalues_prog)));
-disp(sprintf('         segmentonneumann_prog2 (thickness gradient): (%i)',length(md.segmentonneumann_prog2)));
-disp(sprintf('         neumannvalues_prog2 [N]: (%i)',length(md.neumannvalues_prog2)));
+fielddisplay(md,'         ','gridondirichlet_prog','grid on dirichlet flags list');
+fielddisplay(md,'         ','dirichletvalues_prog','values of the dirichlet [m]');
+fielddisplay(md,'         ','segmentonneumann_prog','segments on ice front list');
+fielddisplay(md,'         ','neumannvalues_prog','values of the Neumann [m/a]');
 
 disp(sprintf('\n      thermal:'));
-disp(sprintf('         gridondirichlet_thermal: (%i)',length(md.gridondirichlet_thermal)));
-disp(sprintf('         dirichletvalues_thermal [K]: (%i)',length(md.dirichletvalues_thermal)));
-disp(sprintf('         melting [m/a]: (%i)',length(md.melting)));
+fielddisplay(md,'         ','gridondirichlet_thermal','grid on dirichlet flags list');
+fielddisplay(md,'         ','dirichletvalues_thermal','values of the dirichlet [m]');
+fielddisplay(md,'         ','melting','melting rate [m/a]');
Index: /issm/trunk/src/m/classes/public/display/displaycontrol.m
===================================================================
--- /issm/trunk/src/m/classes/public/display/displaycontrol.m	(revision 1251)
+++ /issm/trunk/src/m/classes/public/display/displaycontrol.m	(revision 1252)
@@ -11,13 +11,13 @@
 disp(sprintf('   Control:\n'));
 
-disp(sprintf('      control_type: %s %s',md.control_type,'(parameter where inverse control is carried out; ex: ''drag'', or ''B'')'));
-disp(sprintf('      fit: (%i)      (''absolute: 0'', ''relative: 1'', or ''logarithmic: 2''. default is ''absolute: 0'', for each optimization steps)',length(md.fit)));
-disp(sprintf('      meanvel: %g      (velocity scaling factor when evaluating relative or logarithmic misfit)',md.meanvel));
-disp(sprintf('      epsvel: %g      ( for relative fit, avoids misfit becoming infinity, for logarithmic fit, threshold for velocity)',md.epsvel));
-disp(sprintf('      nsteps: %i      (number of optimization searches)',md.nsteps));
-disp(sprintf('      optscal: (%i %i)      (scaling factor on gradient direction during optimization, for each optimization step)',size(md.optscal,1),size(md.optscal,2)));
-disp(sprintf('      mincontrolconstraint: %g      (minimum contraint for the controlled parameters)',md.mincontrolconstraint));
-disp(sprintf('      maxcontrolconstraint: %g      (maximum contraint for the controlled parameters)',md.maxcontrolconstraint));
-disp(sprintf('      maxiter: (%i)      (maximum iterations during each optimization step)',length(md.maxiter)));
-disp(sprintf('      tolx: %f      (minimum tolerance which will stop one optimization search)',md.tolx));
-disp(sprintf('      plot: %i      (visualization of the results of each iteration yes -> 1 no -> 0. Default is 1)',md.plot));
+fielddisplay(md,'      ','control_type','parameter where inverse control is carried out; ex: ''drag'', or ''B'')');
+fielddisplay(md,'      ','nsteps','number of optimization searches');
+fielddisplay(md,'      ','optscal','scaling factor on gradient direction during optimization, for each optimization step');
+fielddisplay(md,'      ','fit','''absolute: 0'', ''relative: 1'', or ''logarithmic: 2''. default is ''absolute: 0'', for each optimization steps');
+fielddisplay(md,'      ','maxiter','maximum iterations during each optimization step');
+fielddisplay(md,'      ','tolx','minimum tolerance which will stop one optimization search');
+fielddisplay(md,'      ','mincontrolconstraint','minimum contraint for the controlled parameters');
+fielddisplay(md,'      ','maxcontrolconstraint','maximum contraint for the controlled parameters');
+fielddisplay(md,'      ','meanvel','velocity scaling factor when evaluating relative or logarithmic misfit');
+fielddisplay(md,'      ','epsvel','for relative fit, avoids misfit becoming infinity, for logarithmic fit, threshold for velocity');
+fielddisplay(md,'      ','plot','visualization of the results of each iteration yes -> 1 no -> 0. Default is 1');
Index: /issm/trunk/src/m/classes/public/display/displaydiagnostic.m
===================================================================
--- /issm/trunk/src/m/classes/public/display/displaydiagnostic.m	(revision 1252)
+++ /issm/trunk/src/m/classes/public/display/displaydiagnostic.m	(revision 1252)
@@ -0,0 +1,35 @@
+function displaydiagnostic(md)
+%DISPLAYDIAGNOSTIC - display solution parameters of diagnostic
+%
+%   To avoid clobbering display.m with every field from model md, 
+%   we create this routine that displays the solution parameters
+%   from model md, only if requested.
+%
+%   Usage:
+%      displaydiagnostic(md)
+
+disp(sprintf('   Diagnostic parameters:'));
+
+disp(sprintf('\n      %s','Newton convergence criteria:'));
+fielddisplay(md,'         ','eps_rel','velocity relative convergence criterion');
+fielddisplay(md,'         ','eps_abs','velocity absolute convergence criterion');
+fielddisplay(md,'         ','viscosity_overshoot','over-shooting constant new=new+C*(new-old)');
+
+disp(sprintf('\n      boundary conditions:'));
+fielddisplay(md,'         ','gridondirichlet_diag','grid on dirichlet flags list');
+fielddisplay(md,'         ','dirichletvalues_diag','values of the dirichlet [m/a]');
+fielddisplay(md,'         ','segmentonneumann_diag','segments on ice front list');
+fielddisplay(md,'         ','neumannvalues_diag','values of the Neumann [N]');
+
+disp(sprintf('\n      %s','Penalties:'));
+fielddisplay(md,'         ','penalty_offset','offset used by penalties: penalty = Kmax*10^offset');
+
+disp(sprintf('\n      %s','Memory management:'));
+fielddisplay(md,'         ','lowmem','Set to 1 if you are running low on cluster memory');
+fielddisplay(md,'         ','sparsity','matrix sparsity. Set to .001 for < 1M dof, .0001 for 5M dof, and .00001 for > 10M dof');
+fielddisplay(md,'         ','connectivity','element connectivity');
+
+disp(sprintf('\n      %s','Debugging:'));
+fielddisplay(md,'         ','debug','output debug statements when possible yes-> 1, no -> 0. Default is 1');
+fielddisplay(md,'         ','element_debug','output debug statements for elementswhen possible yes-> 1, no -> 0. Default is 0');
+fielddisplay(md,'         ','element_debugid','if element_debug on, id of element for which to output messages');
Index: /issm/trunk/src/m/classes/public/display/displayexppar.m
===================================================================
--- /issm/trunk/src/m/classes/public/display/displayexppar.m	(revision 1251)
+++ /issm/trunk/src/m/classes/public/display/displayexppar.m	(revision 1252)
@@ -10,29 +10,9 @@
 
 disp(sprintf('\n   Outlines:'));
-if isnan(md.domainoutline), 
-	disp(sprintf('      domainoutline: N/A'));
-else 
-	disp(sprintf('      domainoutline: not displayed (can be accessed by typing md.domainoutline)'));
-end
-if isnan(md.riftoutline), 
-	disp(sprintf('      riftoutline: N/A')); 
-else 
-	disp(sprintf('      riftoutline: not displayed (can be accessed by typing md.riftoutline)'));
-end
-if isnan(md.iceshelfoutline), 
-	disp(sprintf('      iceshelfoutline: N/A')); 
-else 
-	disp(sprintf('      iceshelfoutline: not displayed (can be accessed by typing md.iceshelfoutline)'));
-end
-if isnan(md.icesheetoutline), 
-	disp(sprintf('      icesheetoutline: N/A')); 
-else 
-	disp(sprintf('      icesheetoutline: not displayed (can be accessed by typing md.icesheetoutline)'));
-end
+fielddisplay(md,'      ','domainoutline','domain outline Argus file');
+fielddisplay(md,'      ','riftoutline','rift outline Argus file');
+fielddisplay(md,'      ','iceshelfoutline','ice shelf outline Argus file');
+fielddisplay(md,'      ','icesheetoutline','ice sheet outline Argus file');
 
 disp(sprintf('\n   Model files:'));
-if isnan(md.parameterfile), 
-	disp(sprintf('      parameterfile: N/A')); 
-else 
-	disp(sprintf('      parameterfile: not displayed (can be accessed by typing md.parameterfile)'));
-end
+fielddisplay(md,'      ','parameterfile','parameter file content');
Index: /issm/trunk/src/m/classes/public/display/displaymaterials.m
===================================================================
--- /issm/trunk/src/m/classes/public/display/displaymaterials.m	(revision 1251)
+++ /issm/trunk/src/m/classes/public/display/displaymaterials.m	(revision 1252)
@@ -11,13 +11,12 @@
 disp(sprintf('   Materials:\n'));
 
-disp(sprintf('      rho_ice: %g [kg/m^3]',md.rho_ice));
-disp(sprintf('      rho_water: %g [kg/m^3]',md.rho_water));
-if isempty(md.B), disp(sprintf('      B: N/A (flow law parameter)')); else disp(sprintf('      B: (%i) (flow law parameter [Pa/s^(1/n)])',length(md.B))); end
-if isempty(md.n), disp(sprintf('      n: N/A (flow law coefficient)')); else disp(sprintf('      n: (%i) (flow law coefficient)',length(md.n))); end
-disp(sprintf('      heatcapacity: %g [J/kg/K]',md.heatcapacity));
-disp(sprintf('      thermalconductivity: %g [W/m/K]',md.thermalconductivity));
-disp(sprintf('      meltingpoint: %g [K] (melting point of ice at 1atm in K)',md.meltingpoint));
-disp(sprintf('      latentheat: %g [J/kg] (latent heat of fusion)',md.latentheat));
-disp(sprintf('      beta: %g [K/Pa]',md.beta));
-disp(sprintf('      mixed_layer_capacity: %g [W/kg/K]',md.mixed_layer_capacity));
-disp(sprintf('      thermal_exchange_velocity: %g [m/s]',md.thermal_exchange_velocity));
+fielddisplay(md,'      ','rho_ice','ice density [kg/m^3]');
+fielddisplay(md,'      ','rho_water','water density [kg/m^3]');
+fielddisplay(md,'      ','B','flow law parameter [Pa/s^(1/n)]');
+fielddisplay(md,'      ','heatcapacity','heat capacity [J/kg/K]');
+fielddisplay(md,'      ','thermalconductivity','ice thermal conductivity [W/m/K]');
+fielddisplay(md,'      ','meltingpoint','melting point of ice at 1atm in K');
+fielddisplay(md,'      ','latentheat','latent heat of fusion [J/m^3]');
+fielddisplay(md,'      ','beta','rate of change of melting point with pressure [K/Pa]');
+fielddisplay(md,'      ','mixed_layer_capacity','mixed layer capacity [W/kg/K]');
+fielddisplay(md,'      ','thermal_exchange_velocity','thermal exchange velocity [m/s]');
Index: /issm/trunk/src/m/classes/public/display/displaymesh.m
===================================================================
--- /issm/trunk/src/m/classes/public/display/displaymesh.m	(revision 1251)
+++ /issm/trunk/src/m/classes/public/display/displaymesh.m	(revision 1252)
@@ -14,33 +14,31 @@
 
 	disp(sprintf('\n      Elements and nodes of the original 2d mesh:'));
-	disp(sprintf('         numberofelements2d: %i (number of elements)',md.numberofelements2d));
-	disp(sprintf('         numberofgrids2d: %i (number of nodes)',md.numberofgrids2d)); 
-	disp(sprintf('         elements2d: (%i-%i) (index into (x,y,z), coordinates of the grids)',md.numberofelements2d,size(md.elements2d,2))); 
-	disp(sprintf('         elements_type2d: (%i) (element types, according to number of grids)',md.numberofelements2d));
-	disp(sprintf('         x2d: (%i) (node x coordinates)',length(md.x2d)));
-	disp(sprintf('         y2d: (%i) (node y coordinates)',length(md.y2d)));
-	disp(sprintf('         z2d: (%i) (node z coordinates)',length(md.z2d)));
+	fielddisplay(md,'         ','numberofelements2d','number of elements');
+	fielddisplay(md,'         ','numberofgrids2d','number of nodes');
+	fielddisplay(md,'         ','elements2d','index into (x,y,z), coordinates of the grids');
+	fielddisplay(md,'         ','elements_type2d','element types');
+	fielddisplay(md,'         ','x2d','nodes x coordinate');
+	fielddisplay(md,'         ','y2d','nodes y coordinate');
+	fielddisplay(md,'         ','z2d','nodes z coordinate');
 
 	disp(sprintf('\n      Elements and nodes of the extruded 3d mesh:'));
 else
-
 	disp(sprintf('\n      Elements and nodes:'));
 end
-
-disp(sprintf('         numberofelements: %i (number of elements)',md.numberofelements));
-disp(sprintf('         numberofgrids: %i (number of nodes)',md.numberofgrids)); 
-if ~isnan(md.dof), disp(sprintf('      dof: %i (maximum number of dofs solved)',md.dof)); end
-disp(sprintf('         elements: (%i-%i) (index into (x,y,z), coordinates of the grids)',md.numberofelements,size(md.elements,2))); 
-disp(sprintf('         elements_type: (%i) (element types, according to number of grids)',md.numberofelements));
-disp(sprintf('         x: (%i) (node x coordinates)',length(md.x)));
-disp(sprintf('         y: (%i) (node y coordinates)',length(md.y)));
-disp(sprintf('         z: (%i) (node z coordinates)',length(md.z)));
-disp(sprintf('         numlayers: %i (number of extrusion layers)',md.numlayers));
+fielddisplay(md,'         ','numberofelements','number of elements');
+fielddisplay(md,'         ','numberofgrids','number of nodes');
+fielddisplay(md,'         ','elements','index into (x,y,z), coordinates of the grids');
+fielddisplay(md,'         ','elements_type','element types');
+fielddisplay(md,'         ','x','nodes x coordinate');
+fielddisplay(md,'         ','y','nodes y coordinate');
+fielddisplay(md,'         ','z','nodes z coordinate');
+fielddisplay(md,'         ','numlayers','number of extrusion layers');
+fielddisplay(md,'         ','dof','maximum number of dofs solved');
 
 disp(sprintf('\n      Properties:'));
-disp(sprintf('         type: %s',md.type));
-disp(sprintf('         Penalties: (%i-%i))',size(md.penalties,1),size(md.penalties,2)));
-disp(sprintf('         gridonbed: (%i) (lower nodes flags list)',length(md.gridonbed)));
-disp(sprintf('         gridonsurface: (%i) (upper nodes flags list)',length(md.gridonsurface)));
-disp(sprintf('         elementonbed: (%i) (lower elements flags list)',length(md.elementonbed)));
-disp(sprintf('         elementonsurface: (%i) (upper elements flags list)',length(md.elementonsurface)));
+fielddisplay(md,'         ','type','mesh type');
+fielddisplay(md,'         ','penalties','penalties list');
+fielddisplay(md,'         ','gridonbed','lower nodes flags list');
+fielddisplay(md,'         ','elementonbed','lower elements flags list');
+fielddisplay(md,'         ','gridonsurface','upper nodes flags list');
+fielddisplay(md,'         ','elementonsurface','upper elements flags list');
Index: /issm/trunk/src/m/classes/public/display/displaymesh2grid.m
===================================================================
--- /issm/trunk/src/m/classes/public/display/displaymesh2grid.m	(revision 1252)
+++ /issm/trunk/src/m/classes/public/display/displaymesh2grid.m	(revision 1252)
@@ -0,0 +1,22 @@
+function displaymesh2grid(md)
+%DISPLAYMESH2GRID - display solution parameters
+%
+%   To avoid clobbering display.m with every field from model md, 
+%   we create this routine that displays the solution parameters
+%   from model md, only if requested.
+%
+%   Usage:
+%      displaymesh2grid(md)
+
+disp(sprintf('   Mesh2grid Solution parameters:'));
+
+fielddisplay(md,'      ','mesh2grid_parameters','list of parameters for which mesh 2 grid interpolation is carried out; ex: {''drag''}, or {''drag'',''B''}');
+fielddisplay(md,'      ','mesh2grid_interpolation','list of interpolation (''node'' or ''element'') for each parameter ex: {''node''}, or {''node'',''element''}');
+fielddisplay(md,'      ','mesh2grid_filter','list of filter (''average'' or ''nearest'') for each parameter ex: {''average''}, or {''average'',''nearest''}');
+fielddisplay(md,'      ','mesh2grid_cornereast','corner east of square grid');
+fielddisplay(md,'      ','mesh2grid_cornernorth','corner north of square grid');
+fielddisplay(md,'      ','mesh2grid_xposting','x  posting of grid [m]');
+fielddisplay(md,'      ','mesh2grid_yposting','y  posting of grid [m]');
+fielddisplay(md,'      ','mesh2grid_nlines','number of grid lines');
+fielddisplay(md,'      ','mesh2grid_ncolumns','number of grid columns');
+fielddisplay(md,'      ','mesh2grid_windowsize','size of filter');
Index: /issm/trunk/src/m/classes/public/display/displayobservations.m
===================================================================
--- /issm/trunk/src/m/classes/public/display/displayobservations.m	(revision 1251)
+++ /issm/trunk/src/m/classes/public/display/displayobservations.m	(revision 1252)
@@ -11,8 +11,8 @@
 disp(sprintf('   Observations:\n'));
 
-disp(sprintf('      vx_obs [m/a]: (%i)',length(md.vx_obs)));
-disp(sprintf('      vy_obs [m/a]: (%i)',length(md.vy_obs)));
-disp(sprintf('      vel_obs [m/a]: (%i)',length(md.vel_obs)));
-disp(sprintf('      accumulation [m/a]: (%i)',length(md.accumulation)));
-disp(sprintf('      observed_temperature [K]: (%i)',length(md.observed_temperature)));
-disp(sprintf('      geothermalflux [W/m^2]: (%i)',length(md.geothermalflux)));
+fielddisplay(md,'      ','vx_obs','observed velocity x component [m/a]');
+fielddisplay(md,'      ','vy_obs','observed velocity y component [m/a]');
+fielddisplay(md,'      ','vel_obs','observed velocity magnitude [m/a]');
+fielddisplay(md,'      ','accumulation','surface accumulation rate [m/a]');
+fielddisplay(md,'      ','observed_temperature','observed temperature [K]');
+fielddisplay(md,'      ','geothermalflux','geothermal heat flux [W/m^2]');
Index: /issm/trunk/src/m/classes/public/display/displayparallel.m
===================================================================
--- /issm/trunk/src/m/classes/public/display/displayparallel.m	(revision 1251)
+++ /issm/trunk/src/m/classes/public/display/displayparallel.m	(revision 1252)
@@ -12,15 +12,14 @@
 
 disp(sprintf('\n      parallelisation:'));
-disp(sprintf('         cluster: %s      (set to ''cluster_name'' to run in cluster, ''none'' to run serially)',md.cluster));
-disp(sprintf('         np: %i      (number of CPUS requested on cluster)',md.np));
-disp(sprintf('         exclusive: %i      (set to 1 if CPUS used are not to be shared with other users, 0 otherwise)',md.exclusive));
-disp(sprintf('         time: %i      (amount of time requested on cluster)',md.time)); 
-disp(sprintf('         alloc_cleanup: %i      (allocation cleanup before starting a job, default 1)',md.alloc_cleanup)); 
-disp(sprintf('         waitonlock: %i      (wait for batch results 1, or return 0. default is to return )',md.waitonlock)); 
-disp(sprintf('         queue: %s      (special queue name on cluster? default is '''')',md.queue)); disp(sprintf('\n      solver options:'));
+fielddisplay(md,'         ','cluster','set to ''cluster_name'' to run in cluster, ''none'' to run serially');
+fielddisplay(md,'         ','np','number of CPUS requested on cluster');
+fielddisplay(md,'         ','exclusive','set to 1 if CPUS used are not to be shared with other users, 0 otherwise');
+fielddisplay(md,'         ','time','amount of time requested on cluster');
+fielddisplay(md,'         ','alloc_cleanup','allocation cleanup before starting a job, default 1');
+fielddisplay(md,'         ','waitonlock','wait for batch results 1, or return 0. default is to return');
+fielddisplay(md,'         ','queue','special queue name on cluster? default is '''' ');
 
-disp(sprintf('\n      solver options:'));
-disp(sprintf('         ice'));
-disp(sprintf('            solver_type: %s  (solver type for Ice: ''general'', ''lu'' or ''cholesky'')',md.solver_type));
-disp(sprintf('         cielo'));
-disp(sprintf('            solverstring: %s \n            (solver string for Petsc. See solversetto... routines. Default is asm)',md.solverstring)); 
+disp(sprintf('\n      ice solver options:'));
+fielddisplay(md,'         ','solver_type','solver type for Ice: ''general'', ''lu'' or ''cholesky''');
+disp(sprintf('\n      cielo solver options:'));
+fielddisplay(md,'         ','solverstring','solver string for Petsc. See solversetto... routines. Default is mumps');
Index: /issm/trunk/src/m/classes/public/display/displayparameters.m
===================================================================
--- /issm/trunk/src/m/classes/public/display/displayparameters.m	(revision 1251)
+++ /issm/trunk/src/m/classes/public/display/displayparameters.m	(revision 1252)
@@ -12,20 +12,19 @@
 
 disp(sprintf('\n      geometry:'));
-if isempty(md.surface), disp(sprintf('         surface: N/A')); else disp(sprintf('         surface [m]: (%i)',length(md.surface))); end
-if isempty(md.thickness), disp(sprintf('         thickness: N/A')); else disp(sprintf('         thickness [m]: (%i)',length(md.thickness))); end
-if isempty(md.bed), disp(sprintf('         bed: N/A')); else disp(sprintf('         bed [m]: (%i)',length(md.bed))); end
-if isempty(md.firn_layer), disp(sprintf('         firn_layer: N/A')); else disp(sprintf('         firn_layer [m]: (%i)',length(md.firn_layer))); end
-if strcmpi(md.type,'3d'), disp(sprintf('         elementonbed: (%i)',length(md.elementonbed))); end
-if strcmpi(md.type,'3d'), disp(sprintf('         elementonsurface: (%i)',length(md.elementonsurface))); end
-if strcmpi(md.type,'3d'), disp(sprintf('         gridonbed: (%i)',length(md.gridonbed))); end
-if strcmpi(md.type,'3d'), disp(sprintf('         gridonsurface: (%i)',length(md.gridonsurface))); end
+fielddisplay(md,'         ','surface','surface height [m]');
+fielddisplay(md,'         ','thickness','thickness [m]');
+fielddisplay(md,'         ','bed','bed height [m]');
+fielddisplay(md,'         ','firn_layer','firn layer height [m]');
+fielddisplay(md,'         ','elementonbed','element on bed flags list');
+fielddisplay(md,'         ','elementonsurface','element on surface flags list');
+fielddisplay(md,'         ','gridonbed','grid on bed flags list');
+fielddisplay(md,'         ','gridonsurface','grid on surface flags list');
 
 disp(sprintf('\n      physical parameters:'));
-disp(sprintf('         g: %g [m/s^2]',md.g));
+fielddisplay(md,'         ','g','acceleration due to gravity [m/s^2]');
 
 disp(sprintf('\n      Friction parameters (Sigma= drag^2 * Neff ^r * u ^s, with Neff=rho_ice*g*thickness+rho_ice*g*bed, r=q/p and s=1/p)'));
-disp(sprintf('         drag_type: %i (0: none, 1:plastic, 2:viscous):',md.drag_type));
-if isempty(md.drag), disp(sprintf('         drag: N/A')); else disp(sprintf('         drag: (%i)',length(md.drag))); end
-disp(sprintf('         drag_type: %i (0: none, 1:plastic, 2:viscous):',md.drag_type));
-if isempty(md.p), disp(sprintf('         p: N/A')); else disp(sprintf('         p: (%i)',length(md.p))); end
-if isempty(md.q), disp(sprintf('         q: N/A')); else disp(sprintf('         q: (%i)',length(md.q))); end
+fielddisplay(md,'         ','drag_type','0: none, 1:plastic, 2:viscous');
+fielddisplay(md,'         ','drag','friction coefficient [IS]');
+fielddisplay(md,'         ','p','p exponent');
+fielddisplay(md,'         ','q','q exponent');
Index: /issm/trunk/src/m/classes/public/display/displayprognostic.m
===================================================================
--- /issm/trunk/src/m/classes/public/display/displayprognostic.m	(revision 1252)
+++ /issm/trunk/src/m/classes/public/display/displayprognostic.m	(revision 1252)
@@ -0,0 +1,22 @@
+function displayprognostic(md)
+%DISPLAYPROGNOSTIC - display solution parameters
+%
+%   To avoid clobbering display.m with every field from model md, 
+%   we create this routine that displays the solution parameters
+%   from model md, only if requested.
+%
+%   Usage:
+%      displayprognostic(md)
+
+disp(sprintf('   Prognostic solution parameters:'));
+
+disp(sprintf('\n      transient:'));
+fielddisplay(md,'         ','dt','time step [yr]');
+fielddisplay(md,'         ','ndt','time span [yr]');
+fielddisplay(md,'         ','artificial_diffusivity','yes->1, no->0');
+
+disp(sprintf('\n      boundary conditions:'));
+fielddisplay(md,'         ','gridondirichlet_prog','grid on dirichlet flags list');
+fielddisplay(md,'         ','dirichletvalues_prog','values of the dirichlet [m]');
+fielddisplay(md,'         ','segmentonneumann_prog','segments on ice front list');
+fielddisplay(md,'         ','neumannvalues_prog','values of the Neumann [m/a]');
Index: /issm/trunk/src/m/classes/public/display/displayresults.m
===================================================================
--- /issm/trunk/src/m/classes/public/display/displayresults.m	(revision 1251)
+++ /issm/trunk/src/m/classes/public/display/displayresults.m	(revision 1252)
@@ -11,37 +11,9 @@
 disp(sprintf('   Results:'));
 
-%call struct_display recursively on md.results
-struct_display(md.results,'      ');
+disp(sprintf('\n      solution results:'));
+fielddisplay(md,'         ','results','');
 
-%display output parameters
 disp(sprintf('\n      output parameters:'));
-if ~isstruct(md.stress), disp(sprintf('         stress: N/A')); 
-else 
-	disp(sprintf('         stress [Pa]:'));
-	struct_display(md.stress,'         ');
-end
-if ~isstruct(md.deviatoricstress), disp(sprintf('         deviatoricstress: N/A')); 
-else 
-	disp(sprintf('         deviatoricstress [Pa]:'));
-	struct_display(md.deviatoricstress,'         ');
-end
-if ~isstruct(md.strainrate), disp(sprintf('         strainrate: N/A')); 
-else 
-	disp(sprintf('         strainrate [1/a]:'));
-	struct_display(md.strainrate,'         ');
-end
-end
-
-function struct_display(structure,offset)
-	structure_fields=fields(structure);
-	for i=1:length(structure_fields),
-		%recursive call if necessary
-		field=eval(['structure.' structure_fields{i}]);
-		if isstruct(field),
-			disp(sprintf('\n%s',[offset structure_fields{i} ':']));
-			struct_display(field,[offset '   ']);
-		else
-			disp(sprintf('%s',[offset structure_fields{i} ': (' num2str(size(field,1))  ')' ]));
-		end
-	end
-end
+fielddisplay(md,'         ','stress','stress [Pa]');
+fielddisplay(md,'         ','deviatoricstress','deviatoric stress [Pa]');
+fielddisplay(md,'         ','strainrate','strain rate [1/yr]');
Index: sm/trunk/src/m/classes/public/display/displaysolutionparameters.m
===================================================================
--- /issm/trunk/src/m/classes/public/display/displaysolutionparameters.m	(revision 1251)
+++ 	(revision )
@@ -1,104 +1,0 @@
-function displaysolutionparameters(md)
-%DISPLAYSOLUTIONPARAMETERS - display solution parameters
-%
-%   To avoid clobbering display.m with every field from model md, 
-%   we create this routine that displays the solution parameters
-%   from model md, only if requested.
-%
-%   Usage:
-%      displaysolutionparameters(md)
-
-disp(sprintf('   Solution parameters:'));
-
-disp(sprintf('\n      statics:'));
-disp(sprintf('         %s','Newton convergence criteria'));
-disp(sprintf('            eps_rel: %g      (velocity relative convergence criterion)',md.eps_rel));
-disp(sprintf('            eps_abs: %g      (velocity absolute convergence criterion [m/yr], NaN -> no absolute criterion)',md.eps_abs));
-disp(sprintf('            viscosity_overshoot: %g      (over-shooting constant new=new+C*(new-old))',md.viscosity_overshoot));
-disp(sprintf('         penalty_offset: %g      (offset used by penalties: penalty = Kmax*10^offset)',md.penalty_offset));
-disp(sprintf('         penalty_melting: %g      (penalty used to keep T<Tpmp)',md.penalty_melting));
-disp(sprintf('         penalty_lock: %g      (counter used to lock penalties that zig zag)',md.penalty_lock));
-disp(sprintf('         lowmem: %i      (Set to 1 if you are running low on cluster memory)',md.lowmem));
-disp(sprintf('         sparsity: %g      (matrix sparsity. Set to .001 for < 1M dof, .0001 for 5M dof, and .00001 for > 10M dof',md.sparsity));
-disp(sprintf('         connectivity: %i      (element connectivity)',md.connectivity)); 
-disp(sprintf('         debug: %i      (output debug statements when possible yes-> 1, no -> 0. Default is 1',md.debug));
-disp(sprintf('         element_debug: %i      (output debug statements for elementswhen possible yes-> 1, no -> 0. Default is 0',md.element_debug));
-disp(sprintf('         element_debugid: %i      (if element_debug on, id of element for which to output messages',md.element_debugid));
-disp(sprintf('         debug: %i      (output debug statements when possible yes-> 1, no -> 0. Default is 1'));
-
-disp(sprintf('\n      transient:'));
-disp(sprintf('         dt: %g ( time step in years)',md.dt/md.yts));
-disp(sprintf('         ndt: %g ( time span in years)',md.ndt/md.yts));
-disp(sprintf('         artificial_diffusivity: %i (yes->1, no->0)',md.artificial_diffusivity));
-disp(sprintf('         minh: %g (minimum thickness to avoid stiffness singularity)',md.minh));
-disp(sprintf('         timestepping: %i ( adptative time stepping implemented - default to 0)',md.timestepping));
-disp(sprintf('         deltaH: %g ( minimum thickness difference between two time steps)',md.deltaH));
-disp(sprintf('         DeltaH: %g ( maximum thickness difference between two time steps)',md.DeltaH));
-disp(sprintf('         deltaT: %g ( minimum temperature difference between two time steps)',md.deltaT));
-disp(sprintf('         DeltaT: %g ( maximum temperature difference between two time steps)',md.DeltaT));
-disp(sprintf('         timeacc: %g ( multiplier to time step when time stepping increases time step)',md.timeacc));
-disp(sprintf('         timedec: %g ( multiplier to time step when time stepping decresaes time step)',md.timedec));
-
-disp(sprintf('\n      control:'));
-disp(sprintf('         control_type: %s (control type, ex: ''drag'', or ''B'')',md.control_type));
-disp(sprintf('         fit: (%g)      ( 0 -> absolute, 1 -> relative, 2 -> logarithmic. default is absolute)',length(md.fit)));
-disp(sprintf('         meanvel: %g      (velocity scaling factor when evaluating relative or logarithmic misfit)',md.meanvel));
-disp(sprintf('         epsvel: %g      ( for relative fit, avoids misfit becoming infinity, for logarithmic fit, threshold for velocity)',md.epsvel));
-disp(sprintf('         nsteps: %i      (number of optimization searches)',md.nsteps));
-disp(sprintf('         optscal: (%i %i)      (scaling factor on gradient direction during optimization, for each optimization step)',size(md.optscal,1),size(md.optscal,2)));
-disp(sprintf('         mincontrolconstraint: %f      (minimum contraint for the controlled parameters, NaN -> no constraint)',md.mincontrolconstraint));
-disp(sprintf('         maxcontrolconstraint: %f      (maximum contraint for the controlled parameters, NaN -> no constraint)',md.maxcontrolconstraint));
-disp(sprintf('         maxiter: (%i)      (maximum iterations during each optimization step)',length(md.maxiter)));
-disp(sprintf('         tolx: %f      (minimum tolerance which will stop one optimization search)',md.tolx));
-disp(sprintf('         plot: %i      (visualization of the results of each iteration yes -> 1 no -> 0. Default is 1)',md.plot));
-
-disp(sprintf('\n      mesh:'));
-disp(sprintf('         mesh_domainoutline: %s      (domain outlines)',md.mesh_domainoutline));
-disp(sprintf('         mesh_riftoutline: %s      (rift outlines)',md.mesh_riftoutline));
-disp(sprintf('         mesh_resolution: (%g)      (mesh resolutoin)',md.mesh_resolution));
-
-%mesh2grid type
-disp(sprintf('\n      mesh2grid:'));
-mesh2grid_string='';
-for i=1:length(md.mesh2grid_parameters),
-	parameter=md.mesh2grid_parameters{i};
-	mesh2grid_string=[mesh2grid_string parameter ' and '];
-end
-mesh2grid_string=mesh2grid_string(1:length(mesh2grid_string)-5);
-disp(sprintf('         mesh2grid_parameters: %s %s',mesh2grid_string,'(list of parameters for which mesh 2 grid interpolation is carried out; ex: {''drag''}, or {''drag'',''B''})'));
-%mesh2grid interpolation
-mesh2grid_interpstring='';
-for i=1:length(md.mesh2grid_interpolation),
-	interpolation=md.mesh2grid_interpolation{i};
-	mesh2grid_interpstring=[mesh2grid_interpstring interpolation ' and '];
-end
-mesh2grid_interpstring=mesh2grid_interpstring(1:length(mesh2grid_interpstring)-5);
-disp(sprintf('         mesh2grid_interpolation: %s %s',mesh2grid_interpstring,'(list of interpolation (''node'' or ''element'') for each parameter ex: {''node''}, or {''node'',''element''})'));
-
-%mesh2grid filter
-mesh2grid_filterstring='';
-for i=1:length(md.mesh2grid_filter),
-	filter=md.mesh2grid_filter{i};
-	mesh2grid_filterstring=[mesh2grid_filterstring filter ' and '];
-end
-mesh2grid_filterstring=mesh2grid_filterstring(1:length(mesh2grid_filterstring)-5);
-disp(sprintf('         mesh2grid_filter: %s %s',mesh2grid_filterstring,'(list of filter (''average'' or ''nearest'') for each parameter ex: {''average''}, or {''average'',''nearest''})'));
-disp(sprintf('         mesh2grid_cornereast: %g ( corner east of square grid)',md.mesh2grid_cornereast));
-disp(sprintf('         mesh2grid_cornernorth: %g ( corner north of square grid)',md.mesh2grid_cornernorth));
-disp(sprintf('         mesh2grid_xposting: %g (x  posting of grid (in m))',md.mesh2grid_xposting));
-disp(sprintf('         mesh2grid_yposting: %g (y  posting of grid (in m))',md.mesh2grid_yposting));
-disp(sprintf('         mesh2grid_nlines: %g ( number of grid lines)',md.mesh2grid_nlines));
-disp(sprintf('         mesh2grid_ncolumns: %g ( number of grid columns)',md.mesh2grid_ncolumns));
-disp(sprintf('         mesh2grid_windowsize: %g ( size of filter )',md.mesh2grid_windowsize));
-
-%parameteroutput type
-parameteroutput_string='';
-for i=1:length(md.parameteroutput),
-	parameter=md.parameteroutput{i};
-	parameteroutput_string=[parameteroutput_string parameter ' and '];
-end
-parameteroutput_string=parameteroutput_string(1:length(parameteroutput_string)-5);
-
-disp(sprintf('\n      output:'));
-disp(sprintf('         parameteroutput: %s %s',parameteroutput_string,...
-	'(list of output parameters recovered in the solution sequences: ex: {''viscousheating'',''stress''})'));
Index: /issm/trunk/src/m/classes/public/display/displaythermal.m
===================================================================
--- /issm/trunk/src/m/classes/public/display/displaythermal.m	(revision 1252)
+++ /issm/trunk/src/m/classes/public/display/displaythermal.m	(revision 1252)
@@ -0,0 +1,20 @@
+function displaythermal(md)
+%DISPLAYTHERMAL - display solution parameters applied to thermal model
+%
+%   To avoid clobbering display.m with every field from model md, 
+%   we create this routine that displays the solution parameters
+%   from model md, only if requested.
+%
+%   Usage:
+%      displaythermal(md)
+
+disp(sprintf('   Thermal solution parameters:'));
+
+disp(sprintf('\n      boundary conditions:'));
+fielddisplay(md,'         ','gridondirichlet_thermal','grid on dirichlet flags list');
+fielddisplay(md,'         ','dirichletvalues_thermal','values of the dirichlet [m]');
+fielddisplay(md,'         ','melting','melting rate [m/a]');
+
+disp(sprintf('\n      transient:'));
+fielddisplay(md,'         ','dt','time step [yr]');
+fielddisplay(md,'         ','ndt','time span [yr]');
Index: /issm/trunk/src/m/classes/public/display/displaytransient.m
===================================================================
--- /issm/trunk/src/m/classes/public/display/displaytransient.m	(revision 1252)
+++ /issm/trunk/src/m/classes/public/display/displaytransient.m	(revision 1252)
@@ -0,0 +1,26 @@
+function displaytransient(md)
+%DISPLAYTRANSIENT - display solution parameters
+%
+%   To avoid clobbering display.m with every field from model md, 
+%   we create this routine that displays the solution parameters
+%   from model md, only if requested.
+%
+%   Usage:
+%      displaytransient(md)
+
+displaydiagnostic(md);
+disp(' ');
+displaythermal(md);
+disp(' ');
+displayprognostic(md);
+disp(' ');
+
+disp(sprintf('   Transient solution parameters:\n'));
+
+fielddisplay(md,'      ','timestepping','adptative time stepping implemented - default to 0');
+fielddisplay(md,'      ','deltaH','minimum thickness difference between two time steps');
+fielddisplay(md,'      ','DeltaH','maximum thickness difference between two time steps');
+fielddisplay(md,'      ','deltaT','minimum temperature difference between two time steps');
+fielddisplay(md,'      ','DeltaT','maximum temperature difference between two time steps');
+fielddisplay(md,'      ','timeacc','multiplier to time step when time stepping increases time step');
+fielddisplay(md,'      ','timedec','multiplier to time step when time stepping decresaes time step');
Index: /issm/trunk/src/m/classes/public/display/fielddisplay.m
===================================================================
--- /issm/trunk/src/m/classes/public/display/fielddisplay.m	(revision 1252)
+++ /issm/trunk/src/m/classes/public/display/fielddisplay.m	(revision 1252)
@@ -0,0 +1,117 @@
+function fielddisplay(md,offset,name,comment)
+%FIELDDISPLAY - display model field
+%
+%   Usage:
+%      fielddisplay(md,offset,name,comment)
+
+	%get field
+	field=md.(name);
+
+	%disp corresponding line as a function of field type
+	parsedisplay(offset,name,field,comment);
+
+end %function
+
+function parsedisplay(offset,name,field,comment);
+
+	%string
+	if ischar(field),
+
+		if length(field)>30;
+			displayunit(offset,name,'not displayed',comment),
+		else
+			displayunit(offset,name,['''' field ''''],comment),
+		end
+
+	%numeric
+	elseif isnumeric(field)
+
+		%get size
+		fieldsize=size(field);
+
+		%double
+		if max(fieldsize)==1,
+			displayunit(offset,name,num2str(field),comment),
+		%matrix
+		else
+			displayunit(offset,name,['(' num2str(fieldsize(1)) 'x' num2str(fieldsize(2)) ')'],comment),
+		end
+
+		%structure
+	elseif isstruct(field),
+		struct_display(field,offset),
+
+	%cell
+	elseif iscell(field),
+		cell_display(offset,name,field,comment),
+
+	else
+		error('displayline error message: type not supported yet');
+	end
+end %function
+
+function struct_display(structure,offset)
+
+	structure_fields=fields(structure);
+
+	for i=1:length(structure_fields),
+
+		%get current field
+		field=structure.(structure_fields{i});
+
+		%recursive call if necessary
+		if isstruct(field),
+			disp(sprintf('%s',[offset structure_fields{i} ':']));
+			struct_display(field,[offset '   ']);
+
+		%display value
+		else
+			parsedisplay(offset,structure_fields{i},field,'');
+		end
+	end
+end
+
+function cell_display(offset,name,field,comment)
+
+	%initialization
+	isstring=ischar(field{1});
+
+	%is cell of string?
+	if isstring,
+		string='';
+		for i=1:length(field),
+			parameter=field{i};
+			isstring=isstring*ischar(parameter);
+			string=[string parameter ' and '];
+		end
+	end
+
+	if isstring,
+		displayunit(offset,name,string(1:length(string)-5),comment);
+	else
+		displayunit(offset,name,['(' num2str(fieldsize(1)) 'x' num2str(fieldsize(2)) ')'],comment),
+	end
+end
+
+function displayunit(offset,name,caracterization,comment),
+
+	%take care of name
+	if length(name)>23,
+		name=[name(1:20) '...'];
+	end
+
+	%take care of caracterization
+	if (strcmp(caracterization,['''' '''']) | strcmp(caracterization,'NaN')),
+		caracterization='N/A';
+	end
+	if length(caracterization)>15,
+		caracterization=[caracterization(1:12) '...'];
+	end
+
+	%print
+	if isempty(comment)
+		disp(sprintf('%s%-23s: %-15s',offset,name,caracterization));
+	else
+		disp(sprintf('%s%-23s: %-15s -- %s',offset,name,caracterization,comment));
+	end
+end
