Index: /issm/trunk-jpl/src/m/classes/clusters/aurora.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/aurora.m	(revision 26329)
+++ /issm/trunk-jpl/src/m/classes/clusters/aurora.m	(revision 26330)
@@ -1,3 +1,3 @@
-%AURORA class definition
+%AURORA cluster class definition
 %
 %   Usage:
@@ -7,128 +7,128 @@
 
 classdef aurora
-    properties (SetAccess=public) 
-		 % {{{
-		 name='aurora.jpl.nasa.gov'
-		 login='username';
-		 numnodes = 1;
-		 cpuspernode = 24;
-		 modules = {'intel/cluster-toolkit-2013.5.192'};
-		 port=1070;
-		 queue='shortq';
-		 time=3*60;
-		 codepath='~/issm/trunk/';
-		 executionpath='~/issm/trunk/execution/';
-		 mpipath='/opt/intel/impi/4.1.3/intel64/bin/';
-		 %}}}
-	 end
-	 methods
-		 function cluster=aurora(varargin) % {{{
+	properties (SetAccess=public)
+		% {{{
+		name='aurora.jpl.nasa.gov'
+		login='username';
+		numnodes = 1;
+		cpuspernode = 24;
+		modules = {'intel/cluster-toolkit-2013.5.192'};
+		port=1070;
+		queue='shortq';
+		time=3*60;
+		codepath='~/issm/trunk/';
+		executionpath='~/issm/trunk/execution/';
+		mpipath='/opt/intel/impi/4.1.3/intel64/bin/';
+		%}}}
+	end
+	methods
+		function cluster=aurora(varargin) % {{{
 
-			 %initialize cluster using default settings if provided
-			 if (exist('aurora_settings')==2), aurora_settings; end
+			%initialize cluster using default settings if provided
+			if (exist('aurora_settings')==2), aurora_settings; end
 
-			 cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
-		 end
-		 %}}}
-		 function disp(cluster) % {{{
-			 %  display the object
-			 disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
-			 disp(sprintf('    name: %s',cluster.name));
-			 disp(sprintf('    login: %s',cluster.login));
-			 disp(sprintf('    numnodes: %i',cluster.numnodes));
-			 disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
-			 disp(sprintf('    port: %i',cluster.port));
-			 disp(sprintf('    queue: %s',cluster.queue));
-			 disp(sprintf('    time: %i',cluster.time));
-			 disp(sprintf('    codepath: %s',cluster.codepath));
-			 disp(sprintf('    executionpath: %s',cluster.executionpath));
-		 end
-		 %}}}
-		 function numprocs=np(cluster) % {{{
-			 %compute number of processors
-			 numprocs=cluster.numnodes*cluster.cpuspernode;
-		 end
-		 %}}}
-		 function md = checkconsistency(cluster,md,solution,analyses) % {{{
+			cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
+		end
+		%}}}
+		function disp(cluster) % {{{
+			%  display the object
+			disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
+			disp(sprintf('    name: %s',cluster.name));
+			disp(sprintf('    login: %s',cluster.login));
+			disp(sprintf('    numnodes: %i',cluster.numnodes));
+			disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
+			disp(sprintf('    port: %i',cluster.port));
+			disp(sprintf('    queue: %s',cluster.queue));
+			disp(sprintf('    time: %i',cluster.time));
+			disp(sprintf('    codepath: %s',cluster.codepath));
+			disp(sprintf('    executionpath: %s',cluster.executionpath));
+		end
+		%}}}
+		function numprocs=nprocs(cluster) % {{{
+			%compute number of processors
+			numprocs=cluster.numnodes*cluster.cpuspernode;
+		end
+		%}}}
+		function md = checkconsistency(cluster,md,solution,analyses) % {{{
 
-			 available_queues={'debugq','shortq','mediumq','longq','verylongq'};
-			 queue_requirements_time=[60*1 60*3 60*12 60*48 60*192];
-			 queue_requirements_np=[16 256 256 128 128];
+			available_queues={'debugq','shortq','mediumq','longq','verylongq'};
+			queue_requirements_time=[60*1 60*3 60*12 60*48 60*192];
+			queue_requirements_np=[16 256 256 128 128];
 
-			 QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.queue,cluster.numnodes.*cluster.cpuspernode,cluster.time)
-		 end
-		 %}}}
-		 function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
+			QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.queue,cluster.numnodes.*cluster.cpuspernode,cluster.time)
+		end
+		%}}}
+		function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
 
-			 if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
-			 if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
-			 executable='issm.exe';
-			 if isdakota,
-				 version=IssmConfig('_DAKOTA_VERSION_'); version=str2num(version(1:3));
-				 if (version>=6),
-					 executable='issm_dakota.exe';
-				 end
-			 end
-			 if isoceancoupling,
-				 executable='issm_ocean.exe';
-			 end
+			if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
+			if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
+			executable='issm.exe';
+			if isdakota,
+				version=IssmConfig('_DAKOTA_VERSION_'); version=str2num(version(1:3));
+				if (version>=6),
+					executable='issm_dakota.exe';
+				end
+			end
+			if isoceancoupling,
+				executable='issm_ocean.exe';
+			end
 
-			 %write queuing script 
-			 fid=fopen([modelname '.queue'],'w');
-			 fprintf(fid,'#!/bin/bash\n');
-			 fprintf(fid,'#PBS -l select=%i:ncpus=%i\n',cluster.numnodes,cluster.cpuspernode);
-			 fprintf(fid,'#PBS -N %s\n',modelname);
-			 fprintf(fid,'#PBS -l walltime=%i\n',cluster.time*60); %walltime is in seconds.
-			 fprintf(fid,'#PBS -q %s\n',cluster.queue);
-			 fprintf(fid,'#PBS -o %s.outlog \n',modelname);
-			 fprintf(fid,'#PBS -e %s.errlog \n',modelname);
-			 fprintf(fid,'source /usr/share/Modules/init/bash\n');
-			 for i=1:numel(cluster.modules), fprintf(fid,['module load ' cluster.modules{i} '\n\n']); end
-			 fprintf(fid,'export PATH="$PATH:."\n\n');
-			 fprintf(fid,'export MPI_GROUP_MAX=64\n\n');
-			 fprintf(fid,'export MPI_UNBUFFERED_STDIO=true\n\n');
-			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath);
-			 fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');      
-			 fprintf(fid,'export PATH="$PATH:.:%s"\n',cluster.mpipath);
-			 fprintf(fid,'export PBS_O_WORKDIR=%s\n',[cluster.executionpath '/' dirname]);
-			 fprintf(fid,'cd $PBS_O_WORKDIR\n');
-			 fprintf(fid,'mpirun -n %i %s/%s %s %s %s',cluster.np(),cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
-			 fclose(fid);
+			%write queuing script 
+			fid=fopen([modelname '.queue'],'w');
+			fprintf(fid,'#!/bin/bash\n');
+			fprintf(fid,'#PBS -l select=%i:ncpus=%i\n',cluster.numnodes,cluster.cpuspernode);
+			fprintf(fid,'#PBS -N %s\n',modelname);
+			fprintf(fid,'#PBS -l walltime=%i\n',cluster.time*60); %walltime is in seconds.
+			fprintf(fid,'#PBS -q %s\n',cluster.queue);
+			fprintf(fid,'#PBS -o %s.outlog \n',modelname);
+			fprintf(fid,'#PBS -e %s.errlog \n',modelname);
+			fprintf(fid,'source /usr/share/Modules/init/bash\n');
+			for i=1:numel(cluster.modules), fprintf(fid,['module load ' cluster.modules{i} '\n\n']); end
+			fprintf(fid,'export PATH="$PATH:."\n\n');
+			fprintf(fid,'export MPI_GROUP_MAX=64\n\n');
+			fprintf(fid,'export MPI_UNBUFFERED_STDIO=true\n\n');
+			fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath);
+			fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');      
+			fprintf(fid,'export PATH="$PATH:.:%s"\n',cluster.mpipath);
+			fprintf(fid,'export PBS_O_WORKDIR=%s\n',[cluster.executionpath '/' dirname]);
+			fprintf(fid,'cd $PBS_O_WORKDIR\n');
+			fprintf(fid,'mpirun -n %i %s/%s %s %s %s',cluster.nprocs(),cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
+			fclose(fid);
 
-		 end
-		 %}}}
-		 function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
+		end
+		%}}}
+		function UploadQueueJob(cluster,modelname,dirname,filelist) % {{{
 
-			 %compress the files into one zip.
-			 compressstring=['tar -zcf ' dirname '.tar.gz '];
-			 for i=1:numel(filelist),
-				 compressstring = [compressstring ' ' filelist{i}];
-			 end
-			 system(compressstring);
+			%compress the files into one zip.
+			compressstring=['tar -zcf ' dirname '.tar.gz '];
+			for i=1:numel(filelist),
+				compressstring = [compressstring ' ' filelist{i}];
+			end
+			system(compressstring);
 
-			 disp('uploading input file and queueing script');
-			 issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
+			disp('uploading input file and queueing script');
+			issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
 
-		 end %}}}
-		 function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch)% {{{
+		end %}}}
+		function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch) % {{{
 
-			 if ~isempty(restart)
-				 launchcommand=['cd ' cluster.executionpath ' && cd ' dirname ' && qsub ' modelname '.queue '];
-			 else
-				 launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
-					 ' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && qsub ' modelname '.queue '];
-			 end
+			if ~isempty(restart)
+				launchcommand=['cd ' cluster.executionpath ' && cd ' dirname ' && qsub ' modelname '.queue '];
+			else
+				launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
+					' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && qsub ' modelname '.queue '];
+			end
 
-			 disp('launching solution sequence on remote cluster');
-			 issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
+			disp('launching solution sequence on remote cluster');
+			issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
 
-		 end %}}}
-		 function Download(cluster,dirname,filelist)% {{{
+		end %}}}
+		function Download(cluster,dirname,filelist) % {{{
 
-			 %copy files from cluster to current directory
-			 directory=[cluster.executionpath '/' dirname '/'];
-			 issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
+			%copy files from cluster to current directory
+			directory=[cluster.executionpath '/' dirname '/'];
+			issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
 
-		 end %}}}
+		end %}}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/clusters/camhpc.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/camhpc.m	(revision 26329)
+++ /issm/trunk-jpl/src/m/classes/clusters/camhpc.m	(revision 26330)
@@ -1,3 +1,3 @@
-%PFE class definition
+%CAMHPC cluster class definition
 %
 %   Usage:
@@ -7,145 +7,145 @@
 
 classdef camhpc
-    properties (SetAccess=public)  
-		 % {{{
-		 name          = 'camhpc'
-		 login         = '';
-		 numnodes      = 20;
-		 cpuspernode   = 8;
-		 port          = 8000;
-		 project       = '';
-		 partition     = '';
-		 codepath      = '';
-		 executionpath = '';
-		 interactive   = 0;
-		 time          = 24*60;
-		 memory        = 2;
-	 end
-	 %}}}
-	 methods
-		 function cluster=camhpc(varargin) % {{{
+	properties (SetAccess=public)
+		% {{{
+		name          = 'camhpc'
+		login         = '';
+		numnodes      = 20;
+		cpuspernode   = 8;
+		port          = 8000;
+		project       = '';
+		partition     = '';
+		codepath      = '';
+		executionpath = '';
+		interactive   = 0;
+		time          = 24*60;
+		memory        = 2;
+	end
+	%}}}
+	methods
+		function cluster=camhpc(varargin) % {{{
 
-			 %initialize cluster using default settings if provided
-			 if (exist('camhpc_settings')==2), camhpc_settings; end
+			%initialize cluster using default settings if provided
+			if (exist('camhpc_settings')==2), camhpc_settings; end
 
-			 %use provided options to change fields
-			 cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
-		 end
-		 %}}}
-		 function disp(cluster) % {{{
-			 %  display the object
-			 disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
-			 disp(sprintf('    name: %s',cluster.name));
-			 disp(sprintf('    login: %s',cluster.login));
-			 disp(sprintf('    port: %i',cluster.port));
-			 disp(sprintf('    numnodes: %i',cluster.numnodes));
-			 disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
-			 disp(sprintf('    np: %i',cluster.cpuspernode*cluster.numnodes));
-			 disp(sprintf('    project: %s',cluster.project));
-			 disp(sprintf('    partition: %s',cluster.partition));
-			 disp(sprintf('    codepath: %s',cluster.codepath));
-			 disp(sprintf('    executionpath: %s',cluster.executionpath));
-			 disp(sprintf('    interactive: %i',cluster.interactive));
-			 disp(sprintf('    time: %i',cluster.time));
-			 disp(sprintf('    memory: %i',cluster.memory));
-		 end
-		 %}}}
-		 function numprocs=np(cluster) % {{{
-			 %compute number of processors
-			 numprocs=cluster.numnodes*cluster.cpuspernode;
-		 end
-		 %}}}
-		 function md = checkconsistency(cluster,md,solution,analyses) % {{{
+			%use provided options to change fields
+			cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
+		end
+		%}}}
+		function disp(cluster) % {{{
+			%  display the object
+			disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
+			disp(sprintf('    name: %s',cluster.name));
+			disp(sprintf('    login: %s',cluster.login));
+			disp(sprintf('    port: %i',cluster.port));
+			disp(sprintf('    numnodes: %i',cluster.numnodes));
+			disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
+			disp(sprintf('    np: %i',cluster.cpuspernode*cluster.numnodes));
+			disp(sprintf('    project: %s',cluster.project));
+			disp(sprintf('    partition: %s',cluster.partition));
+			disp(sprintf('    codepath: %s',cluster.codepath));
+			disp(sprintf('    executionpath: %s',cluster.executionpath));
+			disp(sprintf('    interactive: %i',cluster.interactive));
+			disp(sprintf('    time: %i',cluster.time));
+			disp(sprintf('    memory: %i',cluster.memory));
+		end
+		%}}}
+		function numprocs=nprocs(cluster) % {{{
+			%compute number of processors
+			numprocs=cluster.numnodes*cluster.cpuspernode;
+		end
+		%}}}
+		function md = checkconsistency(cluster,md,solution,analyses) % {{{
 
-			 available_queues={'ARNOLD-SL3-CPU'}; % Updated for csd3 NSA 28/3/18
-			 queue_requirements_time=[Inf Inf];
-			 queue_requirements_np=[80 80];
+			available_queues={'ARNOLD-SL3-CPU'}; % Updated for csd3 NSA 28/3/18
+			queue_requirements_time=[Inf Inf];
+			queue_requirements_np=[80 80];
 
-			 QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.project,cluster.np,1)
+			QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.project,cluster.np,1)
 
-			 %Miscelaneous
-			 if isempty(cluster.login), md = checkmessage(md,'login empty'); end
-			 if isempty(cluster.codepath), md = checkmessage(md,'codepath empty'); end
-			 if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
+			%Miscelaneous
+			if isempty(cluster.login), md = checkmessage(md,'login empty'); end
+			if isempty(cluster.codepath), md = checkmessage(md,'codepath empty'); end
+			if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
 
-		 end
-		 %}}}
-		 function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
+		end
+		%}}}
+		function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
 
-			 if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
-			 if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
+			if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
+			if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
 
-			 %write queuing script 
-             disp(modelname)
-			 fid=fopen([modelname '.queue'],'w');
-			 fprintf(fid,'#!/bin/bash\n');
-			 fprintf(fid,'#SBATCH --job-name=%s\n',modelname);
-			 fprintf(fid,'#SBATCH -p %s \n',cluster.partition);
-			 fprintf(fid,'#SBATCH -A %s \n',cluster.project);
-			 fprintf(fid,'#SBATCH --mail-type=ALL\n');
-			 fprintf(fid,'#SBATCH -N %i -n %i\n',cluster.numnodes,cluster.cpuspernode);
-			 fprintf(fid,'#SBATCH --time=%i\n',cluster.time*60) %walltime is in seconds.
-			 fprintf(fid,'#SBATCH --mem-per-cpu=%igb\n',cluster.memory);
-			 fprintf(fid,'#SBATCH -o %s.outlog \n',modelname);
-			 fprintf(fid,'#SBATCH -e %s.errlog \n\n',modelname);
-			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
-			 fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
-			 fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
-			 fprintf(fid,'mpirun -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
-			 if ~io_gather, %concatenate the output files:
-				 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-			 end
-			 fclose(fid);
+			%write queuing script
+			disp(modelname)
+			fid=fopen([modelname '.queue'],'w');
+			fprintf(fid,'#!/bin/bash\n');
+			fprintf(fid,'#SBATCH --job-name=%s\n',modelname);
+			fprintf(fid,'#SBATCH -p %s \n',cluster.partition);
+			fprintf(fid,'#SBATCH -A %s \n',cluster.project);
+			fprintf(fid,'#SBATCH --mail-type=ALL\n');
+			fprintf(fid,'#SBATCH -N %i -n %i\n',cluster.numnodes,cluster.cpuspernode);
+			fprintf(fid,'#SBATCH --time=%i\n',cluster.time*60) %walltime is in seconds.
+			fprintf(fid,'#SBATCH --mem-per-cpu=%igb\n',cluster.memory);
+			fprintf(fid,'#SBATCH -o %s.outlog \n',modelname);
+			fprintf(fid,'#SBATCH -e %s.errlog \n\n',modelname);
+			fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+			fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
+			fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
+			fprintf(fid,'mpirun -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
+			if ~io_gather, %concatenate the output files:
+				fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+			end
+			fclose(fid);
 
-			 %in interactive mode, create a run file, and errlog and outlog file
-			 if cluster.interactive,
-				 fid=fopen([modelname '.run'],'w');
-				 fprintf(fid,'mpirun -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
-				 if ~io_gather, %concatenate the output files:
-					 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-				 end
-				 fclose(fid);
-				 fid=fopen([modelname '.errlog'],'w');
-				 fclose(fid);
-				 fid=fopen([modelname '.outlog'],'w');
-				 fclose(fid);
-			 end
-		 end %}}}
-		 function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
+			%in interactive mode, create a run file, and errlog and outlog file
+			if cluster.interactive,
+				fid=fopen([modelname '.run'],'w');
+				fprintf(fid,'mpirun -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
+				if ~io_gather, %concatenate the output files:
+					fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+				end
+				fclose(fid);
+				fid=fopen([modelname '.errlog'],'w');
+				fclose(fid);
+				fid=fopen([modelname '.outlog'],'w');
+				fclose(fid);
+			end
+		end %}}}
+		function UploadQueueJob(cluster,modelname,dirname,filelist) % {{{
 
-			 %compress the files into one zip.
-			 compressstring=['tar -zcf ' dirname '.tar.gz '];
-			 for i=1:numel(filelist),
-				 compressstring = [compressstring ' ' filelist{i}];
-			 end
-			 if cluster.interactive,
-				 compressstring = [compressstring ' ' modelname '.errlog ' modelname '.outlog '];
-			 end
-			 system(compressstring);
+			%compress the files into one zip.
+			compressstring=['tar -zcf ' dirname '.tar.gz '];
+			for i=1:numel(filelist),
+				compressstring = [compressstring ' ' filelist{i}];
+			end
+			if cluster.interactive,
+				compressstring = [compressstring ' ' modelname '.errlog ' modelname '.outlog '];
+			end
+			system(compressstring);
 
-			 disp('uploading input file and queueing script');
-			 issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
+			disp('uploading input file and queueing script');
+			issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
 
-		 end %}}}
-		 function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch)% {{{
+		end %}}}
+		function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch) % {{{
 
-			 disp('launching solution sequence on remote cluster');
+			disp('launching solution sequence on remote cluster');
              %
              % qsub replaced by sbatch for csd3 system NSA 28/3/18
-			 if ~isempty(restart)
-				 launchcommand=['cd ' cluster.executionpath ' && cd ' dirname ' && hostname && qsub ' modelname '.queue '];
-			 else
-				 launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
-					 ' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && hostname && sbatch ' modelname '.queue '];
-			 end
-			 issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
-		 end %}}}
-		 function Download(cluster,dirname,filelist)% {{{
+			if ~isempty(restart)
+				launchcommand=['cd ' cluster.executionpath ' && cd ' dirname ' && hostname && qsub ' modelname '.queue '];
+			else
+				launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
+					' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && hostname && sbatch ' modelname '.queue '];
+			end
+			issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
+		end %}}}
+		function Download(cluster,dirname,filelist) % {{{
 
-			 %copy files from cluster to current directory
-			 directory=[cluster.executionpath '/' dirname '/'];
-			 issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
+			%copy files from cluster to current directory
+			directory=[cluster.executionpath '/' dirname '/'];
+			issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
 
-		 end %}}}
+		end %}}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/clusters/discover.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/discover.m	(revision 26329)
+++ /issm/trunk-jpl/src/m/classes/clusters/discover.m	(revision 26330)
@@ -1,3 +1,3 @@
-%PFE class definition
+%DISCOVER cluster class definition
 %
 %   Usage:
@@ -6,221 +6,221 @@
 %      cluster=discover('np',3,'login','username');
 
-classdef discover 
-    properties (SetAccess=public)  
-		 % {{{
-		 name=oshostname();
-		 login='';
-		 modules        = {};
-		 numnodes=20;
-		 cpuspernode=8; 
-		 port=0;
-		 queue='general';
-		 time=12*60*60;
-		 processor='west';
-		 codepath='';
-		 executionpath='';
-		 interactive=0;
-		 bbftp=0;
-		 numstreams=8;
-		 hyperthreading=0;
-		 email='';
-	 end
-	 %}}}
-	 methods
-		 function cluster=discover(varargin) % {{{
-
-			 %initialize cluster using default settings if provided
-			 if (exist('discover_settings')==2), discover_settings; end
-
-			 %use provided options to change fields
-			 cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
-		 end
-		 %}}}
-		 function disp(cluster) % {{{
-			 %  display the object
-			 disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
-			 disp(sprintf('    name: %s',cluster.name));
-			 disp(sprintf('    login: %s',cluster.login));
-			 disp(sprintf('    modules: %s',strjoin(cluster.modules,', ')));
-			 disp(sprintf('    port: %i',cluster.port));
-			 disp(sprintf('    numnodes: %i',cluster.numnodes));
-			 disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
-			 disp(sprintf('    np: %i',cluster.cpuspernode*cluster.numnodes));
-			 disp(sprintf('    queue: %s',cluster.queue));
-			 disp(sprintf('    time: %i',cluster.time));
-			 disp(sprintf('    processor: %s',cluster.processor));
-			 disp(sprintf('    codepath: %s',cluster.codepath));
-			 disp(sprintf('    executionpath: %s',cluster.executionpath));
-			 disp(sprintf('    interactive: %i',cluster.interactive));
-			 disp(sprintf('    hyperthreading: %i',cluster.hyperthreading));
-			 disp(sprintf('    email: %s',cluster.email));
-		 end
-		 %}}}
-		 function numprocs=np(cluster) % {{{
-			 %compute number of processors
-			 numprocs=cluster.numnodes*cluster.cpuspernode;
-		 end
-		 %}}}
-		 function md = checkconsistency(cluster,md,solution,analyses) % {{{
-
-			 available_queues={'long','allnccs','debug'};
-			 queue_requirements_time=[24*60*60 12*60*60 1*60*60];
-			 queue_requirements_np=[560 6000 532];
-
-			 QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.queue,cluster.np,cluster.time)
-
-			 %now, check cluster.cpuspernode according to processor type
-			 if ( strcmpi(cluster.processor,'sand')),
-				 if ((cluster.cpuspernode>16 ) | (cluster.cpuspernode<1)),
-					 md = checkmessage(md,'cpuspernode should be between 1 and 16 for ''sand'' processors');
-				 end
-			 elseif strcmpi(cluster.processor,'hasw'),
-				 if ((cluster.cpuspernode>28 ) | (cluster.cpuspernode<1)),
-					 md = checkmessage(md,'cpuspernode should be between 1 and 28 for ''hasw'' processors');
-				 end
-			 else
-				 md = checkmessage(md,'unknown processor type, should be ''sand'' or ''hasw'' ');
-			 end
-
-			 %Miscelaneous
-			 if isempty(cluster.login), md = checkmessage(md,'login empty'); end
-			 if isempty(cluster.codepath), md = checkmessage(md,'codepath empty'); end
-			 if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
-
-		 end
-		 %}}}
-		 function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
-
-			 if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
-
-			 executable='issm.exe';
-			 if isdakota,
-				 version=IssmConfig('_DAKOTA_VERSION_'); version=str2num(version(1:3));
-				 if (version>=6),
-					 executable='issm_dakota.exe';
-				 end
-			 end
-			 if isoceancoupling,
-				 executable='issm_ocean.exe';
-			 end
-
-			 %write queuing script
-			 fid=fopen([modelname '.queue'],'w');
-
-			 fprintf(fid,'#!/bin/bash\n');
-			 fprintf(fid,'#SBATCH -J %s \n',modelname);
-			 fprintf(fid,'#SBATCH --qos=%s \n',cluster.queue);
-			 fprintf(fid,'#SBATCH -o %s.outlog \n',modelname);
-			 fprintf(fid,'#SBATCH -e %s.errlog \n',modelname);
-			 fprintf(fid,'#SBATCH -n %i \n',cluster.numnodes*cluster.cpuspernode);
-			 fprintf(fid,'#SBATCH -N %i \n',cluster.numnodes);
-			 fprintf(fid,'#SBATCH -t %02i:%02i:00 \n',floor(cluster.time/3600),floor(mod(cluster.time,3600)/60));
-			 fprintf(fid,'#SBATCH -A s1690 \n\n');
-			 for i=1:numel(cluster.modules),
-				 fprintf(fid,['module load ' cluster.modules{i} '\n']);
-			 end
-			 if length(find(cluster.email=='@'))>0
-				 fprintf(fid,'#SBATCH --mail-user=%s \n',cluster.email);
-				 fprintf(fid,'#SBATCH --mail-type=end \n\n');
-			 end
-			 fprintf(fid,'. /usr/share/modules/init/bash\n\n');
-			 fprintf(fid,'module load comp/intel/20.0.0.166\n');
-			 fprintf(fid,'module load mpi/sgi-mpt/2.17\n');
-			 fprintf(fid,'module load cmake/3.17.0\n');
-			 fprintf(fid,'export MPI_GROUP_MAX=64\n\n');
-			 fprintf(fid,'export MPI_UNBUFFERED_STDIO=true\n\n');
-			 fprintf(fid,'export PATH="$PATH:."\n\n');
-			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
-			 fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
-			 fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
-
-			 fprintf(fid,'mpiexec -np %i %s/%s %s %s %s\n',cluster.np,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
-			 if ~io_gather, %concatenate the output files:
-				 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-			 end
-			 fclose(fid);
-
-			 %in interactive mode, create a run file, and errlog and outlog file
-			 if cluster.interactive,
-				 fid=fopen([modelname '.run'],'w');
-				 if ~isvalgrind,
-					 fprintf(fid,'mpiexec -np %i %s/%s %s %s %s\n',cluster.np,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
-				 else
-					 fprintf(fid,'mpiexec -np %i valgrind --leak-check=full %s/%s %s %s %s\n',cluster.np,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
-				 end
-				 if ~io_gather, %concatenate the output files:
-					 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-				 end
-				 fclose(fid);
-				 fid=fopen([modelname '.errlog'],'w');
-				 fclose(fid);
-				 fid=fopen([modelname '.outlog'],'w');
-				 fclose(fid);
-			 end
-		 end %}}}
-		 function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
-
-			 %compress the files into one zip.
-			 compressstring=['tar -zcf ' dirname '.tar.gz '];
-			 for i=1:numel(filelist),
-				 compressstring = [compressstring ' ' filelist{i}];
-			 end
-			 if cluster.interactive,
-				 compressstring = [compressstring ' ' modelname '.run '  modelname '.errlog ' modelname '.outlog '];
-			 end
-			 system(compressstring);
-
-			 disp('uploading input file and queueing script');
-			 if cluster.interactive,
-				 directory=[cluster.executionpath '/Interactive' num2str(cluster.interactive)];
-			 else 
-				 directory=cluster.executionpath;
-			 end
-
-			 if ~cluster.bbftp,
-				 issmscpout(cluster.name,directory,cluster.login,cluster.port,{[dirname '.tar.gz']});
-			 else
-				 issmbbftpout(cluster.name,directory,cluster.login,cluster.port,cluster.numstreams,{[dirname '.tar.gz']});
-			 end
-
-		 end
-		 %}}}
-		 function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch)% {{{
-
-			 if ~cluster.interactive, 
-				 if ~isempty(restart)
-					 launchcommand=['cd ' cluster.executionpath ' && cd ' dirname ' && sbatch ' modelname '.queue '];
-				 else
-					 launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
-						 ' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && sbatch ' modelname '.queue '];
-				 end
-			 else
-				 if ~isempty(restart)
-					 launchcommand=['cd ' cluster.executionpath '/Interactive' num2str(cluster.interactive)];
-				 else
-					 launchcommand=['cd ' cluster.executionpath '/Interactive' num2str(cluster.interactive) ' && tar -zxf ' dirname '.tar.gz'];
-				 end
-			 end
-
-			 disp('launching solution sequence on remote cluster');
-			 issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
-		 end
-		 %}}}
-		 function Download(cluster,dirname,filelist)% {{{
-
-			 %copy files from cluster to current directory
-			 if ~cluster.interactive,
-				 directory=[cluster.executionpath '/' dirname '/'];
-			 else
-				 directory=[cluster.executionpath '/Interactive' num2str(cluster.interactive) '/'];
-			 end
-
-			 if ~cluster.bbftp,
-				 issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
-			 else
-				 issmbbftpin(cluster.name, cluster.login, cluster.port, cluster.numstreams, directory, filelist);
-			 end
-
-		 end %}}}
+classdef discover
+	properties (SetAccess=public)
+		% {{{
+		name=oshostname();
+		login='';
+		modules        = {};
+		numnodes=20;
+		cpuspernode=8; 
+		port=0;
+		queue='general';
+		time=12*60*60;
+		processor='west';
+		codepath='';
+		executionpath='';
+		interactive=0;
+		bbftp=0;
+		numstreams=8;
+		hyperthreading=0;
+		email='';
+	end
+	%}}}
+	methods
+		function cluster=discover(varargin) % {{{
+
+			%initialize cluster using default settings if provided
+			if (exist('discover_settings')==2), discover_settings; end
+
+			%use provided options to change fields
+			cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
+		end
+		%}}}
+		function disp(cluster) % {{{
+			%  display the object
+			disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
+			disp(sprintf('    name: %s',cluster.name));
+			disp(sprintf('    login: %s',cluster.login));
+			disp(sprintf('    modules: %s',strjoin(cluster.modules,', ')));
+			disp(sprintf('    port: %i',cluster.port));
+			disp(sprintf('    numnodes: %i',cluster.numnodes));
+			disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
+			disp(sprintf('    np: %i',cluster.cpuspernode*cluster.numnodes));
+			disp(sprintf('    queue: %s',cluster.queue));
+			disp(sprintf('    time: %i',cluster.time));
+			disp(sprintf('    processor: %s',cluster.processor));
+			disp(sprintf('    codepath: %s',cluster.codepath));
+			disp(sprintf('    executionpath: %s',cluster.executionpath));
+			disp(sprintf('    interactive: %i',cluster.interactive));
+			disp(sprintf('    hyperthreading: %i',cluster.hyperthreading));
+			disp(sprintf('    email: %s',cluster.email));
+		end
+		%}}}
+		function numprocs=nprocs(cluster) % {{{
+			%compute number of processors
+			numprocs=cluster.numnodes*cluster.cpuspernode;
+		end
+		%}}}
+		function md = checkconsistency(cluster,md,solution,analyses) % {{{
+
+			available_queues={'long','allnccs','debug'};
+			queue_requirements_time=[24*60*60 12*60*60 1*60*60];
+			queue_requirements_np=[560 6000 532];
+
+			QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.queue,cluster.np,cluster.time)
+
+			%now, check cluster.cpuspernode according to processor type
+			if ( strcmpi(cluster.processor,'sand')),
+				if ((cluster.cpuspernode>16 ) | (cluster.cpuspernode<1)),
+					md = checkmessage(md,'cpuspernode should be between 1 and 16 for ''sand'' processors');
+				end
+			elseif strcmpi(cluster.processor,'hasw'),
+				if ((cluster.cpuspernode>28 ) | (cluster.cpuspernode<1)),
+					md = checkmessage(md,'cpuspernode should be between 1 and 28 for ''hasw'' processors');
+				end
+			else
+				md = checkmessage(md,'unknown processor type, should be ''sand'' or ''hasw'' ');
+			end
+
+			%Miscelaneous
+			if isempty(cluster.login), md = checkmessage(md,'login empty'); end
+			if isempty(cluster.codepath), md = checkmessage(md,'codepath empty'); end
+			if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
+
+		end
+		%}}}
+		function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
+
+			if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
+
+			executable='issm.exe';
+			if isdakota,
+				version=IssmConfig('_DAKOTA_VERSION_'); version=str2num(version(1:3));
+				if (version>=6),
+					executable='issm_dakota.exe';
+				end
+			end
+			if isoceancoupling,
+				executable='issm_ocean.exe';
+			end
+
+			%write queuing script
+			fid=fopen([modelname '.queue'],'w');
+
+			fprintf(fid,'#!/bin/bash\n');
+			fprintf(fid,'#SBATCH -J %s \n',modelname);
+			fprintf(fid,'#SBATCH --qos=%s \n',cluster.queue);
+			fprintf(fid,'#SBATCH -o %s.outlog \n',modelname);
+			fprintf(fid,'#SBATCH -e %s.errlog \n',modelname);
+			fprintf(fid,'#SBATCH -n %i \n',cluster.numnodes*cluster.cpuspernode);
+			fprintf(fid,'#SBATCH -N %i \n',cluster.numnodes);
+			fprintf(fid,'#SBATCH -t %02i:%02i:00 \n',floor(cluster.time/3600),floor(mod(cluster.time,3600)/60));
+			fprintf(fid,'#SBATCH -A s1690 \n\n');
+			for i=1:numel(cluster.modules),
+				fprintf(fid,['module load ' cluster.modules{i} '\n']);
+			end
+			if length(find(cluster.email=='@'))>0
+				fprintf(fid,'#SBATCH --mail-user=%s \n',cluster.email);
+				fprintf(fid,'#SBATCH --mail-type=end \n\n');
+			end
+			fprintf(fid,'. /usr/share/modules/init/bash\n\n');
+			fprintf(fid,'module load comp/intel/20.0.0.166\n');
+			fprintf(fid,'module load mpi/sgi-mpt/2.17\n');
+			fprintf(fid,'module load cmake/3.17.0\n');
+			fprintf(fid,'export MPI_GROUP_MAX=64\n\n');
+			fprintf(fid,'export MPI_UNBUFFERED_STDIO=true\n\n');
+			fprintf(fid,'export PATH="$PATH:."\n\n');
+			fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+			fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
+			fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
+
+			fprintf(fid,'mpiexec -np %i %s/%s %s %s %s\n',cluster.np,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
+			if ~io_gather, %concatenate the output files:
+				fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+			end
+			fclose(fid);
+
+			%in interactive mode, create a run file, and errlog and outlog file
+			if cluster.interactive,
+				fid=fopen([modelname '.run'],'w');
+				if ~isvalgrind,
+					fprintf(fid,'mpiexec -np %i %s/%s %s %s %s\n',cluster.np,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
+				else
+					fprintf(fid,'mpiexec -np %i valgrind --leak-check=full %s/%s %s %s %s\n',cluster.np,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
+				end
+				if ~io_gather, %concatenate the output files:
+					fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+				end
+				fclose(fid);
+				fid=fopen([modelname '.errlog'],'w');
+				fclose(fid);
+				fid=fopen([modelname '.outlog'],'w');
+				fclose(fid);
+			end
+		end %}}}
+		function UploadQueueJob(cluster,modelname,dirname,filelist) % {{{
+
+			%compress the files into one zip.
+			compressstring=['tar -zcf ' dirname '.tar.gz '];
+			for i=1:numel(filelist),
+				compressstring = [compressstring ' ' filelist{i}];
+			end
+			if cluster.interactive,
+				compressstring = [compressstring ' ' modelname '.run '  modelname '.errlog ' modelname '.outlog '];
+			end
+			system(compressstring);
+
+			disp('uploading input file and queueing script');
+			if cluster.interactive,
+				directory=[cluster.executionpath '/Interactive' num2str(cluster.interactive)];
+			else 
+				directory=cluster.executionpath;
+			end
+
+			if ~cluster.bbftp,
+				issmscpout(cluster.name,directory,cluster.login,cluster.port,{[dirname '.tar.gz']});
+			else
+				issmbbftpout(cluster.name,directory,cluster.login,cluster.port,cluster.numstreams,{[dirname '.tar.gz']});
+			end
+
+		end
+		%}}}
+		function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch) % {{{
+
+			if ~cluster.interactive, 
+				if ~isempty(restart)
+					launchcommand=['cd ' cluster.executionpath ' && cd ' dirname ' && sbatch ' modelname '.queue '];
+				else
+					launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
+						' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && sbatch ' modelname '.queue '];
+				end
+			else
+				if ~isempty(restart)
+					launchcommand=['cd ' cluster.executionpath '/Interactive' num2str(cluster.interactive)];
+				else
+					launchcommand=['cd ' cluster.executionpath '/Interactive' num2str(cluster.interactive) ' && tar -zxf ' dirname '.tar.gz'];
+				end
+			end
+
+			disp('launching solution sequence on remote cluster');
+			issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
+		end
+		%}}}
+		function Download(cluster,dirname,filelist) % {{{
+
+			%copy files from cluster to current directory
+			if ~cluster.interactive,
+				directory=[cluster.executionpath '/' dirname '/'];
+			else
+				directory=[cluster.executionpath '/Interactive' num2str(cluster.interactive) '/'];
+			end
+
+			if ~cluster.bbftp,
+				issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
+			else
+				issmbbftpin(cluster.name, cluster.login, cluster.port, cluster.numstreams, directory, filelist);
+			end
+
+		end %}}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/clusters/generic.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/generic.m	(revision 26329)
+++ /issm/trunk-jpl/src/m/classes/clusters/generic.m	(revision 26330)
@@ -286,5 +286,5 @@
 		end
 		%}}}
-		function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
+		function UploadQueueJob(cluster,modelname,dirname,filelist) % {{{
 
 			if ~ispc,
@@ -307,5 +307,5 @@
 			end
 		end %}}}
-		function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch)% {{{
+		function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch) % {{{
 
 			if ~ispc,
@@ -336,5 +336,5 @@
 
 		end %}}}
-		function LaunchQueueJobIceOcean(cluster,modelname,dirname,filelist,restart,batch)% {{{
+		function LaunchQueueJobIceOcean(cluster,modelname,dirname,filelist,restart,batch) % {{{
 
 			if ~ispc,
@@ -365,5 +365,5 @@
 
 		end %}}}
-		function Download(cluster,dirname,filelist)% {{{
+		function Download(cluster,dirname,filelist) % {{{
 
 			if ispc(),
Index: /issm/trunk-jpl/src/m/classes/clusters/generic.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/generic.py	(revision 26329)
+++ /issm/trunk-jpl/src/m/classes/clusters/generic.py	(revision 26330)
@@ -4,4 +4,5 @@
 import numpy as np
 
+from fielddisplay import fielddisplay
 try:
     from generic_settings import generic_settings
@@ -39,18 +40,17 @@
         self.shell = '/bin/sh'
 
-        #use provided options to change fields
+        # Use provided options to change fields
         options = pairoptions(*args)
 
-        #get name
+        # Get name
         self.name = gethostname()
 
-        #initialize cluster using user settings if provided
-
+        # Initialize cluster using user settings if provided
         try:
             self = generic_settings(self)
         except NameError:
-            print("generic_settings.py not found, using default settings")
-
-        #OK get other fields
+            print('generic_settings.py not found, using default settings')
+
+        # OK get other fields
         self = options.AssignObjectFields(self)
     # }}}
@@ -59,15 +59,15 @@
         #  display the object
         s = "class '%s' object '%s' = \n" % (type(self), 'self')
-        s += "    name: %s\n" % self.name
-        s += "    login: %s\n" % self.login
-        s += "    np: %i\n" % self.np
-        s += "    port: %i\n" % self.port
-        s += "    codepath: %s\n" % self.codepath
-        s += "    executionpath: %s\n" % self.executionpath
-        s += "    valgrind: %s\n" % self.valgrind
-        s += "    valgrindlib: %s\n" % self.valgrindlib
-        s += "    valgrindsup: %s\n" % self.valgrindsup
-        s += "    verbose: %s\n" % self.verbose
-        s += "    shell: %s\n" % self.shell
+        s += '{}\n'.format(fielddisplay(self, 'name', ''))
+        s += '{}\n'.format(fielddisplay(self, 'login', ''))
+        s += '{}\n'.format(fielddisplay(self, 'np', ''))
+        s += '{}\n'.format(fielddisplay(self, 'port', ''))
+        s += '{}\n'.format(fielddisplay(self, 'codepath', ''))
+        s += '{}\n'.format(fielddisplay(self, 'executionpath', ''))
+        s += '{}\n'.format(fielddisplay(self, 'valgrind', ''))
+        s += '{}\n'.format(fielddisplay(self, 'valgrindlib', ''))
+        s += '{}\n'.format(fielddisplay(self, 'valgrindsup', ''))
+        s += '{}\n'.format(fielddisplay(self, 'verbose', ''))
+        s += '{}\n'.format(fielddisplay(self, 'shell', ''))
         return s
     # }}}
Index: /issm/trunk-jpl/src/m/classes/clusters/greenplanet.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/greenplanet.m	(revision 26329)
+++ /issm/trunk-jpl/src/m/classes/clusters/greenplanet.m	(revision 26330)
@@ -1,3 +1,3 @@
-%PFE class definition
+%GREENPLANET cluster class definition
 %
 %   Usage:
@@ -7,171 +7,171 @@
 
 classdef greenplanet
-    properties (SetAccess=public)  
-		 % {{{
-		 name          = 'greenplanet'
-		 login         = '';
-		 numnodes      = 20;
-		 cpuspernode   = 8;
-		 port          = 8000;
-		 queue         = 'c6145';
-		 codepath      = '';
-		 executionpath = '';
-		 interactive   = 0;
-		 time          = 24*60;
-		 memory        = 2;
-	 end
-	 %}}}
-	 methods
-		 function cluster=greenplanet(varargin) % {{{
+	properties (SetAccess=public)
+		% {{{
+		name          = 'greenplanet'
+		login         = '';
+		numnodes      = 20;
+		cpuspernode   = 8;
+		port          = 8000;
+		queue         = 'c6145';
+		codepath      = '';
+		executionpath = '';
+		interactive   = 0;
+		time          = 24*60;
+		memory        = 2;
+	end
+	%}}}
+	methods
+		function cluster=greenplanet(varargin) % {{{
 
-			 %initialize cluster using default settings if provided
-			 if (exist('greenplanet_settings')==2), greenplanet_settings; end
+			%initialize cluster using default settings if provided
+			if (exist('greenplanet_settings')==2), greenplanet_settings; end
 
-			 %use provided options to change fields
-			 cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
-		 end
-		 %}}}
-		 function disp(cluster) % {{{
-			 %  display the object
-			 disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
-			 disp(sprintf('    name: %s',cluster.name));
-			 disp(sprintf('    login: %s',cluster.login));
-			 disp(sprintf('    port: %i',cluster.port));
-			 disp(sprintf('    numnodes: %i',cluster.numnodes));
-			 disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
-			 disp(sprintf('    np: %i',cluster.cpuspernode*cluster.numnodes));
-			 disp(sprintf('    queue: %s',cluster.queue));
-			 disp(sprintf('    codepath: %s',cluster.codepath));
-			 disp(sprintf('    executionpath: %s',cluster.executionpath));
-			 disp(sprintf('    interactive: %i',cluster.interactive));
-			 disp(sprintf('    time: %i',cluster.time));
-			 disp(sprintf('    memory: %i',cluster.memory));
-		 end
-		 %}}}
-		 function numprocs=np(cluster) % {{{
-			 %compute number of processors
-			 numprocs=cluster.numnodes*cluster.cpuspernode;
-		 end
-		 %}}}
-		 function md = checkconsistency(cluster,md,solution,analyses) % {{{
+			%use provided options to change fields
+			cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
+		end
+		%}}}
+		function disp(cluster) % {{{
+			%  display the object
+			disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
+			disp(sprintf('    name: %s',cluster.name));
+			disp(sprintf('    login: %s',cluster.login));
+			disp(sprintf('    port: %i',cluster.port));
+			disp(sprintf('    numnodes: %i',cluster.numnodes));
+			disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
+			disp(sprintf('    np: %i',cluster.cpuspernode*cluster.numnodes));
+			disp(sprintf('    queue: %s',cluster.queue));
+			disp(sprintf('    codepath: %s',cluster.codepath));
+			disp(sprintf('    executionpath: %s',cluster.executionpath));
+			disp(sprintf('    interactive: %i',cluster.interactive));
+			disp(sprintf('    time: %i',cluster.time));
+			disp(sprintf('    memory: %i',cluster.memory));
+		end
+		%}}}
+		function numprocs=nprocs(cluster) % {{{
+			%compute number of processors
+			numprocs=cluster.numnodes*cluster.cpuspernode;
+		end
+		%}}}
+		function md = checkconsistency(cluster,md,solution,analyses) % {{{
 
-			 available_queues={'brd2.4','has2.5','ilg2.3','m-c1.9','m-c2.2','nes2.8','sib2.9','m2090','default'};
-			 queue_requirements_time=[Inf Inf Inf Inf Inf Inf Inf Inf Inf];
-			 queue_requirements_np=[80 80 80 80 80 80 80 80 80];
+			available_queues={'brd2.4','has2.5','ilg2.3','m-c1.9','m-c2.2','nes2.8','sib2.9','m2090','default'};
+			queue_requirements_time=[Inf Inf Inf Inf Inf Inf Inf Inf Inf];
+			queue_requirements_np=[80 80 80 80 80 80 80 80 80];
 
-			 QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.queue,cluster.np,1)
+			QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.queue,cluster.np,1)
 
-			 %Miscelaneous
-			 if isempty(cluster.login), md = checkmessage(md,'login empty'); end
-			 if isempty(cluster.codepath), md = checkmessage(md,'codepath empty'); end
-			 if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
+			%Miscelaneous
+			if isempty(cluster.login), md = checkmessage(md,'login empty'); end
+			if isempty(cluster.codepath), md = checkmessage(md,'codepath empty'); end
+			if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
 
-		 end
-		 %}}}
-		 function BuildKrigingQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
+		end
+		%}}}
+		function BuildKrigingQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
 
-			 if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
-			 if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
+			if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
+			if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
 
-			 %write queuing script 
-			 fid=fopen([modelname '.queue'],'w');
-			 fprintf(fid,'#!/bin/bash\n');
-			 fprintf(fid,'#SBATCH --job-name=%s\n',modelname);
-			 fprintf(fid,'#SBATCH -p %s \n',cluster.queue);
-			 fprintf(fid,'#SBATCH -N %i -n %i\n',cluster.numnodes,cluster.cpuspernode);
-			 fprintf(fid,'#SBATCH --time=%i\n',cluster.time*60); %walltime is in seconds.
-			 fprintf(fid,'#SBATCH --mem-per-cpu=%igb\n',cluster.memory);
-			 fprintf(fid,'#SBATCH -o %s.outlog \n',modelname);
-			 fprintf(fid,'#SBATCH -e %s.errlog \n\n',modelname);
-			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
-			 fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
-			 fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
-			 fprintf(fid,'mpiexec -np %i %s/kriging.exe %s %s\n',cluster.np,cluster.codepath,[cluster.executionpath '/' modelname],modelname);
-			 if ~io_gather, %concatenate the output files:
-				 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-			 end
-			 fclose(fid);
-		 end
-		 %}}}
-		 function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
+			%write queuing script 
+			fid=fopen([modelname '.queue'],'w');
+			fprintf(fid,'#!/bin/bash\n');
+			fprintf(fid,'#SBATCH --job-name=%s\n',modelname);
+			fprintf(fid,'#SBATCH -p %s \n',cluster.queue);
+			fprintf(fid,'#SBATCH -N %i -n %i\n',cluster.numnodes,cluster.cpuspernode);
+			fprintf(fid,'#SBATCH --time=%i\n',cluster.time*60); %walltime is in seconds.
+			fprintf(fid,'#SBATCH --mem-per-cpu=%igb\n',cluster.memory);
+			fprintf(fid,'#SBATCH -o %s.outlog \n',modelname);
+			fprintf(fid,'#SBATCH -e %s.errlog \n\n',modelname);
+			fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+			fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
+			fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
+			fprintf(fid,'mpiexec -np %i %s/kriging.exe %s %s\n',cluster.np,cluster.codepath,[cluster.executionpath '/' modelname],modelname);
+			if ~io_gather, %concatenate the output files:
+				fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+			end
+			fclose(fid);
+		end
+		%}}}
+		function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
 
-			 if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
-			 if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
+			if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
+			if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
 
-			 %write queuing script 
-			 fid=fopen([modelname '.queue'],'w');
-			 fprintf(fid,'#!/bin/bash\n');
-			 fprintf(fid,'#SBATCH --job-name=%s\n',modelname);
-			 fprintf(fid,'#SBATCH --partition=%s',cluster.queue{1});
-			 for i=2:length(cluster.queue) 
+			%write queuing script 
+			fid=fopen([modelname '.queue'],'w');
+			fprintf(fid,'#!/bin/bash\n');
+			fprintf(fid,'#SBATCH --job-name=%s\n',modelname);
+			fprintf(fid,'#SBATCH --partition=%s',cluster.queue{1});
+			for i=2:length(cluster.queue) 
 				fprintf(fid,',%s',cluster.queue{i});
-			 end
-			 fprintf(fid,'\n');
-			 %fprintf(fid,'#SBATCH -N %i -n %i\n',cluster.numnodes,cluster.cpuspernode);
-			 %fprintf(fid,'#SBATCH --mem-per-cpu=%igb\n',cluster.memory);
-			 fprintf(fid,'#SBATCH --nodes=%i\n',cluster.numnodes); % in general, just 1
-			 fprintf(fid,'#SBATCH --ntasks=%i\n',cluster.cpuspernode); % in general, just 1
-			 fprintf(fid,'#SBATCH --cpus-per-task=%i\n',1); 
-			 fprintf(fid,'#SBATCH --mem=%igb\n',cluster.memory); % minimum total node memory required
-			 fprintf(fid,'#SBATCH --time=%s\n',datestr(cluster.time/24,'HH:MM:SS')); %walltime is in HH:MM:SS format. cluster.time is in hour
-			 fprintf(fid,'#SBATCH -o %s.outlog \n',modelname);
-			 fprintf(fid,'#SBATCH -e %s.errlog \n\n',modelname);
-			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
-			 fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
-			 fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
-			 fprintf(fid,'mpiexec -n %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
-			 if ~io_gather, %concatenate the output files:
-				 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-			 end
-			 fclose(fid);
+			end
+			fprintf(fid,'\n');
+			%fprintf(fid,'#SBATCH -N %i -n %i\n',cluster.numnodes,cluster.cpuspernode);
+			%fprintf(fid,'#SBATCH --mem-per-cpu=%igb\n',cluster.memory);
+			fprintf(fid,'#SBATCH --nodes=%i\n',cluster.numnodes); % in general, just 1
+			fprintf(fid,'#SBATCH --ntasks=%i\n',cluster.cpuspernode); % in general, just 1
+			fprintf(fid,'#SBATCH --cpus-per-task=%i\n',1); 
+			fprintf(fid,'#SBATCH --mem=%igb\n',cluster.memory); % minimum total node memory required
+			fprintf(fid,'#SBATCH --time=%s\n',datestr(cluster.time/24,'HH:MM:SS')); %walltime is in HH:MM:SS format. cluster.time is in hour
+			fprintf(fid,'#SBATCH -o %s.outlog \n',modelname);
+			fprintf(fid,'#SBATCH -e %s.errlog \n\n',modelname);
+			fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+			fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
+			fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
+			fprintf(fid,'mpiexec -n %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
+			if ~io_gather, %concatenate the output files:
+				fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+			end
+			fclose(fid);
 
-			 %in interactive mode, create a run file, and errlog and outlog file
-			 if cluster.interactive,
-				 fid=fopen([modelname '.run'],'w');
-				 fprintf(fid,'mpiexec -n %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
-				 if ~io_gather, %concatenate the output files:
-					 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-				 end
-				 fclose(fid);
-				 fid=fopen([modelname '.errlog'],'w');
-				 fclose(fid);
-				 fid=fopen([modelname '.outlog'],'w');
-				 fclose(fid);
-			 end
-		 end %}}}
-		 function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
+			%in interactive mode, create a run file, and errlog and outlog file
+			if cluster.interactive,
+				fid=fopen([modelname '.run'],'w');
+				fprintf(fid,'mpiexec -n %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
+				if ~io_gather, %concatenate the output files:
+					fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+				end
+				fclose(fid);
+				fid=fopen([modelname '.errlog'],'w');
+				fclose(fid);
+				fid=fopen([modelname '.outlog'],'w');
+				fclose(fid);
+			end
+		end %}}}
+		function UploadQueueJob(cluster,modelname,dirname,filelist) % {{{
 
-			 %compress the files into one zip.
-			 compressstring=['tar -zcf ' dirname '.tar.gz '];
-			 for i=1:numel(filelist),
-				 compressstring = [compressstring ' ' filelist{i}];
-			 end
-			 if cluster.interactive,
-				 compressstring = [compressstring ' ' modelname '.errlog ' modelname '.outlog '];
-			 end
-			 system(compressstring);
+			%compress the files into one zip.
+			compressstring=['tar -zcf ' dirname '.tar.gz '];
+			for i=1:numel(filelist),
+				compressstring = [compressstring ' ' filelist{i}];
+			end
+			if cluster.interactive,
+				compressstring = [compressstring ' ' modelname '.errlog ' modelname '.outlog '];
+			end
+			system(compressstring);
 
-			 disp('uploading input file and queueing script');
-			 issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
+			disp('uploading input file and queueing script');
+			issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
 
-		 end %}}}
-		 function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch)% {{{
+		end %}}}
+		function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch) % {{{
 
-			 disp('launching solution sequence on remote cluster');
-			 if ~isempty(restart)
-				 launchcommand=['cd ' cluster.executionpath ' && cd ' dirname ' && hostname && sbatch ' modelname '.queue '];
-			 else
-				 launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
-					 ' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && hostname && sbatch ' modelname '.queue '];
-			 end
-			 issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
-		 end %}}}
-		 function Download(cluster,dirname,filelist)% {{{
+			disp('launching solution sequence on remote cluster');
+			if ~isempty(restart)
+				launchcommand=['cd ' cluster.executionpath ' && cd ' dirname ' && hostname && sbatch ' modelname '.queue '];
+			else
+				launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
+					' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && hostname && sbatch ' modelname '.queue '];
+			end
+			issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
+		end %}}}
+		function Download(cluster,dirname,filelist) % {{{
 
-			 %copy files from cluster to current directory
-			 directory=[cluster.executionpath '/' dirname '/'];
-			 issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
+			%copy files from cluster to current directory
+			directory=[cluster.executionpath '/' dirname '/'];
+			issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
 
-		 end %}}}
+		end %}}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/clusters/hpc.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/hpc.m	(revision 26329)
+++ /issm/trunk-jpl/src/m/classes/clusters/hpc.m	(revision 26330)
@@ -1,3 +1,3 @@
-%HPC class definition
+%HPC cluster class definition
 %
 %   Usage:
@@ -7,159 +7,159 @@
 
 classdef hpc
-    properties (SetAccess=public)  
-		 % {{{
-		 name='hpc.oit.uci.edu'
-		 login='';
-		 numnodes=1;
-		 cpuspernode=4; 
-		 port=0;
-		 queue='pub64';
-		 codepath='';
-		 executionpath='';
-		 interactive=0;
-	 end
-	 %}}}
-	 methods
-		 function cluster=hpc(varargin) % {{{
+	properties (SetAccess=public)
+		% {{{
+		name='hpc.oit.uci.edu'
+		login='';
+		numnodes=1;
+		cpuspernode=4; 
+		port=0;
+		queue='pub64';
+		codepath='';
+		executionpath='';
+		interactive=0;
+	end
+	%}}}
+	methods
+		function cluster=hpc(varargin) % {{{
 
-			 %initialize cluster using default settings if provided
-			 if (exist('hpc_settings')==2), hpc_settings; end
+			%initialize cluster using default settings if provided
+			if (exist('hpc_settings')==2), hpc_settings; end
 
-			 %use provided options to change fields
-			 cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
-		 end
-		 %}}}
-		 function disp(cluster) % {{{
-			 %  display the object
-			 disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
-			 disp(sprintf('    name: %s',cluster.name));
-			 disp(sprintf('    login: %s',cluster.login));
-			 disp(sprintf('    port: %i',cluster.port));
-			 disp(sprintf('    numnodes: %i',cluster.numnodes));
-			 disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
-			 disp(sprintf('    np: %i',cluster.cpuspernode*cluster.numnodes));
-			 disp(sprintf('    queue: %s',cluster.queue));
-			 disp(sprintf('    codepath: %s',cluster.codepath));
-			 disp(sprintf('    executionpath: %s',cluster.executionpath));
-			 disp(sprintf('    interactive: %i',cluster.interactive));
-		 end
-		 %}}}
-		 function numprocs=np(cluster) % {{{
-			 %compute number of processors
-			 numprocs=cluster.numnodes*cluster.cpuspernode;
-		 end
-		 %}}}
-		 function md = checkconsistency(cluster,md,solution,analyses) % {{{
+			%use provided options to change fields
+			cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
+		end
+		%}}}
+		function disp(cluster) % {{{
+			%  display the object
+			disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
+			disp(sprintf('    name: %s',cluster.name));
+			disp(sprintf('    login: %s',cluster.login));
+			disp(sprintf('    port: %i',cluster.port));
+			disp(sprintf('    numnodes: %i',cluster.numnodes));
+			disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
+			disp(sprintf('    np: %i',cluster.cpuspernode*cluster.numnodes));
+			disp(sprintf('    queue: %s',cluster.queue));
+			disp(sprintf('    codepath: %s',cluster.codepath));
+			disp(sprintf('    executionpath: %s',cluster.executionpath));
+			disp(sprintf('    interactive: %i',cluster.interactive));
+		end
+		%}}}
+		function numprocs=nprocs(cluster) % {{{
+			%compute number of processors
+			numprocs=cluster.numnodes*cluster.cpuspernode;
+		end
+		%}}}
+		function md = checkconsistency(cluster,md,solution,analyses) % {{{
 
-			 available_queues={'pub64','free64','free48','free*,pub64','free*'};
-			 queue_requirements_time=[Inf Inf Inf Inf Inf];
-			 queue_requirements_np=[64 64 48 48 48];
+			available_queues={'pub64','free64','free48','free*,pub64','free*'};
+			queue_requirements_time=[Inf Inf Inf Inf Inf];
+			queue_requirements_np=[64 64 48 48 48];
 
-			 QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.queue,cluster.np,1)
+			QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.queue,cluster.np,1)
 
-			 %Miscelaneous
-			 if isempty(cluster.login), md = checkmessage(md,'login empty'); end
-			 if isempty(cluster.codepath), md = checkmessage(md,'codepath empty'); end
-			 if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
+			%Miscelaneous
+			if isempty(cluster.login), md = checkmessage(md,'login empty'); end
+			if isempty(cluster.codepath), md = checkmessage(md,'codepath empty'); end
+			if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
 
-		 end
-		 %}}}
-		 function BuildKrigingQueueScript(cluster,modelname,solution,io_gather,isvalgrind,isgprof) % {{{
+		end
+		%}}}
+		function BuildKrigingQueueScript(cluster,modelname,solution,io_gather,isvalgrind,isgprof) % {{{
 
-			 if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
-			 if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
+			if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
+			if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
 
-			 %write queuing script 
-			 fid=fopen([modelname '.queue'],'w');
-			 fprintf(fid,'#!/bin/bash\n');
-			 fprintf(fid,'#$ -N %s\n',modelname);
-			 fprintf(fid,'#$ -q %s \n',cluster.queue);
-			 fprintf(fid,'#$ -pe one-node-mpi 2-64\n');
-			 fprintf(fid,'#$ -R y\n');
-			 fprintf(fid,'#$ -m beas\n');
-			 fprintf(fid,'#$ -o %s.outlog \n',modelname);
-			 fprintf(fid,'#$ -e %s.errlog \n\n',modelname);
-			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
-			 fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
-			 fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,modelname);
-			 fprintf(fid,'mpiexec -np %i %s/kriging.exe %s %s\n',cluster.np,cluster.codepath,[cluster.executionpath '/' modelname],modelname);
-			 if ~io_gather, %concatenate the output files:
-				 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-			 end
-			 fclose(fid);
-		 end
-		 %}}}
-		 function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
+			%write queuing script 
+			fid=fopen([modelname '.queue'],'w');
+			fprintf(fid,'#!/bin/bash\n');
+			fprintf(fid,'#$ -N %s\n',modelname);
+			fprintf(fid,'#$ -q %s \n',cluster.queue);
+			fprintf(fid,'#$ -pe one-node-mpi 2-64\n');
+			fprintf(fid,'#$ -R y\n');
+			fprintf(fid,'#$ -m beas\n');
+			fprintf(fid,'#$ -o %s.outlog \n',modelname);
+			fprintf(fid,'#$ -e %s.errlog \n\n',modelname);
+			fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+			fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
+			fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,modelname);
+			fprintf(fid,'mpiexec -np %i %s/kriging.exe %s %s\n',cluster.np,cluster.codepath,[cluster.executionpath '/' modelname],modelname);
+			if ~io_gather, %concatenate the output files:
+				fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+			end
+			fclose(fid);
+		end
+		%}}}
+		function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
 
-			 if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
-			 if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
+			if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
+			if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
 
-			 %write queuing script 
-			 fid=fopen([modelname '.queue'],'w');
-			 fprintf(fid,'#!/bin/bash\n');
-			 fprintf(fid,'#$ -N %s\n',modelname);
-			 fprintf(fid,'#$ -q %s \n',cluster.queue);
-			 fprintf(fid,'#$ -pe one-node-mpi 2-64\n');
-			 fprintf(fid,'#$ -R y\n');
-			 %fprintf(fid,'#$ -m beas\n');
-			 fprintf(fid,'#$ -o %s.outlog \n',modelname);
-			 fprintf(fid,'#$ -e %s.errlog \n\n',modelname);
-			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
-			 fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
-			 fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
-			 fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
-			 if ~io_gather, %concatenate the output files:
-				 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-			 end
-			 fclose(fid);
+			%write queuing script 
+			fid=fopen([modelname '.queue'],'w');
+			fprintf(fid,'#!/bin/bash\n');
+			fprintf(fid,'#$ -N %s\n',modelname);
+			fprintf(fid,'#$ -q %s \n',cluster.queue);
+			fprintf(fid,'#$ -pe one-node-mpi 2-64\n');
+			fprintf(fid,'#$ -R y\n');
+			%fprintf(fid,'#$ -m beas\n');
+			fprintf(fid,'#$ -o %s.outlog \n',modelname);
+			fprintf(fid,'#$ -e %s.errlog \n\n',modelname);
+			fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+			fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
+			fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
+			fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
+			if ~io_gather, %concatenate the output files:
+				fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+			end
+			fclose(fid);
 
-			 %in interactive mode, create a run file, and errlog and outlog file
-			 if cluster.interactive,
-				 fid=fopen([modelname '.run'],'w');
-				 fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
-				 if ~io_gather, %concatenate the output files:
-					 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-				 end
-				 fclose(fid);
-				 fid=fopen([modelname '.errlog'],'w');
-				 fclose(fid);
-				 fid=fopen([modelname '.outlog'],'w');
-				 fclose(fid);
-			 end
-		 end %}}}
-		 function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
+			%in interactive mode, create a run file, and errlog and outlog file
+			if cluster.interactive,
+				fid=fopen([modelname '.run'],'w');
+				fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
+				if ~io_gather, %concatenate the output files:
+					fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+				end
+				fclose(fid);
+				fid=fopen([modelname '.errlog'],'w');
+				fclose(fid);
+				fid=fopen([modelname '.outlog'],'w');
+				fclose(fid);
+			end
+		end %}}}
+		function UploadQueueJob(cluster,modelname,dirname,filelist) % {{{
 
-			 %compress the files into one zip.
-			 compressstring=['tar -zcf ' dirname '.tar.gz '];
-			 for i=1:numel(filelist),
-				 compressstring = [compressstring ' ' filelist{i}];
-			 end
-			 if cluster.interactive,
-				 compressstring = [compressstring ' ' modelname '.errlog ' modelname '.outlog '];
-			 end
-			 system(compressstring);
+			%compress the files into one zip.
+			compressstring=['tar -zcf ' dirname '.tar.gz '];
+			for i=1:numel(filelist),
+				compressstring = [compressstring ' ' filelist{i}];
+			end
+			if cluster.interactive,
+				compressstring = [compressstring ' ' modelname '.errlog ' modelname '.outlog '];
+			end
+			system(compressstring);
 
-			 disp('uploading input file and queueing script');
-			 issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
+			disp('uploading input file and queueing script');
+			issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
 
-		 end %}}}
-		 function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch)% {{{
+		end %}}}
+		function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch) % {{{
 
-			 disp('launching solution sequence on remote cluster');
-			 if ~isempty(restart)
-				 launchcommand=['cd ' cluster.executionpath ' && cd ' dirname ' && hostname && qsub ' modelname '.queue '];
-			 else
-				 launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
-					 ' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && hostname && qsub ' modelname '.queue '];
-			 end
-			 issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
-		 end %}}}
-		 function Download(cluster,dirname,filelist)% {{{
+			disp('launching solution sequence on remote cluster');
+			if ~isempty(restart)
+				launchcommand=['cd ' cluster.executionpath ' && cd ' dirname ' && hostname && qsub ' modelname '.queue '];
+			else
+				launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
+					' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && hostname && qsub ' modelname '.queue '];
+			end
+			issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
+		end %}}}
+		function Download(cluster,dirname,filelist) % {{{
 
-			 %copy files from cluster to current directory
-			 directory=[cluster.executionpath '/' dirname '/'];
-			 issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
+			%copy files from cluster to current directory
+			directory=[cluster.executionpath '/' dirname '/'];
+			issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
 
-		 end %}}}
+		end %}}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/clusters/hpc_simba.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/hpc_simba.m	(revision 26329)
+++ /issm/trunk-jpl/src/m/classes/clusters/hpc_simba.m	(revision 26330)
@@ -1,3 +1,3 @@
-%HPC class definition
+%HPC_SIMBA cluster class definition
 %
 %   Usage:
@@ -7,176 +7,176 @@
 
 classdef hpc_simba
-    properties (SetAccess=public)  
-		 % {{{
-		 name='simba00'
-		 login='inwoo';
-		 numnodes=1;
-		 cpuspernode=36; 
-		 np=4;
-		 port=7777;
-		 queue='pub64';
-		 codepath='/home/DATA/externalpackagesissm/issm/trunk-jpl/bin';
-		 executionpath='/home/DATA/externalpackages/issm/trunk-jpl/execution/';
-		 interactive=0;
-	 end
-	 %}}}
-	 methods
-		 function cluster=hpc_simba(varargin) % {{{
+	properties (SetAccess=public)
+		% {{{
+		name='simba00'
+		login='inwoo';
+		numnodes=1;
+		cpuspernode=36; 
+		np=4;
+		port=7777;
+		queue='pub64';
+		codepath='/home/DATA/externalpackagesissm/issm/trunk-jpl/bin';
+		executionpath='/home/DATA/externalpackages/issm/trunk-jpl/execution/';
+		interactive=0;
+	end
+	%}}}
+	methods
+		function cluster=hpc_simba(varargin) % {{{
 
-			 %initialize cluster using default settings if provided
-			 if (exist('hpc_settings')==2), hpc_settings; end
+			%initialize cluster using default settings if provided
+			if (exist('hpc_settings')==2), hpc_settings; end
 
-			 %use provided options to change fields
-			 cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
-		 end
-		 %}}}
-		 function disp(cluster) % {{{
-			 %  display the object
-			 disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
-			 disp(sprintf('    name: %s',cluster.name));
-			 disp(sprintf('    login: %s',cluster.login));
-			 disp(sprintf('    port: %i',cluster.port));
-			 disp(sprintf('    numnodes: %i',cluster.numnodes));
-			 disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
-			 disp(sprintf('    np: %i',cluster.cpuspernode*cluster.numnodes));
-			 disp(sprintf('    queue: %s',cluster.queue));
-			 disp(sprintf('    codepath: %s',cluster.codepath));
-			 disp(sprintf('    executionpath: %s',cluster.executionpath));
-			 disp(sprintf('    interactive: %i',cluster.interactive));
-		 end
-		 %}}}
-		 %function numprocs=np(cluster) % {{{
-		%	 %compute number of processors
-		%	 numprocs=cluster.numnodes*cluster.cpuspernode;
+			%use provided options to change fields
+			cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
+		end
+		%}}}
+		function disp(cluster) % {{{
+			%  display the object
+			disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
+			disp(sprintf('    name: %s',cluster.name));
+			disp(sprintf('    login: %s',cluster.login));
+			disp(sprintf('    port: %i',cluster.port));
+			disp(sprintf('    numnodes: %i',cluster.numnodes));
+			disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
+			disp(sprintf('    np: %i',cluster.cpuspernode*cluster.numnodes));
+			disp(sprintf('    queue: %s',cluster.queue));
+			disp(sprintf('    codepath: %s',cluster.codepath));
+			disp(sprintf('    executionpath: %s',cluster.executionpath));
+			disp(sprintf('    interactive: %i',cluster.interactive));
+		end
+		%}}}
+		%function numprocs=nprocs(cluster) % {{{
+		%	%compute number of processors
+		%	numprocs=cluster.numnodes*cluster.cpuspernode;
 		% end
-		 %}}}
-		 function md = checkconsistency(cluster,md,solution,analyses) % {{{
+		%}}}
+		function md = checkconsistency(cluster,md,solution,analyses) % {{{
 
-			 available_queues={'pub64','free64','free48','free*,pub64','free*'};
-			 queue_requirements_time=[Inf Inf Inf Inf Inf];
-			 queue_requirements_np=[64 64 48 48 48];
+			available_queues={'pub64','free64','free48','free*,pub64','free*'};
+			queue_requirements_time=[Inf Inf Inf Inf Inf];
+			queue_requirements_np=[64 64 48 48 48];
 
-			 QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.queue,cluster.np,1)
+			QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.queue,cluster.np,1)
 
-			 %Miscelaneous
-			 if isempty(cluster.login), md = checkmessage(md,'login empty'); end
-			 if isempty(cluster.codepath), md = checkmessage(md,'codepath empty'); end
-			 if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
+			%Miscelaneous
+			if isempty(cluster.login), md = checkmessage(md,'login empty'); end
+			if isempty(cluster.codepath), md = checkmessage(md,'codepath empty'); end
+			if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
 
-		 end
-		 %}}}
-		 function BuildKrigingQueueScript(cluster,modelname,solution,io_gather,isvalgrind,isgprof) % {{{
+		end
+		%}}}
+		function BuildKrigingQueueScript(cluster,modelname,solution,io_gather,isvalgrind,isgprof) % {{{
 
-			 if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
-			 if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
+			if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
+			if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
 
-			 %write queuing script 
-			 fid=fopen([modelname '.queue'],'w');
-			 fprintf(fid,'#!/bin/bash\n');
-			 fprintf(fid,'#$ -N %s\n',modelname);
-			 fprintf(fid,'#$ -q %s \n',cluster.queue);
-			 fprintf(fid,'#$ -pe one-node-mpi 2-64\n');
-			 fprintf(fid,'#$ -R y\n');
-			 fprintf(fid,'#$ -m beas\n');
-			 fprintf(fid,'#$ -o %s.outlog \n',modelname);
-			 fprintf(fid,'#$ -e %s.errlog \n\n',modelname);
-			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
-			 fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
-			 fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,modelname);
-			 fprintf(fid,'mpiexec -np %i %s/kriging.exe %s %s\n',cluster.np,cluster.codepath,[cluster.executionpath '/' modelname],modelname);
-			 if ~io_gather, %concatenate the output files:
-				 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-			 end
-			 fclose(fid);
-		 end
-		 %}}}
-		 function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
+			%write queuing script 
+			fid=fopen([modelname '.queue'],'w');
+			fprintf(fid,'#!/bin/bash\n');
+			fprintf(fid,'#$ -N %s\n',modelname);
+			fprintf(fid,'#$ -q %s \n',cluster.queue);
+			fprintf(fid,'#$ -pe one-node-mpi 2-64\n');
+			fprintf(fid,'#$ -R y\n');
+			fprintf(fid,'#$ -m beas\n');
+			fprintf(fid,'#$ -o %s.outlog \n',modelname);
+			fprintf(fid,'#$ -e %s.errlog \n\n',modelname);
+			fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+			fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
+			fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,modelname);
+			fprintf(fid,'mpiexec -np %i %s/kriging.exe %s %s\n',cluster.np,cluster.codepath,[cluster.executionpath '/' modelname],modelname);
+			if ~io_gather, %concatenate the output files:
+				fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+			end
+			fclose(fid);
+		end
+		%}}}
+		function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
 
-			 if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
-			 if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
+			if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
+			if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
 
-			 %write queuing script 
-			 fid=fopen([modelname '.queue'],'w');
-			 if 0
-				 fprintf(fid,'#!/bin/bash\n');
-				 fprintf(fid,'#$ -N %s\n',modelname);
-				 fprintf(fid,'#$ -q %s \n',cluster.queue);
-				 fprintf(fid,'#$ -pe one-node-mpi 2-64\n');
-				 fprintf(fid,'#$ -R y\n');
-				 %fprintf(fid,'#$ -m beas\n');
-				 fprintf(fid,'#$ -o %s.outlog \n',modelname);
-				 fprintf(fid,'#$ -e %s.errlog \n\n',modelname);
-			 else % FIXME : This script for SIMBA-Kopri 
-				 fprintf(fid,'#!/bin/bash\n');
-				 %fprintf(fid,'#PBS -q workq\n');
-				 fprintf(fid,'#PBS -N %s\n',modelname);
-				 %fprintf(fid,'#PBS -l nodes=simba01:ppn=%d\n',...
-				%	 ceil(cluster.np/cluster.cpuspernode), cluster.np);
-				 fprintf(fid,'#PBS -l nodes=simba01:ppn=%d\n',...
+			%write queuing script 
+			fid=fopen([modelname '.queue'],'w');
+			if 0
+				fprintf(fid,'#!/bin/bash\n');
+				fprintf(fid,'#$ -N %s\n',modelname);
+				fprintf(fid,'#$ -q %s \n',cluster.queue);
+				fprintf(fid,'#$ -pe one-node-mpi 2-64\n');
+				fprintf(fid,'#$ -R y\n');
+				%fprintf(fid,'#$ -m beas\n');
+				fprintf(fid,'#$ -o %s.outlog \n',modelname);
+				fprintf(fid,'#$ -e %s.errlog \n\n',modelname);
+			else % FIXME : This script for SIMBA-Kopri 
+				fprintf(fid,'#!/bin/bash\n');
+				%fprintf(fid,'#PBS -q workq\n');
+				fprintf(fid,'#PBS -N %s\n',modelname);
+				%fprintf(fid,'#PBS -l nodes=simba01:ppn=%d\n',...
+				%	ceil(cluster.np/cluster.cpuspernode), cluster.np);
+				fprintf(fid,'#PBS -l nodes=simba01:ppn=%d\n',...
 					cluster.np);
-				 fprintf(fid,'#PBS -o %s.outlog \n',modelname);
-				 fprintf(fid,'#PBS -e %s.errlog \n\n',modelname);
-				 fprintf(fid,'\n');
-			 end
-			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
-			 fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
-			 fprintf(fid,'\n');
-			 fprintf(fid,'module load intel18/impi-18\n');
-			 fprintf(fid,'\n');
-			 fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
-			 fprintf(fid,'mpirun -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
-			 if ~io_gather, %concatenate the output files:
-				 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-			 end
-			 fclose(fid);
+				fprintf(fid,'#PBS -o %s.outlog \n',modelname);
+				fprintf(fid,'#PBS -e %s.errlog \n\n',modelname);
+				fprintf(fid,'\n');
+			end
+			fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+			fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
+			fprintf(fid,'\n');
+			fprintf(fid,'module load intel18/impi-18\n');
+			fprintf(fid,'\n');
+			fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
+			fprintf(fid,'mpirun -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
+			if ~io_gather, %concatenate the output files:
+				fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+			end
+			fclose(fid);
 
-			 %in interactive mode, create a run file, and errlog and outlog file
-			 if cluster.interactive,
-				 fid=fopen([modelname '.run'],'w');
-				 fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
-				 if ~io_gather, %concatenate the output files:
-					 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-				 end
-				 fclose(fid);
-				 fid=fopen([modelname '.errlog'],'w');
-				 fclose(fid);
-				 fid=fopen([modelname '.outlog'],'w');
-				 fclose(fid);
-			 end
-		 end %}}}
-		 function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
+			%in interactive mode, create a run file, and errlog and outlog file
+			if cluster.interactive,
+				fid=fopen([modelname '.run'],'w');
+				fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
+				if ~io_gather, %concatenate the output files:
+					fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+				end
+				fclose(fid);
+				fid=fopen([modelname '.errlog'],'w');
+				fclose(fid);
+				fid=fopen([modelname '.outlog'],'w');
+				fclose(fid);
+			end
+		end %}}}
+		function UploadQueueJob(cluster,modelname,dirname,filelist) % {{{
 
-			 %compress the files into one zip.
-			 compressstring=['tar -zcf ' dirname '.tar.gz '];
-			 for i=1:numel(filelist),
-				 compressstring = [compressstring ' ' filelist{i}];
-			 end
-			 if cluster.interactive,
-				 compressstring = [compressstring ' ' modelname '.errlog ' modelname '.outlog '];
-			 end
-			 system(compressstring);
+			%compress the files into one zip.
+			compressstring=['tar -zcf ' dirname '.tar.gz '];
+			for i=1:numel(filelist),
+				compressstring = [compressstring ' ' filelist{i}];
+			end
+			if cluster.interactive,
+				compressstring = [compressstring ' ' modelname '.errlog ' modelname '.outlog '];
+			end
+			system(compressstring);
 
-			 disp('uploading input file and queueing script');
-			 issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
+			disp('uploading input file and queueing script');
+			issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
 
-		 end %}}}
-		 function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch)% {{{
+		end %}}}
+		function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch) % {{{
 
-			 disp('launching solution sequence on remote cluster');
-			 if ~isempty(restart)
-				 launchcommand=['cd ' cluster.executionpath ' && cd ' dirname ' && hostname && qsub ' modelname '.queue '];
-			 else
-				 launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
-					 ' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && hostname && qsub ' modelname '.queue '];
-			 end
-			 issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
-		 end %}}}
-		 function Download(cluster,dirname,filelist)% {{{
+			disp('launching solution sequence on remote cluster');
+			if ~isempty(restart)
+				launchcommand=['cd ' cluster.executionpath ' && cd ' dirname ' && hostname && qsub ' modelname '.queue '];
+			else
+				launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
+					' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && hostname && qsub ' modelname '.queue '];
+			end
+			issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
+		end %}}}
+		function Download(cluster,dirname,filelist) % {{{
 
-			 %copy files from cluster to current directory
-			 directory=[cluster.executionpath '/' dirname '/'];
-			 issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
+			%copy files from cluster to current directory
+			directory=[cluster.executionpath '/' dirname '/'];
+			issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
 
-		 end %}}}
+		end %}}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/clusters/lonestar.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/lonestar.m	(revision 26329)
+++ /issm/trunk-jpl/src/m/classes/clusters/lonestar.m	(revision 26330)
@@ -1,3 +1,3 @@
-%LONESTAR class definition
+%LONESTAR cluster class definition
 %
 %   Usage:
@@ -7,194 +7,194 @@
 
 classdef lonestar
-    properties (SetAccess=public)  
-		 % {{{
-		 name          = 'ls5.tacc.utexas.edu'
-		 login         = '';
-		 modules        = {'intel/18.0.2' 'gsl'};
-		 numnodes      = 1;
-		 cpuspernode   = 24;
-		 port          = 1099;
-		 queue         = 'normal';
-		 codepath      = '';
-		 executionpath = '';
-		 interactive   = 0;
-		 time          = 48*60*60;
-		 email         = '';
-	 end
-	 %}}}
-	 methods
-		 function cluster=lonestar(varargin) % {{{
-
-			 %initialize cluster using default settings if provided
-			 if (exist('lonestar_settings')==2), lonestar_settings; end
-
-			 %use provided options to change fields
-			 cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
-
-		 end
-		 %}}}
-		 function disp(cluster) % {{{
-			 %  display the object
-			 disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
-			 disp(sprintf('    name: %s',cluster.name));
-			 disp(sprintf('    login: %s',cluster.login));
-			 disp(sprintf('    modules: %s',strjoin(cluster.modules,', ')));
-			 disp(sprintf('    port: %i',cluster.port));
-			 disp(sprintf('    numnodes: %i',cluster.numnodes));
-			 disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
-			 disp(sprintf('    np: %i',cluster.np));
-			 disp(sprintf('    queue: %s',cluster.queue));
-			 disp(sprintf('    codepath: %s',cluster.codepath));
-			 disp(sprintf('    executionpath: %s',cluster.executionpath));
-			 disp(sprintf('    interactive: %i',cluster.interactive));
-			 disp(sprintf('    time: %i',cluster.time));
-			 disp(sprintf('    email: %s',cluster.email));
-		 end
-		 %}}}
-		 function numprocs=np(cluster) % {{{
-			 %compute number of processors
-			 numprocs=cluster.numnodes*cluster.cpuspernode;
-		 end
-		 %}}}
-		 function md = checkconsistency(cluster,md,solution,analyses) % {{{
-
-			 available_queues={'normal','development'};
-			 queue_requirements_time=[48*60*60 2*60*60];
-			 queue_requirements_np=[4104 264];
-
-			 QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.queue,cluster.np,cluster.time)
-
-			 %Miscelaneous
-			 if isempty(cluster.login), md = checkmessage(md,'login empty'); end
-			 if isempty(cluster.codepath), md = checkmessage(md,'codepath empty'); end
-			 if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
-		 end
-		 %}}}
-		 function BuildKrigingQueueScript(cluster,modelname,solution,io_gather,isvalgrind,isgprof) % {{{
-
-			 if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
-			 if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
-
-			 %write queuing script 
-			 fid=fopen([modelname '.queue'],'w');
-			 fprintf(fid,'#!/bin/bash\n');
-			 fprintf(fid,'#$ -N %s\n',modelname);
-			 fprintf(fid,'#$ -q %s \n',cluster.queue);
-			 fprintf(fid,'#$ -pe one-node-mpi 2-64\n');
-			 fprintf(fid,'#$ -R y\n');
-			 fprintf(fid,'#$ -m beas\n');
-			 fprintf(fid,'#$ -o %s.outlog \n',modelname);
-			 fprintf(fid,'#$ -e %s.errlog \n\n',modelname);
-			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
-			 fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
-			 fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,modelname);
-			 fprintf(fid,'mpiexec -np %i %s/kriging.exe %s %s\n',cluster.np,cluster.codepath,[cluster.executionpath '/' modelname],modelname);
-			 if ~io_gather, %concatenate the output files:
-				 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-			 end
-			 fclose(fid);
-		 end
-		 %}}}
-		 function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
-
-			 if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
-			 if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
-
-			 executable='issm.exe';
-			 if isdakota,
-				 version=IssmConfig('_DAKOTA_VERSION_'); version=str2num(version(1:3));
-				 if (version>=6),
-					 executable='issm_dakota.exe';
-				 end
-			 end
-			 if isoceancoupling,
-				 executable='issm_ocean.exe';
-			 end
-
-			 %write queuing script 
-			 fid=fopen([modelname '.queue'],'w');
-
-			 fprintf(fid,'#!/bin/bash\n');
-			 fprintf(fid,'#SBATCH -J %s \n',modelname);
-			 fprintf(fid,'#SBATCH -p %s \n',cluster.queue);
-			 fprintf(fid,'#SBATCH -o %s.outlog \n',modelname);
-			 fprintf(fid,'#SBATCH -e %s.errlog \n',modelname);
-			 fprintf(fid,'#SBATCH -n %i \n',cluster.numnodes*max(cluster.np/cluster.numnodes,24));
-			 fprintf(fid,'#SBATCH -N %i \n',cluster.numnodes);
-			 fprintf(fid,'#SBATCH -t %02i:%02i:00 \n\n',floor(cluster.time/3600),floor(mod(cluster.time,3600)/60));
-			 for i=1:numel(cluster.modules),
-				 fprintf(fid,['module load ' cluster.modules{i} '\n']);
-			 end
-
-			 if isdakota,
-				 fprintf(fid,'export KMP_AFFINITY="granularity=fine,compact,verbose" \n\n');
-			 end
-
-			 if length(find(cluster.email=='@'))>0
-				 fprintf(fid,'#SBATCH --mail-user=%s \n',cluster.email);
-				 fprintf(fid,'#SBATCH --mail-type=end \n\n');
-
-				 %fprintf(fid,'ssh login1 "mail -s ''SLURM Jobid=${SLURM_JOBID} Name=${SLURM_JOB_NAME} Began on Lonestar 5.'' %s <<< ''Job Started'' " \n\n',cluster.email);
-			 end
-
-			 fprintf(fid,'export PATH="$PATH:."\n\n');
-			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
-			 fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
-			 fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
-			 fprintf(fid,'ibrun -np %i %s/%s %s %s %s\n',cluster.np,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
-			 if ~io_gather, %concatenate the output files:
-				 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-			 end
-
-			 fclose(fid);
-
-			 %in interactive mode, create a run file, and errlog and outlog file
-			 if cluster.interactive,
-				 fid=fopen([modelname '.run'],'w');
-				 fprintf(fid,'ibrun -np %i %s/%s %s %s %s\n',cluster.np,executable,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
-				 if ~io_gather, %concatenate the output files:
-					 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-				 end
-				 fclose(fid);
-				 fid=fopen([modelname '.errlog'],'w');
-				 fclose(fid);
-				 fid=fopen([modelname '.outlog'],'w');
-				 fclose(fid);
-			 end
-		 end %}}}
-		 function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
-
-			 %compress the files into one zip.
-			 compressstring=['tar -zcf ' dirname '.tar.gz '];
-			 for i=1:numel(filelist),
-				 compressstring = [compressstring ' ' filelist{i}];
-			 end
-			 if cluster.interactive,
-				 compressstring = [compressstring ' ' modelname '.errlog ' modelname '.outlog '];
-			 end
-			 system(compressstring);
-
-			 disp('uploading input file and queueing script');
-			 issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
-
-		 end %}}}
-		 function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch)% {{{
-
-			 disp('launching solution sequence on remote cluster');
-			 if ~isempty(restart)
-				 launchcommand=['cd ' cluster.executionpath ' && cd ' dirname ' && hostname && sbatch ' modelname '.queue '];
-			 else
-				 launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
-					 ' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && hostname && sbatch ' modelname '.queue '];
-			 end
-			 issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
-		 end %}}}
-		 function Download(cluster,dirname,filelist)% {{{
-
-			 %copy files from cluster to current directory
-			 directory=[cluster.executionpath '/' dirname '/'];
-			 issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
-
-		 end %}}}
+	properties (SetAccess=public)
+		% {{{
+		name          = 'ls5.tacc.utexas.edu'
+		login         = '';
+		modules        = {'intel/18.0.2' 'gsl'};
+		numnodes      = 1;
+		cpuspernode   = 24;
+		port          = 1099;
+		queue         = 'normal';
+		codepath      = '';
+		executionpath = '';
+		interactive   = 0;
+		time          = 48*60*60;
+		email         = '';
+	end
+	%}}}
+	methods
+		function cluster=lonestar(varargin) % {{{
+
+			%initialize cluster using default settings if provided
+			if (exist('lonestar_settings')==2), lonestar_settings; end
+
+			%use provided options to change fields
+			cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
+
+		end
+		%}}}
+		function disp(cluster) % {{{
+			%  display the object
+			disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
+			disp(sprintf('    name: %s',cluster.name));
+			disp(sprintf('    login: %s',cluster.login));
+			disp(sprintf('    modules: %s',strjoin(cluster.modules,', ')));
+			disp(sprintf('    port: %i',cluster.port));
+			disp(sprintf('    numnodes: %i',cluster.numnodes));
+			disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
+			disp(sprintf('    np: %i',cluster.np));
+			disp(sprintf('    queue: %s',cluster.queue));
+			disp(sprintf('    codepath: %s',cluster.codepath));
+			disp(sprintf('    executionpath: %s',cluster.executionpath));
+			disp(sprintf('    interactive: %i',cluster.interactive));
+			disp(sprintf('    time: %i',cluster.time));
+			disp(sprintf('    email: %s',cluster.email));
+		end
+		%}}}
+		function numprocs=nprocs(cluster) % {{{
+			%compute number of processors
+			numprocs=cluster.numnodes*cluster.cpuspernode;
+		end
+		%}}}
+		function md = checkconsistency(cluster,md,solution,analyses) % {{{
+
+			available_queues={'normal','development'};
+			queue_requirements_time=[48*60*60 2*60*60];
+			queue_requirements_np=[4104 264];
+
+			QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.queue,cluster.np,cluster.time)
+
+			%Miscelaneous
+			if isempty(cluster.login), md = checkmessage(md,'login empty'); end
+			if isempty(cluster.codepath), md = checkmessage(md,'codepath empty'); end
+			if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
+		end
+		%}}}
+		function BuildKrigingQueueScript(cluster,modelname,solution,io_gather,isvalgrind,isgprof) % {{{
+
+			if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
+			if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
+
+			%write queuing script 
+			fid=fopen([modelname '.queue'],'w');
+			fprintf(fid,'#!/bin/bash\n');
+			fprintf(fid,'#$ -N %s\n',modelname);
+			fprintf(fid,'#$ -q %s \n',cluster.queue);
+			fprintf(fid,'#$ -pe one-node-mpi 2-64\n');
+			fprintf(fid,'#$ -R y\n');
+			fprintf(fid,'#$ -m beas\n');
+			fprintf(fid,'#$ -o %s.outlog \n',modelname);
+			fprintf(fid,'#$ -e %s.errlog \n\n',modelname);
+			fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+			fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
+			fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,modelname);
+			fprintf(fid,'mpiexec -np %i %s/kriging.exe %s %s\n',cluster.np,cluster.codepath,[cluster.executionpath '/' modelname],modelname);
+			if ~io_gather, %concatenate the output files:
+				fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+			end
+			fclose(fid);
+		end
+		%}}}
+		function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
+
+			if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
+			if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
+
+			executable='issm.exe';
+			if isdakota,
+				version=IssmConfig('_DAKOTA_VERSION_'); version=str2num(version(1:3));
+				if (version>=6),
+					executable='issm_dakota.exe';
+				end
+			end
+			if isoceancoupling,
+				executable='issm_ocean.exe';
+			end
+
+			%write queuing script 
+			fid=fopen([modelname '.queue'],'w');
+
+			fprintf(fid,'#!/bin/bash\n');
+			fprintf(fid,'#SBATCH -J %s \n',modelname);
+			fprintf(fid,'#SBATCH -p %s \n',cluster.queue);
+			fprintf(fid,'#SBATCH -o %s.outlog \n',modelname);
+			fprintf(fid,'#SBATCH -e %s.errlog \n',modelname);
+			fprintf(fid,'#SBATCH -n %i \n',cluster.numnodes*max(cluster.np/cluster.numnodes,24));
+			fprintf(fid,'#SBATCH -N %i \n',cluster.numnodes);
+			fprintf(fid,'#SBATCH -t %02i:%02i:00 \n\n',floor(cluster.time/3600),floor(mod(cluster.time,3600)/60));
+			for i=1:numel(cluster.modules),
+				fprintf(fid,['module load ' cluster.modules{i} '\n']);
+			end
+
+			if isdakota,
+				fprintf(fid,'export KMP_AFFINITY="granularity=fine,compact,verbose" \n\n');
+			end
+
+			if length(find(cluster.email=='@'))>0
+				fprintf(fid,'#SBATCH --mail-user=%s \n',cluster.email);
+				fprintf(fid,'#SBATCH --mail-type=end \n\n');
+
+				%fprintf(fid,'ssh login1 "mail -s ''SLURM Jobid=${SLURM_JOBID} Name=${SLURM_JOB_NAME} Began on Lonestar 5.'' %s <<< ''Job Started'' " \n\n',cluster.email);
+			end
+
+			fprintf(fid,'export PATH="$PATH:."\n\n');
+			fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+			fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
+			fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
+			fprintf(fid,'ibrun -np %i %s/%s %s %s %s\n',cluster.np,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
+			if ~io_gather, %concatenate the output files:
+				fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+			end
+
+			fclose(fid);
+
+			%in interactive mode, create a run file, and errlog and outlog file
+			if cluster.interactive,
+				fid=fopen([modelname '.run'],'w');
+				fprintf(fid,'ibrun -np %i %s/%s %s %s %s\n',cluster.np,executable,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
+				if ~io_gather, %concatenate the output files:
+					fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+				end
+				fclose(fid);
+				fid=fopen([modelname '.errlog'],'w');
+				fclose(fid);
+				fid=fopen([modelname '.outlog'],'w');
+				fclose(fid);
+			end
+		end %}}}
+		function UploadQueueJob(cluster,modelname,dirname,filelist) % {{{
+
+			%compress the files into one zip.
+			compressstring=['tar -zcf ' dirname '.tar.gz '];
+			for i=1:numel(filelist),
+				compressstring = [compressstring ' ' filelist{i}];
+			end
+			if cluster.interactive,
+				compressstring = [compressstring ' ' modelname '.errlog ' modelname '.outlog '];
+			end
+			system(compressstring);
+
+			disp('uploading input file and queueing script');
+			issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
+
+		end %}}}
+		function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch) % {{{
+
+			disp('launching solution sequence on remote cluster');
+			if ~isempty(restart)
+				launchcommand=['cd ' cluster.executionpath ' && cd ' dirname ' && hostname && sbatch ' modelname '.queue '];
+			else
+				launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
+					' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && hostname && sbatch ' modelname '.queue '];
+			end
+			issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
+		end %}}}
+		function Download(cluster,dirname,filelist) % {{{
+
+			%copy files from cluster to current directory
+			directory=[cluster.executionpath '/' dirname '/'];
+			issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
+
+		end %}}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/clusters/maui.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/maui.m	(revision 26329)
+++ /issm/trunk-jpl/src/m/classes/clusters/maui.m	(revision 26330)
@@ -1,3 +1,3 @@
-%MAUI class definition
+%MAUI cluster class definition
 %
 %   Usage:
@@ -7,146 +7,146 @@
 
 classdef maui
-    properties (SetAccess=public)  
-		 % {{{
-		 name           = 'maui'
-		 login          = '';
-		 numnodes       = 1;
-		 cpuspernode    = 8;
-		 port           = 0;
-		 projectaccount = '';
-		 partition      = 'nesi_research';
-		 codepath       = '';
-		 executionpath  = '';
-		 interactive    = 0;
-		 time           = 24*60;
-		 memory         = 2;
-	 end
-	 %}}}
-	 methods
-		 function cluster=maui(varargin) % {{{
+	properties (SetAccess=public)
+		% {{{
+		name           = 'maui'
+		login          = '';
+		numnodes       = 1;
+		cpuspernode    = 8;
+		port           = 0;
+		projectaccount = '';
+		partition      = 'nesi_research';
+		codepath       = '';
+		executionpath  = '';
+		interactive    = 0;
+		time           = 24*60;
+		memory         = 2;
+	end
+	%}}}
+	methods
+		function cluster=maui(varargin) % {{{
 
-			 %initialize cluster using default settings if provided
-			 if (exist('maui_settings')==2), maui_settings; end
+			%initialize cluster using default settings if provided
+			if (exist('maui_settings')==2), maui_settings; end
 
-			 %use provided options to change fields
-			 cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
-		 end
-		 %}}}
-		 function disp(cluster) % {{{
-			 %  display the object
-			 disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
-			 disp(sprintf('    name: %s',cluster.name));
-			 disp(sprintf('    login: %s',cluster.login));
-			 disp(sprintf('    port: %i',cluster.port));
-			 disp(sprintf('    numnodes: %i',cluster.numnodes));
-			 disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
-			 disp(sprintf('    np: %i',cluster.cpuspernode*cluster.numnodes));
-			 disp(sprintf('    projectaccount: %s',cluster.projectaccount));
-			 disp(sprintf('    partition: %s',cluster.partition));
-			 disp(sprintf('    codepath: %s',cluster.codepath));
-			 disp(sprintf('    executionpath: %s',cluster.executionpath));
-			 disp(sprintf('    interactive: %i',cluster.interactive));
-			 disp(sprintf('    time: %i',cluster.time));
-			 disp(sprintf('    memory: %i',cluster.memory));
-		 end
-		 %}}}
-		 function numprocs=np(cluster) % {{{
-			 %compute number of processors
-			 numprocs=cluster.numnodes*cluster.cpuspernode;
-		 end
-		 %}}}
-		 function md = checkconsistency(cluster,md,solution,analyses) % {{{
+			%use provided options to change fields
+			cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
+		end
+		%}}}
+		function disp(cluster) % {{{
+			%  display the object
+			disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
+			disp(sprintf('    name: %s',cluster.name));
+			disp(sprintf('    login: %s',cluster.login));
+			disp(sprintf('    port: %i',cluster.port));
+			disp(sprintf('    numnodes: %i',cluster.numnodes));
+			disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
+			disp(sprintf('    np: %i',cluster.cpuspernode*cluster.numnodes));
+			disp(sprintf('    projectaccount: %s',cluster.projectaccount));
+			disp(sprintf('    partition: %s',cluster.partition));
+			disp(sprintf('    codepath: %s',cluster.codepath));
+			disp(sprintf('    executionpath: %s',cluster.executionpath));
+			disp(sprintf('    interactive: %i',cluster.interactive));
+			disp(sprintf('    time: %i',cluster.time));
+			disp(sprintf('    memory: %i',cluster.memory));
+		end
+		%}}}
+		function numprocs=nprocs(cluster) % {{{
+			%compute number of processors
+			numprocs=cluster.numnodes*cluster.cpuspernode;
+		end
+		%}}}
+		function md = checkconsistency(cluster,md,solution,analyses) % {{{
 
-			 available_partitions={'nesi_research'}
-			 partition_requirements_time=[24*60];
-			 partition_requirements_np=[80];
+			available_partitions={'nesi_research'}
+			partition_requirements_time=[24*60];
+			partition_requirements_np=[80];
 
-			 QueueRequirements(available_partitions,partition_requirements_time,partition_requirements_np,cluster.partition,cluster.np,1)
+			QueueRequirements(available_partitions,partition_requirements_time,partition_requirements_np,cluster.partition,cluster.np,1)
 
-			 %Miscelaneous
-			 if isempty(cluster.login), md = checkmessage(md,'login empty'); end
-			 if isempty(cluster.codepath), md = checkmessage(md,'codepath empty'); end
-			 if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
-		 end
-		 %}}}
-		 function BuildKrigingQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
-			 error('not implemented yet');
-		 end
-		 %}}}
-		 function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
+			%Miscelaneous
+			if isempty(cluster.login), md = checkmessage(md,'login empty'); end
+			if isempty(cluster.codepath), md = checkmessage(md,'codepath empty'); end
+			if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
+		end
+		%}}}
+		function BuildKrigingQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
+			error('not implemented yet');
+		end
+		%}}}
+		function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
 
-			 if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
-			 if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
+			if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
+			if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
 
-			 %write queuing script 
-			 fid=fopen([modelname '.queue'],'w');
-			 fprintf(fid,'#!/bin/bash\n');
-			 fprintf(fid,'#SBATCH --job-name=%s\n',modelname);
-			 fprintf(fid,'#SBATCH --account=%s \n',cluster.projectaccount);
-			 fprintf(fid,'#SBATCH --partition=%s \n',cluster.partition);
-			 fprintf(fid,'#SBATCH --ntasks=%i  \n',cluster.numnodes);
-			 fprintf(fid,'#SBATCH --cpus-per-task=%i\n',cluster.cpuspernode);
-			 fprintf(fid,'#SBATCH --time=%i\n',cluster.time); %walltime is in minutes
-			 fprintf(fid,'#SBATCH --mem-per-cpu=%igb\n',cluster.memory);
-			 fprintf(fid,'#SBATCH -o %s.outlog \n',modelname);
-			 fprintf(fid,'#SBATCH -e %s.errlog \n\n',modelname);
-			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
-			 fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
-			 fprintf(fid,'module swap PrgEnv-cray PrgEnv-intel\n');
-			 fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
-			 fprintf(fid,'srun -n %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
-			 if ~io_gather, %concatenate the output files:
-				 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-			 end
-			 fclose(fid);
+			%write queuing script 
+			fid=fopen([modelname '.queue'],'w');
+			fprintf(fid,'#!/bin/bash\n');
+			fprintf(fid,'#SBATCH --job-name=%s\n',modelname);
+			fprintf(fid,'#SBATCH --account=%s \n',cluster.projectaccount);
+			fprintf(fid,'#SBATCH --partition=%s \n',cluster.partition);
+			fprintf(fid,'#SBATCH --ntasks=%i  \n',cluster.numnodes);
+			fprintf(fid,'#SBATCH --cpus-per-task=%i\n',cluster.cpuspernode);
+			fprintf(fid,'#SBATCH --time=%i\n',cluster.time); %walltime is in minutes
+			fprintf(fid,'#SBATCH --mem-per-cpu=%igb\n',cluster.memory);
+			fprintf(fid,'#SBATCH -o %s.outlog \n',modelname);
+			fprintf(fid,'#SBATCH -e %s.errlog \n\n',modelname);
+			fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+			fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
+			fprintf(fid,'module swap PrgEnv-cray PrgEnv-intel\n');
+			fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
+			fprintf(fid,'srun -n %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
+			if ~io_gather, %concatenate the output files:
+				fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+			end
+			fclose(fid);
 
-			 %in interactive mode, create a run file, and errlog and outlog file
-			 if cluster.interactive,
-				 fid=fopen([modelname '.run'],'w');
-				 fprintf(fid,'mpiexec -n %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
-				 if ~io_gather, %concatenate the output files:
-					 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-				 end
-				 fclose(fid);
-				 fid=fopen([modelname '.errlog'],'w');
-				 fclose(fid);
-				 fid=fopen([modelname '.outlog'],'w');
-				 fclose(fid);
-			 end
-		 end %}}}
-		 function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
+			%in interactive mode, create a run file, and errlog and outlog file
+			if cluster.interactive,
+				fid=fopen([modelname '.run'],'w');
+				fprintf(fid,'mpiexec -n %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
+				if ~io_gather, %concatenate the output files:
+					fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+				end
+				fclose(fid);
+				fid=fopen([modelname '.errlog'],'w');
+				fclose(fid);
+				fid=fopen([modelname '.outlog'],'w');
+				fclose(fid);
+			end
+		end %}}}
+		function UploadQueueJob(cluster,modelname,dirname,filelist) % {{{
 
-			 %compress the files into one zip.
-			 compressstring=['tar -zcf ' dirname '.tar.gz '];
-			 for i=1:numel(filelist),
-				 compressstring = [compressstring ' ' filelist{i}];
-			 end
-			 if cluster.interactive,
-				 compressstring = [compressstring ' ' modelname '.errlog ' modelname '.outlog '];
-			 end
-			 system(compressstring);
+			%compress the files into one zip.
+			compressstring=['tar -zcf ' dirname '.tar.gz '];
+			for i=1:numel(filelist),
+				compressstring = [compressstring ' ' filelist{i}];
+			end
+			if cluster.interactive,
+				compressstring = [compressstring ' ' modelname '.errlog ' modelname '.outlog '];
+			end
+			system(compressstring);
 
-			 disp('uploading input file and queueing script');
-			 issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
+			disp('uploading input file and queueing script');
+			issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
 
-		 end %}}}
-		 function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch)% {{{
+		end %}}}
+		function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch) % {{{
 
-			 disp('launching solution sequence on remote cluster');
-			 if ~isempty(restart)
-				 launchcommand=['cd ' cluster.executionpath ' && cd ' dirname ' && hostname && sbatch ' modelname '.queue '];
-			 else
-				 launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
-					 ' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && hostname && sbatch ' modelname '.queue '];
-			 end
-			 issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
-		 end %}}}
-		 function Download(cluster,dirname,filelist)% {{{
+			disp('launching solution sequence on remote cluster');
+			if ~isempty(restart)
+				launchcommand=['cd ' cluster.executionpath ' && cd ' dirname ' && hostname && sbatch ' modelname '.queue '];
+			else
+				launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
+					' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && hostname && sbatch ' modelname '.queue '];
+			end
+			issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
+		end %}}}
+		function Download(cluster,dirname,filelist) % {{{
 
-			 %copy files from cluster to current directory
-			 directory=[cluster.executionpath '/' dirname '/'];
-			 issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
+			%copy files from cluster to current directory
+			directory=[cluster.executionpath '/' dirname '/'];
+			issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
 
-		 end %}}}
+		end %}}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/clusters/pfe.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/pfe.m	(revision 26329)
+++ /issm/trunk-jpl/src/m/classes/clusters/pfe.m	(revision 26330)
@@ -1,3 +1,3 @@
-%PFE class definition
+%PFE cluster class definition
 %
 %   Usage:
@@ -7,5 +7,5 @@
 
 classdef pfe
-	properties (SetAccess=public)  
+	properties (SetAccess=public)
 		% {{{
 		name           = 'pfe'
@@ -39,23 +39,29 @@
 		%}}}
 		function disp(cluster) % {{{
-			%  display the object
+			% TODO:
+			% - Correct formatting of modules and cluster.np
+			%
+
+			% display the object
 			disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
-			disp(sprintf('    name: %s',cluster.name));
-			disp(sprintf('    login: %s',cluster.login));
-			modules=''; for i=1:length(cluster.modules), modules=[modules cluster.modules{i} ',']; end; modules=modules(1:end-1); 
-			disp(sprintf('    modules: %s',modules));
-			disp(sprintf('    port: %i',cluster.port));
-			disp(sprintf('    numnodes: %i',cluster.numnodes));
-			disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
-			disp(sprintf('    np: %i',cluster.cpuspernode*cluster.numnodes));
-			disp(sprintf('    queue: %s',cluster.queue));
-			disp(sprintf('    time: %i',cluster.time));
-			disp(sprintf('    processor: %s',cluster.processor));
-			disp(sprintf('    srcpath: %s ($ISSM_DIR on pfe)',cluster.srcpath));
-			disp(sprintf('    codepath: %s  ($ISSM_DIR/bin on pfe)',cluster.codepath));
-			disp(sprintf('    executionpath: %s  (directory containing issm.exe on pfe)',cluster.executionpath));
-			disp(sprintf('    grouplist: %s',cluster.grouplist));
-			disp(sprintf('    interactive: %i',cluster.interactive));
-			disp(sprintf('    hyperthreading: %i',cluster.hyperthreading));
+			fielddisplay(cluster,'name','name of the cluster');
+			fielddisplay(cluster,'login','login');
+			modules=''; for i=1:length(cluster.modules), modules=[modules cluster.modules{i} ',']; end; modules=modules(1:end-1);
+			disp(sprintf('         modules                : %s',modules));
+			fielddisplay(cluster,'port','machine access port');
+			fielddisplay(cluster,'numnodes','number of nodes');
+			fielddisplay(cluster,'cpuspernode','number of CPUs per node');
+			disp(sprintf('         np:                    : %i             -- %s',cluster.np(),'number of CPUs'));
+			fielddisplay(cluster,'queue','name of the queue');
+			fielddisplay(cluster,'time','walltime requested');
+			fielddisplay(cluster,'processor','type of processor');
+			fielddisplay(cluster,'srcpath','$ISSM_DIR on pfe');
+			fielddisplay(cluster,'codepath','$ISSM_DIR/bin on pfe');
+			fielddisplay(cluster,'executionpath','directory containing issm.exe on pfe');
+			fielddisplay(cluster,'grouplist','grouplist');
+			fielddisplay(cluster,'interactive','');
+			fielddisplay(cluster,'bbftp','');
+			fielddisplay(cluster,'numstreams','');
+			fielddisplay(cluster,'hyperthreading','');
 		end
 		%}}}
@@ -128,5 +134,5 @@
 			
 			else
-				md = checkmessage(md,'unknown processor type, should be ''bro'' or ''has'' or ''ivy'' or ''san'' or ''cas_ait''');
+				md = checkmessage(md,'unknown processor type, should be ''bro'', ''has'', ''ivy'', ''san'', or ''cas_ait''');
 			end
 
@@ -137,4 +143,5 @@
 			if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
 			if isempty(cluster.grouplist), md = checkmessage(md,'grouplist empty'); end
+			if ~isempty(cluster.interactive), md = checkmessage(md,'interactive mode not implemented'); end
 
 		end
@@ -164,6 +171,6 @@
 			fprintf(fid,'#PBS -W group_list=%s\n',cluster.grouplist);
 			fprintf(fid,'#PBS -m e\n');
-			fprintf(fid,'#PBS -o %s.outlog \n',[cluster.executionpath '/' dirname '/' modelname]);
-			fprintf(fid,'#PBS -e %s.errlog \n\n',[cluster.executionpath '/' dirname '/' modelname]);
+			fprintf(fid,'#PBS -o %s/%s/%s.outlog \n',cluster.executionpath,dirname,modelname);
+			fprintf(fid,'#PBS -e %s/%s/%s.errlog \n\n',cluster.executionpath,dirname,modelname);
 			fprintf(fid,'. /usr/share/modules/init/bash\n\n');
 			for i=1:numel(cluster.modules), fprintf(fid,['module load ' cluster.modules{i} '\n']); end
@@ -176,5 +183,5 @@
 			fprintf(fid,'cd %s/%s/\n\n',cluster.executionpath,dirname);
 			if ~isvalgrind,
-				fprintf(fid,'/u/scicon/tools/bin/several_tries mpiexec -np %i /u/scicon/tools/bin/mbind.x -cs -n%i %s/%s %s %s %s\n',cluster.np,cluster.cpuspernode,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
+				fprintf(fid,'/u/scicon/tools/bin/several_tries mpiexec -np %i /u/scicon/tools/bin/mbind.x -cs -n%i %s/%s %s %s/%s %s\n',cluster.np,cluster.cpuspernode,cluster.codepath,executable,solution,cluster.executionpath,dirname,modelname);
 			else
 				fprintf(fid,'mpiexec -np %i valgrind --leak-check=full %s/%s %s %s %s\n',cluster.np,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
@@ -382,8 +389,8 @@
 
 		end %}}}
-		function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
+		function UploadQueueJob(cluster,modelname,dirname,filelist) % {{{
 
 			%compress the files into one zip.
-			compressstring=['tar -zcf ' dirname '.tar.gz '];
+			compressstring=['tar -zcf ' dirname '.tar.gz'];
 			for i=1:numel(filelist),
 				compressstring = [compressstring ' ' filelist{i}];
@@ -411,5 +418,5 @@
 		end
 		%}}}
-		function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch)% {{{
+		function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch) % {{{
 
 			%lauch command, to be executed via ssh
@@ -437,5 +444,5 @@
 		end
 		%}}}
-		function Download(cluster,dirname,filelist)% {{{
+		function Download(cluster,dirname,filelist) % {{{
 
 			%copy files from cluster to current directory
Index: /issm/trunk-jpl/src/m/classes/clusters/pfe.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/pfe.py	(revision 26329)
+++ /issm/trunk-jpl/src/m/classes/clusters/pfe.py	(revision 26330)
@@ -1,29 +1,29 @@
 import subprocess
+
 from fielddisplay import fielddisplay
-from pairoptions import pairoptions
-from issmssh import issmssh
+from IssmConfig import IssmConfig
 from issmscpin import issmscpin
 from issmscpout import issmscpout
-from QueueRequirements import QueueRequirements
-from IssmConfig import IssmConfig
+from issmssh import issmssh
+from pairoptions import pairoptions
 try:
     from pfe_settings import pfe_settings
 except ImportError:
     print('You need pfe_settings.py to proceed, check presence and sys.path')
-
+from QueueRequirements import QueueRequirements
 
 class pfe(object):
+    """PFE cluster class definition
+
+    Usage:
+        cluster = pfe()
+        cluster = pfe('np', 3)
+        cluster = pfe('np', 3, 'login', 'username')
     """
-    PFE cluster class definition
-
-       Usage:
-          cluster = pfe()
-          cluster = pfe('np', 3)
-          cluster = pfe('np', 3, 'login', 'username')
-    """
-
-    def __init__(self, *args):    # {{{
+
+    def __init__(self, *args):  # {{{
         self.name = 'pfe'
         self.login = ''
+        self.modules = ['comp-intel/2016.2.181', 'mpi-sgi/mpt']
         self.numnodes = 20
         self.cpuspernode = 8
@@ -31,9 +31,9 @@
         self.queue = 'long'
         self.time = 12 * 60
-        self.processor = 'bro'
+        self.processor = 'ivy'
         self.srcpath = ''
         self.codepath = ''
         self.executionpath = ''
-        self.grouplist = 's1010'
+        self.grouplist = 's1690'
         self.interactive = 0
         self.bbftp = 0
@@ -41,44 +41,54 @@
         self.hyperthreading = 0
 
-        #use provided options to change fields
+        # Use provided options to change fields
         options = pairoptions(*args)
 
-        #initialize cluster using user settings if provided
-        self = pfe_settings(self)
-        self.np = self.nprocs()
+        # Initialize cluster using user settings if provided
+        try:
+            self = pfe_settings(self)
+        except NameError:
+            print('pfe_settings.py not found, using default settings')
 
         #OK get other fields
         self = options.AssignObjectFields(self)
-
-    # }}}
-
-    def __repr__(self):    # {{{
-        #  display the object
-        s = "class pfe object:"
-        s = "%s\n%s" % (s, fielddisplay(self, 'name', 'name of the cluster'))
-        s = "%s\n%s" % (s, fielddisplay(self, 'login', 'login'))
-        s = "%s\n%s" % (s, fielddisplay(self, 'numnodes', 'number of nodes'))
-        s = "%s\n%s" % (s, fielddisplay(self, 'cpuspernode', 'number of nodes per CPUs'))
-        s = "%s\n%s" % (s, fielddisplay(self, 'np', 'number of CPUs'))
-        s = "%s\n%s" % (s, fielddisplay(self, 'port', 'machine access port'))
-        s = "%s\n%s" % (s, fielddisplay(self, 'queue', 'name of the queue'))
-        s = "%s\n%s" % (s, fielddisplay(self, 'time', 'walltime requested'))
-        s = "%s\n%s" % (s, fielddisplay(self, 'processor', 'type of processor'))
-        s = "%s\n%s" % (s, fielddisplay(self, 'codepath', '$ISSM_DIR on pfe'))
-        s = "%s\n%s" % (s, fielddisplay(self, 'executionpath', 'directory containing issm.exe on pfe'))
-        s = "%s\n%s" % (s, fielddisplay(self, 'grouplist', 'name of the group'))
-        s = "%s\n%s" % (s, fielddisplay(self, 'interactive', ''))
-        s = "%s\n%s" % (s, fielddisplay(self, 'bbftp', ''))
-        s = "%s\n%s" % (s, fielddisplay(self, 'numstreams', ''))
-        s = "%s\n%s" % (s, fielddisplay(self, 'hyperthreading', ''))
+    # }}}
+
+    def __repr__(self):  # {{{
+        # TODO:
+        # - Correct formatting of modules and cluster.np
+        #
+
+        # Display the object
+        s = 'class pfe object\n'
+        s += '{}\n'.format(fielddisplay(self, 'name', 'name of the cluster'))
+        s += '{}\n'.format(fielddisplay(self, 'login', 'login'))
+        modules = ''
+        for i in range(len(self.modules)):
+            modules += self.modules[i] + ','
+        modules = modules[:-1]
+        s += '         modules                : {}\n'.format(modules)
+        s += '{}\n'.format(fielddisplay(self, 'port', 'machine access port'))
+        s += '{}\n'.format(fielddisplay(self, 'numnodes', 'number of nodes'))
+        s += '{}\n'.format(fielddisplay(self, 'cpuspernode', 'number of CPUs per node'))
+        s += '         np:                    : {}             -- {}\n'.format(self.nprocs(), 'number of CPUs')
+        s += '{}\n'.format(fielddisplay(self, 'queue', 'name of the queue'))
+        s += '{}\n'.format(fielddisplay(self, 'time', 'walltime requested'))
+        s += '{}\n'.format(fielddisplay(self, 'processor', 'type of processor'))
+        s += '{}\n'.format(fielddisplay(self, 'srcpath', '$ISSM_DIR on pfe'))
+        s += '{}\n'.format(fielddisplay(self, 'codepath', '$ISSM_DIR/bin on pfe'))
+        s += '{}\n'.format(fielddisplay(self, 'executionpath', 'directory containing issm.exe on pfe'))
+        s += '{}\n'.format(fielddisplay(self, 'grouplist', 'grouplist'))
+        s += '{}\n'.format(fielddisplay(self, 'interactive', ''))
+        s += '{}\n'.format(fielddisplay(self, 'bbftp', ''))
+        s += '{}\n'.format(fielddisplay(self, 'numstreams', ''))
+        s += '{}\n'.format(fielddisplay(self, 'hyperthreading', ''))
         return s
     # }}}
 
-    def nprocs(self):    # {{{
-        self.np = self.numnodes * self.cpuspernode
-        return self.np
-    # }}}
-
-    def checkconsistency(self, md, solution, analyses):    # {{{
+    def nprocs(self):  # {{{
+        return self.numnodes * self.cpuspernode
+    # }}}
+
+    def checkconsistency(self, md, solution, analyses):  # {{{
         queuedict = {'long': [5 * 24 * 60, 2048],
                      'normal': [8 * 60, 2048],
@@ -87,32 +97,30 @@
         QueueRequirements(queuedict, self.queue, self.nprocs(), self.time)
 
-        #now, check cluster.cpuspernode according to processor type
-        if self.processor == 'har' or self.processor == 'neh':
+        # Now, check cluster.cpuspernode according to processor type
+        if self.processor == 'ivy':
             if self.hyperthreading:
-                if not 0 < self.cpuspernode < 17:
+                if self.cpuspernode > 40 or self.cpuspernode < 1:
+                    md = md.checkmessage('cpuspernode should be between 1 and 40 for ''ivy'' processors in hyperthreading mode')
+            else:
+                if self.cpuspernode > 20 or self.cpuspernode < 1:
+                    md = md.checkmessage('cpuspernode should be between 1 and 20 for ''ivy'' processors')
+        elif self.processor == 'bro':
+            if self.hyperthreading:
+                if self.cpuspernode > 56 or self.cpuspernode < 1:
+                    md = md.checkmessage('cpuspernode should be between 1 and 56 for ''bro'' processors in hyperthreading mode')
+            else:
+                if self.cpuspernode > 28 or self.cpuspernode < 1:
+                    md = md.checkmessage('cpuspernode should be between 1 and 28 for ''bro'' processors')
+        elif self.processor == 'har' or self.processor == 'neh':
+            if self.hyperthreading:
+                if self.cpuspernode > 16 or self.cpuspernode < 1:
                     md = md.checkmessage('cpuspernode should be between 1 and 16 for ''neh'' and ''har'' processors in hyperthreading mode')
             else:
-                if not 0 < self.cpuspernode < 9:
+                if self.cpuspernode > 8 or self.cpuspernode < 1:
                     md = md.checkmessage('cpuspernode should be between 1 and 8 for ''neh'' and ''har'' processors')
-
-        elif self.processor == 'bro':
-            if self.hyperthreading:
-                if not 0 < self.cpuspernode < 57:
-                    md = md.checkmessage('cpuspernode should be between 1 and 56 for ''bro'' processors in hyperthreading mode')
-            else:
-                if not 0 < self.cpuspernode < 29:
-                    md = md.checkmessage('cpuspernode should be between 1 and 28 for ''bro'' processors')
-
-        elif self.processor == 'ivy':
-            if self.hyperthreading:
-                if not 0 < self.cpuspernode < 41:
-                    md = md.checkmessage('cpuspernode should be between 1 and 40 for ''ivy'' processors in hyperthreading mode')
-            else:
-                if not 0 < self.cpuspernode < 21:
-                    md = md.checkmessage('cpuspernode should be between 1 and 20 for ''ivy'' processors')
         else:
-            md = md.checkmessage('unknown processor type, should be ''neh'', ''bro'' or ''har'' or ''ivy''')
-
-        #Miscellaneous
+            md = md.checkmessage('unknown processor type, should be \'ivy\', \'bro\', \'har\', or \'neh\'')
+
+        # Miscellaneous
         if not self.login:
             md = md.checkmessage('login empty')
@@ -131,5 +139,8 @@
     # }}}
 
-    def BuildQueueScript(self, dirname, modelname, solution, io_gather, isvalgrind, isgprof, isdakota, isoceancoupling):    # {{{
+    def BuildQueueScript(self, dirname, modelname, solution, io_gather, isvalgrind, isgprof, isdakota, isoceancoupling):  # {{{
+        if isgprof:
+            print('gprof not supported by cluster, ignoring...')
+
         executable = 'issm.exe'
         if isdakota:
@@ -141,24 +152,25 @@
             executable = 'issm_ocean.exe'
 
-    #write queuing script
+        # Write queuing script
         fid = open(modelname + '.queue', 'w')
-        fid.write('#PBS -S / bin / bash\n')
-        fid.write('#PBS -l select=%i:ncpus=%i:model=%s\n' % (self.numnodes, self.cpuspernode, self.processor))
-        fid.write('#PBS -l walltime=%i\n' % (self.time * 60))
-        fid.write('#PBS -q %s \n' % self.queue)
-        fid.write('#PBS -W group_list=%s\n' % self.grouplist)
+        fid.write('#PBS -S /bin/bash\n')
+        fid.write('#PBS -l select={}:ncpus={}:model={}\n'.format(self.numnodes, self.cpuspernode, self.processor))
+        fid.write('#PBS -l walltime={}\n'.format(self.time * 60)) # walltime is in seconds
+        fid.write('#PBS -q {} \n'.format(self.queue))
+        fid.write('#PBS -W group_list={}\n'.format(self.grouplist))
         fid.write('#PBS -m e\n')
-        fid.write('#PBS -o %s/%s/%s.outlog \n' % (self.executionpath, dirname, modelname))
-        fid.write('#PBS -e %s/%s/%s.errlog \n\n' % (self.executionpath, dirname, modelname))
-        fid.write('./usr/share/modules/init/bash\n\n')
-        fid.write('module load comp-intel/2015.0.090\n')
-        fid.write('module load mpi-sgi/mpt.2.11r13\n')
+        fid.write('#PBS -o {}/{}/{}.outlog \n'.format(self.executionpath, dirname, modelname))
+        fid.write('#PBS -e {}/{}/{}.errlog \n\n'.format(self.executionpath, dirname, modelname))
+        fid.write('. /usr/share/modules/init/bash\n\n')
+        for i in range(len(self.modules)):
+            fid.write('module load {}\n'.format(self.modules[i]))
         fid.write('export PATH="$PATH:."\n\n')
+        fid.write('export MPI_LAUNCH_TIMEOUT=520\n')
         fid.write('export MPI_GROUP_MAX=64\n\n')
-        fid.write('export ISSM_DIR="%s"\n' % self.srcpath)
-        fid.write('source $ISSM_DIR/etc/environment.sh\n')
+        fid.write('export ISSM_DIR="{}"\n'.format(self.srcpath)) # FIXME
+        fid.write('source $ISSM_DIR/etc/environment.sh\n') # FIXME
         fid.write('export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$ISSM_DIR/externalpackages/petsc/install/lib"\n')
-        fid.write('cd %s/%s/ \n\n' % (self.executionpath, dirname))
-        fid.write('mpiexec - np %i %s/%s %s %s/%s %s\n' % (self.nprocs(), self.codepath, executable, str(solution), self.executionpath, dirname, modelname))
+        fid.write('cd %s/%s/\n\n'.format(self.executionpath, dirname))
+        fid.write('mpiexec -np {} {}/{} {} {}/{} {}\n'.format(self.nprocs(), self.cpuspernode, self.codepath, executable, solution, self.executionpath, dirname, modelname))
 
         fid.close()
@@ -166,27 +178,29 @@
     # }}}
 
-    def UploadQueueJob(self, modelname, dirname, filelist):    # {{{
-        #compress the files into one zip.
-        compressstring = 'tar -zcf %s.tar.gz ' % dirname
+    def UploadQueueJob(self, modelname, dirname, filelist):  # {{{
+        # Compress the files into one zip
+        compressstring = 'tar -zcf {}.tar.gz'.format(dirname)
         for file in filelist:
-            compressstring += ' %s' % file
+            compressstring += file
         subprocess.call(compressstring, shell=True)
 
         print('uploading input file and queueing script')
-        issmscpout(self.name, self.executionpath, self.login, self.port, [dirname + '.tar.gz'])
-
-    # }}}
-    def LaunchQueueJob(self, modelname, dirname, filelist, restart, batch):    # {{{
+        directory = self.executionpath
+        issmscpout(self.name, directory, self.login, self.port, [dirname + '.tar.gz'])
+
+    # }}}
+    def LaunchQueueJob(self, modelname, dirname, filelist, restart, batch):  # {{{
+        if restart:
+            launchcommand = 'cd {} && cd {} && qsub {}.queue'.format(self.executionpath, dirname, modelname)
+        else:
+            launchcommand = 'cd {} && rm -rf ./{} && mkdir {} && cd {} && mv ../{}.tar.gz ./ && tar -zxf {}.tar.gz  && qsub {}.queue'.format(self.executionpath, dirname, dirname, dirname, dirname, dirname, modelname)
+
         print('launching solution sequence on remote cluster')
-        if restart:
-            launchcommand = 'cd %s && cd %s && qsub %s.queue' % (self.executionpath, dirname, modelname)
-        else:
-            launchcommand = 'cd %s && rm -rf ./%s && mkdir %s && cd %s && mv ../%s.tar.gz ./ && tar -zxf %s.tar.gz  && qsub %s.queue' % (self.executionpath, dirname, dirname, dirname, dirname, dirname, modelname)
         issmssh(self.name, self.login, self.port, launchcommand)
 
     # }}}
-    def Download(self, dirname, filelist):    # {{{
-        #copy files from cluster to current directory
-        directory = '%s/%s/' % (self.executionpath, dirname)
+    def Download(self, dirname, filelist):  # {{{
+        # Copy files from cluster to current directory
+        directory = '{}/{}/'.format(self.executionpath, dirname)
         issmscpin(self.name, self.login, self.port, directory, filelist)
     # }}}
Index: /issm/trunk-jpl/src/m/classes/clusters/sherlock.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/sherlock.m	(revision 26329)
+++ /issm/trunk-jpl/src/m/classes/clusters/sherlock.m	(revision 26330)
@@ -1,3 +1,3 @@
-%PFE class definition
+%SHERLOCK cluster class definition
 %
 %   Usage:
@@ -7,154 +7,154 @@
 
 classdef sherlock
-    properties (SetAccess=public)  
-		 % {{{
-		 name          = 'sherlock'
-		 login         = '';
-		 numnodes      = 1;
-		 cpuspernode   = 24;
-		 port          = 0;
-		 codepath      = '';
-		 executionpath = '';
-		 interactive   = 0;
-		 time          = 30;
-		 memory        = 2;
-	 end
-	 %}}}
-	 methods
-		 function cluster=sherlock(varargin) % {{{
+	properties (SetAccess=public)
+		% {{{
+		name          = 'sherlock'
+		login         = '';
+		numnodes      = 1;
+		cpuspernode   = 24;
+		port          = 0;
+		codepath      = '';
+		executionpath = '';
+		interactive   = 0;
+		time          = 30;
+		memory        = 2;
+	end
+	%}}}
+	methods
+		function cluster=sherlock(varargin) % {{{
 
-			 %initialize cluster using default settings if provided
-			 if (exist('sherlock_settings')==2), sherlock_settings; end
+			%initialize cluster using default settings if provided
+			if (exist('sherlock_settings')==2), sherlock_settings; end
 
-			 %use provided options to change fields
-			 cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
-		 end
-		 %}}}
-		 function disp(cluster) % {{{
-			 %  display the object
-			 disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
-			 disp(sprintf('    name: %s',cluster.name));
-			 disp(sprintf('    login: %s',cluster.login));
-			 disp(sprintf('    port: %i',cluster.port));
-			 disp(sprintf('    numnodes: %i',cluster.numnodes));
-			 disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
-			 disp(sprintf('    np: %i',cluster.cpuspernode*cluster.numnodes));
-			 disp(sprintf('    codepath: %s',cluster.codepath));
-			 disp(sprintf('    executionpath: %s',cluster.executionpath));
-			 disp(sprintf('    interactive: %i',cluster.interactive));
-			 disp(sprintf('    time: %i',cluster.time));
-			 disp(sprintf('    memory: %i',cluster.memory));
-		 end
-		 %}}}
-		 function numprocs=np(cluster) % {{{
-			 %compute number of processors
-			 numprocs=cluster.numnodes*cluster.cpuspernode;
-		 end
-		 %}}}
-		 function md = checkconsistency(cluster,md,solution,analyses) % {{{
+			%use provided options to change fields
+			cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
+		end
+		%}}}
+		function disp(cluster) % {{{
+			%  display the object
+			disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
+			disp(sprintf('    name: %s',cluster.name));
+			disp(sprintf('    login: %s',cluster.login));
+			disp(sprintf('    port: %i',cluster.port));
+			disp(sprintf('    numnodes: %i',cluster.numnodes));
+			disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
+			disp(sprintf('    np: %i',cluster.cpuspernode*cluster.numnodes));
+			disp(sprintf('    codepath: %s',cluster.codepath));
+			disp(sprintf('    executionpath: %s',cluster.executionpath));
+			disp(sprintf('    interactive: %i',cluster.interactive));
+			disp(sprintf('    time: %i',cluster.time));
+			disp(sprintf('    memory: %i',cluster.memory));
+		end
+		%}}}
+		function numprocs=nprocs(cluster) % {{{
+			%compute number of processors
+			numprocs=cluster.numnodes*cluster.cpuspernode;
+		end
+		%}}}
+		function md = checkconsistency(cluster,md,solution,analyses) % {{{
 
-			 %Miscelaneous
-			 if isempty(cluster.login), md = checkmessage(md,'login empty'); end
-			 if isempty(cluster.codepath), md = checkmessage(md,'codepath empty'); end
-			 if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
+			%Miscelaneous
+			if isempty(cluster.login), md = checkmessage(md,'login empty'); end
+			if isempty(cluster.codepath), md = checkmessage(md,'codepath empty'); end
+			if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
 
-		 end
-		 %}}}
-		 function BuildKrigingQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
+		end
+		%}}}
+		function BuildKrigingQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
 
-			 if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
-			 if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
+			if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
+			if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
 
-			 %write queuing script 
-			 fid=fopen([modelname '.queue'],'w');
-			 fprintf(fid,'#!/bin/bash\n');
-			 fprintf(fid,'#SBATCH --job-name=%s\n',mdelname);
-			 fprintf(fid,'#SBATCH -p %s \n',cluster.queue);
-			 fprintf(fid,'#SBATCH -N %i -n %i\n',cluster.numnodes,cluster.cpuspernode);
-			 fprintf(fid,'#SBATCH --time=%i\n',cluster.time*60); %walltime is in seconds.
-			 fprintf(fid,'#SBATCH --mem-per-cpu=%igb\n',cluster.memory);
-			 fprintf(fid,'#SBATCH -o %s.outlog \n',modelname);
-			 fprintf(fid,'#SBATCH -e %s.errlog \n\n',modelname);
-			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
-			 fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
-			 fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
-			 fprintf(fid,'mpiexec -np %i %s/kriging.exe %s %s\n',cluster.np,cluster.codepath,[cluster.executionpath '/' modelname],modelname);
-			 if ~io_gather, %concatenate the output files:
-				 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-			 end
-			 fclose(fid);
-		 end
-		 %}}}
-		 function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
+			%write queuing script 
+			fid=fopen([modelname '.queue'],'w');
+			fprintf(fid,'#!/bin/bash\n');
+			fprintf(fid,'#SBATCH --job-name=%s\n',mdelname);
+			fprintf(fid,'#SBATCH -p %s \n',cluster.queue);
+			fprintf(fid,'#SBATCH -N %i -n %i\n',cluster.numnodes,cluster.cpuspernode);
+			fprintf(fid,'#SBATCH --time=%i\n',cluster.time*60); %walltime is in seconds.
+			fprintf(fid,'#SBATCH --mem-per-cpu=%igb\n',cluster.memory);
+			fprintf(fid,'#SBATCH -o %s.outlog \n',modelname);
+			fprintf(fid,'#SBATCH -e %s.errlog \n\n',modelname);
+			fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+			fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
+			fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
+			fprintf(fid,'mpiexec -np %i %s/kriging.exe %s %s\n',cluster.np,cluster.codepath,[cluster.executionpath '/' modelname],modelname);
+			if ~io_gather, %concatenate the output files:
+				fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+			end
+			fclose(fid);
+		end
+		%}}}
+		function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
 
-			 if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
-			 if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
+			if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
+			if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
 
-			 %write queuing script 
-			 fid=fopen([modelname '.queue'],'w');
-			 fprintf(fid,'#!/bin/bash\n');
-			 fprintf(fid,'#SBATCH --job-name=%s\n',modelname);
-			 fprintf(fid,'#SBATCH -N %i -n %i\n',cluster.numnodes,cluster.cpuspernode);
-			 fprintf(fid,'#SBATCH --time=%i\n',cluster.time*60); %walltime is in seconds.
-			 fprintf(fid,'#SBATCH --mem-per-cpu=%igb\n',cluster.memory);
-			 fprintf(fid,'#SBATCH -o %s.outlog \n',modelname);
-			 fprintf(fid,'#SBATCH -e %s.errlog \n\n',modelname);
-			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
-			 fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
-			 fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
-			 fprintf(fid,'mpiexec -n %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
-			 if ~io_gather, %concatenate the output files:
-				 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-			 end
-			 fclose(fid);
+			%write queuing script 
+			fid=fopen([modelname '.queue'],'w');
+			fprintf(fid,'#!/bin/bash\n');
+			fprintf(fid,'#SBATCH --job-name=%s\n',modelname);
+			fprintf(fid,'#SBATCH -N %i -n %i\n',cluster.numnodes,cluster.cpuspernode);
+			fprintf(fid,'#SBATCH --time=%i\n',cluster.time*60); %walltime is in seconds.
+			fprintf(fid,'#SBATCH --mem-per-cpu=%igb\n',cluster.memory);
+			fprintf(fid,'#SBATCH -o %s.outlog \n',modelname);
+			fprintf(fid,'#SBATCH -e %s.errlog \n\n',modelname);
+			fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+			fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
+			fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
+			fprintf(fid,'mpiexec -n %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
+			if ~io_gather, %concatenate the output files:
+				fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+			end
+			fclose(fid);
 
-			 %in interactive mode, create a run file, and errlog and outlog file
-			 if cluster.interactive,
-				 fid=fopen([modelname '.run'],'w');
-				 fprintf(fid,'mpiexec -n %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
-				 if ~io_gather, %concatenate the output files:
-					 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-				 end
-				 fclose(fid);
-				 fid=fopen([modelname '.errlog'],'w');
-				 fclose(fid);
-				 fid=fopen([modelname '.outlog'],'w');
-				 fclose(fid);
-			 end
-		 end %}}}
-		 function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
+			%in interactive mode, create a run file, and errlog and outlog file
+			if cluster.interactive,
+				fid=fopen([modelname '.run'],'w');
+				fprintf(fid,'mpiexec -n %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
+				if ~io_gather, %concatenate the output files:
+					fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+				end
+				fclose(fid);
+				fid=fopen([modelname '.errlog'],'w');
+				fclose(fid);
+				fid=fopen([modelname '.outlog'],'w');
+				fclose(fid);
+			end
+		end %}}}
+		function UploadQueueJob(cluster,modelname,dirname,filelist) % {{{
 
-			 %compress the files into one zip.
-			 compressstring=['tar -zcf ' dirname '.tar.gz '];
-			 for i=1:numel(filelist),
-				 compressstring = [compressstring ' ' filelist{i}];
-			 end
-			 if cluster.interactive,
-				 compressstring = [compressstring ' ' modelname '.errlog ' modelname '.outlog '];
-			 end
-			 system(compressstring);
+			%compress the files into one zip.
+			compressstring=['tar -zcf ' dirname '.tar.gz '];
+			for i=1:numel(filelist),
+				compressstring = [compressstring ' ' filelist{i}];
+			end
+			if cluster.interactive,
+				compressstring = [compressstring ' ' modelname '.errlog ' modelname '.outlog '];
+			end
+			system(compressstring);
 
-			 disp('uploading input file and queueing script');
-			 issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
+			disp('uploading input file and queueing script');
+			issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
 
-		 end %}}}
-		 function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch)% {{{
+		end %}}}
+		function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch) % {{{
 
-			 disp('launching solution sequence on remote cluster');
-			 if ~isempty(restart)
-				 launchcommand=['cd ' cluster.executionpath ' && cd ' dirname ' && hostname && sbatch ' modelname '.queue '];
-			 else
-				 launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
-					 ' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && hostname && sbatch ' modelname '.queue '];
-			 end
-			 issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
-		 end %}}}
-		 function Download(cluster,dirname,filelist)% {{{
+			disp('launching solution sequence on remote cluster');
+			if ~isempty(restart)
+				launchcommand=['cd ' cluster.executionpath ' && cd ' dirname ' && hostname && sbatch ' modelname '.queue '];
+			else
+				launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
+					' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && hostname && sbatch ' modelname '.queue '];
+			end
+			issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
+		end %}}}
+		function Download(cluster,dirname,filelist) % {{{
 
-			 %copy files from cluster to current directory
-			 directory=[cluster.executionpath '/' dirname '/'];
-			 issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
+			%copy files from cluster to current directory
+			directory=[cluster.executionpath '/' dirname '/'];
+			issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
 
-		 end %}}}
+		end %}}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/clusters/tetralith.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/tetralith.m	(revision 26329)
+++ /issm/trunk-jpl/src/m/classes/clusters/tetralith.m	(revision 26330)
@@ -1,3 +1,3 @@
-%teralith class definition
+%TERALITH cluster class definition
 %
 %   Usage:
@@ -7,5 +7,5 @@
 
 classdef tetralith
-	properties (SetAccess=public)  
+	properties (SetAccess=public)
 		% {{{
 		name           = 'tetralith';
@@ -66,5 +66,5 @@
 		end
 		%}}}
-		function numprocs=np(self) % {{{
+		function numprocs=nprocs(self) % {{{
 			%compute number of processors
 			numprocs=self.numnodes*self.cpuspernode;
@@ -78,5 +78,5 @@
 			%compute number of processors
 % 			cluster.np=cluster.numnodes*cluster.cpuspernode;
-			np(cluster);%=cluster.numnodes*cluster.cpuspernode;
+			nprocs(cluster);%=cluster.numnodes*cluster.cpuspernode;
 
 			%write queuing script 
@@ -106,10 +106,10 @@
 % 			fprintf(fid,'mpiexec -np %i %s/%s %s %s %s\n',cluster.np,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
 % 			fprintf(fid,'mpiexec_mpt -np %i %s/%s %s %s %s\n',cluster.np,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
-			 fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
+			fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
 % 			fprintf(fid,'mpirun -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
-			 if ~io_gather, %concatenate the output files:
-				 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
-			 end
-			 fclose(fid);
+			if ~io_gather, %concatenate the output files:
+				fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+			end
+			fclose(fid);
 		end
 		%}}}
@@ -132,5 +132,5 @@
 			%compute number of processors
 % 			cluster.np=cluster.numnodes*cluster.cpuspernode;
-			np(cluster);%=cluster.numnodes*cluster.cpuspernode;                     
+			nprocs(cluster);%=cluster.numnodes*cluster.cpuspernode;
 % 			shortname = substring(modelname,1,min(12,length(modelname)));
 
@@ -160,5 +160,5 @@
 			fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
 % 			fprintf(fid,'mpiexec -np %i %s/%s %s %s %s\n',cluster.np,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
-			 fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
+			fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
 % 			fprintf(fid,'mpirun -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
 % 			fprintf(fid,'mpiexec_mpt -np %i %s/%s %s %s %s\n',cluster.np,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
@@ -183,5 +183,5 @@
 			end
 		end %}}}
-		function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
+		function UploadQueueJob(cluster,modelname,dirname,filelist) % {{{
 
 			%compress the files into one zip.
@@ -198,5 +198,5 @@
 		end
 		%}}}
-		function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch)% {{{
+		function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch) % {{{
 
 			disp('launching solution sequence on remote cluster');
@@ -206,5 +206,5 @@
 			issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
 		end %}}}
-		function Download(cluster,dirname,filelist)% {{{
+		function Download(cluster,dirname,filelist) % {{{
 
 			%copy files from cluster to current directory
Index: /issm/trunk-jpl/src/m/classes/clusters/yellowstone.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/yellowstone.m	(revision 26329)
+++ /issm/trunk-jpl/src/m/classes/clusters/yellowstone.m	(revision 26330)
@@ -1,3 +1,3 @@
-%YELLOWSTONE class definition
+%YELLOWSTONE cluster class definition
 %
 %   Usage:
@@ -7,150 +7,150 @@
 
 classdef yellowstone
-    properties (SetAccess=public)  
-		 % {{{
-		 name           = 'yellowstone.ucar.edu'
-		 login          = '';
-		 modules        = {'ncarenv/1.0' 'ncarbinlibs/1.1' 'perlmods/5.0' 'gmake/4.1' 'python/2.7.7' 'all-python-libs' 'git/2.3.0' 'intel/15.0.3' 'mkl/11.1.2' 'esmf' 'esmf-6.3.0rp1-defio-mpi-O' 'netcdf-mpi/4.3.3.1' 'pnetcdf/1.6.1' 'ncarcompilers/1.0' 'cmake/3.0.2' 'matlab/R2015b' 'issm'};
-		 numnodes       = 1;
-		 cpuspernode    = 8;
-		 port           = 0;
-		 queue          = 'premium';
-		 time           = 12*60;
-		 processor      = 'sandy';
-		 codepath       = '';
-		 executionpath  = '';
-		 grouplist     = 'P93300301';
-	 end
-	 %}}}
-	 methods
-		 function cluster=yellowstone(varargin) % {{{
+	properties (SetAccess=public)
+		% {{{
+		name           = 'yellowstone.ucar.edu'
+		login          = '';
+		modules        = {'ncarenv/1.0' 'ncarbinlibs/1.1' 'perlmods/5.0' 'gmake/4.1' 'python/2.7.7' 'all-python-libs' 'git/2.3.0' 'intel/15.0.3' 'mkl/11.1.2' 'esmf' 'esmf-6.3.0rp1-defio-mpi-O' 'netcdf-mpi/4.3.3.1' 'pnetcdf/1.6.1' 'ncarcompilers/1.0' 'cmake/3.0.2' 'matlab/R2015b' 'issm'};
+		numnodes       = 1;
+		cpuspernode    = 8;
+		port           = 0;
+		queue          = 'premium';
+		time           = 12*60;
+		processor      = 'sandy';
+		codepath       = '';
+		executionpath  = '';
+		grouplist     = 'P93300301';
+	end
+	%}}}
+	methods
+		function cluster=yellowstone(varargin) % {{{
 
-			 %initialize cluster using default settings if provided
-			 if (exist('yellowstone_settings')==2), yellowstone_settings; end
+			%initialize cluster using default settings if provided
+			if (exist('yellowstone_settings')==2), yellowstone_settings; end
 
-			 %use provided options to change fields
-			 cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
-		 end
-		 %}}}
-		 function disp(cluster) % {{{
-			 %  display the object
-			 disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
-			 disp(sprintf('    name: %s',cluster.name));
-			 disp(sprintf('    login: %s',cluster.login));
-			 modules=''; for i=1:length(cluster.modules), modules=[modules cluster.modules{i} ',']; end; modules=modules(1:end-1); 
-			 disp(sprintf('    modules: %s',modules));
-			 disp(sprintf('    port: %i',cluster.port));
-			 disp(sprintf('    numnodes: %i',cluster.numnodes));
-			 disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
-			 disp(sprintf('    np: %i',cluster.cpuspernode*cluster.numnodes));
-			 disp(sprintf('    queue: %s',cluster.queue));
-			 disp(sprintf('    time: %i',cluster.time));
-			 disp(sprintf('    processor: %s',cluster.processor));
-			 disp(sprintf('    codepath: %s',cluster.codepath));
-			 disp(sprintf('    executionpath: %s',cluster.executionpath));
-			 disp(sprintf('    grouplist: %s',cluster.grouplist));
-		 end
-		 %}}}
-		 function numprocs=np(cluster) % {{{
-			 %compute number of processors
-			 numprocs=cluster.numnodes*cluster.cpuspernode;
-		 end
-		 %}}}
-		 function md = checkconsistency(cluster,md,solution,analyses) % {{{
+			%use provided options to change fields
+			cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
+		end
+		%}}}
+		function disp(cluster) % {{{
+			%  display the object
+			disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
+			disp(sprintf('    name: %s',cluster.name));
+			disp(sprintf('    login: %s',cluster.login));
+			modules=''; for i=1:length(cluster.modules), modules=[modules cluster.modules{i} ',']; end; modules=modules(1:end-1); 
+			disp(sprintf('    modules: %s',modules));
+			disp(sprintf('    port: %i',cluster.port));
+			disp(sprintf('    numnodes: %i',cluster.numnodes));
+			disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
+			disp(sprintf('    np: %i',cluster.cpuspernode*cluster.numnodes));
+			disp(sprintf('    queue: %s',cluster.queue));
+			disp(sprintf('    time: %i',cluster.time));
+			disp(sprintf('    processor: %s',cluster.processor));
+			disp(sprintf('    codepath: %s',cluster.codepath));
+			disp(sprintf('    executionpath: %s',cluster.executionpath));
+			disp(sprintf('    grouplist: %s',cluster.grouplist));
+		end
+		%}}}
+		function numprocs=nprocs(cluster) % {{{
+			%compute number of processors
+			numprocs=cluster.numnodes*cluster.cpuspernode;
+		end
+		%}}}
+		function md = checkconsistency(cluster,md,solution,analyses) % {{{
 
-			 available_queues={'premium','regular'};
-			 queue_requirements_time=[12*60 12*650];
-			 queue_requirements_np=[16384 16384];
+			available_queues={'premium','regular'};
+			queue_requirements_time=[12*60 12*650];
+			queue_requirements_np=[16384 16384];
 
-			 QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.queue,cluster.np,cluster.time)
+			QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.queue,cluster.np,cluster.time)
 
-			 %Miscelaneous
-			 if isempty(cluster.login), md = checkmessage(md,'login empty'); end
-			 if isempty(cluster.codepath), md = checkmessage(md,'codepath empty'); end
-			 if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
-			 if isempty(cluster.grouplist), md = checkmessage(md,'grouplist empty'); end
+			%Miscelaneous
+			if isempty(cluster.login), md = checkmessage(md,'login empty'); end
+			if isempty(cluster.codepath), md = checkmessage(md,'codepath empty'); end
+			if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
+			if isempty(cluster.grouplist), md = checkmessage(md,'grouplist empty'); end
 
-		 end
-		 %}}}
-		 function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
+		end
+		%}}}
+		function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
 
-			 executable='issm.exe';
-			 if isdakota,
-				 version=IssmConfig('_DAKOTA_VERSION_'); version=str2num(version(1:3));
-				 if (version>=6),
-					 executable='issm_dakota.exe';
-				 end
-			 end
-			 if isoceancoupling,
-				 executable='issm_ocean.exe';
-			 end
+			executable='issm.exe';
+			if isdakota,
+				version=IssmConfig('_DAKOTA_VERSION_'); version=str2num(version(1:3));
+				if (version>=6),
+					executable='issm_dakota.exe';
+				end
+			end
+			if isoceancoupling,
+				executable='issm_ocean.exe';
+			end
 
 
-			 %write queuing script 
-			 fid=fopen([modelname '.queue'],'w');
-			 fprintf(fid,'#!/bin/tcsh\n');
-			 fprintf(fid,'#BSUB -P %s\n',cluster.grouplist);
-			 fprintf(fid,'#BSUB -W %i:%i\n',floor(cluster.time/60),cluster.time-floor(cluster.time/60)*60);
-			 fprintf(fid,'#BSUB -n %i\n',cluster.np);
-			 fprintf(fid,'#BSUB -J %s\n',modelname);
-			 fprintf(fid,'#BSUB -o %s.outlog \n',[cluster.executionpath '/' dirname '/' modelname]);
-			 fprintf(fid,'#BSUB -e %s.errlog \n',[cluster.executionpath '/' dirname '/' modelname]);
-			 fprintf(fid,'#BSUB -q %s\n',cluster.queue);
+			%write queuing script 
+			fid=fopen([modelname '.queue'],'w');
+			fprintf(fid,'#!/bin/tcsh\n');
+			fprintf(fid,'#BSUB -P %s\n',cluster.grouplist);
+			fprintf(fid,'#BSUB -W %i:%i\n',floor(cluster.time/60),cluster.time-floor(cluster.time/60)*60);
+			fprintf(fid,'#BSUB -n %i\n',cluster.np);
+			fprintf(fid,'#BSUB -J %s\n',modelname);
+			fprintf(fid,'#BSUB -o %s.outlog \n',[cluster.executionpath '/' dirname '/' modelname]);
+			fprintf(fid,'#BSUB -e %s.errlog \n',[cluster.executionpath '/' dirname '/' modelname]);
+			fprintf(fid,'#BSUB -q %s\n',cluster.queue);
 
-			 fprintf(fid,'module purge\n');
-			 for i=1:length(cluster.modules),
-				 fprintf(fid,'module load %s\n',cluster.modules{i});
-			 end
+			fprintf(fid,'module purge\n');
+			for i=1:length(cluster.modules),
+				fprintf(fid,'module load %s\n',cluster.modules{i});
+			end
 
-			 fprintf(fid,'setenv OMP_STACKSIZE 256M\n');
-			 fprintf(fid,'setenv MP_LABELIO yes\n');
-			 fprintf(fid,'setenv MP_INFOLEVEL 2\n');
-			 fprintf(fid,'setenv MP_SHARED_MEMORY yes\n');
-			 fprintf(fid,'setenv MP_EUILIB us\n');
-			 fprintf(fid,'setenv MP_STDOUTMODE unordered\n');
-			 fprintf(fid,'setenv MP_RC_USE_LMC yes\n');
-			 fprintf(fid,'setenv MP_MPILIB mpich2\n');
-			 fprintf(fid,'setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/opt/ibmhpc/pecurrent/mpich2/intel/lib64/\n');
-			 fprintf(fid,'setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/ncar/opt/intel/psxe-2015_update3/impi/5.0.3.048/lib64/\n');
+			fprintf(fid,'setenv OMP_STACKSIZE 256M\n');
+			fprintf(fid,'setenv MP_LABELIO yes\n');
+			fprintf(fid,'setenv MP_INFOLEVEL 2\n');
+			fprintf(fid,'setenv MP_SHARED_MEMORY yes\n');
+			fprintf(fid,'setenv MP_EUILIB us\n');
+			fprintf(fid,'setenv MP_STDOUTMODE unordered\n');
+			fprintf(fid,'setenv MP_RC_USE_LMC yes\n');
+			fprintf(fid,'setenv MP_MPILIB mpich2\n');
+			fprintf(fid,'setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/opt/ibmhpc/pecurrent/mpich2/intel/lib64/\n');
+			fprintf(fid,'setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/ncar/opt/intel/psxe-2015_update3/impi/5.0.3.048/lib64/\n');
 
-			 fprintf(fid,'cd %s/%s/\n\n',cluster.executionpath,dirname);
+			fprintf(fid,'cd %s/%s/\n\n',cluster.executionpath,dirname);
 
-			 fprintf(fid,'mpirun.lsf %s/%s %s %s %s\n',cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
-			 fclose(fid);
+			fprintf(fid,'mpirun.lsf %s/%s %s %s %s\n',cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
+			fclose(fid);
 
-		 end %}}}
-		 function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
+		end %}}}
+		function UploadQueueJob(cluster,modelname,dirname,filelist) % {{{
 
-			 %compress the files into one zip.
-			 compressstring=['tar -zcf ' dirname '.tar.gz '];
-			 for i=1:numel(filelist),
-				 compressstring = [compressstring ' ' filelist{i}];
-			 end
-			 system(compressstring);
+			%compress the files into one zip.
+			compressstring=['tar -zcf ' dirname '.tar.gz '];
+			for i=1:numel(filelist),
+				compressstring = [compressstring ' ' filelist{i}];
+			end
+			system(compressstring);
 
-			 disp('uploading input file and queueing script');
-			 directory=cluster.executionpath;
+			disp('uploading input file and queueing script');
+			directory=cluster.executionpath;
 
-			 issmscpout(cluster.name,directory,cluster.login,cluster.port,{[dirname '.tar.gz']});
+			issmscpout(cluster.name,directory,cluster.login,cluster.port,{[dirname '.tar.gz']});
 
-		 end
-		 %}}}
-		 function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch)% {{{
+		end
+		%}}}
+		function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch) % {{{
 
-			 %lauch command, to be executed via ssh
-			 launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
-						 ' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && bsub < ' modelname '.queue '];
+			%lauch command, to be executed via ssh
+			launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
+						' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && bsub < ' modelname '.queue '];
 
-			 disp('launching solution sequence on remote cluster');
-			 issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
-		 end
-		 %}}}
-		 function Download(cluster,dirname,filelist)% {{{
+			disp('launching solution sequence on remote cluster');
+			issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
+		end
+		%}}}
+		function Download(cluster,dirname,filelist) % {{{
 
-			 %copy files from cluster to current directory
-			 directory=[cluster.executionpath '/' dirname '/'];
-			 issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
+			%copy files from cluster to current directory
+			directory=[cluster.executionpath '/' dirname '/'];
+			issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
 
-		 end %}}}
+		end %}}}
 	end
 end
