Index: /issm/trunk/src/m/classes/public/displaybc.m
===================================================================
--- /issm/trunk/src/m/classes/public/displaybc.m	(revision 696)
+++ /issm/trunk/src/m/classes/public/displaybc.m	(revision 697)
@@ -9,21 +9,29 @@
 %      displaybc(md)
 
-disp(sprintf('   Boundary conditions:'));
-disp(sprintf('      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)));
+fprintf('   Boundary conditions:\n');
 
-disp(sprintf('      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)));
+fprintf('\n      geography:\n');
+fprintf('         gridonboundary: (%i)\n',length(md.gridonboundary));
+fprintf('         elementoniceshelf: (%i)\n',length(md.elementoniceshelf));
+fprintf('         gridoniceshelf: (%i)\n',length(md.gridoniceshelf));
+fprintf('         elementonicesheet: (%i)\n',length(md.elementonicesheet));
+fprintf('         gridonicesheet: (%i)\n',length(md.gridonicesheet));
 
-disp(sprintf('      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)));
+fprintf('\n      diagnostic:\n');
+fprintf('         gridondirichlet_diag: (%i)\n',length(md.gridondirichlet_diag));
+fprintf('         dirichletvalues_diag [m/a]: (%i,%i)\n',length(md.dirichletvalues_diag),2);
+fprintf('         segmentonneumann_diag: (%i)\n',length(md.segmentonneumann_diag));
+fprintf('         neumannvalues_diag [N]: (%i)\n',length(md.neumannvalues_diag));
+
+fprintf('\n      prognostic:\n');
+fprintf('         gridondirichlet_prog: (%i)\n',length(md.gridondirichlet_prog));
+fprintf('         dirichletvalues_prog [m/a]: (%i)\n',length(md.dirichletvalues_prog));
+fprintf('         segmentonneumann_prog (flux): (%i)\n',length(md.segmentonneumann_prog));
+fprintf('         neumannvalues_prog [N]: (%i)\n',length(md.neumannvalues_prog));
+fprintf('         segmentonneumann_prog2 (thickness gradient): (%i)\n',length(md.segmentonneumann_prog2));
+fprintf('         neumannvalues_prog2 [N]: (%i)\n',length(md.neumannvalues_prog2));
+
+fprintf('\n      thermal:\n');
+fprintf('         gridondirichlet_thermal: (%i)\n',length(md.gridondirichlet_thermal));
+fprintf('         dirichletvalues_thermal [K]: (%i)\n',length(md.dirichletvalues_thermal));
+fprintf('         melting [m/a]: (%i)\n',length(md.melting));
Index: /issm/trunk/src/m/classes/public/displaymaterials.m
===================================================================
--- /issm/trunk/src/m/classes/public/displaymaterials.m	(revision 696)
+++ /issm/trunk/src/m/classes/public/displaymaterials.m	(revision 697)
@@ -9,14 +9,14 @@
 %      displaymaterials(md)
 
-disp(sprintf('   Materials:'));
-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));
+fprintf('   Materials:\n');
+fprintf('      rho_ice: %g [kg/m^3]\n',md.rho_ice);
+fprintf('      rho_water: %g [kg/m^3]\n',md.rho_water);
+if isempty(md.B), fprintf('      B: N/A (flow law parameter)'); else fprintf('      B: (%i) (flow law parameter [Pa/s^(1/n)])\n',length(md.B)); end
+if isempty(md.n), fprintf('      n: N/A (flow law coefficient)'); else fprintf('      n: (%i) (flow law coefficient)\n',length(md.n)); end
+fprintf('      heatcapacity: %g [J/kg/K]\n',md.heatcapacity);
+fprintf('      thermalconductivity: %g [W/m/K]\n',md.thermalconductivity);
+fprintf('      meltingpoint: %g [K] (melting point of ice at 1atm in K)\n',md.meltingpoint);
+fprintf('      latentheat: %g [J/kg] (latent heat of fusion)\n',md.latentheat);
+fprintf('      beta: %g [K/Pa]\n',md.beta);
+fprintf('      mixed_layer_capacity: %g [W/kg/K]\n',md.mixed_layer_capacity);
+fprintf('      thermal_exchange_velocity: %g [m/s]\n',md.thermal_exchange_velocity);
Index: /issm/trunk/src/m/classes/public/displaymesh.m
===================================================================
--- /issm/trunk/src/m/classes/public/displaymesh.m	(revision 696)
+++ /issm/trunk/src/m/classes/public/displaymesh.m	(revision 697)
@@ -9,48 +9,38 @@
 %      displaymesh(md)
 
-disp(sprintf('   Mesh:')); 
-disp(sprintf('      type: %s',md.type));
+fprintf('   Mesh:\n'); 
 
-if strcmpi(md.type,'2d'),
-	disp(sprintf('      numberofelements: %i',md.numberofelements));
-	disp(sprintf('      numberofgrids: %i',md.numberofgrids)); 
-	if ~isnan(md.dof),
-		disp(sprintf('      number of dofs: %i',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) (type of elements, according to number of grids per element)',md.numberofelements));
-	disp(sprintf('      x: (%i) (grid x coordinates)',md.numberofgrids));
-	disp(sprintf('      y: (%i) (grid y coordinates)',md.numberofgrids));
-	disp(sprintf('      z: (%i) (grid z coordinates)',md.numberofgrids));
-elseif strcmpi(md.type,'3d'),
+if strcmpi(md.type,'3d'),
 
-	disp(sprintf('      Original 2d mesh:'));
-	disp(sprintf('         numberofelements2d: %i',md.numberofelements2d));
-	disp(sprintf('         numberofgrids2d: %i',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) (grid x coordinates)',md.numberofgrids2d));
-	disp(sprintf('         y2d: (%i) (grid y coordinates)',md.numberofgrids2d));
-	disp(sprintf('         z2d: (%i) (grid z coordinates)',md.numberofgrids2d));
+	fprintf('\n      Elements and nodes of the original 2d mesh:\n');
+	fprintf('         numberofelements2d: %i (number of elements)\n',md.numberofelements2d);
+	fprintf('         numberofgrids2d: %i (number of nodes)\n',md.numberofgrids2d); 
+	fprintf('         elements2d: (%i-%i) (index into (x,y,z), coordinates of the grids)\n',md.numberofelements2d,size(md.elements2d,2)); 
+	fprintf('         elements_type2d: (%i) (element types, according to number of grids)\n',md.numberofelements2d);
+	fprintf('         x2d: (%i) (node x coordinates)\n',length(md.x2d));
+	fprintf('         y2d: (%i) (node y coordinates)\n',length(md.y2d));
+	fprintf('         z2d: (%i) (node z coordinates)\n',length(md.z2d));
 
-	disp(sprintf('      Extruded 3d mesh: '));
-	disp(sprintf('         numberofelements: %i',md.numberofelements));
-	disp(sprintf('         numberofgrids: %i',md.numberofgrids)); 
-	if ~isnan(md.dof),
-		disp(sprintf('      number of dofs: %i',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) (grid x coordinates)',md.numberofgrids));
-	disp(sprintf('         y: (%i) (grid y coordinates)',md.numberofgrids));
-	disp(sprintf('         z: (%i) (grid z coordinates)',md.numberofgrids));
-	disp(sprintf('         numlayers: (%i) (number of extrusion layers)',md.numlayers));
-	disp(sprintf('         gridoncollapsed: (%i)',md.numberofgrids));
-	disp(sprintf('         gridonnoncollapsed: (%i)',md.numberofgrids));
-	
-	disp(sprintf('      Penalties: (%i-%i) (penalties applied to connect 2d and 3d parts of 2d-3d mesh)',size(md.penalties,1),size(md.penalties,2)));
+	fprintf('\n      Elements and nodes of the extruded 3d mesh:\n');
 else
-	error('only ''2d'' and ''3d'' are allowed for model type');
+
+	fprintf('\n      Elements and nodes:\n');
 end
 
+fprintf('         numberofelements: %i (number of elements)\n',md.numberofelements);
+fprintf('         numberofgrids: %i (number of nodes)\n',md.numberofgrids); 
+if ~isnan(md.dof), fprintf('      dof: %i (maximum number of dofs solved)\n',md.dof); end
+fprintf('         elements: (%i-%i) (index into (x,y,z), coordinates of the grids)\n',md.numberofelements,size(md.elements,2)); 
+fprintf('         elements_type: (%i) (element types, according to number of grids)\n',md.numberofelements);
+fprintf('         x: (%i) (node x coordinates)\n',length(md.x));
+fprintf('         y: (%i) (node y coordinates)\n',length(md.y));
+fprintf('         z: (%i) (node z coordinates)\n',length(md.z));
+fprintf('         numlayers: %i (number of extrusion layers)\n',md.numlayers);
 
+fprintf('\n      Properties:\n');
+fprintf('         type: %s\n',md.type);
+fprintf('         Penalties: (%i-%i))\n',size(md.penalties,1),size(md.penalties,2));
+fprintf('         gridonbed: (%i) (lower nodes flags list)\n',length(md.gridonbed));
+fprintf('         gridonsurface: (%i) (upper nodes flags list)\n',length(md.gridonsurface));
+fprintf('         elementonbed: (%i) (lower elements flags list)\n',length(md.elementonbed));
+fprintf('         elementonsurface: (%i) (upper elements flags list)\n',length(md.elementonsurface));
Index: /issm/trunk/src/m/classes/public/displayobservations.m
===================================================================
--- /issm/trunk/src/m/classes/public/displayobservations.m	(revision 696)
+++ /issm/trunk/src/m/classes/public/displayobservations.m	(revision 697)
@@ -9,9 +9,9 @@
 %      displayobservations(md)
 
-disp(sprintf('   Observations:'));
-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)));
+fprintf('   Observations:\n');
+fprintf('      vx_obs [m/a]: (%i)\n',length(md.vx_obs));
+fprintf('      vy_obs [m/a]: (%i)\n',length(md.vy_obs));
+fprintf('      vel_obs [m/a]: (%i)\n',length(md.vel_obs));
+fprintf('      accumulation [m/a]: (%i)\n',length(md.accumulation));
+fprintf('      observed_temperature [K]: (%i)\n',length(md.observed_temperature));
+fprintf('      geothermalflux [W/m^2]: (%i)\n',length(md.geothermalflux));
Index: /issm/trunk/src/m/classes/public/displayparallel.m
===================================================================
--- /issm/trunk/src/m/classes/public/displayparallel.m	(revision 696)
+++ /issm/trunk/src/m/classes/public/displayparallel.m	(revision 697)
@@ -9,15 +9,16 @@
 %      displayparallel(md)
 
-disp(sprintf('      ''%s''','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('      ''%s''','solver options'));
-disp(sprintf('         %s','''ice'''));
-disp(sprintf('            solver_type: %s      (solver type for Ice: ''lu'' or ''cholesky'')',md.solver_type));
-disp(sprintf('         %s','''cielo'''));
-disp(sprintf('            solverstring: %s (solver string for Petsc. See solversetto... routines. Default is asm)',md.solverstring)); 
+fprintf('\n      parallelisation:\n');
+fprintf('         cluster: %s      (set to ''cluster_name'' to run in cluster, ''none'' to run serially)\n',md.cluster);
+fprintf('         np: %i      (number of CPUS requested on cluster)\n',md.np);
+fprintf('         exclusive: %i      (set to 1 if CPUS used are not to be shared with other users, 0 otherwise)\n',md.exclusive);
+fprintf('         time: %i      (amount of time requested on cluster)\n',md.time); 
+fprintf('         alloc_cleanup: %i      (allocation cleanup before starting a job, default 1)\n',md.alloc_cleanup); 
+fprintf('         waitonlock: %i      (wait for batch results 1, or return 0. default is to return )\n',md.waitonlock); 
+fprintf('         queue: %s      (special queue name on cluster? default is '''')\n',md.queue); fprintf('\n      solver options:\n');
+
+fprintf('\n      solver options:\n');
+fprintf('         ice\n');
+fprintf('            solver_type: %s  (solver type for Ice: ''lu'' or ''cholesky'')\n',md.solver_type);
+fprintf('         cielo\n');
+fprintf('            solverstring: %s \n            (solver string for Petsc. See solversetto... routines. Default is asm)\n',md.solverstring); 
Index: /issm/trunk/src/m/classes/public/displayparameters.m
===================================================================
--- /issm/trunk/src/m/classes/public/displayparameters.m	(revision 696)
+++ /issm/trunk/src/m/classes/public/displayparameters.m	(revision 697)
@@ -9,23 +9,23 @@
 %      displayparameters(md)
 
-disp(sprintf('   Parameters:'));
-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.new_thickness), disp(sprintf('      new_thickness: N/A')); else disp(sprintf('      new_thickness [m]: (%i)',length(md.new_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
-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)));
-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
-disp(sprintf('      g: %g [m/s^2]',md.g));
-disp(sprintf('      ''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)'''));
-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
+fprintf('   Parameters:\n');
+
+fprintf('\n      geometry:\n');
+if isempty(md.surface), fprintf('         surface: N/A'); else fprintf('         surface [m]: (%i)\n',length(md.surface)); end
+if isempty(md.thickness), fprintf('         thickness: N/A'); else fprintf('         thickness [m]: (%i)\n',length(md.thickness)); end
+if isempty(md.bed), fprintf('         bed: N/A'); else fprintf('         bed [m]: (%i)\n',length(md.bed)); end
+if isempty(md.firn_layer), fprintf('         firn_layer: N/A'); else fprintf('         firn_layer [m]: (%i)\n',length(md.firn_layer)); end
+if strcmpi(md.type,'3d'), fprintf('         elementonbed: (%i)\n',length(md.elementonbed)); end
+if strcmpi(md.type,'3d'), fprintf('         elementonsurface: (%i)\n',length(md.elementonsurface)); end
+if strcmpi(md.type,'3d'), fprintf('         gridonbed: (%i)\n',length(md.gridonbed)); end
+if strcmpi(md.type,'3d'), fprintf('         gridonsurface: (%i)\n',length(md.gridonsurface)); end
+
+fprintf('\n      physical parameters:\n');
+fprintf('         g: %g [m/s^2]\n',md.g);
+
+fprintf('\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)\n');
+fprintf('         drag_type: %i (0: none, 1:plastic, 2:viscous):\n',md.drag_type);
+if isempty(md.drag), fprintf('         drag: N/A'); else fprintf('         drag: (%i)\n',length(md.drag)); end
+fprintf('         drag_type: %i (0: none, 1:plastic, 2:viscous):\n',md.drag_type);
+if isempty(md.p), fprintf('         p: N/A'); else fprintf('         p: (%i)\n',length(md.p)); end
+if isempty(md.q), fprintf('         q: N/A'); else fprintf('         q: (%i)\n',length(md.q)); end
Index: /issm/trunk/src/m/classes/public/displaysolutionparameters.m
===================================================================
--- /issm/trunk/src/m/classes/public/displaysolutionparameters.m	(revision 696)
+++ /issm/trunk/src/m/classes/public/displaysolutionparameters.m	(revision 697)
@@ -9,68 +9,60 @@
 %      displaysolutionparameters(md)
 
-disp(sprintf('   Solution parameters:'));
-disp(sprintf('      ''%s''','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('      ''%s''','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('      ''%s''','control'));
+fprintf('   Solution parameters:\n');
+fprintf('\n      statics:\n');
+fprintf('         %s\n','Newton convergence criteria');
+fprintf('            eps_rel: %g      (velocity relative convergence criterion)\n',md.eps_rel);
+fprintf('            eps_abs: %g      (velocity absolute convergence criterion [m/yr], NaN -> no absolute criterion)\n',md.eps_abs);
+fprintf('            viscosity_overshoot: %g      (over-shooting constant new=new+C*(new-old))\n',md.viscosity_overshoot);
+fprintf('         penalty_offset: %g      (offset used by penalties: penalty = Kmax*10^offset)\n',md.penalty_offset);
+fprintf('         penalty_melting: %g      (penalty used to keep T<Tpmp)\n',md.penalty_melting);
+fprintf('         penalty_lock: %g      (counter used to lock penalties that zig zag)\n',md.penalty_lock);
+fprintf('         lowmem: %i      (Set to 1 if you are running low on cluster memory)\n',md.lowmem);
+fprintf('         sparsity: %g      (matrix sparsity. Set to .001 for < 1M dof, .0001 for 5M dof, and .00001 for > 10M dof\n',md.sparsity);
+fprintf('         connectivity: %i      (element connectivity)\n',md.connectivity); 
+fprintf('         debug: %i      (output debug statements when possible yes-> 1, no -> 0. Default is 1\n',md.debug);
+fprintf('         element_debug: %i      (output debug statements for elementswhen possible yes-> 1, no -> 0. Default is 0\n',md.element_debug);
+fprintf('         element_debugid: %i      (if element_debug on, id of element for which to output messages\n',md.element_debugid);
+fprintf('         debug: %i      (output debug statements when possible yes-> 1, no -> 0. Default is 1');
+fprintf('      ''%s''\n','transient');
+fprintf('         dt: %g ( time step in years)\n',md.dt/md.yts);
+fprintf('         ndt: %g ( time span in years)\n',md.ndt/md.yts);
+fprintf('         artificial_diffusivity: %i (yes->1, no->0)\n',md.artificial_diffusivity);
+fprintf('         minh: %g (minimum thickness to avoid stiffness singularity)\n',md.minh);
+fprintf('         timestepping: %i ( adptative time stepping implemented - default to 0)\n',md.timestepping);
+fprintf('         deltaH: %g ( minimum thickness difference between two time steps)\n',md.deltaH);
+fprintf('         DeltaH: %g ( maximum thickness difference between two time steps)\n',md.DeltaH);
+fprintf('         deltaT: %g ( minimum temperature difference between two time steps)\n',md.deltaT);
+fprintf('         DeltaT: %g ( maximum temperature difference between two time steps)\n',md.DeltaT);
+fprintf('         timeacc: %g ( multiplier to time step when time stepping increases time step)\n',md.timeacc);
+fprintf('         timedec: %g ( multiplier to time step when time stepping decresaes time step)\n',md.timedec);
 
-%control type
-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)\n',md.plot));
+fprintf('\n      control:\n');
+fprintf('         control_type: %s (control type, ex: ''drag'', or ''B'')\n',md.control_type);
+fprintf('         fit: (%g)      ( 0 -> absolute, 1 -> relative, 2 -> logarithmic. default is absolute)\n',length(md.fit));
+fprintf('         meanvel: %g      (velocity scaling factor when evaluating relative or logarithmic misfit)\n',md.meanvel);
+fprintf('         epsvel: %g      ( for relative fit, avoids misfit becoming infinity, for logarithmic fit, threshold for velocity)\n',md.epsvel);
+fprintf('         nsteps: %i      (number of optimization searches)\n',md.nsteps);
+fprintf('         optscal: (%i %i)      (scaling factor on gradient direction during optimization, for each optimization step)\n',size(md.optscal,1),size(md.optscal,2));
+fprintf('         mincontrolconstraint: %f      (minimum contraint for the controlled parameters, NaN -> no constraint)\n',md.mincontrolconstraint);
+fprintf('         maxcontrolconstraint: %f      (maximum contraint for the controlled parameters, NaN -> no constraint)\n',md.maxcontrolconstraint);
+fprintf('         maxiter: (%i)      (maximum iterations during each optimization step)\n',length(md.maxiter));
+fprintf('         tolx: %f      (minimum tolerance which will stop one optimization search)\n',md.tolx);
+fprintf('         plot: %i      (visualization of the results of each iteration yes -> 1 no -> 0. Default is 1)\n',md.plot);
 
-
-%mesh
-disp(sprintf('      ''%s''','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)\n',md.mesh_resolution));
+fprintf('\n      mesh:\n');
+fprintf('         mesh_domainoutline: %s      (domain outlines)\n',md.mesh_domainoutline);
+fprintf('         mesh_riftoutline: %s      (rift outlines)\n',md.mesh_riftoutline);
+fprintf('         mesh_resolution: (%g)      (mesh resolutoin)\n',md.mesh_resolution);
 
 %mesh2grid type
-disp(sprintf('      ''%s''','mesh2grid'));
+fprintf('\n      mesh2grid:\n');
 mesh2grid_string='';
 for i=1:length(md.mesh2grid_parameters),
 	parameter=md.mesh2grid_parameters{i};
-	%check this parameter is a field from model! 
-	if ~isfield(struct(md),parameter),
-		error('displaysolutionparameters error message: one of the mesh2grid type parameters does not exist!');
-	end
 	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''})'));
-
+fprintf('         mesh2grid_parameters: %s %s\n',mesh2grid_string,'(list of parameters for which mesh 2 grid interpolation is carried out; ex: {''drag''}, or {''drag'',''B''})');
 %mesh2grid interpolation
 mesh2grid_interpstring='';
@@ -80,5 +72,5 @@
 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''})'));
+fprintf('         mesh2grid_interpolation: %s %s\n',mesh2grid_interpstring,'(list of interpolation (''node'' or ''element'') for each parameter ex: {''node''}, or {''node'',''element''})');
 
 %mesh2grid filter
@@ -89,14 +81,12 @@
 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 )\n',md.mesh2grid_windowsize));
+fprintf('         mesh2grid_filter: %s %s\n',mesh2grid_filterstring,'(list of filter (''average'' or ''nearest'') for each parameter ex: {''average''}, or {''average'',''nearest''})');
+fprintf('         mesh2grid_cornereast: %g ( corner east of square grid)\n',md.mesh2grid_cornereast);
+fprintf('         mesh2grid_cornernorth: %g ( corner north of square grid)\n',md.mesh2grid_cornernorth);
+fprintf('         mesh2grid_xposting: %g (x  posting of grid (in m))\n',md.mesh2grid_xposting);
+fprintf('         mesh2grid_yposting: %g (y  posting of grid (in m))\n',md.mesh2grid_yposting);
+fprintf('         mesh2grid_nlines: %g ( number of grid lines)\n',md.mesh2grid_nlines);
+fprintf('         mesh2grid_ncolumns: %g ( number of grid columns)\n',md.mesh2grid_ncolumns);
+fprintf('         mesh2grid_windowsize: %g ( size of filter )\n',md.mesh2grid_windowsize);
 
 %parallelisation
@@ -107,17 +97,9 @@
 for i=1:length(md.parameteroutput),
 	parameter=md.parameteroutput{i};
-	%check this parameter is a field from model! 
-	if ~isfield(struct(md),parameter),
-		error('displaysolutionparameters error message: one of the parameteroutput type parameters does not exist!');
-	end
 	parameteroutput_string=[parameteroutput_string parameter ' and '];
 end
 parameteroutput_string=parameteroutput_string(1:length(parameteroutput_string)-5);
 
-disp(sprintf('      ''%s''','output'));
-disp(sprintf('         parameteroutput: %s %s',parameteroutput_string,...
-                       '(list of output parameters recovered in the solution sequences: ex: {''viscousheating''}, or {''viscousheating'',''deviatoricstress''})'));
-
-%qmu
-disp(sprintf('\n'));
-displayqmu(md);
+fprintf('\n      output:\n');
+fprintf('         parameteroutput: %s %s\n',parameteroutput_string,...
+                       '(list of output parameters recovered in the solution sequences: ex: {''viscousheating'',''stress''})\n');
